임동욱 임동욱 08-21
merge: 퀴즈 키워드 제목에서 복원
@0dc8d2b49d4f4de4887ee65f07283efd58442310
app/(protected)/(basic)/contents/quizzes/_components/quiz-form.tsx
--- app/(protected)/(basic)/contents/quizzes/_components/quiz-form.tsx
+++ app/(protected)/(basic)/contents/quizzes/_components/quiz-form.tsx
@@ -14,6 +14,7 @@
   ANSWER_MESSAGE_OPTIONS,
   QUIZ_ANSWER_OPTIONS,
   QUIZ_LEVEL_OPTIONS,
+  keywordsFromText,
   type QuizItem,
   type GradesBySchool,
 } from '@/lib/domain/content';
@@ -104,7 +105,12 @@
         </ContentFormRow>
 
         <ContentFormRow label="키워드">
-          <ContentKeywordField error={errors.keywords} />
+          <ContentKeywordField
+            defaultKeywords={
+              item ? keywordsFromText(item.keywordText) : undefined
+            }
+            error={errors.keywords}
+          />
         </ContentFormRow>
 
         <ContentFormRow label="질문" required>
lib/domain/content.ts
--- lib/domain/content.ts
+++ lib/domain/content.ts
@@ -62,6 +62,21 @@
   description: string;
 };
 
+/**
+ * 퀴즈의 `quizTitle`을 키워드 줄로 되돌린다.
+ *
+ * 저장할 때 키워드를 쉼표로 이어 한 칸에 넣으므로 **설명은 남지 않는다**(사용자 확정).
+ * 그래서 수정 화면을 열면 키워드만 채워지고 설명은 빈 칸이며, 그대로 저장하면 설명은 계속
+ * 비어 있다. 백엔드가 키워드 목록을 받게 되면 이 함수는 필요 없어진다.
+ */
+export function keywordsFromText(text: string): ContentKeyword[] {
+  return text
+    .split(',')
+    .map((part) => part.trim())
+    .filter(Boolean)
+    .map((keyword) => ({ keyword, description: '' }));
+}
+
 /** 등록 폼이 처음 보여 주는 키워드 줄 수(사용자 확정 — 종전 2줄에서 1줄로). */
 export const DEFAULT_KEYWORD_ROWS = 1;
 
Add a comment
List