mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-05-09 04:02:40 -05:00
80 lines
1.6 KiB
TypeScript
80 lines
1.6 KiB
TypeScript
import { z } from "zod";
|
|
import {
|
|
_action,
|
|
customCssVarObject,
|
|
falsyToNull,
|
|
id,
|
|
safeStringSchema,
|
|
} from "~/utils/zod";
|
|
import { TEAM, TEAM_MEMBER_ROLES } from "./team-constants";
|
|
|
|
export const teamParamsSchema = z.object({ customUrl: z.string() });
|
|
|
|
export const createTeamSchema = z.object({
|
|
name: safeStringSchema({
|
|
min: TEAM.NAME_MIN_LENGTH,
|
|
max: TEAM.NAME_MAX_LENGTH,
|
|
}),
|
|
});
|
|
|
|
export const teamProfilePageActionSchema = z.union([
|
|
z.object({
|
|
_action: _action("LEAVE_TEAM"),
|
|
}),
|
|
z.object({
|
|
_action: _action("MAKE_MAIN_TEAM"),
|
|
}),
|
|
]);
|
|
|
|
const deleteActionsSchema = z.object({
|
|
_action: z.union([
|
|
_action("DELETE_TEAM"),
|
|
_action("DELETE_AVATAR"),
|
|
_action("DELETE_BANNER"),
|
|
]),
|
|
});
|
|
|
|
export const editTeamSchema = z.union([
|
|
deleteActionsSchema,
|
|
z.object({
|
|
_action: _action("EDIT"),
|
|
name: z.string().min(TEAM.NAME_MIN_LENGTH).max(TEAM.NAME_MAX_LENGTH),
|
|
bio: z.preprocess(
|
|
falsyToNull,
|
|
z.string().max(TEAM.BIO_MAX_LENGTH).nullable(),
|
|
),
|
|
bsky: z.preprocess(
|
|
falsyToNull,
|
|
z.string().max(TEAM.BSKY_MAX_LENGTH).nullable(),
|
|
),
|
|
tag: z.preprocess(
|
|
falsyToNull,
|
|
z.string().max(TEAM.TAG_MAX_LENGTH).nullable(),
|
|
),
|
|
css: customCssVarObject,
|
|
}),
|
|
]);
|
|
|
|
export const manageRosterSchema = z.union([
|
|
z.object({
|
|
_action: _action("RESET_INVITE_LINK"),
|
|
}),
|
|
z.object({
|
|
_action: _action("DELETE_MEMBER"),
|
|
userId: id,
|
|
}),
|
|
z.object({
|
|
_action: _action("ADD_MANAGER"),
|
|
userId: id,
|
|
}),
|
|
z.object({
|
|
_action: _action("REMOVE_MANAGER"),
|
|
userId: id,
|
|
}),
|
|
z.object({
|
|
_action: _action("UPDATE_MEMBER_ROLE"),
|
|
userId: id,
|
|
role: z.union([z.enum(TEAM_MEMBER_ROLES), z.literal("")]),
|
|
}),
|
|
]);
|