스팸 필터 설정 정규화 로직 분리
This commit is contained in:
@@ -6,10 +6,6 @@ import {
|
||||
normalizeAnnouncementBackgroundColor
|
||||
} from '~/lib/announcement-bar.js'
|
||||
import { DEFAULT_BRAND_COLOR, normalizeBrandColor } from '~/lib/brand-color.js'
|
||||
import {
|
||||
normalizeSignupBlockedUsernames,
|
||||
parseSignupBlockedUsernamesFromText
|
||||
} from '~/lib/signup-blocked-usernames.js'
|
||||
import {
|
||||
DISPLAY_COUNT_OPTIONS,
|
||||
POST_LIST_COUNT_OPTIONS
|
||||
@@ -33,6 +29,15 @@ import {
|
||||
hasSocialSettingsSectionChanges,
|
||||
normalizeSocialSettingsSection
|
||||
} from '~/lib/admin-social-settings-section.js'
|
||||
import {
|
||||
SPAM_SETTINGS_FIELDS,
|
||||
assignSpamSettingsSection,
|
||||
createDefaultSpamSettingsSnapshot,
|
||||
formatSpamBlockedUsernamesText,
|
||||
hasSpamSettingsSectionChanges,
|
||||
normalizeSpamSettingsSection,
|
||||
parseSpamBlockedUsernamesText
|
||||
} from '~/lib/admin-spam-settings-section.js'
|
||||
|
||||
definePageMeta({
|
||||
layout: 'admin'
|
||||
@@ -181,9 +186,7 @@ const announcementSnapshot = reactive({
|
||||
announcementAlignment: DEFAULT_ANNOUNCEMENT_ALIGNMENT
|
||||
})
|
||||
/** 편집 시작 시점의 스팸 필터(취소 시 복원용) */
|
||||
const spamSnapshot = reactive({
|
||||
signupBlockedUsernames: []
|
||||
})
|
||||
const spamSnapshot = reactive(createDefaultSpamSettingsSnapshot())
|
||||
/** 편집 시작 시점의 사이트 코드(취소 시 복원용) */
|
||||
const siteCodeSnapshot = reactive({
|
||||
adsTxt: '',
|
||||
@@ -225,6 +228,7 @@ const {
|
||||
})
|
||||
const initialPostSettings = normalizePostSettingsSection(settings.value)
|
||||
const initialSocialSettings = normalizeSocialSettingsSection(settings.value)
|
||||
const initialSpamSettings = normalizeSpamSettingsSection(settings.value)
|
||||
|
||||
const form = reactive({
|
||||
title: settings.value?.title || 'sori.studio',
|
||||
@@ -246,7 +250,7 @@ const form = reactive({
|
||||
announcementUrl: settings.value?.announcementUrl || '',
|
||||
announcementBackgroundColor: normalizeAnnouncementBackgroundColor(settings.value?.announcementBackgroundColor || DEFAULT_ANNOUNCEMENT_BACKGROUND_COLOR),
|
||||
announcementAlignment: normalizeAnnouncementAlignment(settings.value?.announcementAlignment || DEFAULT_ANNOUNCEMENT_ALIGNMENT),
|
||||
signupBlockedUsernames: normalizeSignupBlockedUsernames(settings.value?.signupBlockedUsernames),
|
||||
...initialSpamSettings,
|
||||
adsTxt: settings.value?.adsTxt || '',
|
||||
customHeadCode: settings.value?.customHeadCode || '',
|
||||
customFooterCode: settings.value?.customFooterCode || '',
|
||||
@@ -329,7 +333,7 @@ const hasAnnouncementChanges = computed(() => customizeAnnouncement.value && (
|
||||
* @returns {boolean} 변경 여부
|
||||
*/
|
||||
const hasSpamChanges = computed(() => editSpam.value
|
||||
&& JSON.stringify(form.signupBlockedUsernames) !== JSON.stringify(spamSnapshot.signupBlockedUsernames))
|
||||
&& hasSpamSettingsSectionChanges(form, spamSnapshot))
|
||||
|
||||
/**
|
||||
* 사이트 코드 변경 여부
|
||||
@@ -599,9 +603,9 @@ const getPostExportProgressDescription = (job) => {
|
||||
* 가입 금지 닉네임 textarea 바인딩
|
||||
*/
|
||||
const signupBlockedUsernamesText = computed({
|
||||
get: () => form.signupBlockedUsernames.join('\n'),
|
||||
get: () => formatSpamBlockedUsernamesText(form),
|
||||
set: (value) => {
|
||||
form.signupBlockedUsernames = parseSignupBlockedUsernamesFromText(value)
|
||||
assignSpamSettingsSection(form, parseSpamBlockedUsernamesText(value))
|
||||
}
|
||||
})
|
||||
|
||||
@@ -1080,7 +1084,7 @@ const buildSiteSettingsPayload = (fields = null) => {
|
||||
announcementUrl: form.announcementUrl || '',
|
||||
announcementBackgroundColor: normalizeAnnouncementBackgroundColor(form.announcementBackgroundColor || DEFAULT_ANNOUNCEMENT_BACKGROUND_COLOR),
|
||||
announcementAlignment: normalizeAnnouncementAlignment(form.announcementAlignment || DEFAULT_ANNOUNCEMENT_ALIGNMENT),
|
||||
signupBlockedUsernames: normalizeSignupBlockedUsernames(form.signupBlockedUsernames),
|
||||
...normalizeSpamSettingsSection(form),
|
||||
adsTxt: form.adsTxt || '',
|
||||
customHeadCode: form.customHeadCode || '',
|
||||
customFooterCode: form.customFooterCode || '',
|
||||
@@ -1561,7 +1565,8 @@ const saveAnnouncementSection = async () => {
|
||||
* @returns {void}
|
||||
*/
|
||||
const beginEditSpam = () => {
|
||||
spamSnapshot.signupBlockedUsernames = [...form.signupBlockedUsernames]
|
||||
assignSpamSettingsSection(spamSnapshot, form)
|
||||
assignSpamSettingsSection(form, spamSnapshot)
|
||||
editSpam.value = true
|
||||
}
|
||||
|
||||
@@ -1570,7 +1575,7 @@ const beginEditSpam = () => {
|
||||
* @returns {void}
|
||||
*/
|
||||
const cancelEditSpam = () => {
|
||||
form.signupBlockedUsernames = [...spamSnapshot.signupBlockedUsernames]
|
||||
assignSpamSettingsSection(form, spamSnapshot)
|
||||
editSpam.value = false
|
||||
}
|
||||
|
||||
@@ -1586,11 +1591,12 @@ const saveSpamSection = async () => {
|
||||
const ok = await persistSiteSettings({
|
||||
successToast: '스팸 필터 설정이 저장되었습니다.',
|
||||
savingFlag: savingSpam,
|
||||
fields: ['signupBlockedUsernames']
|
||||
fields: SPAM_SETTINGS_FIELDS
|
||||
})
|
||||
|
||||
if (ok) {
|
||||
spamSnapshot.signupBlockedUsernames = [...form.signupBlockedUsernames]
|
||||
assignSpamSettingsSection(spamSnapshot, form)
|
||||
assignSpamSettingsSection(form, spamSnapshot)
|
||||
editSpam.value = false
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user