Files
web-temp/layers/utils/styleUtil.ts
2025-12-01 14:23:35 +09:00

78 lines
2.2 KiB
TypeScript

/**
* 스타일 유틸리티 함수
* @description ui 처리에 필요한 유틸리티 함수를 제공합니다.
*/
import type { GameDataResourceGroupBtnInfo } from '#layers/types/api/gameData'
import type {
PageDataResourceGroups,
PageDataResourceGroupBtnInfo,
} from '#layers/types/api/pageData'
/**
* 색상값을 반환합니다.
* @param colorName 색상 이름
* @param colorCode 색상 코드
* @returns 색상 값
*/
export const getColorCode = ({
colorName,
colorCode,
}: {
colorName: string
colorCode: string
}) => {
if (colorName) return `var(--${colorName})`
else if (colorCode) return colorCode
}
/**
* 색상데이터를 받아 색상값을 반환합니다.
* @param colorData 색상 데이터
* @param type 색상 타입 (btn: 버튼, txt: 텍스트)
* @returns 색상 값
*/
export const getColorCodeFromData = (
data: GameDataResourceGroupBtnInfo | PageDataResourceGroupBtnInfo,
type: 'btn' | 'txt' = 'txt'
) => {
const suffix = type === 'btn' ? '_btn' : '_txt'
const colorName = data?.[`color_name${suffix}` as keyof typeof data]
const colorCode = data?.[`color_code${suffix}` as keyof typeof data]
return getColorCode({
colorName: colorName as string | undefined,
colorCode: colorCode as string | undefined,
})
}
/**
* pagination 활성화, 비활성화 style을 반환합니다.
* @param paginationGroups pagination groups 배열
* @param options type: 'thumbnail' | 'bullet' (기본값: 'thumbnail')
* @returns Record<string, string> CSS 변수 객체
*/
export const getPaginationClass = (
paginationGroups?: PageDataResourceGroups
): Record<string, string> => {
if (!paginationGroups || paginationGroups.length < 2) {
return {}
}
// 색상 추출 또는 기본값 사용
const paginationActive = getColorCode({
colorName: paginationGroups[0]?.display?.color_name,
colorCode: paginationGroups[0]?.display?.color_code,
})
const paginationDisabled = getColorCode({
colorName: paginationGroups[1]?.display?.color_name,
colorCode: paginationGroups[1]?.display?.color_code,
})
return {
'--pagination-active': paginationActive,
'--pagination-disabled': paginationDisabled,
}
}