diff --git a/src/App.jsx b/src/App.jsx index 769e200..0d9f2f3 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -1230,14 +1230,24 @@ function RelationPopup({ programs, onToggleRelation, onClose }) { function ProgramComparePopup({ programs, comparisons, onComparisonChange, onClose }) { const internalProgram = programs.find((program) => getProgramType(program.programType) === 'internal'); const commercialProgram = programs.find((program) => getProgramType(program.programType) === 'commercial'); - const [leftProgramId, setLeftProgramId] = useState(internalProgram?.id ?? programs[0]?.id ?? ''); + const savedComparisons = comparisons.filter( + (comparison) => + programs.some((program) => program.id === comparison.leftProgramId) && + programs.some((program) => program.id === comparison.rightProgramId) && + ((comparison.stepMatches ?? []).some((match) => match.reason?.trim()) || comparison.note?.trim()) + ).sort((left, right) => (right.updatedAt ?? '').localeCompare(left.updatedAt ?? '')); + const [leftProgramId, setLeftProgramId] = useState(savedComparisons[0]?.leftProgramId ?? internalProgram?.id ?? programs[0]?.id ?? ''); const [rightProgramId, setRightProgramId] = useState( - commercialProgram?.id ?? programs.find((program) => program.id !== (internalProgram?.id ?? programs[0]?.id))?.id ?? '' + savedComparisons[0]?.rightProgramId ?? + commercialProgram?.id ?? + programs.find((program) => program.id !== (internalProgram?.id ?? programs[0]?.id))?.id ?? + '' ); const leftProgram = programs.find((program) => program.id === leftProgramId); const rightProgram = programs.find((program) => program.id === rightProgramId); const comparison = comparisons.find((item) => item.leftProgramId === leftProgramId && item.rightProgramId === rightProgramId) ?? {}; + const hasSavedComparison = Boolean((comparison.stepMatches ?? []).some((match) => match.reason?.trim()) || comparison.note?.trim()); const leftSteps = leftProgram?.steps ?? []; const rightSteps = rightProgram?.steps ?? []; const stepMatches = comparison.stepMatches ?? []; @@ -1255,6 +1265,11 @@ function ProgramComparePopup({ programs, comparisons, onComparisonChange, onClos const existingIndex = stepMatches.findIndex( (match) => String(match.leftStepIndex) === String(stepIndex) && String(match.rightStepIndex) === String(stepIndex) ); + if (!value.trim() && existingIndex >= 0) { + updateComparison('stepMatches', stepMatches.filter((_, index) => index !== existingIndex)); + return; + } + if (!value.trim()) return; const nextMatch = { ...(existingIndex >= 0 ? stepMatches[existingIndex] : {}), id: `step-${stepIndex}`, @@ -1270,6 +1285,9 @@ function ProgramComparePopup({ programs, comparisons, onComparisonChange, onClos ); }; const getStepLabel = (step, index) => `${index + 1}. ${step?.title ?? '-'}`; + const getProgramName = (programId) => programs.find((program) => program.id === programId)?.name ?? programId; + const getComparisonMemoCount = (savedComparison) => + (savedComparison.stepMatches ?? []).filter((match) => match.reason?.trim()).length; const renderProgramSummary = (program) => { if (!program) return null; @@ -1357,6 +1375,38 @@ function ProgramComparePopup({ programs, comparisons, onComparisonChange, onClos + {savedComparisons.length > 0 && ( +
두 프로그램의 스텝을 전부 펼친 뒤, 가운데에 해당 스텝에서 상용 프로그램을 쓰는 이유를 적습니다. + {hasSavedComparison ? ' 저장된 비교 내용을 불러왔습니다.' : ''}