summaryrefslogtreecommitdiff
path: root/lib/vendor-evaluation-submit
diff options
context:
space:
mode:
authordujinkim <dujin.kim@dtsolution.co.kr>2025-11-04 07:48:00 +0000
committerdujinkim <dujin.kim@dtsolution.co.kr>2025-11-04 07:48:00 +0000
commit680da9b323db8b8d7cf27c674ab0016ec87bfe81 (patch)
tree52791f8618c0c5767c6420404ddf849ae28082e8 /lib/vendor-evaluation-submit
parent153502b67da990c92973f1f8af416f9a81ec3abb (diff)
(임수민) 구매 점검 테스트 요청사항 수정 (11/02)
Diffstat (limited to 'lib/vendor-evaluation-submit')
-rw-r--r--lib/vendor-evaluation-submit/table/general-evaluation-form-sheet.tsx70
1 files changed, 54 insertions, 16 deletions
diff --git a/lib/vendor-evaluation-submit/table/general-evaluation-form-sheet.tsx b/lib/vendor-evaluation-submit/table/general-evaluation-form-sheet.tsx
index 685530e6..45eea880 100644
--- a/lib/vendor-evaluation-submit/table/general-evaluation-form-sheet.tsx
+++ b/lib/vendor-evaluation-submit/table/general-evaluation-form-sheet.tsx
@@ -330,6 +330,19 @@ export function GeneralEvaluationFormSheet({
const progress = getProgress()
+ // 응답 ID -> 전역 인덱스 매핑 (카테고리 그룹/정렬과 무관하게 안정적인 인덱스 사용)
+ const responseIndexById = React.useMemo(() => {
+ const map: Record<number, number> = {}
+ if (formData) {
+ formData.evaluations.forEach((ev, idx) => {
+ if (ev.response?.id) {
+ map[ev.response.id] = idx
+ }
+ })
+ }
+ return map
+ }, [formData])
+
if (isLoading) {
return (
<Sheet open={open} onOpenChange={onOpenChange}>
@@ -430,8 +443,11 @@ export function GeneralEvaluationFormSheet({
type="button"
variant="outline"
size="sm"
- onClick={() => handleSaveResponse(index)}
- disabled={!item.response?.id}
+ onClick={() => {
+ const gi = item.response?.id ? responseIndexById[item.response.id] : undefined
+ return gi !== undefined ? handleSaveResponse(gi) : undefined
+ }}
+ disabled={!item.response?.id || (item.response?.id ? responseIndexById[item.response.id] === undefined : true)}
>
<SaveIcon className="h-4 w-4 mr-1" />
저장
@@ -453,23 +469,41 @@ export function GeneralEvaluationFormSheet({
</CardHeader>
<CardContent className="space-y-4">
{/* 📝 응답 텍스트만 (점수 입력 제거) */}
- <FormField
- control={form.control}
- name={`responses.${index}.responseText`}
- render={({ field }) => (
- <FormItem>
- <FormLabel>응답 내용 *</FormLabel>
- <FormControl>
+ {(() => {
+ const gi = item.response?.id ? responseIndexById[item.response.id] : undefined
+ if (gi === undefined) {
+ return (
+ <div>
+ <FormLabel>응답 내용 *</FormLabel>
<Textarea
- {...field}
+ value={item.response?.responseText || ''}
placeholder="평가 항목에 대한 응답을 상세히 작성해주세요..."
className="min-h-[120px]"
+ disabled
/>
- </FormControl>
- <FormMessage />
- </FormItem>
- )}
- />
+ </div>
+ )
+ }
+ return (
+ <FormField
+ control={form.control}
+ name={`responses.${gi}.responseText`}
+ render={({ field }) => (
+ <FormItem>
+ <FormLabel>응답 내용 *</FormLabel>
+ <FormControl>
+ <Textarea
+ {...field}
+ placeholder="평가 항목에 대한 응답을 상세히 작성해주세요..."
+ className="min-h-[120px]"
+ />
+ </FormControl>
+ <FormMessage />
+ </FormItem>
+ )}
+ />
+ )
+ })()}
{/* 📎 첨부파일 영역 */}
<div className="space-y-3">
@@ -477,7 +511,11 @@ export function GeneralEvaluationFormSheet({
<FormLabel>첨부파일</FormLabel>
<div>
<Input
- ref={(el) => item.response?.id && (fileInputRefs.current[item.response.id] = el)}
+ ref={(el) => {
+ if (item.response?.id) {
+ fileInputRefs.current[item.response.id] = el
+ }
+ }}
type="file"
multiple
className="hidden"