analytica-frontend-lib
Version:
Repositório público dos componentes utilizados nas plataformas da Analytica Ensino
1 lines • 7.59 kB
Source Map (JSON)
{"version":3,"sources":["../src/components/AlertManager/useAlertForm.ts"],"sourcesContent":["import { create } from 'zustand';\n\n// Estrutura genérica para itens de destinatários\nexport interface RecipientItem {\n id: string;\n name: string;\n [key: string]: unknown; // Permite propriedades adicionais (ex: abbreviation, parentId, etc)\n}\n\n// Estrutura genérica para categorias de destinatários (legado - mantido para compatibilidade)\nexport interface RecipientCategory {\n key: string; // ex: 'escola', 'turma', 'alunos', 'instituicoes'\n label: string; // ex: 'Escola', 'Turma', 'Alunos', 'Instituições'\n availableItems: RecipientItem[]; // Itens disponíveis para seleção\n selectedIds: string[]; // IDs dos itens selecionados\n allSelected: boolean; // Se todos os itens foram selecionados\n parentKey?: string; // Chave da categoria pai (para hierarquia)\n dependsOn?: string[]; // Array de chaves das categorias das quais esta depende\n}\n\ninterface AlertFormData {\n title: string;\n message: string;\n image: File | string | null;\n date: string;\n time: string;\n sendToday: boolean;\n sendCopyToEmail: boolean;\n recipientCategories: Record<string, RecipientCategory>; // Categorias dinâmicas\n}\n\ninterface AlertFormStore extends AlertFormData {\n // Actions\n setTitle: (title: string) => void;\n setMessage: (message: string) => void;\n setImage: (image: File | string | null) => void;\n setDate: (date: string) => void;\n setTime: (time: string) => void;\n setSendToday: (sendToday: boolean) => void;\n setSendCopyToEmail: (sendCopyToEmail: boolean) => void;\n\n // Ações dinâmicas para destinatários\n initializeCategory: (category: RecipientCategory) => void;\n updateCategoryItems: (key: string, items: RecipientItem[]) => void;\n updateCategorySelection: (\n key: string,\n selectedIds: string[],\n allSelected: boolean\n ) => void;\n clearCategorySelection: (key: string) => void;\n\n resetForm: () => void;\n}\n\nconst initialState: AlertFormData = {\n title: '',\n message: '',\n image: null,\n date: '',\n time: '',\n sendToday: false,\n sendCopyToEmail: false,\n recipientCategories: {},\n};\n\nexport const useAlertFormStore = create<AlertFormStore>((set) => ({\n ...initialState,\n\n // Step 1 - Mensagem\n setTitle: (title) => set({ title }),\n\n setMessage: (message) => set({ message }),\n\n setImage: (image) => set({ image }),\n\n // Step 2 - Destinatários (Dinâmico)\n initializeCategory: (category) =>\n set((state) => ({\n recipientCategories: {\n ...state.recipientCategories,\n [category.key]: {\n ...category,\n selectedIds: category.selectedIds || [],\n allSelected: category.allSelected || false,\n },\n },\n })),\n\n updateCategoryItems: (key, items) =>\n set((state) => {\n const base =\n state.recipientCategories[key] ??\n ({\n key,\n label: key,\n availableItems: [],\n selectedIds: [],\n allSelected: false,\n } as RecipientCategory);\n return {\n recipientCategories: {\n ...state.recipientCategories,\n [key]: { ...base, availableItems: items },\n },\n };\n }),\n\n updateCategorySelection: (key, selectedIds, allSelected) =>\n set((state) => {\n const base =\n state.recipientCategories[key] ??\n ({\n key,\n label: key,\n availableItems: [],\n selectedIds: [],\n allSelected: false,\n } as RecipientCategory);\n return {\n recipientCategories: {\n ...state.recipientCategories,\n [key]: { ...base, selectedIds, allSelected },\n },\n };\n }),\n\n clearCategorySelection: (key) =>\n set((state) => {\n const base =\n state.recipientCategories[key] ??\n ({\n key,\n label: key,\n availableItems: [],\n selectedIds: [],\n allSelected: false,\n } as RecipientCategory);\n return {\n recipientCategories: {\n ...state.recipientCategories,\n [key]: { ...base, selectedIds: [], allSelected: false },\n },\n };\n }),\n\n // Step 3 - Data de envio\n setDate: (date) => set({ date }),\n\n setTime: (time) => set({ time }),\n\n setSendToday: (sendToday: boolean) => {\n // Ao desmarcar, o campo volta a ser editável e deve ficar vazio para o\n // usuário escolher — sobrescrever com \"agora\" apagaria a escolha dele.\n if (!sendToday) {\n set({ sendToday, date: '', time: '' });\n return;\n }\n\n // Marcado: preenche com data e hora atuais (envio imediato)\n const now = new Date();\n const year = now.getFullYear();\n const month = String(now.getMonth() + 1).padStart(2, '0');\n const day = String(now.getDate()).padStart(2, '0');\n const hours = String(now.getHours()).padStart(2, '0');\n const minutes = String(now.getMinutes()).padStart(2, '0');\n\n set({\n sendToday,\n date: `${year}-${month}-${day}`,\n time: `${hours}:${minutes}`,\n });\n },\n\n setSendCopyToEmail: (sendCopyToEmail) => set({ sendCopyToEmail }),\n\n // Reset form\n resetForm: () => set(initialState),\n}));\n"],"mappings":"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","names":[]}