import { vendorInvestigationsView } from "@/db/schema/vendors" import { createSearchParamsCache, parseAsArrayOf, parseAsInteger, parseAsString, parseAsStringEnum, } from "nuqs/server" import * as z from "zod" import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers" export const searchParamsInvestigationCache = createSearchParamsCache({ // Common flags flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault([]), // Paging page: parseAsInteger.withDefault(1), perPage: parseAsInteger.withDefault(10), // Sorting - adjusting for vendorInvestigationsView sort: getSortingStateParser().withDefault([ { id: "investigationCreatedAt", desc: true }, ]), // Advanced filter filters: getFiltersStateParser().withDefault([]), joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), // Global search search: parseAsString.withDefault(""), // ----------------------------------------------------------------- // Fields specific to vendor investigations // ----------------------------------------------------------------- // investigationStatus: PLANNED, IN_PROGRESS, COMPLETED, CANCELED investigationStatus: parseAsStringEnum(["PLANNED", "IN_PROGRESS", "COMPLETED", "CANCELED"]), // In case you also want to filter by vendorName, vendorCode, etc. vendorName: parseAsString.withDefault(""), vendorCode: parseAsString.withDefault(""), // If you need to filter by vendor status (e.g., PQ_SUBMITTED, ACTIVE, etc.), // you can include it here too. Example: // vendorStatus: parseAsStringEnum([ // "PENDING_REVIEW", // "IN_REVIEW", // "REJECTED", // "IN_PQ", // "PQ_SUBMITTED", // "PQ_FAILED", // "PQ_APPROVED", // "APPROVED", // "ACTIVE", // "INACTIVE", // "BLACKLISTED", // ]).optional(), }) // Finally, export the type you can use in your server action: export type GetVendorsInvestigationSchema = Awaited> export const updateVendorInvestigationSchema = z.object({ investigationId: z.number(), investigationStatus: z.enum(["PLANNED", "IN_PROGRESS", "COMPLETED", "CANCELED"]), // If the user might send empty strings, we'll allow it by unioning with z.literal('') // Then transform empty string to undefined scheduledStartAt: z.preprocess( // null이나 빈 문자열을 undefined로 변환 (val) => (val === null || val === '') ? undefined : val, z.date().optional() ), scheduledEndAt:z.preprocess( // null이나 빈 문자열을 undefined로 변환 (val) => (val === null || val === '') ? undefined : val, z.date().optional() ), completedAt: z.preprocess( // null이나 빈 문자열을 undefined로 변환 (val) => (val === null || val === '') ? undefined : val, z.date().optional() ), investigationNotes: z.string().optional(), attachments: z.any().optional(), }) export type UpdateVendorInvestigationSchema = z.infer< typeof updateVendorInvestigationSchema >