UNPKG

vuestic-ui

Version:
59 lines (58 loc) 1.85 kB
import { ref, watch, computed } from "vue"; import { u as useUserProvidedProp, N as NOT_PROVIDED } from "./useUserProvidedProp.mjs"; const useStatefulProps = { stateful: { type: Boolean, default: false }, modelValue: { type: void 0 } }; const createStatefulProps = (statefulDefault = false) => { return { stateful: { type: Boolean, default: statefulDefault } }; }; const useStatefulEmits = ["update:modelValue"]; const useStateful = (props, emit, key = "modelValue", options = {}) => { const { eventName, defaultValue } = options; const event = eventName || `update:${key.toString()}`; const passedProp = useUserProvidedProp(key, props); const defaultValuePassed = "defaultValue" in options; const valueState = ref( passedProp.value === NOT_PROVIDED ? defaultValuePassed ? defaultValue : props[key] : passedProp.value ); let unwatchModelValue; const watchModelValue = () => { unwatchModelValue = watch(() => props[key], (modelValue) => { valueState.value = modelValue; }); }; watch(() => props.stateful, (stateful) => { stateful ? watchModelValue() : unwatchModelValue == null ? void 0 : unwatchModelValue(); }, { immediate: true }); const valueComputed = computed({ get: () => { if (props.stateful) { return valueState.value; } return props[key]; }, set: (value) => { if (props.stateful) { valueState.value = value; } emit(event, value); } }); Object.defineProperty(valueComputed, "stateful", { get: () => props.stateful }); Object.defineProperty(valueComputed, "userProvided", { get: () => passedProp.value !== NOT_PROVIDED }); return { valueComputed }; }; export { useStatefulEmits as a, useStateful as b, createStatefulProps as c, useStatefulProps as u }; //# sourceMappingURL=useStateful.mjs.map