dograh/ui/src/context/AppConfigContext.tsx

68 lines
1.8 KiB
TypeScript
Raw Normal View History

'use client';
import { createContext, ReactNode, useContext, useEffect, useState } from 'react';
interface AppConfig {
uiVersion: string;
apiVersion: string;
deploymentMode: string;
authProvider: string;
turnEnabled: boolean;
forceTurnRelay: boolean;
}
interface AppConfigContextType {
config: AppConfig | null;
loading: boolean;
}
const defaultConfig: AppConfig = {
uiVersion: 'dev',
apiVersion: 'unknown',
deploymentMode: 'oss',
authProvider: 'local',
turnEnabled: false,
forceTurnRelay: false,
};
const AppConfigContext = createContext<AppConfigContextType>({
config: null,
loading: true,
});
export function AppConfigProvider({ children }: { children: ReactNode }) {
const [config, setConfig] = useState<AppConfig | null>(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetch('/api/config/version')
.then((res) => res.json())
.then((data) => {
setConfig({
uiVersion: data.ui || 'dev',
apiVersion: data.api || 'unknown',
deploymentMode: data.deploymentMode || 'oss',
authProvider: data.authProvider || 'local',
turnEnabled: Boolean(data.turnEnabled),
forceTurnRelay: Boolean(data.forceTurnRelay),
});
})
.catch(() => {
setConfig(defaultConfig);
})
.finally(() => {
setLoading(false);
});
}, []);
return (
<AppConfigContext.Provider value={{ config, loading }}>
{children}
</AppConfigContext.Provider>
);
}
export function useAppConfig() {
return useContext(AppConfigContext);
}