Files
web-temp/layers/stores/usePageDataStore.ts
clkim f718b01b03 refactor. 페이지 데이터 처리 및 레이아웃 관련 코드 개선
- 페이지 데이터 초기화 및 설정 로직 개선
- 불필요한 props 제거 및 상태 관리 개선

Made-with: Cursor
2026-03-18 16:34:11 +09:00

84 lines
2.5 KiB
TypeScript

import type { ColorObject } from '#layers/types/api/common'
import type {
PageDataTemplate,
PageDataValue,
PageDataMetaTag,
} from '#layers/types/api/pageData'
export const usePageDataStore = defineStore('pageData', () => {
const getInitialState = () => ({
pageData: null as PageDataValue | null,
pageLayoutType: 'default' as 'default' | 'promotion',
pageName: '' as string,
pageNameEn: '' as string,
pageMetaTag: null as PageDataMetaTag | null,
pageTemplates: [] as PageDataTemplate[],
pageTemplatesIds: [] as string[],
isUseMetaTag: false as boolean,
isUseTopBtn: false as boolean,
isUseSnsBtn: false as boolean,
isUseLnb: false as boolean,
isLoginRequired: false as boolean,
topBtnColorJson: null as ColorObject | null,
})
const state = reactive(getInitialState())
// 페이지 레이아웃 타입 결정
const getLayoutType = (
pageData: PageDataValue | null
): 'default' | 'promotion' => {
return pageData?.page_type === 2 ? 'promotion' : 'default'
}
// 템플릿 표시 여부 확인
const isTemplateVisible = (template: PageDataTemplate): boolean => {
const json = template.page_ver_tmpl_json
return (
!!json &&
Object.keys(json).length > 0 &&
template.page_ver_tmpl_name_en !== null
)
}
// 템플릿 목록 계산
const getVisibleTemplates = (
templates?: PageDataValue['templates'] | null
): PageDataTemplate[] => {
if (!templates) return []
return Object.values(templates).filter(isTemplateVisible)
}
const setPageData = (response: PageDataValue) => {
const layoutType = getLayoutType(response)
const visibleTemplates = getVisibleTemplates(response.templates)
const templateIds = visibleTemplates.map(
template => template.page_ver_tmpl_name_en
)
state.pageData = response
state.pageLayoutType = layoutType
state.pageName = response.page_name
state.pageNameEn = response.page_name_en
state.pageMetaTag = response.meta_tag_json
state.pageTemplates = visibleTemplates
state.pageTemplatesIds = templateIds
state.isUseMetaTag = response.meta_tag_type === 2
state.isUseTopBtn = response.use_top_btn
state.isUseSnsBtn = response.use_sns_btn
state.isUseLnb = response.use_lnb
state.isLoginRequired = response.is_login_required === 1
state.topBtnColorJson = response.top_btn_color_json
}
const clearPageData = () => {
Object.assign(state, getInitialState())
}
return {
...toRefs(state),
setPageData,
clearPageData,
}
})