inula/packages/inula-code-generator/inula-code-generator-web/frontend/components/contexts/SettingContext.tsx

97 lines
2.8 KiB
TypeScript

import { createContext, ReactNode, useState, useEffect, useRef } from 'react';
import {GeneratedCodeConfig, Settings} from '../types'
interface settingContextType {
settings: Settings;
setSettings: (newState: Settings) => void;
initCreate: boolean;
setInitCreate: (newState: boolean) => void;
initCreateText: string;
setInitCreateText: (newState: string) => void;
}
const initialValue = {
settings: {
openAiApiKey: '',
openAiBaseURL: null,
isImageGenerationEnabled: true,
generatedCodeConfig: GeneratedCodeConfig.REACT_ANTD,
init: false,
llm: 'openai',
anthropicApiKey: '',
anthropicBaseURL: null,
useCVModel: false,
},
initCreate: false,
setSettings: () => {},
setInitCreate: (newState: boolean) => {},
initCreateText: '',
setInitCreateText: (newState: string) => {},
}
export const SettingContext = createContext<settingContextType>(initialValue);
export default function SettingProvider({ children }: { children: ReactNode }) {
const [settings, setSettingsStatus] = useState<Settings>(initialValue.settings);
const [first, setFirst] = useState<boolean>(true);
const [initCreate, setInitCreateStatus] = useState<boolean>(false);
const [initCreateText, setInitCreateTextStatus] = useState<string>('');
function setSettings(newState: Settings) {
setSettingsStatus(newState);
}
useEffect(() => {
if (first) {
const value = window.localStorage.getItem('setting');
const initCreateTextValue = window.localStorage.getItem('initCreateText');
if (value) {
const valueObj = JSON.parse(value)
valueObj.init = true;
setSettingsStatus(valueObj);
}
if (initCreateTextValue) {
const valueObj = JSON.parse(initCreateTextValue);
if (valueObj && valueObj.initCreateText) {
setInitCreateTextStatus(valueObj.initCreateText);
}
}
setFirst(false);
} else {
window.localStorage.setItem('setting', JSON.stringify(settings));
window.localStorage.setItem('initCreateText', JSON.stringify({
initCreateText,
}));
}
}, [
settings,
first,
initCreateText,
]);
function setInitCreate (newState: boolean) {
setInitCreateStatus(newState)
}
function setInitCreateText(newState: string) {
setInitCreateTextStatus(newState);
}
return (
<SettingContext.Provider
value={{
settings,
setSettings,
initCreate,
setInitCreate,
initCreateText,
setInitCreateText,
}}
>
{children}
</SettingContext.Provider>
);
}