@reown/appkit-controllers
Version:
#### 🔗 [Website](https://reown.com/appkit)
58 lines • 2.23 kB
JavaScript
import { proxy, snapshot, subscribe as sub } from 'valtio/vanilla';
import { getW3mThemeVariables } from '@reown/appkit-common';
import { withErrorBoundary } from '../utils/withErrorBoundary.js';
import { ConnectorController } from './ConnectorController.js';
// -- State --------------------------------------------- //
const state = proxy({
themeMode: 'dark',
themeVariables: {},
w3mThemeVariables: undefined
});
// -- Controller ---------------------------------------- //
const controller = {
state,
subscribe(callback) {
return sub(state, () => callback(state));
},
setThemeMode(themeMode) {
state.themeMode = themeMode;
try {
const authConnector = ConnectorController.getAuthConnector();
if (authConnector) {
const themeVariables = controller.getSnapshot().themeVariables;
authConnector.provider.syncTheme({
themeMode,
themeVariables,
w3mThemeVariables: getW3mThemeVariables(themeVariables, themeMode)
});
}
}
catch {
// eslint-disable-next-line no-console
console.info('Unable to sync theme to auth connector');
}
},
setThemeVariables(themeVariables) {
state.themeVariables = { ...state.themeVariables, ...themeVariables };
try {
const authConnector = ConnectorController.getAuthConnector();
if (authConnector) {
const themeVariablesSnapshot = controller.getSnapshot().themeVariables;
authConnector.provider.syncTheme({
themeVariables: themeVariablesSnapshot,
w3mThemeVariables: getW3mThemeVariables(state.themeVariables, state.themeMode)
});
}
}
catch {
// eslint-disable-next-line no-console
console.info('Unable to sync theme to auth connector');
}
},
getSnapshot() {
return snapshot(state);
}
};
// Export the controller wrapped with our error boundary
export const ThemeController = withErrorBoundary(controller);
//# sourceMappingURL=ThemeController.js.map