Files
Crm-Frontend/src/app/module-editor/[moduleId]/contexts/ModuleEditorContext.tsx

72 lines
2.0 KiB
TypeScript

"use client";
import { useEffect } from "react";
import { redirect } from "next/navigation";
import { useQuery } from "@tanstack/react-query";
import useAttributesActions, {
AttributesActions,
} from "@/app/module-editor/[moduleId]/hooks/useAttributesActions";
import useAttributesList from "@/app/module-editor/[moduleId]/hooks/useAttributesList";
import useModulesActions, {
ModulesActions,
} from "@/app/module-editor/[moduleId]/hooks/useModulesActions";
import { AttributeSchema, ModuleWithAttributesSchema } from "@/lib/client";
import { getModuleWithAttributesOptions } from "@/lib/client/@tanstack/react-query.gen";
import makeContext from "@/lib/contextFactory/contextFactory";
type ModuleEditorContextState = {
module?: ModuleWithAttributesSchema;
refetchModule: () => void;
attributes: AttributeSchema[];
refetchAttributes: () => void;
attributeActions: AttributesActions;
moduleActions: ModulesActions;
};
type Props = {
moduleId: number;
};
const useModuleEditorContextState = ({
moduleId,
}: Props): ModuleEditorContextState => {
const { data, refetch: refetchModule } = useQuery(
getModuleWithAttributesOptions({ path: { pk: moduleId } })
);
const module = data?.entity;
const { attributes, refetch: refetchAttributes } = useAttributesList();
useEffect(() => {
if (module?.isBuiltIn) {
redirect("modules");
}
}, [module]);
const attributeActions = useAttributesActions({
module,
refetchModule,
refetchAttributes,
});
const moduleActions = useModulesActions({
module,
refetchModule,
});
return {
module,
refetchModule,
attributes,
refetchAttributes,
attributeActions,
moduleActions,
};
};
export const [ModuleEditorContextProvider, useModuleEditorContext] =
makeContext<ModuleEditorContextState, Props>(
useModuleEditorContextState,
"ModuleEditor"
);