feat: context factory

This commit is contained in:
2025-08-26 16:11:40 +04:00
parent 5b5c2fe230
commit 31bd888357
7 changed files with 71 additions and 185 deletions

View File

@ -1,9 +1,10 @@
"use client";
import React, { createContext, FC, useContext, useState } from "react";
import React, { useState } from "react";
import { ProjectsCrud, useProjectsCrud } from "@/hooks/cruds/useProjectsCrud";
import useProjectsList from "@/hooks/lists/useProjectsList";
import { ProjectSchema } from "@/lib/client";
import makeContext from "@/lib/contextFactory/contextFactory";
type ProjectsContextState = {
selectedProject: ProjectSchema | null;
@ -13,11 +14,7 @@ type ProjectsContextState = {
projectsCrud: ProjectsCrud;
};
const ProjectsContext = createContext<ProjectsContextState | undefined>(
undefined
);
const useProjectsContextState = () => {
const useProjectsContextState = (): ProjectsContextState => {
const {
projects,
setProjects,
@ -49,28 +46,5 @@ const useProjectsContextState = () => {
};
};
type ProjectsContextProviderProps = {
children: React.ReactNode;
};
export const ProjectsContextProvider: FC<ProjectsContextProviderProps> = ({
children,
}) => {
const state = useProjectsContextState();
return (
<ProjectsContext.Provider value={state}>
{children}
</ProjectsContext.Provider>
);
};
export const useProjectsContext = () => {
const context = useContext(ProjectsContext);
if (!context) {
throw new Error(
"useProjectsContext must be used within a ProjectsContextProvider"
);
}
return context;
};
export const [ProjectsContextProvider, useProjectsContext] =
makeContext<ProjectsContextState>(useProjectsContextState, "Projects");