Skip to content

Commit 5566984

Browse files
authored
Merge pull request #12 from Moaguide-develop:feat/editor
feat: 에러 처리 추가
2 parents 4ac62fd + e33325b commit 5566984

File tree

2 files changed

+52
-8
lines changed

2 files changed

+52
-8
lines changed

src/components/editor/Editor.tsx

Lines changed: 51 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,12 @@ const Editor = ({ content }: { content: JSONContent[] | null }) => {
5252
const [articleData, setArticleData] = useState({
5353
title: '',
5454
authorName: '모아가이드',
55-
categoryName: 'none',
56-
type: 'all',
57-
isPremium: false,
58-
imageLink: '테스트',
55+
categoryName: '',
56+
type: '',
5957
paywallUp: '',
6058
paywallDown: '',
59+
imageLink: '테스트',
60+
isPremium: false,
6161
});
6262
const [showPreview, setShowPreview] = useState(false);
6363

@@ -138,8 +138,8 @@ const Editor = ({ content }: { content: JSONContent[] | null }) => {
138138
CustomFile,
139139
CustomPaywall,
140140
],
141-
content: `<div class="se-component se-text se-l-default">
142-
<div class="component-text mt-10">
141+
content: `<div class="se-section se-section-text se-l-default">
142+
<div class="component-text mt-10 relative px-[44px] mx-[-44px]">
143143
<p></p>
144144
</div>
145145
</div>`,
@@ -204,6 +204,7 @@ const Editor = ({ content }: { content: JSONContent[] | null }) => {
204204
});
205205

206206
useEffect(() => {
207+
console.log('content', editor?.getHTML());
207208
if (content && editor?.commands) {
208209
editor?.commands.setContent(content);
209210
}
@@ -212,9 +213,52 @@ const Editor = ({ content }: { content: JSONContent[] | null }) => {
212213
const handleSavePreview = () => {
213214
if (!editor) return;
214215

215-
const { isPremium, paywallUp, paywallDown, imageLink } =
216+
const { categoryName, authorName, type, title } = articleData;
217+
const validations = [
218+
{
219+
condition: categoryName === 'none',
220+
message: '카테고리를 선택해주세요.',
221+
},
222+
{ condition: authorName === 'none', message: '작성자를 선택해주세요.' },
223+
{ condition: type === 'none', message: '콘텐츠를 선택해주세요.' },
224+
{ condition: !title.trim(), message: '제목을 입력해주세요.' },
225+
];
226+
227+
for (const { condition, message } of validations) {
228+
if (condition) {
229+
alert(message);
230+
return;
231+
}
232+
}
233+
234+
if (
235+
editor.getHTML() ===
236+
'<div class="component-text mt-10 relative px-[44px] mx-[-44px]"><p class="text-left text-[15px]" style="line-height: 1.8;"></p></div>'
237+
) {
238+
alert('내용을 입력해주세요.');
239+
return;
240+
}
241+
242+
const { paywallUp, paywallDown, isPremium, imageLink } =
216243
extractPaywallData(editor);
217244

245+
if (!paywallUp) {
246+
alert('내용을 입력해주세요.');
247+
return;
248+
}
249+
250+
if (!isPremium) {
251+
alert('페이월을 삽입해주세요.');
252+
return;
253+
}
254+
255+
if (!paywallDown) {
256+
alert(
257+
'페이월은 콘텐츠 최하단에\n 노출할 수 없습니다.\n 페이월 이후 내용을 입력해주세요.',
258+
);
259+
return;
260+
}
261+
218262
setArticleData((prev) => ({
219263
...prev,
220264
isPremium,

src/components/editor/common/extractPaywallData.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import { createFileNodeHTML, FileAttributes } from './File';
55
import { createLinkNodeHTML, LinkAttributes } from './link';
66

77
interface PaywallData {
8-
isPremium: boolean;
98
paywallUp: string;
109
paywallDown: string;
1110
imageLink: string;
11+
isPremium: boolean;
1212
}
1313

1414
const extractPaywallData = (editor: Editor): PaywallData => {

0 commit comments

Comments
 (0)