UNPKG

analytica-frontend-lib

Version:

Repositório público dos componentes utilizados nas plataformas da Analytica Ensino

144 lines 4.77 kB
// src/components/SendActivityModal/validation.ts import { z } from "zod"; var ERROR_MESSAGES = { SUBTYPE_REQUIRED: "Campo obrigat\xF3rio! Por favor, selecione uma op\xE7\xE3o para continuar.", TITLE_REQUIRED: "Campo obrigat\xF3rio! Por favor, preencha este campo para continuar.", STUDENTS_REQUIRED: "Campo obrigat\xF3rio! Por favor, selecione pelo menos um aluno para continuar.", START_DATE_REQUIRED: "Campo obrigat\xF3rio! Por favor, preencha este campo para continuar.", FINAL_DATE_REQUIRED: "Campo obrigat\xF3rio! Por favor, preencha este campo para continuar.", FINAL_DATE_INVALID: "A data final deve ser maior ou igual \xE0 data inicial." }; var activityStepSchema = z.object({ subtype: z.enum(["TAREFA", "TRABALHO", "PROVA"], { errorMap: () => ({ message: ERROR_MESSAGES.SUBTYPE_REQUIRED }) }), title: z.string({ required_error: ERROR_MESSAGES.TITLE_REQUIRED }).transform((val) => val.trim()).refine((val) => val.length > 0, { message: ERROR_MESSAGES.TITLE_REQUIRED }), notification: z.string().optional() }); var recipientStepSchema = z.object({ students: z.array( z.object({ studentId: z.string(), userInstitutionId: z.string() }), { required_error: ERROR_MESSAGES.STUDENTS_REQUIRED, invalid_type_error: ERROR_MESSAGES.STUDENTS_REQUIRED } ).min(1, ERROR_MESSAGES.STUDENTS_REQUIRED) }); var DATE_REGEX = /^\d{4}-\d{2}-\d{2}$/; var TIME_REGEX = /^\d{2}:\d{2}$/; var deadlineStepBaseSchema = z.object({ startDate: z.string({ required_error: ERROR_MESSAGES.START_DATE_REQUIRED, invalid_type_error: ERROR_MESSAGES.START_DATE_REQUIRED }).min(1, ERROR_MESSAGES.START_DATE_REQUIRED).regex(DATE_REGEX, ERROR_MESSAGES.START_DATE_REQUIRED), startTime: z.string().regex(TIME_REGEX).default("00:00"), finalDate: z.string({ required_error: ERROR_MESSAGES.FINAL_DATE_REQUIRED, invalid_type_error: ERROR_MESSAGES.FINAL_DATE_REQUIRED }).min(1, ERROR_MESSAGES.FINAL_DATE_REQUIRED).regex(DATE_REGEX, ERROR_MESSAGES.FINAL_DATE_REQUIRED), finalTime: z.string().regex(TIME_REGEX).default("23:59"), canRetry: z.boolean().default(false) }); var deadlineStepSchema = deadlineStepBaseSchema.refine( (data) => { const start = /* @__PURE__ */ new Date(`${data.startDate}T${data.startTime}`); const end = /* @__PURE__ */ new Date(`${data.finalDate}T${data.finalTime}`); return end >= start; }, { message: ERROR_MESSAGES.FINAL_DATE_INVALID, path: ["finalDate"] } ); function validateActivityStep(data) { const errors = {}; const result = activityStepSchema.safeParse({ subtype: data.subtype, title: data.title, notification: data.notification }); if (!result.success) { result.error.issues.forEach((issue) => { const field = issue.path[0]; if (field === "subtype" || field === "title") { errors[field] = issue.message; } }); } return errors; } function validateRecipientStep(data) { const errors = {}; const result = recipientStepSchema.safeParse({ students: data.students ?? [] }); if (!result.success) { result.error.issues.forEach((issue) => { if (issue.path[0] === "students") { errors.students = issue.message; } }); } return errors; } function validateDeadlineStep(data) { const errors = {}; if (!data.startDate) { errors.startDate = ERROR_MESSAGES.START_DATE_REQUIRED; } if (!data.finalDate) { errors.finalDate = ERROR_MESSAGES.FINAL_DATE_REQUIRED; } if (data.startDate && data.finalDate) { const result = deadlineStepSchema.safeParse({ startDate: data.startDate, startTime: data.startTime ?? "00:00", finalDate: data.finalDate, finalTime: data.finalTime ?? "23:59", canRetry: data.canRetry ?? false }); if (!result.success) { result.error.issues.forEach((issue) => { const field = issue.path[0]; if (field === "startDate" || field === "finalDate") { errors[field] = issue.message; } }); } } return errors; } function validateStep(step, data) { switch (step) { case 1: return validateActivityStep(data); case 2: return validateRecipientStep(data); case 3: return validateDeadlineStep(data); default: return {}; } } function isStepValid(step, data) { const errors = validateStep(step, data); return Object.keys(errors).length === 0; } function isFormValid(data) { return isStepValid(1, data) && isStepValid(2, data) && isStepValid(3, data); } export { ERROR_MESSAGES, activityStepSchema, deadlineStepSchema, isFormValid, isStepValid, recipientStepSchema, validateActivityStep, validateDeadlineStep, validateRecipientStep, validateStep }; //# sourceMappingURL=validation.mjs.map