analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
145 lines (141 loc) • 4.57 kB
JavaScript
import {
validateStep
} from "./chunk-MSG5POSR.mjs";
// src/components/SendActivityModal/hooks/useSendActivityModal.ts
import { create } from "zustand";
// src/utils/extractStudentsFromCategories.ts
function extractStudentsFromCategories(categories) {
const studentsCategory = categories.find((cat) => cat.key === "students");
if (!studentsCategory?.selectedIds || !studentsCategory.itens) {
return [];
}
return studentsCategory.selectedIds.map((id) => {
const student = studentsCategory.itens?.find((item) => item.id === id);
if (student) {
const rawUserInstId = student.userInstitutionId;
const rawInstId = student.institutionId;
const rawStudentId = student.studentId;
let userInstitutionId = "";
if (typeof rawUserInstId === "string" || typeof rawUserInstId === "number") {
userInstitutionId = String(rawUserInstId);
} else if (typeof rawInstId === "string" || typeof rawInstId === "number") {
userInstitutionId = String(rawInstId);
}
let studentId;
if (typeof rawStudentId === "string" || typeof rawStudentId === "number") {
studentId = String(rawStudentId);
} else {
studentId = String(student.id);
}
if (!userInstitutionId) {
return null;
}
return { studentId, userInstitutionId };
}
return null;
}).filter((s) => s !== null);
}
// src/components/SendActivityModal/hooks/useSendActivityModal.ts
var initialState = {
formData: {
canRetry: false,
startTime: "00:00",
finalTime: "23:59"
},
currentStep: 1,
completedSteps: [],
errors: {},
categories: []
};
var useSendActivityModalStore = create(
(set, get) => ({
...initialState,
setFormData: (data) => {
set((state) => ({
formData: { ...state.formData, ...data }
}));
},
goToStep: (step) => {
if (step >= 1 && step <= 3) {
set({ currentStep: step, errors: {} });
}
},
nextStep: (enableExamMode) => {
const state = get();
const isValid = state.validateCurrentStep(enableExamMode);
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: (enableExamMode) => {
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 options = { enableExamMode };
const errors = validateStep(
state.currentStep,
formDataToValidate,
options
);
set({ formData: updatedFormData, errors });
return Object.keys(errors).length === 0;
},
validateAllSteps: (enableExamMode) => {
const state = get();
let formDataForStep2 = state.formData;
if (state.categories.length > 0) {
const students = extractStudentsFromCategories(state.categories);
formDataForStep2 = { ...state.formData, students };
}
const options = { enableExamMode };
const errors1 = validateStep(1, state.formData, options);
const errors2 = validateStep(2, formDataForStep2);
const errors3 = validateStep(3, state.formData, options);
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();
}
export {
extractStudentsFromCategories,
useSendActivityModalStore,
useSendActivityModal
};
//# sourceMappingURL=chunk-MMCTPGXO.mjs.map