어나운스 바 설정 정규화 로직 분리
This commit is contained in:
64
lib/admin-announcement-settings-section.js
Normal file
64
lib/admin-announcement-settings-section.js
Normal file
@@ -0,0 +1,64 @@
|
||||
import {
|
||||
DEFAULT_ANNOUNCEMENT_ALIGNMENT,
|
||||
DEFAULT_ANNOUNCEMENT_BACKGROUND_COLOR,
|
||||
normalizeAnnouncementAlignment,
|
||||
normalizeAnnouncementBackgroundColor
|
||||
} from './announcement-bar.js'
|
||||
|
||||
export const ANNOUNCEMENT_SETTINGS_FIELDS = [
|
||||
'announcementEnabled',
|
||||
'announcementText',
|
||||
'announcementUrl',
|
||||
'announcementBackgroundColor',
|
||||
'announcementAlignment'
|
||||
]
|
||||
|
||||
/**
|
||||
* 어나운스 바 설정 기본 스냅샷을 만든다.
|
||||
* @returns {Object} 기본 어나운스 바 설정 값
|
||||
*/
|
||||
export const createDefaultAnnouncementSettingsSnapshot = () => ({
|
||||
announcementEnabled: false,
|
||||
announcementText: '',
|
||||
announcementUrl: '',
|
||||
announcementBackgroundColor: DEFAULT_ANNOUNCEMENT_BACKGROUND_COLOR,
|
||||
announcementAlignment: DEFAULT_ANNOUNCEMENT_ALIGNMENT
|
||||
})
|
||||
|
||||
/**
|
||||
* 어나운스 바 설정 값을 저장·비교 가능한 형태로 정규화한다.
|
||||
* @param {Object} source - 원본 설정 값
|
||||
* @returns {Object} 정규화된 어나운스 바 설정 값
|
||||
*/
|
||||
export const normalizeAnnouncementSettingsSection = (source = {}) => ({
|
||||
announcementEnabled: Boolean(source.announcementEnabled),
|
||||
announcementText: source.announcementText || '',
|
||||
announcementUrl: source.announcementUrl || '',
|
||||
announcementBackgroundColor: normalizeAnnouncementBackgroundColor(source.announcementBackgroundColor || DEFAULT_ANNOUNCEMENT_BACKGROUND_COLOR),
|
||||
announcementAlignment: normalizeAnnouncementAlignment(source.announcementAlignment || DEFAULT_ANNOUNCEMENT_ALIGNMENT)
|
||||
})
|
||||
|
||||
/**
|
||||
* 어나운스 바 설정 필드만 대상 객체에 복사한다.
|
||||
* @param {Object} target - 값을 받을 객체
|
||||
* @param {Object} source - 값을 제공할 객체
|
||||
* @returns {void}
|
||||
*/
|
||||
export const assignAnnouncementSettingsSection = (target, source = {}) => {
|
||||
const normalized = normalizeAnnouncementSettingsSection(source)
|
||||
ANNOUNCEMENT_SETTINGS_FIELDS.forEach((field) => {
|
||||
target[field] = normalized[field]
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 두 어나운스 바 설정 값이 다른지 확인한다.
|
||||
* @param {Object} current - 현재 설정 값
|
||||
* @param {Object} snapshot - 비교할 스냅샷
|
||||
* @returns {boolean} 변경 여부
|
||||
*/
|
||||
export const hasAnnouncementSettingsSectionChanges = (current, snapshot) => {
|
||||
const normalizedCurrent = normalizeAnnouncementSettingsSection(current)
|
||||
const normalizedSnapshot = normalizeAnnouncementSettingsSection(snapshot)
|
||||
return ANNOUNCEMENT_SETTINGS_FIELDS.some((field) => normalizedCurrent[field] !== normalizedSnapshot[field])
|
||||
}
|
||||
Reference in New Issue
Block a user