123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- // Composables
- import { useToggleScope } from "./toggleScope.mjs"; // Utilities
- import { computed, ref, toRaw, watch } from 'vue';
- import { getCurrentInstance, toKebabCase } from "../util/index.mjs"; // Types
- // Composables
- export function useProxiedModel(props, prop, defaultValue) {
- let transformIn = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : v => v;
- let transformOut = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : v => v;
- const vm = getCurrentInstance('useProxiedModel');
- const internal = ref(props[prop] !== undefined ? props[prop] : defaultValue);
- const kebabProp = toKebabCase(prop);
- const checkKebab = kebabProp !== prop;
- const isControlled = checkKebab ? computed(() => {
- void props[prop];
- return !!((vm.vnode.props?.hasOwnProperty(prop) || vm.vnode.props?.hasOwnProperty(kebabProp)) && (vm.vnode.props?.hasOwnProperty(`onUpdate:${prop}`) || vm.vnode.props?.hasOwnProperty(`onUpdate:${kebabProp}`)));
- }) : computed(() => {
- void props[prop];
- return !!(vm.vnode.props?.hasOwnProperty(prop) && vm.vnode.props?.hasOwnProperty(`onUpdate:${prop}`));
- });
- useToggleScope(() => !isControlled.value, () => {
- watch(() => props[prop], val => {
- internal.value = val;
- });
- });
- const model = computed({
- get() {
- const externalValue = props[prop];
- return transformIn(isControlled.value ? externalValue : internal.value);
- },
- set(internalValue) {
- const newValue = transformOut(internalValue);
- const value = toRaw(isControlled.value ? props[prop] : internal.value);
- if (value === newValue || transformIn(value) === internalValue) {
- return;
- }
- internal.value = newValue;
- vm?.emit(`update:${prop}`, newValue);
- }
- });
- Object.defineProperty(model, 'externalValue', {
- get: () => isControlled.value ? props[prop] : internal.value
- });
- return model;
- }
- //# sourceMappingURL=proxiedModel.mjs.map
|