axonhub-chat / frontend /src /features /models /context /models-context.tsx
llzai's picture
Upload 1793 files
9853396 verified
Raw
History Blame Contribute Delete
2.45 kB
import React, { createContext, useContext, useState, useCallback, useMemo } from 'react';
import { Model } from '../data/schema';
type DialogType =
| 'create'
| 'batchCreate'
| 'edit'
| 'delete'
| 'archive'
| 'association'
| 'settings'
| 'bulkEnable'
| 'bulkDisable'
| 'unassociated'
| null;
interface ModelsContextType {
open: DialogType;
setOpen: (open: DialogType) => void;
currentRow: Model | null;
setCurrentRow: (row: Model | null) => void;
selectedModels: Model[];
setSelectedModels: (models: Model[]) => void;
resetRowSelection: (() => void) | null;
setResetRowSelection: (fn: (() => void) | null) => void;
}
const ModelsContext = createContext<ModelsContextType | undefined>(undefined);
export function ModelsProvider({ children }: { children: React.ReactNode }) {
const [open, setOpen] = useState<DialogType>(null);
const [currentRow, setCurrentRow] = useState<Model | null>(null);
const [selectedModels, setSelectedModels] = useState<Model[]>([]);
const [resetRowSelection, setResetRowSelection] = useState<(() => void) | null>(null);
const handleSetOpen = useCallback((newOpen: DialogType) => {
setOpen(newOpen);
}, []);
const handleSetCurrentRow = useCallback((row: Model | null) => {
setCurrentRow(row);
}, []);
const handleSetSelectedModels = useCallback((models: Model[]) => {
setSelectedModels(models);
}, []);
const handleSetResetRowSelection = useCallback((fn: (() => void) | null) => {
setResetRowSelection(() => fn);
}, []);
const value = useMemo(
() => ({
open,
setOpen: handleSetOpen,
currentRow,
setCurrentRow: handleSetCurrentRow,
selectedModels,
setSelectedModels: handleSetSelectedModels,
resetRowSelection,
setResetRowSelection: handleSetResetRowSelection,
}),
[
open,
handleSetOpen,
currentRow,
handleSetCurrentRow,
selectedModels,
handleSetSelectedModels,
resetRowSelection,
handleSetResetRowSelection,
]
);
return <ModelsContext.Provider value={value}>{children}</ModelsContext.Provider>;
}
export function useModels() {
const context = useContext(ModelsContext);
if (context === undefined) {
throw new Error('useModels must be used within a ModelsProvider');
}
return context;
}
export default ModelsProvider;