element-plus
Version:
A Component Library for Vue 3
57 lines (52 loc) • 1.89 kB
JavaScript
Object.defineProperty(exports, '__esModule', { value: true });
var vue = require('vue');
require('../../../utils/index.js');
var shared = require('@vue/shared');
var ElOptions = vue.defineComponent({
name: "ElOptions",
emits: ["update-options"],
setup(_, { slots, emit }) {
let cachedOptions = [];
function isSameOptions(a, b) {
if (a.length !== b.length)
return false;
for (const [index] of a.entries()) {
if (a[index] != b[index]) {
return false;
}
}
return true;
}
return () => {
var _a, _b;
const children = (_a = slots.default) == null ? void 0 : _a.call(slots);
const filteredOptions = [];
function filterOptions(children2) {
if (!Array.isArray(children2))
return;
children2.forEach((item) => {
var _a2, _b2, _c, _d;
const name = (_a2 = (item == null ? void 0 : item.type) || {}) == null ? void 0 : _a2.name;
if (name === "ElOptionGroup") {
filterOptions(!shared.isString(item.children) && !Array.isArray(item.children) && shared.isFunction((_b2 = item.children) == null ? void 0 : _b2.default) ? (_c = item.children) == null ? void 0 : _c.default() : item.children);
} else if (name === "ElOption") {
filteredOptions.push((_d = item.props) == null ? void 0 : _d.label);
} else if (Array.isArray(item.children)) {
filterOptions(item.children);
}
});
}
if (children.length) {
filterOptions((_b = children[0]) == null ? void 0 : _b.children);
}
if (!isSameOptions(filteredOptions, cachedOptions)) {
cachedOptions = filteredOptions;
emit("update-options", filteredOptions);
}
return children;
};
}
});
exports["default"] = ElOptions;
//# sourceMappingURL=options.js.map
;