diff --git a/front/composables/modelWrapper.ts b/front/composables/modelWrapper.ts new file mode 100644 index 0000000..74afa3d --- /dev/null +++ b/front/composables/modelWrapper.ts @@ -0,0 +1,26 @@ +import { computed, getCurrentInstance } from "vue" + +export function useModel( + propName = "modelValue", + options: { type?: "object" | "array" } = {} +) { + const vm = getCurrentInstance().proxy + + let valueToSet + if (options.type === "object") { + valueToSet = (value: object) => { + return { ...value } + } + } else if (options.type === "array") { + valueToSet = (value: any[]) => [...value] + } else valueToSet = (value) => value + + return computed({ + get() { + return vm.$props[propName] + }, + set(value) { + vm.$emit(`update:${propName}`, valueToSet(value)) + }, + }) +}