@opentiny/vue-renderless
Version:
An enterprise-class UI component library, support both Vue.js 2 and Vue.js 3, as well as PC and mobile.
46 lines (45 loc) • 1.4 kB
JavaScript
import "../chunk-G2ADBYYC.js";
import { queryChange, observeCallback } from "./index";
const api = ["state", "queryChange"];
const renderless = (props, { onMounted, onBeforeUnmount, reactive, watch, inject }, { broadcast, vm }) => {
const select = inject("select");
const constants = select._constants;
const state = reactive({
visible: true,
timer: null
});
const api2 = {};
Object.assign(api2, {
state,
queryChange: queryChange({ select, state, vm }),
observeCallback: observeCallback({ state, api: api2 })
});
watch(
() => props.disabled,
(value) => {
broadcast(constants.COMPONENT_NAME.Option, constants.EVENT_NAME.handleGroupDisabled, value);
},
{ immediate: true }
);
onMounted(() => {
if (select.filterable) {
const config = { attributes: false, childList: true, subtree: false };
api2.observer = new MutationObserver(api2.observeCallback);
if (vm.$refs.selectGroup) {
api2.observer.observe(vm.$refs.selectGroup, config);
}
}
if (props.disabled) {
broadcast(constants.COMPONENT_NAME.Option, constants.EVENT_NAME.handleGroupDisabled, props.disabled);
}
select.state.selectEmitter.on(constants.EVENT_NAME.queryChange, api2.queryChange);
});
onBeforeUnmount(() => {
api2.observer && api2.observer.disconnect();
});
return api2;
};
export {
api,
renderless
};