Skip to content
This repository was archived by the owner on Jan 2, 2026. It is now read-only.

Commit b781dcb

Browse files
committed
feat: 연구실 반영
1 parent 7f36bc6 commit b781dcb

File tree

2 files changed

+96
-81
lines changed

2 files changed

+96
-81
lines changed

app/[locale]/research/labs/components/ResearchLabEditor.tsx

Lines changed: 92 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -71,97 +71,108 @@ export default function ResearchLabEditor({
7171
<FormProvider {...formMethods}>
7272
<Form>
7373
<LanguagePicker onChange={setLanguage} selected={language} />
74-
{language === 'ko' && <Editor language="ko" professors={professors} groups={groups} />}
75-
{language === 'en' && <Editor language="en" professors={professors} groups={groups} />}
76-
<Form.Action onCancel={onCancel} onSubmit={handleSubmit(onSubmit)} />
77-
</Form>
78-
</FormProvider>
79-
);
80-
}
74+
<Fieldset title="연구실명" mb="mb-6" titleMb="mb-2" required>
75+
<Form.Text
76+
name="ko.name"
77+
maxWidth="max-w-[30rem]"
78+
options={{ required: '한국어 연구실명을 입력해주세요.' }}
79+
isHidden={language === 'en'}
80+
/>
81+
<Form.Text
82+
name="en.name"
83+
maxWidth="max-w-[30rem]"
84+
options={{ required: '영어 연구실명을 입력해주세요.' }}
85+
isHidden={language === 'ko'}
86+
/>
87+
</Fieldset>
88+
<div className="flex w-[30rem] gap-6">
89+
{/* TODO: 지도교수 복수 선택 가능하도록 */}
90+
<Fieldset title="지도교수" mb="mb-11" titleMb="mb-2">
91+
<Form.Dropdown
92+
name={`${language}.professorId`}
93+
contents={[
94+
{ label: '선택 안 함', value: null },
95+
...professors[language].map((prof) => ({ label: prof.name, value: prof.id })),
96+
]}
97+
borderStyle="border-neutral-300"
98+
height="h-8"
99+
/>
100+
</Fieldset>
101+
<Fieldset title="연구실 약자" mb="mb-11" titleMb="mb-2">
102+
<Form.Text name="acronym" maxWidth="w-[17rem]" />
103+
</Fieldset>
104+
</div>
105+
<div className="flex w-[45rem] gap-6">
106+
<Fieldset title="전화" mb="mb-6" titleMb="mb-2">
107+
<Form.Text name="tel" maxWidth="w-[21.75rem]" placeholder="예: (02) 880-7302" />
108+
</Fieldset>
109+
<Fieldset title="웹사이트 주소" mb="mb-6" titleMb="mb-2">
110+
<Form.Text name="webtie" maxWidth="w-[21.75rem]" placeholder="예: (02) 880-7302" />
111+
</Fieldset>
112+
</div>
81113

