import { tasks, type Task } from "@/db/schema/tasks"; import { createSearchParamsCache, parseAsArrayOf, parseAsInteger, parseAsString, parseAsStringEnum, } from "nuqs/server" import * as z from "zod" import { getFiltersStateParser, getSortingStateParser } from "@/lib/parsers" export const searchParamsCache = createSearchParamsCache({ flags: parseAsArrayOf(z.enum(["advancedTable", "floatingBar"])).withDefault( [] ), page: parseAsInteger.withDefault(1), perPage: parseAsInteger.withDefault(10), sort: getSortingStateParser().withDefault([ { id: "createdAt", desc: true }, ]), title: parseAsString.withDefault(""), status: parseAsArrayOf(z.enum(tasks.status.enumValues)).withDefault([]), priority: parseAsArrayOf(z.enum(tasks.priority.enumValues)).withDefault([]), from: parseAsString.withDefault(""), to: parseAsString.withDefault(""), // advanced filter filters: getFiltersStateParser().withDefault([]), joinOperator: parseAsStringEnum(["and", "or"]).withDefault("and"), search: parseAsString.withDefault(""), }) export const createTaskSchema = z.object({ title: z.string(), label: z.enum(tasks.label.enumValues), status: z.enum(tasks.status.enumValues), priority: z.enum(tasks.priority.enumValues), }) export const updateTaskSchema = z.object({ title: z.string().optional(), label: z.enum(tasks.label.enumValues).optional(), status: z.enum(tasks.status.enumValues).optional(), priority: z.enum(tasks.priority.enumValues).optional(), }) export type GetTasksSchema = Awaited> export type CreateTaskSchema = z.infer export type UpdateTaskSchema = z.infer