mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-04-26 09:20:24 -05:00
60 lines
1.1 KiB
TypeScript
60 lines
1.1 KiB
TypeScript
import { z } from "zod";
|
|
import {
|
|
_action,
|
|
checkboxValueToDbBoolean,
|
|
dbBoolean,
|
|
falsyToNull,
|
|
id,
|
|
processMany,
|
|
removeDuplicates,
|
|
safeJSONParse,
|
|
} from "~/utils/zod";
|
|
import { ART } from "./art-constants";
|
|
|
|
const description = z.preprocess(
|
|
falsyToNull,
|
|
z.string().max(ART.DESCRIPTION_MAX_LENGTH).nullable(),
|
|
);
|
|
const linkedUsers = z.preprocess(
|
|
processMany(safeJSONParse, removeDuplicates),
|
|
z.array(id).max(ART.LINKED_USERS_MAX_LENGTH),
|
|
);
|
|
const tags = z.preprocess(
|
|
safeJSONParse,
|
|
z
|
|
.array(
|
|
z.object({
|
|
name: z.string().min(1).max(ART.TAG_MAX_LENGTH).optional(),
|
|
id: id.optional(),
|
|
}),
|
|
)
|
|
.max(ART.TAG_MAX_LENGTH),
|
|
);
|
|
export const newArtSchema = z.object({
|
|
description,
|
|
linkedUsers,
|
|
tags,
|
|
});
|
|
|
|
export const editArtSchema = z.object({
|
|
description,
|
|
linkedUsers,
|
|
tags,
|
|
isShowcase: z.preprocess(checkboxValueToDbBoolean, dbBoolean),
|
|
});
|
|
|
|
const deleteArtSchema = z.object({
|
|
_action: _action("DELETE_ART"),
|
|
id,
|
|
});
|
|
|
|
const unlinkArtSchema = z.object({
|
|
_action: _action("UNLINK_ART"),
|
|
id,
|
|
});
|
|
|
|
export const userArtPageActionSchema = z.union([
|
|
deleteArtSchema,
|
|
unlinkArtSchema,
|
|
]);
|