RecipePageInfoEditor use v-model instead of prop and turn into script setup

This commit is contained in:
Kuchenpirat 2025-06-19 09:42:42 +00:00
commit e76b158379
2 changed files with 33 additions and 48 deletions

View file

@ -28,7 +28,7 @@
data management and mutation system we're using.
-->
<div>
<RecipePageInfoEditor v-if="isEditMode" :recipe="recipe" :landscape="landscape" />
<RecipePageInfoEditor v-if="isEditMode" v-model="recipe" />
</div>
<div>
<RecipePageEditorToolbar v-if="isEditForm" v-model="recipe" />

View file

@ -79,22 +79,16 @@
</div>
</template>
<script lang="ts">
<script setup lang="ts">
import { validators } from "~/composables/use-validators";
import type { NoUndefinedField } from "~/lib/api/types/non-generated";
import type { Recipe } from "~/lib/api/types/recipe";
export default defineNuxtComponent({
props: {
recipe: {
type: Object as () => NoUndefinedField<Recipe>,
required: true,
},
},
setup(props) {
const recipe = defineModel<NoUndefinedField<Recipe>>({ required: true });
const recipeServings = computed<number>({
get() {
return props.recipe.recipeServings;
return recipe.value.recipeServings;
},
set(val) {
validateInput(val.toString(), "recipeServings");
@ -103,7 +97,7 @@ export default defineNuxtComponent({
const recipeYieldQuantity = computed<number>({
get() {
return props.recipe.recipeYieldQuantity;
return recipe.value.recipeYieldQuantity;
},
set(val) {
validateInput(val.toString(), "recipeYieldQuantity");
@ -112,25 +106,16 @@ export default defineNuxtComponent({
function validateInput(value: string | null, property: "recipeServings" | "recipeYieldQuantity") {
if (!value) {
props.recipe[property] = 0;
recipe.value[property] = 0;
return;
}
const number = parseFloat(value.replace(/[^0-9.]/g, ""));
if (isNaN(number) || number <= 0) {
props.recipe[property] = 0;
recipe.value[property] = 0;
return;
}
props.recipe[property] = number;
recipe.value[property] = number;
}
return {
validators,
recipeServings,
recipeYieldQuantity,
validateInput,
};
},
});
</script>