UNPKG

@sms-frontend/components

Version:

SMS Design React UI Library.

146 lines (145 loc) 5.55 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var isEqualWith_1 = __importDefault(require("lodash/isEqualWith")); var is_1 = require("../../_util/is"); var node_1 = __importDefault(require("./node")); var Store = /** @class */ (function () { function Store(options, value, config) { var _this = this; this.nodes = []; this.flatNodes = []; this.config = {}; // 初始化节点状态,附加状态信息字段: _checked,_halfChecked,parent,disabled this._calcNodes = function (options, parent) { if (!options) { return []; } return options.map(function (option, index) { return new node_1.default(__assign(__assign({}, option), { _index: index }), _this.config, parent); }); }; // this.flatNodes 保存所有可能的选中项 this._updateFlatNodes = function () { var leafOnly = !_this.config.changeOnSelect; _this.flatNodes = []; var traversal = function (option) { if (!option) return; if (!leafOnly || option.isLeaf) { _this.flatNodes.push(option); } if ((0, is_1.isArray)(option.children)) { option.children.forEach(function (x) { traversal(x); }); } }; _this.nodes.forEach(function (node) { traversal(node); }); }; /** * values: 全部的选中值 * 根据values更新节点状态。不包含在values的节点都设置为未选中状态 * @memberof Store */ this.setNodeCheckedByValue = function (initValues) { var values = initValues || []; // 根据value设置节点初始选中状态 _this.flatNodes.forEach(function (node) { if (values.some(function (item) { return (0, isEqualWith_1.default)(node.pathValue, item); })) { node.setCheckedStateIgnoreDisabled(true); } else { node.setCheckedStateIgnoreDisabled(false); } }); }; /** * 为当前节点插入子节点。动态加载时候用到 */ this.appendOptionChildren = function (node, children) { if (children && node) { // const checked = node._checked; // node.setCheckedProperty(false); var options = _this._calcNodes(children, node); node.children = options; _this._updateFlatNodes(); if (_this.config.changeOnSelect) { // node.setCheckedProperty(checked); } else { node.setCheckedState(false); } } }; /** * 通过 value 查找对应的node节点。 * value: 是路径节点的value组成的数组 */ this.findNodeByValue = function (value) { var targetNode = null; if (!value || !value.length) { return targetNode; } _this.flatNodes.some(function (node) { if ((0, isEqualWith_1.default)(node.pathValue, value)) { targetNode = node; } }); return targetNode; }; /** * 搜索所有label含有关键字的节点 */ this.searchNodeByLabel = function (inputStr) { if (!inputStr) { return _this.flatNodes; } var filterOption = _this.config.filterOption; var filterMethod = (0, is_1.isFunction)(filterOption) ? filterOption : function (inputValue, node) { return (0, is_1.isString)(node.label) && node.label.indexOf(inputValue) > -1; }; return _this.flatNodes.filter(function (item) { var pathNodes = item.getPathNodes(); return pathNodes.some(function (node) { return filterMethod(inputStr, node._data); }); }); }; /** 获取所有节点 */ this.getOptions = function () { return _this.nodes; }; /** 获取所有选中状态的节点。 */ this.getCheckedNodes = function () { return _this.flatNodes.filter(function (node) { return node._checked; }); }; this.config = __assign({}, config); var values = Array.isArray(value) ? value : []; this.nodes = this._calcNodes(options, null); // 根据nodes获取选中值 this._updateFlatNodes(); this.setNodeCheckedByValue(values); } return Store; }()); exports.default = Store;