amis
Version:
一种MIS页面生成工具
97 lines (96 loc) • 3.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
// 主题管理
var classnames_1 = tslib_1.__importDefault(require("classnames"));
var react_1 = tslib_1.__importDefault(require("react"));
var hoistNonReactStatic = require("hoist-non-react-statics");
var themes = {
default: {}
};
function theme(name, config) {
themes[name] = tslib_1.__assign({}, config);
}
exports.theme = theme;
var fns = {};
function makeClassnames(ns) {
if (ns && fns[ns]) {
return fns[ns];
}
var fn = function () {
var classes = [];
for (var _i = 0; _i < arguments.length; _i++) {
classes[_i] = arguments[_i];
}
var str = classnames_1.default.apply(void 0, classes);
return str && ns ? str.replace(/(^|\s)([A-Z])/g, '$1' + ns + '$2').replace(/(^|\s)\:/g, '$1') : str || '';
};
ns && (fns[ns] = fn);
return fn;
}
exports.makeClassnames = makeClassnames;
function hasTheme(theme) {
return !!themes[theme];
}
exports.hasTheme = hasTheme;
function setDefaultTheme(theme) {
if (hasTheme(theme)) {
exports.defaultTheme = theme;
}
}
exports.setDefaultTheme = setDefaultTheme;
function classnames() {
var _a;
var classes = [];
for (var _i = 0; _i < arguments.length; _i++) {
classes[_i] = arguments[_i];
}
return (_a = getTheme(exports.defaultTheme)).classnames.apply(_a, classes);
}
exports.classnames = classnames;
function getClassPrefix() {
return getTheme(exports.defaultTheme).classPrefix;
}
exports.getClassPrefix = getClassPrefix;
function getTheme(theme) {
if (!themes[theme]) {
throw new Error("Theme with name \"" + theme + "\" does not exist!");
}
var config = themes[theme];
if (!config.getRendererConfig) {
config.getRendererConfig = function (name) { return (config.renderers && name ? config.renderers[name] : null); };
}
if (!config.classnames) {
var ns = config.classPrefix;
config.classnames = config.classnames || makeClassnames(ns);
}
return config;
}
exports.getTheme = getTheme;
exports.ThemeContext = react_1.default.createContext('theme');
exports.defaultTheme = 'default';
function themeable(ComposedComponent) {
var EnhancedComponent = /** @class */ (function (_super) {
tslib_1.__extends(EnhancedComponent, _super);
function EnhancedComponent() {
return _super !== null && _super.apply(this, arguments) || this;
}
EnhancedComponent.prototype.render = function () {
var theme = this.props.theme || this.context || exports.defaultTheme;
var config = hasTheme(theme) ? getTheme(theme) : getTheme(exports.defaultTheme);
var injectedProps = {
classPrefix: config.classPrefix,
classnames: config.classnames
};
return (react_1.default.createElement(exports.ThemeContext.Provider, { value: theme },
react_1.default.createElement(ComposedComponent, tslib_1.__assign({}, this.props /* todo, 解决这个类型问题 */, injectedProps))));
};
EnhancedComponent.displayName = "Themeable(" + (ComposedComponent.displayName || ComposedComponent.name) + ")";
EnhancedComponent.contextType = exports.ThemeContext;
EnhancedComponent.ComposedComponent = ComposedComponent;
return EnhancedComponent;
}(react_1.default.Component));
return hoistNonReactStatic(EnhancedComponent, ComposedComponent);
}
exports.themeable = themeable;
//# sourceMappingURL=./theme.js.map