33 lines
986 B
TypeScript
33 lines
986 B
TypeScript
|
import { type TypeOf, string } from 'zod'
|
||
|
|
||
|
import { UserSchema } from './user'
|
||
|
|
||
|
import { DateSchema } from './common/date'
|
||
|
import { IdSchema } from './common/id'
|
||
|
import { HexColorSchema } from './common/hexColor'
|
||
|
import { AbstractSchema } from './abstract'
|
||
|
|
||
|
import { colorIsDark } from '@/helpers/color/colorIsDark'
|
||
|
|
||
|
const DEFAULT_LABEL_BACKGROUND_COLOR = 'e8e8e8'
|
||
|
|
||
|
export const LabelSchema = AbstractSchema.extend({
|
||
|
id: IdSchema.default(0),
|
||
|
title: string().default(''),
|
||
|
hexColor: HexColorSchema.default(DEFAULT_LABEL_BACKGROUND_COLOR),
|
||
|
textColor: string(), // implicit
|
||
|
description: string().default(''),
|
||
|
createdBy: UserSchema, // FIXME: default: current user?
|
||
|
listId: IdSchema.default(0),
|
||
|
|
||
|
created: DateSchema.nullable(),
|
||
|
updated: DateSchema.nullable(),
|
||
|
}).transform((obj) => {
|
||
|
// FIXME: remove textColor location => should be defined in UI
|
||
|
obj.textColor = colorIsDark(obj.hexColor) ? '#4a4a4a' : '#ffffff'
|
||
|
return obj
|
||
|
},
|
||
|
)
|
||
|
|
||
|
export type ILabel = TypeOf<typeof LabelSchema>
|