import { DEFAULT_SETTINGS } from "@/constants"; import CopilotPlugin from "@/main"; import { CopilotSettings } from "@/settings/SettingsPage"; import React, { createContext, useCallback, useContext, useState } from "react"; interface SettingsContextType { settings: CopilotSettings; updateSettings: (newSettings: Partial) => void; saveSettings: () => Promise; resetSettings: () => Promise; reloadPlugin: () => Promise; } const SettingsContext = createContext(undefined); export const SettingsProvider: React.FC<{ plugin: CopilotPlugin; reloadPlugin: () => Promise; children: React.ReactNode; }> = ({ plugin, reloadPlugin, children }) => { const [settings, setSettings] = useState(plugin.settings); const updateSettings = useCallback( async (newSettings: Partial) => { const updatedSettings = { ...settings, ...newSettings }; setSettings(updatedSettings); plugin.settings = updatedSettings; await plugin.saveSettings(); }, [plugin, settings] ); const saveSettings = useCallback(async () => { await plugin.saveSettings(); await reloadPlugin(); }, [plugin, reloadPlugin]); const resetSettings = useCallback(async () => { plugin.settings = DEFAULT_SETTINGS; setSettings(DEFAULT_SETTINGS); await plugin.saveSettings(); await reloadPlugin(); }, [plugin]); return ( {children} ); }; export const useSettingsContext = () => { const context = useContext(SettingsContext); if (context === undefined) { throw new Error("useSettingsContext must be used within a SettingsProvider"); } return context; };