82-
const Editor = ({
83-
language,
84-
professors,
85-
groups,
86-
}: {
87-
language: Language;
88-
professors: WithLanguage<SimpleFaculty[]>;
89-
groups: WithLanguage<ResearchGroup[]>;
90-
}) => {
91-
return (
92-
<>
93-
<Fieldset title="연구실명" mb="mb-6" titleMb="mb-2" required>
94-
<Form.Text
95-
name={`${language}.name`}
96-
maxWidth="max-w-[30rem]"
97-
options={{ required: true }}
98-
/>
99-
</Fieldset>
100-
<div className="flex w-[30rem] gap-6">
101-
{/* TODO: 지도교수 복수 선택 가능하도록 */}
102-
<Fieldset title="지도교수" mb="mb-11" titleMb="mb-2">
114+
<Fieldset title="연구실 위치" mb="mb-11" titleMb="mb-2">
115+
<Form.Text
116+
name={`${language}.location`}
117+
maxWidth="w-[45rem]"
118+
placeholder="복수일 경우 “ / ”로 구분해주세요. 예: 301동 515호 / 518호 / 551-1호"
119+
/>
120+
</Fieldset>
121+
122+
<Fieldset title="연구·교육 스트림" mb="mb-11" titleMb="mb-2" required>
103123
<Form.Dropdown
104-
name={`${language}.professorId`}
124+
name="ko.groupId"
105125
contents={[
106126
{ label: '선택 안 함', value: null },
107-
...professors[language].map((prof) => ({ label: prof.name, value: prof.id })),
127+
...groups[language].map((lab) => ({ label: `${lab.name} 스트림`, value: lab.id })),
108128
]}
129+
rules={{ required: true }}
109130
borderStyle="border-neutral-300"
110131
height="h-8"
132+
isHidden={language === 'en'}
133+
/>
134+
<Form.Dropdown
135+
name="en.groupId"
136+
contents={[
137+
{ label: '선택 안 함', value: null },
138+
...groups[language].map((lab) => ({ label: `${lab.name} 스트림`, value: lab.id })),
139+
]}
140+
rules={{ required: true }}
141+
borderStyle="border-neutral-300"
142+
height="h-8"
143+
isHidden={language === 'ko'}
111144
/>
112145
</Fieldset>
113-
<Fieldset title="연구실 약자" mb="mb-11" titleMb="mb-2">
114-
<Form.Text name="acronym" maxWidth="w-[17rem]" />
115-
</Fieldset>
116-
</div>
117-
<div className="flex w-[45rem] gap-6">
118-
<Fieldset title="전화" mb="mb-6" titleMb="mb-2">
119-
<Form.Text name="tel" maxWidth="w-[21.75rem]" placeholder="예: (02) 880-7302" />
120-
</Fieldset>
121-
<Fieldset title="웹사이트 주소" mb="mb-6" titleMb="mb-2">
122-
<Form.Text name="webtie" maxWidth="w-[21.75rem]" placeholder="예: (02) 880-7302" />
123-
</Fieldset>
124-
</div>
125146

126-
<Fieldset title="연구실 위치" mb="mb-11" titleMb="mb-2">
127-
<Form.Text
128-
name={`${language}.location`}
129-
maxWidth="w-[45rem]"
130-
placeholder="복수일 경우 “ / ”로 구분해주세요. 예: 301동 515호 / 518호 / 551-1호"
131-
/>
132-
</Fieldset>
133-
134-
<Fieldset title="연구·교육 스트림" mb="mb-11" titleMb="mb-2" required>
135-
<Form.Dropdown
136-
name={`${language}.groupId`}
137-
contents={[
138-
{ label: '선택 안 함', value: null },
139-
...groups[language].map((lab) => ({ label: `${lab.name} 스트림`, value: lab.id })),
140-
]}
141-
rules={{ required: true }}
142-
borderStyle="border-neutral-300"
143-
height="h-8"
144-
/>
145-
</Fieldset>
147+
<Fieldset title="소개 자료" mb="mb-8" titleMb="mb-2">
148+
<div className="mb-2.5 flex w-[45rem] items-center">
149+
<span className="w-[3.5rem] text-sm text-neutral-400">| 문서</span>
150+
<Form.File name="pdf" multiple={false} />
151+
</div>
152+
<div className="flex w-[45rem] items-center">
153+
<span className="w-[3.5rem] text-sm text-neutral-400">| 유튜브</span>
154+
<Form.Text
155+
name="youtube"
156+
maxWidth="w-[41.5rem]"
157+
placeholder="예: https://www.youtube.com/watch?v=bCLWYhurBuo"
158+
/>
159+
</div>
160+
</Fieldset>
146161

147-
<Fieldset title="소개 자료" mb="mb-8" titleMb="mb-2">
148-
<div className="mb-2.5 flex w-[45rem] items-center">
149-
<span className="w-[3.5rem] text-sm text-neutral-400">| 문서</span>
150-
<Form.File name="pdf" multiple={false} />
151-
</div>
152-
<div className="flex w-[45rem] items-center">
153-
<span className="w-[3.5rem] text-sm text-neutral-400">| 유튜브</span>
154-
<Form.Text
155-
name="youtube"
156-
maxWidth="w-[41.5rem]"
157-
placeholder="예: https://www.youtube.com/watch?v=bCLWYhurBuo"
162+
<Fieldset title="연구실 설명 및 이미지" mb="mb-10" titleMb="mb-2" required>
163+
<Form.HTML
164+
name="ko.description"
165+
options={{ required: '한국어 연구실 설명을 입력해주세요.' }}
166+
isHidden={language === 'en'}
158167
/>
159-
</div>
160-
</Fieldset>
161-
162-
<Fieldset title="연구실 설명 및 이미지" mb="mb-10" titleMb="mb-2" required>
163-
<Form.HTML name={`${language}.description`} options={{ required: true }} />
164-
</Fieldset>
165-
</>
168+
<Form.HTML
169+
name="en.description"
170+
options={{ required: '영어 연구실 설명을 입력해주세요.' }}
171+
isHidden={language === 'ko'}
172+
/>
173+
</Fieldset>
174+
<Form.Action onCancel={onCancel} onSubmit={handleSubmit(onSubmit)} />
175+
</Form>
176+
</FormProvider>
166177
);
167-
};
178+
}

components/form/Dropdown.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ interface DropdownProps {
1414
isDisabled?: boolean;
1515
rules?: Rules;
1616
onChange?: (value: unknown) => void;
17+
isHidden?: boolean;
1718
}
1819

1920
export default function Dropdown({
@@ -25,6 +26,7 @@ export default function Dropdown({
2526
isDisabled,
2627
rules,
2728
onChange: onChangeFromProp,
29+
isHidden,
2830
}: DropdownProps) {
2931
const {
3032
field: { value, onChange: onChangeFromController },
@@ -50,6 +52,8 @@ export default function Dropdown({
5052
toggleExpanded();
5153
};
5254

55+
if (isHidden) return null;
56+
5357
return (
5458
<div className="relative select-none" ref={ref}>
5559
<button

0 commit comments

Comments
 (0)