@steroidsjs/core 3.0.0-beta.54 → 3.0.0-beta.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/hooks/index.d.ts +1 -1
- package/hooks/index.js +2 -2
- package/hooks/useApplication.d.ts +2 -0
- package/hooks/useApplication.js +4 -0
- package/hooks/useTheme.d.ts +2 -8
- package/hooks/useTheme.js +6 -38
- package/package.json +1 -1
- package/providers/ThemeProvider.d.ts +14 -0
- package/providers/ThemeProvider.js +62 -0
- package/ui/form/SwitcherField/SwitcherField.js +4 -1
package/hooks/index.d.ts
CHANGED
|
@@ -17,5 +17,5 @@ import useScreen from './useScreen';
|
|
|
17
17
|
import useSelector from './useSelector';
|
|
18
18
|
import useSsr from './useSsr';
|
|
19
19
|
import useUniqueId from './useUniqueId';
|
|
20
|
-
import
|
|
20
|
+
import useTheme from './useTheme';
|
|
21
21
|
export { useAbsolutePositioning, useAddressBar, useApplication, useBem, useComponents, useDataProvider, useDataSelect, useDispatch, useFetch, useFile, useForm, useInitial, useLayout, useList, useModel, useScreen, useSelector, useSsr, useUniqueId, useTheme, };
|
package/hooks/index.js
CHANGED
|
@@ -42,5 +42,5 @@ var useSsr_1 = __importDefault(require("./useSsr"));
|
|
|
42
42
|
exports.useSsr = useSsr_1["default"];
|
|
43
43
|
var useUniqueId_1 = __importDefault(require("./useUniqueId"));
|
|
44
44
|
exports.useUniqueId = useUniqueId_1["default"];
|
|
45
|
-
var useTheme_1 = require("./useTheme");
|
|
46
|
-
exports.useTheme = useTheme_1
|
|
45
|
+
var useTheme_1 = __importDefault(require("./useTheme"));
|
|
46
|
+
exports.useTheme = useTheme_1["default"];
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
+
import { IThemeProviderProps } from '../providers/ThemeProvider';
|
|
2
3
|
import ClientStorageComponent from '../components/ClientStorageComponent';
|
|
3
4
|
import HtmlComponent from '../components/HtmlComponent';
|
|
4
5
|
import StoreComponent from '../components/StoreComponent';
|
|
@@ -28,6 +29,7 @@ export interface IApplicationHookConfig {
|
|
|
28
29
|
layoutView?: () => CustomView;
|
|
29
30
|
layoutProps?: Record<string, unknown>;
|
|
30
31
|
screen?: Omit<IScreenProviderProps, 'children'>;
|
|
32
|
+
theme?: Omit<IThemeProviderProps, 'children'>;
|
|
31
33
|
routerProps?: IRouterProps;
|
|
32
34
|
/**
|
|
33
35
|
* These fetch configurations will be used to preload and store for no matter what route matched in case of SSR
|
package/hooks/useApplication.js
CHANGED
|
@@ -53,6 +53,7 @@ var React = __importStar(require("react"));
|
|
|
53
53
|
var react_redux_1 = require("react-redux");
|
|
54
54
|
var merge_1 = __importDefault(require("lodash-es/merge"));
|
|
55
55
|
var react_1 = require("react");
|
|
56
|
+
var ThemeProvider_1 = __importDefault(require("../providers/ThemeProvider"));
|
|
56
57
|
var ClientStorageComponent_1 = __importDefault(require("../components/ClientStorageComponent"));
|
|
57
58
|
var HtmlComponent_1 = __importDefault(require("../components/HtmlComponent"));
|
|
58
59
|
var StoreComponent_1 = __importDefault(require("../components/StoreComponent"));
|
|
@@ -131,6 +132,9 @@ function useApplication(config) {
|
|
|
131
132
|
if (config.screen) {
|
|
132
133
|
content = (React.createElement(ScreenProvider_1["default"], __assign({}, config.screen), content));
|
|
133
134
|
}
|
|
135
|
+
if (config.theme) {
|
|
136
|
+
content = (React.createElement(ThemeProvider_1["default"], __assign({}, config.theme), content));
|
|
137
|
+
}
|
|
134
138
|
if (!(useGlobal || process.env.IS_SSR)) {
|
|
135
139
|
content = (React.createElement(ComponentsProvider_1["default"], { components: components }, content));
|
|
136
140
|
}
|
package/hooks/useTheme.d.ts
CHANGED
|
@@ -1,8 +1,2 @@
|
|
|
1
|
-
import
|
|
2
|
-
export
|
|
3
|
-
export declare const DARK_THEME = "dark";
|
|
4
|
-
export declare const useTheme: (themes?: string[], themeStorageKey?: string) => {
|
|
5
|
-
theme: any;
|
|
6
|
-
setTheme: React.Dispatch<any>;
|
|
7
|
-
toggleTheme: () => void;
|
|
8
|
-
};
|
|
1
|
+
import { ITheme } from '../providers/ThemeProvider';
|
|
2
|
+
export default function useTheme(): ITheme;
|
package/hooks/useTheme.js
CHANGED
|
@@ -1,40 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
exports.__esModule = true;
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
exports.LIGHT_THEME,
|
|
13
|
-
exports.DARK_THEME,
|
|
14
|
-
];
|
|
15
|
-
var DEFAULT_THEME_STORAGE_KEY = 'theme';
|
|
16
|
-
var useTheme = function (themes, themeStorageKey) {
|
|
17
|
-
if (themes === void 0) { themes = DEFAULT_THEMES; }
|
|
18
|
-
if (themeStorageKey === void 0) { themeStorageKey = DEFAULT_THEME_STORAGE_KEY; }
|
|
19
|
-
var clientStorage = (0, useComponents_1["default"])().clientStorage;
|
|
20
|
-
var _a = react_1["default"].useState(clientStorage.get(themeStorageKey) || themes[0]), theme = _a[0], setTheme = _a[1];
|
|
21
|
-
var toggleTheme = react_1["default"].useCallback(function () {
|
|
22
|
-
var themesExpectedCount = 2;
|
|
23
|
-
if (themes.length !== themesExpectedCount) {
|
|
24
|
-
throw new Error('toggleTheme callback can only be used if the number of themes is two');
|
|
25
|
-
}
|
|
26
|
-
var lightTheme = themes[0];
|
|
27
|
-
var darkTheme = themes[1];
|
|
28
|
-
setTheme(theme === lightTheme ? darkTheme : lightTheme);
|
|
29
|
-
}, [themes, theme]);
|
|
30
|
-
react_1["default"].useEffect(function () {
|
|
31
|
-
document.querySelector('html').setAttribute('data-theme', theme);
|
|
32
|
-
clientStorage.set(themeStorageKey, theme);
|
|
33
|
-
}, [theme, clientStorage, themeStorageKey]);
|
|
34
|
-
return {
|
|
35
|
-
theme: theme,
|
|
36
|
-
setTheme: setTheme,
|
|
37
|
-
toggleTheme: toggleTheme
|
|
38
|
-
};
|
|
39
|
-
};
|
|
40
|
-
exports.useTheme = useTheme;
|
|
3
|
+
var react_1 = require("react");
|
|
4
|
+
var ThemeProvider_1 = require("../providers/ThemeProvider");
|
|
5
|
+
function useTheme() {
|
|
6
|
+
return (0, react_1.useContext)(ThemeProvider_1.ThemeContext);
|
|
7
|
+
}
|
|
8
|
+
exports["default"] = useTheme;
|
package/package.json
CHANGED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface ITheme {
|
|
3
|
+
theme: string;
|
|
4
|
+
toggleTheme: VoidFunction;
|
|
5
|
+
setTheme: React.Dispatch<any>;
|
|
6
|
+
}
|
|
7
|
+
export interface IThemeProviderProps extends React.PropsWithChildren<any> {
|
|
8
|
+
themes?: string[];
|
|
9
|
+
themeStorageKey?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const LIGHT_THEME = "light";
|
|
12
|
+
export declare const DARK_THEME = "dark";
|
|
13
|
+
export declare const ThemeContext: React.Context<ITheme>;
|
|
14
|
+
export default function ThemeProvider(props: IThemeProviderProps): JSX.Element;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
exports.__esModule = true;
|
|
26
|
+
exports.ThemeContext = exports.DARK_THEME = exports.LIGHT_THEME = void 0;
|
|
27
|
+
var React = __importStar(require("react"));
|
|
28
|
+
var hooks_1 = require("../hooks");
|
|
29
|
+
exports.LIGHT_THEME = 'light';
|
|
30
|
+
exports.DARK_THEME = 'dark';
|
|
31
|
+
var DEFAULT_THEMES = [
|
|
32
|
+
exports.LIGHT_THEME,
|
|
33
|
+
exports.DARK_THEME,
|
|
34
|
+
];
|
|
35
|
+
var DEFAULT_THEME_STORAGE_KEY = 'theme';
|
|
36
|
+
exports.ThemeContext = React.createContext({});
|
|
37
|
+
function ThemeProvider(props) {
|
|
38
|
+
var themes = props.themes || DEFAULT_THEMES;
|
|
39
|
+
var themeStorageKey = props.themeStorageKey || DEFAULT_THEME_STORAGE_KEY;
|
|
40
|
+
var clientStorage = (0, hooks_1.useComponents)().clientStorage;
|
|
41
|
+
var _a = React.useState(clientStorage.get(themeStorageKey) || themes[0]), theme = _a[0], setTheme = _a[1];
|
|
42
|
+
var toggleTheme = React.useCallback(function () {
|
|
43
|
+
var themesExpectedCount = 2;
|
|
44
|
+
if (themes.length !== themesExpectedCount) {
|
|
45
|
+
throw new Error('toggleTheme callback can only be used if the number of themes is two');
|
|
46
|
+
}
|
|
47
|
+
var lightTheme = themes[0];
|
|
48
|
+
var darkTheme = themes[1];
|
|
49
|
+
setTheme(theme === lightTheme ? darkTheme : lightTheme);
|
|
50
|
+
}, [theme, themes]);
|
|
51
|
+
React.useEffect(function () {
|
|
52
|
+
document.querySelector('html').setAttribute('data-theme', theme);
|
|
53
|
+
clientStorage.set(themeStorageKey, theme);
|
|
54
|
+
}, [theme, clientStorage, themeStorageKey]);
|
|
55
|
+
var value = React.useMemo(function () { return ({
|
|
56
|
+
theme: theme,
|
|
57
|
+
toggleTheme: toggleTheme,
|
|
58
|
+
setTheme: setTheme
|
|
59
|
+
}); }, [theme, toggleTheme]);
|
|
60
|
+
return (React.createElement(exports.ThemeContext.Provider, { value: value }, props.children));
|
|
61
|
+
}
|
|
62
|
+
exports["default"] = ThemeProvider;
|
|
@@ -71,8 +71,11 @@ function SwitcherField(props) {
|
|
|
71
71
|
var _a;
|
|
72
72
|
if (!(0, isEqual_1["default"])(prevSelectedIds, selectedIds)) {
|
|
73
73
|
props.input.onChange.call(null, (_a = selectedIds[0]) !== null && _a !== void 0 ? _a : null);
|
|
74
|
+
if (props.onChange) {
|
|
75
|
+
props.onChange(selectedIds);
|
|
76
|
+
}
|
|
74
77
|
}
|
|
75
|
-
}, [selectedIds, props.input.onChange, prevSelectedIds]);
|
|
78
|
+
}, [selectedIds, props.input.onChange, prevSelectedIds, props, items]);
|
|
76
79
|
return components.ui.renderView(props.view || 'form.SwitcherFieldView', __assign(__assign({}, props), { items: items, inputProps: inputProps, hoveredId: hoveredId, selectedIds: selectedIds, onItemHover: onItemHover, onItemSelect: onItemSelect }));
|
|
77
80
|
}
|
|
78
81
|
SwitcherField.defaultProps = {
|