Files
manolia-alpha/node_modules/buetify/lib/composables/popupController/usePopupController.js
Robin COuret e0e50af706 init component
2026-02-16 17:28:37 +01:00

58 lines
1.5 KiB
JavaScript
Executable File

import { constVoid } from 'fp-ts/lib/function';
import { inject, shallowRef, onMounted, computed, watchEffect, toRef, onUnmounted } from 'vue';
import { getToggleAttrs, getUseTogglePropsDefinition, useToggle } from '../toggle';
import { FadeTransitionPropsDefinition } from '../transition';
import { DEFAULT_POPUP_CONTROLLER_INJECTION, POPUP_CONTROLLER_SYMBOL } from './providePopupController';
export const UsePopupControllerPropsDefinition = { ...FadeTransitionPropsDefinition,
...getUseTogglePropsDefinition('isActive')
};
export function usePopupController(props, render) {
const hasMounted = shallowRef(false);
onMounted(() => {
hasMounted.value = true;
});
let remove = constVoid;
const {
isOn,
setOn,
setOff,
toggle,
listeners
} = useToggle(props, 'isActive');
const {
showPopup
} = inject(POPUP_CONTROLLER_SYMBOL, DEFAULT_POPUP_CONTROLLER_INJECTION);
const isOpen = computed(() => {
return hasMounted.value && isOn.value;
});
const attrs = getToggleAttrs(isOpen, toRef(props, 'hasPopup'));
watchEffect(() => {
if (isOpen.value) {
remove();
remove = showPopup({
render: render.value,
transition: props.transition
});
} else {
remove();
remove = constVoid;
}
}, {
flush: 'sync'
});
onUnmounted(() => {
remove();
});
return {
isOpen,
attrs,
listeners,
props: computed(() => ({ ...attrs.value,
...listeners
})),
open: setOn,
close: setOff,
toggle: toggle
};
}
//# sourceMappingURL=usePopupController.js.map