UNPKG

analytica-frontend-lib

Version:

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

1 lines 10.4 kB
{"version":3,"sources":["../src/components/SendActivityModal/hooks/useSendActivityModal.ts","../src/utils/extractStudentsFromCategories.ts"],"sourcesContent":["import { create } from 'zustand';\nimport { SendActivityFormData, StepErrors, CategoryConfig } from '../types';\nimport { validateStep } from '../validation';\nimport { extractStudentsFromCategories } from '../../../utils/extractStudentsFromCategories';\n\n/**\n * Store interface for SendActivityModal\n */\nexport interface SendActivityModalStore {\n /** Form data */\n formData: Partial<SendActivityFormData>;\n /** Set form data */\n setFormData: (data: Partial<SendActivityFormData>) => void;\n\n /** Current step (1, 2, or 3) */\n currentStep: number;\n /** Completed steps */\n completedSteps: number[];\n /** Go to a specific step */\n goToStep: (step: number) => void;\n /** Go to next step (validates current step first) */\n nextStep: (enableExamMode: boolean) => boolean;\n /** Go to previous step */\n previousStep: () => void;\n\n /** Validation errors */\n errors: StepErrors;\n /** Set errors */\n setErrors: (errors: StepErrors) => void;\n /** Validate current step */\n validateCurrentStep: (enableExamMode: boolean) => boolean;\n /** Validate all steps */\n validateAllSteps: (enableExamMode: boolean) => boolean;\n\n /** Categories state managed by CheckboxGroup */\n categories: CategoryConfig[];\n /** Update categories (called by CheckboxGroup) */\n setCategories: (categories: CategoryConfig[]) => void;\n\n /** Reset store to initial state */\n reset: () => void;\n}\n\nconst initialState = {\n formData: {\n canRetry: false,\n startTime: '00:00',\n finalTime: '23:59',\n } as Partial<SendActivityFormData>,\n currentStep: 1,\n completedSteps: [] as number[],\n errors: {} as StepErrors,\n categories: [] as CategoryConfig[],\n};\n\n/**\n * Creates the SendActivityModal store\n */\nexport const useSendActivityModalStore = create<SendActivityModalStore>(\n (set, get) => ({\n ...initialState,\n\n setFormData: (data) => {\n set((state) => ({\n formData: { ...state.formData, ...data },\n }));\n },\n\n goToStep: (step) => {\n if (step >= 1 && step <= 3) {\n set({ currentStep: step, errors: {} });\n }\n },\n\n nextStep: (enableExamMode: boolean) => {\n const state = get();\n const isValid = state.validateCurrentStep(enableExamMode);\n\n if (isValid && state.currentStep < 3) {\n set((prev) => ({\n currentStep: prev.currentStep + 1,\n completedSteps: prev.completedSteps.includes(prev.currentStep)\n ? prev.completedSteps\n : [...prev.completedSteps, prev.currentStep],\n errors: {},\n }));\n return true;\n }\n\n return isValid;\n },\n\n previousStep: () => {\n const state = get();\n if (state.currentStep > 1) {\n set({ currentStep: state.currentStep - 1, errors: {} });\n }\n },\n\n setErrors: (errors) => {\n set({ errors });\n },\n\n validateCurrentStep: (enableExamMode: boolean) => {\n const state = get();\n // For step 2, extract students from categories to ensure auto-selection is considered\n let formDataToValidate = state.formData;\n let updatedFormData = state.formData;\n if (state.currentStep === 2 && state.categories.length > 0) {\n const students = extractStudentsFromCategories(state.categories);\n formDataToValidate = { ...state.formData, students };\n updatedFormData = formDataToValidate;\n }\n const options = { enableExamMode };\n const errors = validateStep(\n state.currentStep,\n formDataToValidate,\n options\n );\n set({ formData: updatedFormData, errors });\n return Object.keys(errors).length === 0;\n },\n\n validateAllSteps: (enableExamMode: boolean) => {\n const state = get();\n // Extract students from categories for step 2 validation\n let formDataForStep2 = state.formData;\n if (state.categories.length > 0) {\n const students = extractStudentsFromCategories(state.categories);\n formDataForStep2 = { ...state.formData, students };\n }\n const options = { enableExamMode };\n const errors1 = validateStep(1, state.formData, options);\n const errors2 = validateStep(2, formDataForStep2);\n const errors3 = validateStep(3, state.formData, options);\n const allErrors = { ...errors1, ...errors2, ...errors3 };\n set({ errors: allErrors });\n return Object.keys(allErrors).length === 0;\n },\n\n setCategories: (categories) => {\n // Extract students from categories and update formData\n const students = extractStudentsFromCategories(categories);\n set((state) => ({\n categories,\n formData: { ...state.formData, students },\n }));\n },\n\n reset: () => {\n set({\n ...initialState,\n categories: [],\n });\n },\n })\n);\n\n/**\n * Hook to use the SendActivityModal store\n */\nexport function useSendActivityModal() {\n return useSendActivityModalStore();\n}\n","import type { CategoryConfig } from '../components/CheckBoxGroup/CheckBoxGroup';\n\n/**\n * Student data extracted from category selection\n */\nexport interface ExtractedStudent {\n studentId: string;\n userInstitutionId: string;\n}\n\n/**\n * Extract selected students from the students category\n * @param categories - Array of category configurations from CheckBoxGroup\n * @returns Array of extracted student data with userInstitutionId\n */\nexport function extractStudentsFromCategories(\n categories: CategoryConfig[]\n): ExtractedStudent[] {\n // Find the students category\n const studentsCategory = categories.find((cat) => cat.key === 'students');\n\n if (!studentsCategory?.selectedIds || !studentsCategory.itens) {\n return [];\n }\n\n return studentsCategory.selectedIds\n .map((id) => {\n const student = studentsCategory.itens?.find((item) => item.id === id);\n if (student) {\n const rawUserInstId = student.userInstitutionId;\n const rawInstId = student.institutionId;\n const rawStudentId = (student as { studentId?: string | number })\n .studentId;\n\n let userInstitutionId = '';\n if (\n typeof rawUserInstId === 'string' ||\n typeof rawUserInstId === 'number'\n ) {\n userInstitutionId = String(rawUserInstId);\n } else if (\n typeof rawInstId === 'string' ||\n typeof rawInstId === 'number'\n ) {\n userInstitutionId = String(rawInstId);\n }\n\n // Extract studentId if available, otherwise use id as studentId\n let studentId: string;\n if (\n typeof rawStudentId === 'string' ||\n typeof rawStudentId === 'number'\n ) {\n studentId = String(rawStudentId);\n } else {\n // If studentId is not available, use the item id\n studentId = String(student.id);\n }\n\n // Filter out entries without valid userInstitutionId\n if (!userInstitutionId) {\n return null;\n }\n\n return { studentId, userInstitutionId };\n }\n return null;\n })\n .filter((s): s is ExtractedStudent => s !== null);\n}\n"],"mappings":"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","names":[]}