mirror of
https://github.com/hay-kot/mealie.git
synced 2025-08-21 22:13:31 -07:00
Alias Manager
This commit is contained in:
parent
1cb1a0552b
commit
8a68278290
2 changed files with 56 additions and 76 deletions
|
@ -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,86 +42,66 @@ 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>();
|
||||||
aliases.value.push({
|
|
||||||
name: "",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function deleteAlias(index: number) {
|
const emit = defineEmits<{
|
||||||
aliases.value.splice(index, 1);
|
submit: [aliases: GenericAlias[]];
|
||||||
}
|
cancel: [];
|
||||||
|
}>();
|
||||||
|
|
||||||
const aliases = ref<GenericAlias[]>(props.data.aliases || []);
|
// V-Model Support
|
||||||
function initAliases() {
|
const dialog = defineModel<boolean>({ default: false });
|
||||||
aliases.value = [...props.data.aliases || []];
|
|
||||||
if (!aliases.value.length) {
|
|
||||||
createAlias();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
function createAlias() {
|
||||||
|
aliases.value.push({
|
||||||
|
name: "",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function deleteAlias(index: number) {
|
||||||
|
aliases.value.splice(index, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const aliases = ref<GenericAlias[]>(props.data.aliases || []);
|
||||||
|
function initAliases() {
|
||||||
|
aliases.value = [...props.data.aliases || []];
|
||||||
|
if (!aliases.value.length) {
|
||||||
|
createAlias();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
initAliases();
|
||||||
|
whenever(
|
||||||
|
() => dialog.value,
|
||||||
|
() => {
|
||||||
initAliases();
|
initAliases();
|
||||||
whenever(
|
},
|
||||||
() => props.modelValue,
|
);
|
||||||
() => {
|
|
||||||
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) => {
|
||||||
if (
|
if (
|
||||||
!alias.name
|
!alias.name
|
||||||
|| alias.name === props.data.name
|
|| alias.name === props.data.name
|
||||||
|| alias.name === props.data.pluralName
|
|| alias.name === props.data.pluralName
|
||||||
|| alias.name === props.data.abbreviation
|
|| alias.name === props.data.abbreviation
|
||||||
|| alias.name === props.data.pluralAbbreviation
|
|| alias.name === props.data.pluralAbbreviation
|
||||||
|| seenAliasNames.includes(alias.name)
|
|| seenAliasNames.includes(alias.name)
|
||||||
) {
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
keepAliases.push(alias);
|
|
||||||
seenAliasNames.push(alias.name);
|
|
||||||
});
|
|
||||||
|
|
||||||
aliases.value = keepAliases;
|
|
||||||
context.emit("submit", keepAliases);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
keepAliases.push(alias);
|
||||||
aliases,
|
seenAliasNames.push(alias.name);
|
||||||
createAlias,
|
});
|
||||||
dialog,
|
|
||||||
deleteAlias,
|
aliases.value = keepAliases;
|
||||||
saveAliases,
|
emit("submit", keepAliases);
|
||||||
validators,
|
}
|
||||||
};
|
|
||||||
},
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue