import { createSearchParamsCache, parseAsArrayOf, parseAsInteger, parseAsString, parseAsStringEnum, } from "nuqs/server"; import * as z from "zod"; import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers"; import { legalWorksDetailView } from "@/db/schema"; export const SearchParamsCacheLegalWorks = createSearchParamsCache({ // UI 모드나 플래그 관련 flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]), // 페이징 page: parseAsInteger.withDefault(1), perPage: parseAsInteger.withDefault(10), // 정렬 (createdAt 기준 내림차순) sort: getSortingStateParser().withDefault([ { id: "createdAt", desc: true }]), filters: getFiltersStateParser().withDefault([]), joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), search: parseAsString.withDefault(""), }); export type GetLegalWorksSchema = Awaited>; export const createLegalWorkSchema = z.object({ category: z.enum(["CP", "GTC", "기타"]), vendorId: z.number().min(1, "벤더를 선택해주세요"), isUrgent: z.boolean().default(false), requestDate: z.string().min(1, "답변요청일을 선택해주세요"), expectedAnswerDate: z.string().optional(), reviewer: z.string().min(1, "검토요청자를 입력해주세요"), }); export type CreateLegalWorkData = z.infer;