UNPKG

@vuesax-alpha/nightly

Version:
147 lines (142 loc) 4.79 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var vue = require('vue'); var lodashUnified = require('lodash-unified'); require('../../../hooks/index.js'); require('../../../utils/index.js'); var tokens = require('./tokens.js'); var option = require('./option.js'); var pluginVue_exportHelper = require('../../../_virtual/plugin-vue_export-helper.js'); var index = require('../../../hooks/use-namespace/index.js'); var error = require('../../../utils/error.js'); var strings = require('../../../utils/strings.js'); const __default__ = vue.defineComponent({ name: "VsOption" }); const _sfc_main = vue.defineComponent({ ...__default__, props: option.optionProps, setup(__props) { const props = __props; const ns = index.useNamespace("select"); const value = vue.toRef(props, "value"); const select = vue.inject(tokens.selectContextKey); const selectRegister = vue.inject(tokens.selectRegisterKey); const optionGroupRegister = vue.inject(tokens.optionGroupRegisterKey, void 0); if (!select || !selectRegister) { error.throwError( "Select Option", "`Option` component must be called inside `select` or `option-group` component" ); } const selectGroup = vue.inject(tokens.optionGroupContextKey, { disabled: false }); const el = vue.ref(); const isObject = vue.computed(() => lodashUnified.isObject(props.value)); const limitReached = vue.computed(() => { if (select.multiple && select.multipleLimit) { const modelValue = select.selectedArray; return !isSelected.value && modelValue.length >= select.multipleLimit && select.multipleLimit > 0; } return false; }); const currentLabel = vue.computed(() => { return props.label || (isObject.value ? "" : `${props.value}`); }); const isDisabled = vue.computed(() => { return props.disabled || states.groupDisabled || limitReached.value; }); const isSelected = vue.computed(() => { return select.selectedArray.some((e) => e.value == states.value); }); const states = vue.reactive({ index: -1, el, value, currentLabel, isDisabled, groupDisabled: false, visible: true, hit: false, hover: false, created: props.created }); const { unregister, updateOption } = selectRegister(states); const { unregister: optionGroupUnregister } = (optionGroupRegister == null ? void 0 : optionGroupRegister(states)) || {}; vue.onBeforeUnmount(() => { unregister(); optionGroupUnregister == null ? void 0 : optionGroupUnregister(); }); const hoverItem = () => { if (!props.disabled && !selectGroup.disabled) { select.hoverIndex = select.optionsArray.indexOf(states); } }; vue.watch(currentLabel, () => { if (!props.created) select.setSelected(); }); vue.watch( () => props.value, (val, oldVal) => { if (!Object.is(val, oldVal)) { updateOption(states); } if (!props.created) select.setSelected(); } ); vue.watch( () => selectGroup.disabled, (val) => { states.groupDisabled = val; }, { immediate: true } ); vue.watch( () => select.queryChange, (query) => { const regexp = new RegExp(strings.escapeStringRegexp(`${query}`), "i"); states.visible = regexp.test(`${currentLabel.value}`) || props.created; if (!states.visible) { select.states.filteredOptionsCount--; } } ); const optionKls = vue.computed(() => [ ns.e("option"), ns.is("hover", states.hover), ns.is("active", isSelected.value), ns.is("disabled", isDisabled.value), ns.is("hidden", !states.visible) ]); const selectOptionClick = () => { if (props.disabled !== true && states.groupDisabled !== true) { select.handleOptionSelect(states, true); } }; return (_ctx, _cache) => { return vue.openBlock(), vue.createElementBlock( "button", { ref_key: "el", ref: el, class: vue.normalizeClass(optionKls.value), onMouseenter: hoverItem, onClick: selectOptionClick }, [ vue.renderSlot(_ctx.$slots, "default", {}, () => [ vue.createTextVNode( vue.toDisplayString(currentLabel.value), 1 ) ]) ], 34 ); }; } }); var Option = /* @__PURE__ */ pluginVue_exportHelper["default"](_sfc_main, [["__file", "/home/runner/work/vuesax-alpha/vuesax-alpha/packages/components/select/src/option.vue"]]); exports["default"] = Option; //# sourceMappingURL=option2.js.map