vuestic-ui
Version:
Vue 3 UI Framework
59 lines (58 loc) • 1.85 kB
JavaScript
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