tududi/app/frontend/contexts/DataContext.tsx
2025-02-13 01:15:04 +02:00

110 lines
3.3 KiB
TypeScript

import React, { createContext, useContext } from 'react';
import useFetchTags from '../hooks/useFetchTags';
import useFetchAreas from '../hooks/useFetchAreas';
import useFetchProjects from '../hooks/useFetchProjects';
import useManageNotes from '../hooks/useManageNotes';
import useManageProjects from '../hooks/useManageProjects';
import useManageTags from '../hooks/useManageTags';
import useManageTasks from '../hooks/useManageTasks';
import { Project } from '../entities/Project';
interface DataContextProps {
tasks: any[];
tags: any[];
areas: any[];
notes: any[];
projects: Project[];
isLoading: boolean;
isError: boolean;
createNote: (noteData: any) => Promise<void>;
updateNote: (noteId: number, noteData: any) => Promise<void>;
deleteNote: (noteId: number) => Promise<void>;
createProject: (projectData: any) => Promise<Project>;
updateProject: (projectId: number, projectData: any) => Promise<Project>;
deleteProject: (projectId: number) => Promise<void>;
createTag: (tagData: any) => Promise<void>;
updateTag: (tagId: number, tagData: any) => Promise<void>;
deleteTag: (tagId: number) => Promise<void>;
createTask: (taskData: any) => Promise<void>;
updateTask: (taskId: number, taskData: any) => Promise<void>;
deleteTask: (taskId: number) => Promise<void>;
mutateTags: () => void;
mutateAreas: () => void;
mutateNotes: () => void;
mutateProjects: () => void;
}
const DataContext = createContext<DataContextProps | undefined>(undefined);
export const useDataContext = () => {
const context = useContext(DataContext);
if (!context) {
throw new Error('useDataContext must be used within a DataProvider');
}
return context;
};
export const DataProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
const { tags, isLoading: isLoadingTags, isError: isErrorTags, mutate: mutateTags } = useFetchTags();
const { areas, isLoading: isLoadingAreas, isError: isErrorAreas, mutate: mutateAreas } = useFetchAreas();
const {
projects,
isLoading: isLoadingProjects,
isError: isErrorProjects,
mutate: mutateProjects,
} = useFetchProjects();
const { createProject, updateProject, deleteProject } = useManageProjects();
const { createTag, updateTag, deleteTag } = useManageTags();
const {
tasks,
isLoading: isLoadingTasks,
isError: isErrorTasks,
createTask,
updateTask,
deleteTask,
} = useManageTasks();
const {
notes,
isLoading: isLoadingNotes,
isError: isErrorNotes,
createNote,
updateNote,
deleteNote,
mutate: mutateNotes,
} = useManageNotes();
const isLoading = isLoadingTags || isLoadingAreas || isLoadingNotes || isLoadingTasks || isLoadingProjects;
const isError = isErrorTags || isErrorAreas || isErrorNotes || isErrorTasks || isErrorProjects;
return (
<DataContext.Provider
value={{
tasks,
tags,
areas,
notes,
projects,
isLoading,
isError,
createNote,
updateNote,
deleteNote,
createProject,
updateProject,
deleteProject,
createTag,
updateTag,
deleteTag,
createTask,
updateTask,
deleteTask,
mutateTags,
mutateAreas,
mutateNotes,
mutateProjects,
}}
>
{children}
</DataContext.Provider>
);
};