analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
281 lines (278 loc) • 9.85 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/components/SendActivityModal/hooks/useSendActivityModal.ts
var useSendActivityModal_exports = {};
__export(useSendActivityModal_exports, {
useSendActivityModal: () => useSendActivityModal,
useSendActivityModalStore: () => useSendActivityModalStore
});
module.exports = __toCommonJS(useSendActivityModal_exports);
var import_zustand = require("zustand");
// src/components/SendActivityModal/validation.ts
var import_zod = require("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 = import_zod.z.object({
subtype: import_zod.z.enum(["TAREFA", "TRABALHO", "PROVA"], {
errorMap: () => ({ message: ERROR_MESSAGES.SUBTYPE_REQUIRED })
}),
title: import_zod.z.string({ required_error: ERROR_MESSAGES.TITLE_REQUIRED }).transform((val) => val.trim()).refine((val) => val.length > 0, {
message: ERROR_MESSAGES.TITLE_REQUIRED
}),
notification: import_zod.z.string().optional()
});
var recipientStepSchema = import_zod.z.object({
students: import_zod.z.array(
import_zod.z.object({
studentId: import_zod.z.string(),
userInstitutionId: import_zod.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 = import_zod.z.object({
startDate: import_zod.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: import_zod.z.string().regex(TIME_REGEX).default("00:00"),
finalDate: import_zod.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: import_zod.z.string().regex(TIME_REGEX).default("23:59"),
canRetry: import_zod.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 {};
}
}
// src/components/SendActivityModal/hooks/useSendActivityModal.ts
var initialState = {
formData: {
canRetry: false,
startTime: "00:00",
finalTime: "23:59"
},
currentStep: 1,
completedSteps: [],
errors: {},
categories: []
};
function extractStudentsFromCategories(categories) {
const studentsCategory = categories.find(
(cat) => cat.key === "students" || cat.key === "alunos" || cat.key === "student"
);
if (!studentsCategory?.selectedIds || !studentsCategory.itens) {
return [];
}
return studentsCategory.selectedIds.map((id) => {
const student = studentsCategory.itens?.find((item) => item.id === id);
if (student) {
const rawStudentId = student.studentId;
const rawUserInstId = student.userInstitutionId;
const rawInstId = student.institutionId;
const studentId = typeof rawStudentId === "string" || typeof rawStudentId === "number" ? String(rawStudentId) : student.id;
let userInstitutionId = "";
if (typeof rawUserInstId === "string" || typeof rawUserInstId === "number") {
userInstitutionId = String(rawUserInstId);
} else if (typeof rawInstId === "string" || typeof rawInstId === "number") {
userInstitutionId = String(rawInstId);
}
if (!userInstitutionId) {
return null;
}
return { studentId, userInstitutionId };
}
return null;
}).filter(
(s) => s !== null
);
}
var useSendActivityModalStore = (0, import_zustand.create)(
(set, get) => ({
...initialState,
setFormData: (data) => {
set((state) => ({
formData: { ...state.formData, ...data }
}));
},
goToStep: (step) => {
if (step >= 1 && step <= 3) {
set({ currentStep: step, errors: {} });
}
},
nextStep: () => {
const state = get();
const isValid = state.validateCurrentStep();
if (isValid && state.currentStep < 3) {
set((prev) => ({
currentStep: prev.currentStep + 1,
completedSteps: prev.completedSteps.includes(prev.currentStep) ? prev.completedSteps : [...prev.completedSteps, prev.currentStep],
errors: {}
}));
return true;
}
return isValid;
},
previousStep: () => {
const state = get();
if (state.currentStep > 1) {
set({ currentStep: state.currentStep - 1, errors: {} });
}
},
setErrors: (errors) => {
set({ errors });
},
validateCurrentStep: () => {
const state = get();
let formDataToValidate = state.formData;
let updatedFormData = state.formData;
if (state.currentStep === 2 && state.categories.length > 0) {
const students = extractStudentsFromCategories(state.categories);
formDataToValidate = { ...state.formData, students };
updatedFormData = formDataToValidate;
}
const errors = validateStep(state.currentStep, formDataToValidate);
set({ formData: updatedFormData, errors });
return Object.keys(errors).length === 0;
},
validateAllSteps: () => {
const state = get();
let formDataForStep2 = state.formData;
if (state.categories.length > 0) {
const students = extractStudentsFromCategories(state.categories);
formDataForStep2 = { ...state.formData, students };
}
const errors1 = validateStep(1, state.formData);
const errors2 = validateStep(2, formDataForStep2);
const errors3 = validateStep(3, state.formData);
const allErrors = { ...errors1, ...errors2, ...errors3 };
set({ errors: allErrors });
return Object.keys(allErrors).length === 0;
},
setCategories: (categories) => {
const students = extractStudentsFromCategories(categories);
set((state) => ({
categories,
formData: { ...state.formData, students }
}));
},
reset: () => {
set({
...initialState,
categories: []
});
}
})
);
function useSendActivityModal() {
return useSendActivityModalStore();
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
useSendActivityModal,
useSendActivityModalStore
});
//# sourceMappingURL=useSendActivityModal.js.map