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]) }