@alifd/adaptor-helper
Version:
Next adaptor utils
284 lines (234 loc) • 8.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.filterDemoState = exports.generateDemos = exports.getStates = exports.uuid = exports.findOptionLabel = exports.findProp = exports.getDefaultProps = exports.normalizeAdaptor = void 0;
var _stateMark = require("./state-mark");
var _types = _interopRequireDefault(require("./types"));
var _utils = require("./utils");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var normalizeOptions = function normalizeOptions() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
return options.filter(function (v) {
return !!v;
}).map(function (item) {
var value = item.value || item;
return {
value: value,
label: item.label || (0, _utils.toLabelWord)(value)
};
});
};
var normalizeProps = function normalizeProps() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
return props.filter(function (v) {
return !!v;
}).map(function (prop) {
return _objectSpread({}, prop, {
label: prop.label || (0, _utils.toLabelWord)(prop.name),
options: normalizeOptions(prop.options)
});
});
};
var normalizeAdaptor = function normalizeAdaptor(adaptor) {
if (!adaptor.name) {
console.error("[error] muse be have name:");
return adaptor;
}
var shape;
if (!adaptor.shape || !Array.isArray(adaptor.shape) || adaptor.shape.length < 1) {
shape = [{
label: adaptor.name,
value: "normal"
}];
} else {
shape = adaptor.shape.filter(function (v) {
return !!v;
}).map(function (item) {
var value = item.value || item;
return {
value: value,
label: item.label || "".concat((0, _utils.toLabelWord)(value), " ").concat(value === "normal" ? "" : adaptor.name)
};
});
}
var editor = function editor(s) {
var p = adaptor.editor ? adaptor.editor(s) : {};
if (!p.props) {
p.props = [];
}
if (!p.nodes) {
p.nodes = [];
}
return _objectSpread({}, p, {
props: normalizeProps(p.props),
nodes: normalizeProps(p.nodes)
});
};
var content = function content(s) {
var p = adaptor.content ? adaptor.content(s) : {};
return _objectSpread({}, p, {
options: normalizeProps(p.options)
});
};
return _objectSpread({}, adaptor, {
shape: shape,
editor: editor,
content: content
});
};
exports.normalizeAdaptor = normalizeAdaptor;
var getDefaultProps = function getDefaultProps(adaptor, shape) {
var p = adaptor.editor(shape);
var props = {
shape: shape,
data: p.data && p.data["default"] || ""
};
p.props.forEach(function (item) {
var defaultValue = item["default"];
if (defaultValue === undefined || defaultValue === null) {
switch (item.type) {
case _types["default"].string:
defaultValue = "";
break;
case _types["default"].number:
defaultValue = 0;
break;
case _types["default"].bool:
defaultValue = false;
break;
case _types["default"]["enum"]:
defaultValue = item.options ? item.options[0].value : "";
break;
default:
break;
}
}
props[item.name] = defaultValue;
});
p.nodes.forEach(function (_ref) {
var name = _ref.name,
defaultValue = _ref["default"];
props[name] = defaultValue;
});
return props;
};
exports.getDefaultProps = getDefaultProps;
var findProp = function findProp(name) {
var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
return props.find(function (item) {
return item.name === name;
});
};
exports.findProp = findProp;
var findOptionLabel = function findOptionLabel(value, name) {
var props = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var prop = findProp(name, props);
if (prop && prop.type === _types["default"]["enum"]) {
var option = (prop.options || []).find(function (item) {
return item.value === value;
});
return option ? option.label : value;
}
return "";
};
exports.findOptionLabel = findOptionLabel;
var index = 1;
var now = new Date().getTime();
var uuid = function uuid() {
return (now + index++).toString(16);
};
exports.uuid = uuid;
var getStates = function getStates() {
var dataOption = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
"default": ""
};
var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var stateMap = {
normal: true,
hover: !!dataOption.hover,
active: !!dataOption.active,
disabled: !!dataOption.disable
};
var states = dataOption.generate === false ? null : Object.keys(stateMap).filter(function (key) {
return stateMap[key];
});
var stateProp = findProp("state", props);
if (stateProp) {
states = (stateProp.options || []).map(function (_ref2) {
var value = _ref2.value;
return value;
});
}
return states || ["normal"];
};
exports.getStates = getStates;
var generateDemos = function generateDemos(adaptor) {
var demos = [];
adaptor.shape.forEach(function (_ref3) {
var value = _ref3.value;
var editor = adaptor.editor(value);
var sizeProp = findProp("size", editor.props);
var stateProp = findProp("state", editor.props);
var levelProp = findProp("level", editor.props);
var states = getStates(editor.data, editor.props);
var sizes = sizeProp && sizeProp.options ? sizeProp.options.map(function (_ref4) {
var v = _ref4.value;
return v;
}) : ["medium"];
var levels = levelProp && levelProp.options ? levelProp.options.map(function (_ref5) {
var v = _ref5.value;
return v;
}) : ["normal"];
states.forEach(function (state) {
sizes.forEach(function (size) {
levels.forEach(function (level) {
var props = _objectSpread({}, getDefaultProps(adaptor, value));
if (sizeProp) {
props.size = size;
}
if (levelProp) {
props.level = level;
}
if (states.length > 1) {
if (stateProp) {
props.state = state;
} else {
if (props.data && _stateMark.STATE_MARK[props.data.substring(0, 1)]) {
props.data = props.data.substring(1);
}
props.data = _stateMark.STATE_PREFIX_MARK[state] + props.data;
}
}
var demo = {
id: uuid(),
node: {
adaptor: adaptor.name,
props: props
}
};
demos.push(_objectSpread({}, demo, adaptor.demoOptions && adaptor.demoOptions(demo)));
});
});
});
});
return demos;
};
exports.generateDemos = generateDemos;
var filterDemoState = function filterDemoState(state) {
return function (_ref6) {
var node = _ref6.node;
var _node$props = node.props,
props = _node$props === void 0 ? {} : _node$props;
var _props$data = props.data,
data = _props$data === void 0 ? "" : _props$data;
var demoState = _stateMark.STATE_MARK[data.substring(0, 1)] || "normal";
if (props.state) {
demoState = props.state;
}
return demoState === state;
};
};
exports.filterDemoState = filterDemoState;