@react-theming/storybook-addon
Version:
Develop themes and themable components with Emotion, Styled Components, Material-UI and your custom solution
103 lines (84 loc) • 3.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useThemes = exports.toThemes = exports.withThemes = void 0;
var _react = _interopRequireDefault(require("react"));
var _react2 = require("@storybook/react");
var _addonDevkit = require("@storybook/addon-devkit");
require("../config");
var _onThemeSwitch2 = require("./onThemeSwitch");
var _default = require("../utils/default");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var DecoratorUI = function DecoratorUI(ThemeProvider) {
return function (_ref) {
var getStory = _ref.getStory,
theme = _ref.theme,
themeInd = _ref.themeInd,
onThemeSwitch = _ref.onThemeSwitch;
_react.default.useEffect(function () {
(0, _onThemeSwitch2.handleOnSwitch)({
theme: theme,
onThemeSwitch: onThemeSwitch
});
}, [themeInd]);
return /*#__PURE__*/_react.default.createElement(ThemeProvider, {
theme: theme
}, getStory());
};
};
var withData = function withData(ThemeProvider, _ref2) {
var providerFn = _ref2.providerFn,
_onThemeSwitch = _ref2.onThemeSwitch;
var CurrentThemeProvider = ThemeProvider;
if (providerFn) {
CurrentThemeProvider = function CurrentThemeProvider(_ref3) {
var theme = _ref3.theme,
children = _ref3.children;
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, providerFn({
theme: theme,
children: children
}));
};
}
return (0, _addonDevkit.createDecorator)({
theme: function theme(store) {
return store.themesList[store.currentTheme || 0];
},
themeInd: function themeInd(store) {
return store.currentTheme;
},
onThemeSwitch: function onThemeSwitch() {
return _onThemeSwitch;
}
})(DecoratorUI(CurrentThemeProvider), {
isGlobal: true
});
};
var withThemes = function withThemes(ThemeProvider, themesList) {
var _ref4 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
providerFn = _ref4.providerFn,
_ref4$onThemeSwitch = _ref4.onThemeSwitch,
onThemeSwitch = _ref4$onThemeSwitch === void 0 ? _onThemeSwitch2.onThemeSwitchDefault : _ref4$onThemeSwitch,
_ref4$getCustomFieldS = _ref4.getCustomFieldSnippet,
getCustomFieldSnippet = _ref4$getCustomFieldS === void 0 ? _default.defaultSnippet : _ref4$getCustomFieldS,
_ref4$getCustomValueS = _ref4.getCustomValueSnippet,
getCustomValueSnippet = _ref4$getCustomValueS === void 0 ? _default.defaultColorSnippet : _ref4$getCustomValueS;
return withData(ThemeProvider, {
providerFn: providerFn,
onThemeSwitch: onThemeSwitch
})({
themesList: themesList,
currentTheme: null,
fieldSnippetFn: getCustomFieldSnippet,
colorSnippet: getCustomValueSnippet
});
};
exports.withThemes = withThemes;
var toThemes = (0, _addonDevkit.setParameters)();
exports.toThemes = toThemes;
var useThemes = function useThemes() {
(0, _react2.addDecorator)(withThemes.apply(void 0, arguments));
return toThemes;
};
exports.useThemes = useThemes;