{"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":";;;;;AAAA,SAAS,cAAc;;;ACehB,SAAS,8BACd,YACoB;AAEpB,QAAM,mBAAmB,WAAW,KAAK,CAAC,QAAQ,IAAI,QAAQ,UAAU;AAExE,MAAI,CAAC,kBAAkB,eAAe,CAAC,iBAAiB,OAAO;AAC7D,WAAO,CAAC;AAAA,EACV;AAEA,SAAO,iBAAiB,YACrB,IAAI,CAAC,OAAO;AACX,UAAM,UAAU,iBAAiB,OAAO,KAAK,CAAC,SAAS,KAAK,OAAO,EAAE;AACrE,QAAI,SAAS;AACX,YAAM,gBAAgB,QAAQ;AAC9B,YAAM,YAAY,QAAQ;AAC1B,YAAM,eAAgB,QACnB;AAEH,UAAI,oBAAoB;AACxB,UACE,OAAO,kBAAkB,YACzB,OAAO,kBAAkB,UACzB;AACA,4BAAoB,OAAO,aAAa;AAAA,MAC1C,WACE,OAAO,cAAc,YACrB,OAAO,cAAc,UACrB;AACA,4BAAoB,OAAO,SAAS;AAAA,MACtC;AAGA,UAAI;AACJ,UACE,OAAO,iBAAiB,YACxB,OAAO,iBAAiB,UACxB;AACA,oBAAY,OAAO,YAAY;AAAA,MACjC,OAAO;AAEL,oBAAY,OAAO,QAAQ,EAAE;AAAA,MAC/B;AAGA,UAAI,CAAC,mBAAmB;AACtB,eAAO;AAAA,MACT;AAEA,aAAO,EAAE,WAAW,kBAAkB;AAAA,IACxC;AACA,WAAO;AAAA,EACT,CAAC,EACA,OAAO,CAAC,MAA6B,MAAM,IAAI;AACpD;;;AD1BA,IAAM,eAAe;AAAA,EACnB,UAAU;AAAA,IACR,UAAU;AAAA,IACV,WAAW;AAAA,IACX,WAAW;AAAA,EACb;AAAA,EACA,aAAa;AAAA,EACb,gBAAgB,CAAC;AAAA,EACjB,QAAQ,CAAC;AAAA,EACT,YAAY,CAAC;AACf;AAKO,IAAM,4BAA4B;AAAA,EACvC,CAAC,KAAK,SAAS;AAAA,IACb,GAAG;AAAA,IAEH,aAAa,CAAC,SAAS;AACrB,UAAI,CAAC,WAAW;AAAA,QACd,UAAU,EAAE,GAAG,MAAM,UAAU,GAAG,KAAK;AAAA,MACzC,EAAE;AAAA,IACJ;AAAA,IAEA,UAAU,CAAC,SAAS;AAClB,UAAI,QAAQ,KAAK,QAAQ,GAAG;AAC1B,YAAI,EAAE,aAAa,MAAM,QAAQ,CAAC,EAAE,CAAC;AAAA,MACvC;AAAA,IACF;AAAA,IAEA,UAAU,CAAC,mBAA4B;AACrC,YAAM,QAAQ,IAAI;AAClB,YAAM,UAAU,MAAM,oBAAoB,cAAc;AAExD,UAAI,WAAW,MAAM,cAAc,GAAG;AACpC,YAAI,CAAC,UAAU;AAAA,UACb,aAAa,KAAK,cAAc;AAAA,UAChC,gBAAgB,KAAK,eAAe,SAAS,KAAK,WAAW,IACzD,KAAK,iBACL,CAAC,GAAG,KAAK,gBAAgB,KAAK,WAAW;AAAA,UAC7C,QAAQ,CAAC;AAAA,QACX,EAAE;AACF,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAAA,IAEA,cAAc,MAAM;AAClB,YAAM,QAAQ,IAAI;AAClB,UAAI,MAAM,cAAc,GAAG;AACzB,YAAI,EAAE,aAAa,MAAM,cAAc,GAAG,QAAQ,CAAC,EAAE,CAAC;AAAA,MACxD;AAAA,IACF;AAAA,IAEA,WAAW,CAAC,WAAW;AACrB,UAAI,EAAE,OAAO,CAAC;AAAA,IAChB;AAAA,IAEA,qBAAqB,CAAC,mBAA4B;AAChD,YAAM,QAAQ,IAAI;AAElB,UAAI,qBAAqB,MAAM;AAC/B,UAAI,kBAAkB,MAAM;AAC5B,UAAI,MAAM,gBAAgB,KAAK,MAAM,WAAW,SAAS,GAAG;AAC1D,cAAM,WAAW,8BAA8B,MAAM,UAAU;AAC/D,6BAAqB,EAAE,GAAG,MAAM,UAAU,SAAS;AACnD,0BAAkB;AAAA,MACpB;AACA,YAAM,UAAU,EAAE,eAAe;AACjC,YAAM,SAAS;AAAA,QACb,MAAM;AAAA,QACN;AAAA,QACA;AAAA,MACF;AACA,UAAI,EAAE,UAAU,iBAAiB,OAAO,CAAC;AACzC,aAAO,OAAO,KAAK,MAAM,EAAE,WAAW;AAAA,IACxC;AAAA,IAEA,kBAAkB,CAAC,mBAA4B;AAC7C,YAAM,QAAQ,IAAI;AAElB,UAAI,mBAAmB,MAAM;AAC7B,UAAI,MAAM,WAAW,SAAS,GAAG;AAC/B,cAAM,WAAW,8BAA8B,MAAM,UAAU;AAC/D,2BAAmB,EAAE,GAAG,MAAM,UAAU,SAAS;AAAA,MACnD;AACA,YAAM,UAAU,EAAE,eAAe;AACjC,YAAM,UAAU,aAAa,GAAG,MAAM,UAAU,OAAO;AACvD,YAAM,UAAU,aAAa,GAAG,gBAAgB;AAChD,YAAM,UAAU,aAAa,GAAG,MAAM,UAAU,OAAO;AACvD,YAAM,YAAY,EAAE,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ;AACvD,UAAI,EAAE,QAAQ,UAAU,CAAC;AACzB,aAAO,OAAO,KAAK,SAAS,EAAE,WAAW;AAAA,IAC3C;AAAA,IAEA,eAAe,CAAC,eAAe;AAE7B,YAAM,WAAW,8BAA8B,UAAU;AACzD,UAAI,CAAC,WAAW;AAAA,QACd;AAAA,QACA,UAAU,EAAE,GAAG,MAAM,UAAU,SAAS;AAAA,MAC1C,EAAE;AAAA,IACJ;AAAA,IAEA,OAAO,MAAM;AACX,UAAI;AAAA,QACF,GAAG;AAAA,QACH,YAAY,CAAC;AAAA,MACf,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAKO,SAAS,uBAAuB;AACrC,SAAO,0BAA0B;AACnC;","names":[]}