UNPKG

@elacity-js/uikit

Version:

React / Material UI Design kit for Elacity project

53 lines (50 loc) 1.68 kB
import { jsx } from 'react/jsx-runtime'; import React__default from 'react'; const defaultValues = { theme: 'light', lang: (navigator.language || 'en').substr(0, 2), searchbar: false, sidebarMinimized: true, }; const AppSettingsContext = React__default.createContext({ appName: '', logo: { primary: '' }, values: defaultValues, setValues: () => { }, load: () => { }, }); const reducerFactory = (storage) => (state, action) => { switch (action.type) { case 'LOAD': return storage.toJSON(); case 'SET': return storage.set(action.payload).toJSON(); default: return state; } }; const AppSettingsProvider = ({ appName, logo: _logo, links, storage, children, }) => { const [values, dispatch] = React__default.useReducer(reducerFactory(storage), storage.toJSON()); const load = () => dispatch({ type: 'LOAD', }); const logo = Object.entries(_logo).reduce((l, [key, value]) => (Object.assign(Object.assign({}, l), { [key]: value === null || value === void 0 ? void 0 : value.replace('[theme]', values.theme) })), {}); const setValues = (payload) => dispatch({ type: 'SET', payload, }); React__default.useEffect(() => { load(); setValues(values); }, []); return (jsx(AppSettingsContext.Provider, Object.assign({ value: { appName, logo, links, values, setValues, load, } }, { children: children }))); }; export { AppSettingsProvider, AppSettingsContext as default, defaultValues }; //# sourceMappingURL=AppSettingsContext.js.map