const HAIR_LENGTH_MAP: Record = { Short: 'SHORT', Medium: 'MEDIUM', Long: 'LONG', }; const CONTACT_TYPE_MAP: Record = { LINE: 'LINE', Phone: 'PHONE', Email: 'EMAIL', }; const LINE_STATUS_MAP: Record = { 已关联: 'LINKED', 已連携: 'LINKED', 未关联: 'UNLINKED', 未連携: 'UNLINKED', 邀请已发送: 'INVITED', 保留: 'KEEP', }; const FOLLOW_STATUS_MAP: Record = { '': 'NONE', NONE: 'NONE', NEED_FOLLOW_UP: 'NEED_FOLLOW_UP', SENT: 'SENT', 需跟进: 'NEED_FOLLOW_UP', 已发送: 'SENT', 发送计划: 'NEED_FOLLOW_UP', }; export function normalizeHairLength(value?: string) { return value ? HAIR_LENGTH_MAP[value] ?? null : null; } export function normalizeContactType(value?: string) { return value ? CONTACT_TYPE_MAP[value] ?? 'LINE' : 'LINE'; } export function normalizeLineStatus(value?: string) { return value ? LINE_STATUS_MAP[value] ?? null : null; } export function normalizeFollowStatus(value?: string) { return value == null ? 'NONE' : FOLLOW_STATUS_MAP[value] ?? 'NONE'; } export function parseDateOnly(value?: string) { return value ? new Date(`${value}T00:00:00.000Z`) : null; } export function formatDateOnly(value: Date | null) { return value ? value.toISOString().slice(0, 10) : undefined; } export function toFrontendHairLength(value: string | null) { if (!value) { return undefined; } return value[0] + value.slice(1).toLowerCase(); }