| import { z } from 'zod';
|
| import { pageInfoSchema } from '@/gql/pagination';
|
| import { passwordSchema } from '@/lib/validation';
|
|
|
| export const userStatusSchema = z.enum(['activated', 'deactivated']);
|
| export type UserStatus = z.infer<typeof userStatusSchema>;
|
|
|
|
|
| export const projectUserSchema = z.object({
|
| id: z.string(),
|
| userID: z.string(),
|
| projectID: z.string(),
|
| isOwner: z.boolean(),
|
| scopes: z.array(z.string()).optional().nullable(),
|
| user: z.object({
|
| id: z.string(),
|
| createdAt: z.string(),
|
| updatedAt: z.string(),
|
| email: z.string(),
|
| status: userStatusSchema,
|
| preferLanguage: z.string().optional(),
|
| firstName: z.string().optional(),
|
| lastName: z.string().optional(),
|
| roles: z
|
| .object({
|
| edges: z.array(
|
| z.object({
|
| node: z.object({
|
| id: z.string(),
|
| name: z.string(),
|
| code: z.string().optional(),
|
| level: z.string().optional(),
|
| }),
|
| })
|
| ),
|
| })
|
| .optional(),
|
| }),
|
| });
|
|
|
|
|
| export const userSchema = z.object({
|
| id: z.string(),
|
| createdAt: z.string(),
|
| updatedAt: z.string(),
|
| email: z.string(),
|
| status: userStatusSchema,
|
| preferLanguage: z.string().optional(),
|
| firstName: z.string().optional(),
|
| lastName: z.string().optional(),
|
| isOwner: z.boolean().optional(),
|
| scopes: z.array(z.string()).optional().nullable(),
|
| projectUserId: z.string().optional(),
|
| roles: z
|
| .object({
|
| edges: z.array(
|
| z.object({
|
| node: z.object({
|
| id: z.string(),
|
| name: z.string(),
|
| code: z.string().optional(),
|
| level: z.string().optional(),
|
| }),
|
| })
|
| ),
|
| })
|
| .optional(),
|
| });
|
|
|
| export const userConnectionSchema = z.object({
|
| edges: z.array(
|
| z.object({
|
| node: userSchema,
|
| })
|
| ),
|
| pageInfo: pageInfoSchema,
|
| });
|
|
|
|
|
| export const createUserFormSchema = z
|
| .object({
|
| createdAt: z.string().optional(),
|
| updatedAt: z.string().optional(),
|
| email: z.email('Invalid email address'),
|
| firstName: z.string().optional(),
|
| lastName: z.string().optional(),
|
| password: z.string().min(6, 'Password must be at least 6 characters'),
|
| confirmPassword: z.string(),
|
| isOwner: z.boolean().optional(),
|
| scopes: z.array(z.string()).optional(),
|
| roleIDs: z.array(z.string()).optional(),
|
| })
|
| .refine((data) => data.password === data.confirmPassword, {
|
| message: "Passwords don't match",
|
| path: ['confirmPassword'],
|
| });
|
|
|
|
|
| export const createUserInputSchema = z.object({
|
| createdAt: z.string().optional(),
|
| updatedAt: z.string().optional(),
|
| email: z.string().email('Invalid email address'),
|
| firstName: z.string().optional(),
|
| lastName: z.string().optional(),
|
| password: z.string().min(6, 'Password must be at least 6 characters'),
|
| isOwner: z.boolean().optional(),
|
| scopes: z.array(z.string()).optional(),
|
| roleIDs: z.array(z.string()).optional(),
|
| });
|
|
|
|
|
| export const changePasswordFormSchema = (t: (key: string) => string) =>
|
| z
|
| .object({
|
| newPassword: passwordSchema(t),
|
| confirmPassword: z.string(),
|
| })
|
| .refine((data) => data.newPassword === data.confirmPassword, {
|
| message: t('users.validation.passwordsNotMatch'),
|
| path: ['confirmPassword'],
|
| });
|
|
|
|
|
| export const changePasswordInputSchema = z.object({
|
| newPassword: z.string().min(6, 'Password must be at least 6 characters'),
|
| });
|
|
|
| export const updateUserInputSchema = z.object({
|
| updatedAt: z.string().optional(),
|
| email: z.string().email('Invalid email address').optional(),
|
| firstName: z.string().optional(),
|
| lastName: z.string().optional(),
|
| isOwner: z.boolean().optional(),
|
| scopes: z.array(z.string()).optional(),
|
| appendScopes: z.array(z.string()).optional(),
|
| clearScopes: z.boolean().optional(),
|
| addRoleIDs: z.array(z.string()).optional(),
|
| removeRoleIDs: z.array(z.string()).optional(),
|
| clearRoles: z.boolean().optional(),
|
| });
|
|
|
| export type ProjectUser = z.infer<typeof projectUserSchema>;
|
| export type User = z.infer<typeof userSchema>;
|
| export type UserConnection = z.infer<typeof userConnectionSchema>;
|
| export type CreateUserForm = z.infer<typeof createUserFormSchema>;
|
| export type CreateUserInput = z.infer<typeof createUserInputSchema>;
|
| export type UpdateUserInput = z.infer<typeof updateUserInputSchema>;
|
| export type ChangePasswordForm = z.infer<ReturnType<typeof changePasswordFormSchema>>;
|
| export type ChangePasswordInput = z.infer<typeof changePasswordInputSchema>;
|
|
|
|
|
| export const userListSchema = z.array(userSchema);
|
| export type UserList = z.infer<typeof userListSchema>;
|
|
|