Alias Manager

This commit is contained in:
Kuchenpirat 2025-07-30 10:33:05 +00:00
commit 8a68278290
2 changed files with 56 additions and 76 deletions

View file

@ -33,7 +33,7 @@
</div> </div>
</template> </template>
<script lang="ts"> <script setup lang="ts">
import { whenever } from "@vueuse/core"; import { whenever } from "@vueuse/core";
import { validators } from "~/composables/use-validators"; import { validators } from "~/composables/use-validators";
import type { IngredientFood, IngredientUnit } from "~/lib/api/types/recipe"; import type { IngredientFood, IngredientUnit } from "~/lib/api/types/recipe";
@ -42,56 +42,47 @@ export interface GenericAlias {
name: string; name: string;
} }
export default defineNuxtComponent({ interface Props {
props: { data: IngredientFood | IngredientUnit;
modelValue: { }
type: Boolean,
default: false,
},
data: {
type: Object as () => IngredientFood | IngredientUnit,
required: true,
},
},
emits: ["submit", "update:modelValue", "cancel"],
setup(props, context) {
// V-Model Support
const dialog = computed({
get: () => {
return props.modelValue;
},
set: (val) => {
context.emit("update:modelValue", val);
},
});
function createAlias() { const props = defineProps<Props>();
const emit = defineEmits<{
submit: [aliases: GenericAlias[]];
cancel: [];
}>();
// V-Model Support
const dialog = defineModel<boolean>({ default: false });
function createAlias() {
aliases.value.push({ aliases.value.push({
name: "", name: "",
}); });
} }
function deleteAlias(index: number) { function deleteAlias(index: number) {
aliases.value.splice(index, 1); aliases.value.splice(index, 1);
} }
const aliases = ref<GenericAlias[]>(props.data.aliases || []); const aliases = ref<GenericAlias[]>(props.data.aliases || []);
function initAliases() { function initAliases() {
aliases.value = [...props.data.aliases || []]; aliases.value = [...props.data.aliases || []];
if (!aliases.value.length) { if (!aliases.value.length) {
createAlias(); createAlias();
} }
} }
initAliases(); initAliases();
whenever( whenever(
() => props.modelValue, () => dialog.value,
() => { () => {
initAliases(); initAliases();
}, },
); );
function saveAliases() { function saveAliases() {
const seenAliasNames: string[] = []; const seenAliasNames: string[] = [];
const keepAliases: GenericAlias[] = []; const keepAliases: GenericAlias[] = [];
aliases.value.forEach((alias) => { aliases.value.forEach((alias) => {
@ -111,17 +102,6 @@ export default defineNuxtComponent({
}); });
aliases.value = keepAliases; aliases.value = keepAliases;
context.emit("submit", keepAliases); emit("submit", keepAliases);
} }
return {
aliases,
createAlias,
dialog,
deleteAlias,
saveAliases,
validators,
};
},
});
</script> </script>

View file

@ -93,7 +93,7 @@
<!-- Alias Sub-Dialog --> <!-- Alias Sub-Dialog -->
<RecipeDataAliasManagerDialog <RecipeDataAliasManagerDialog
v-if="editTarget" v-if="editTarget"
:value="aliasManagerDialog" v-model="aliasManagerDialog"
:data="editTarget" :data="editTarget"
can-submit can-submit
@submit="updateUnitAlias" @submit="updateUnitAlias"