@elacity-js/uikit
Version:
React / Material UI Design kit for Elacity project
53 lines (50 loc) • 1.68 kB
JavaScript
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