|
1 | 1 | import * as Common from "@frontend/common"; |
2 | | -import { Divider, Typography } from "@mui/material"; |
| 2 | +import { Card, Divider, TextField, Typography } from "@mui/material"; |
3 | 3 |
|
4 | 4 | import { PreviewImageField, PreviewMarkdownField, PreviewTextField } from "../components"; |
5 | | -import { SubModificationAuditPageType } from "./types"; |
| 5 | +import { PresentationPreviewSchema, SubModificationAuditPageType } from "./types"; |
6 | 6 |
|
7 | | -export const PresentationPreviewSubPage: SubModificationAuditPageType = ({ originalData, previewData }) => { |
| 7 | +type PresentationSpeakerPreviewItemProps = { |
| 8 | + originalSpeaker: PresentationPreviewSchema["speakers"][number]; |
| 9 | + modifiedSpeaker: PresentationPreviewSchema["speakers"][number]; |
| 10 | +}; |
| 11 | + |
| 12 | +const isSpeakerModified = (original: PresentationPreviewSchema["speakers"][number], modified: PresentationPreviewSchema["speakers"][number]) => { |
| 13 | + return ( |
| 14 | + original.id !== modified.id || |
| 15 | + original.user.id !== modified.user.id || |
| 16 | + original.biography_ko !== modified.biography_ko || |
| 17 | + original.biography_en !== modified.biography_en || |
| 18 | + original.image !== modified.image |
| 19 | + ); |
| 20 | +}; |
| 21 | + |
| 22 | +const PresentationSpeakerPreviewItem: React.FC<PresentationSpeakerPreviewItemProps> = ({ originalSpeaker, modifiedSpeaker }) => { |
| 23 | + const innerSpeakerPreviewItem = ( |
| 24 | + <Common.Components.Fieldset legend={`발표자: ${modifiedSpeaker.user.nickname_ko} (${modifiedSpeaker.user.nickname_en})`}> |
| 25 | + <Common.Components.Fieldset legend="발표자 별칭"> |
| 26 | + <TextField fullWidth disabled variant="outlined" value={modifiedSpeaker.user.nickname_ko} label="발표자 별칭 (국문)" sx={{ my: 1 }} /> |
| 27 | + <TextField fullWidth disabled variant="outlined" value={modifiedSpeaker.user.nickname_en} label="발표자 별칭 (영문)" sx={{ my: 1 }} /> |
| 28 | + </Common.Components.Fieldset> |
| 29 | + <PreviewImageField originalDataset={originalSpeaker} previewDataset={modifiedSpeaker} name="image_id" label="발표자 이미지" /> |
| 30 | + <Common.Components.Fieldset legend="발표자 약력"> |
| 31 | + <PreviewMarkdownField originalDataset={originalSpeaker} previewDataset={modifiedSpeaker} name="biography_ko" label="발표자 약력 (국문)" /> |
| 32 | + <PreviewMarkdownField originalDataset={originalSpeaker} previewDataset={modifiedSpeaker} name="biography_en" label="발표자 약력 (영문)" /> |
| 33 | + </Common.Components.Fieldset> |
| 34 | + </Common.Components.Fieldset> |
| 35 | + ); |
| 36 | + |
| 37 | + return isSpeakerModified(originalSpeaker, modifiedSpeaker) ? ( |
| 38 | + <Card sx={{ width: "100%", backgroundColor: "rgba(255, 255, 0, 0.1)" }} children={innerSpeakerPreviewItem} /> |
| 39 | + ) : ( |
| 40 | + innerSpeakerPreviewItem |
| 41 | + ); |
| 42 | +}; |
| 43 | + |
| 44 | +export const PresentationPreviewSubPage: SubModificationAuditPageType<PresentationPreviewSchema> = ({ original, modified }) => { |
8 | 45 | return ( |
9 | 46 | <> |
10 | 47 | <Typography variant="h6" fontWeight="bold" children="발표 내용" /> |
11 | 48 | <Common.Components.Fieldset legend="제목"> |
12 | | - <PreviewTextField originalDataset={originalData} previewDataset={previewData} name="title_ko" label="제목 (한국어)" /> |
13 | | - <PreviewTextField originalDataset={originalData} previewDataset={previewData} name="title_en" label="제목 (영어)" /> |
| 49 | + <PreviewTextField originalDataset={original} previewDataset={modified} name="title_ko" label="제목 (한국어)" /> |
| 50 | + <PreviewTextField originalDataset={original} previewDataset={modified} name="title_en" label="제목 (영어)" /> |
14 | 51 | </Common.Components.Fieldset> |
15 | 52 | <Common.Components.Fieldset legend="요약"> |
16 | | - <PreviewTextField originalDataset={originalData} previewDataset={previewData} multiline name="summary_ko" label="요약 (한국어)" /> |
17 | | - <PreviewTextField originalDataset={originalData} previewDataset={previewData} multiline name="summary_en" label="요약 (영어)" /> |
| 53 | + <PreviewTextField originalDataset={original} previewDataset={modified} multiline name="summary_ko" label="요약 (한국어)" /> |
| 54 | + <PreviewTextField originalDataset={original} previewDataset={modified} multiline name="summary_en" label="요약 (영어)" /> |
18 | 55 | </Common.Components.Fieldset> |
19 | 56 | <Common.Components.Fieldset legend="상세 설명"> |
20 | | - <PreviewMarkdownField originalDataset={originalData} previewDataset={previewData} name="description_ko" label="상세 설명 (한국어)" /> |
21 | | - <PreviewMarkdownField originalDataset={originalData} previewDataset={previewData} name="description_en" label="상세 설명 (영어)" /> |
| 57 | + <PreviewMarkdownField originalDataset={original} previewDataset={modified} name="description_ko" label="상세 설명 (한국어)" /> |
| 58 | + <PreviewMarkdownField originalDataset={original} previewDataset={modified} name="description_en" label="상세 설명 (영어)" /> |
22 | 59 | </Common.Components.Fieldset> |
23 | | - <PreviewImageField originalDataset={originalData} previewDataset={previewData} name="image" label="발표 이미지" /> |
| 60 | + <PreviewImageField originalDataset={original} previewDataset={modified} name="image_id" label="발표 이미지" /> |
24 | 61 |
|
25 | 62 | <Divider sx={{ my: 1, borderColor: "black" }} /> |
26 | 63 | <Typography variant="h6" fontWeight="bold" children="발표자 정보" /> |
| 64 | + {modified.speakers.map((speaker) => ( |
| 65 | + <PresentationSpeakerPreviewItem |
| 66 | + key={speaker.id} |
| 67 | + originalSpeaker={original.speakers.find((s) => s.id === speaker.id) || speaker} |
| 68 | + modifiedSpeaker={speaker} |
| 69 | + /> |
| 70 | + ))} |
27 | 71 | </> |
28 | 72 | ); |
29 | 73 | }; |
0 commit comments