ingredients

This commit is contained in:
Kuchenpirat 2025-07-30 11:48:24 +00:00
commit c67acbd5c5

View file

@ -53,42 +53,32 @@
</div> </div>
</template> </template>
<script lang="ts"> <script setup lang="ts">
import RecipeIngredientListItem from "./RecipeIngredientListItem.vue"; import RecipeIngredientListItem from "./RecipeIngredientListItem.vue";
import { parseIngredientText } from "~/composables/recipes"; import { parseIngredientText } from "~/composables/recipes";
import type { RecipeIngredient } from "~/lib/api/types/recipe"; import type { RecipeIngredient } from "~/lib/api/types/recipe";
export default defineNuxtComponent({ interface Props {
components: { RecipeIngredientListItem }, value?: RecipeIngredient[];
props: { disableAmount?: boolean;
value: { scale?: number;
type: Array as () => RecipeIngredient[], isCookMode?: boolean;
default: () => [], }
}, const props = withDefaults(defineProps<Props>(), {
disableAmount: { value: () => [],
type: Boolean, disableAmount: false,
default: false, scale: 1,
}, isCookMode: false,
scale: { });
type: Number,
default: 1, function validateTitle(title?: string | null) {
},
isCookMode: {
type: Boolean,
default: false,
},
},
setup(props) {
function validateTitle(title?: string) {
return !(title === undefined || title === "" || title === null); return !(title === undefined || title === "" || title === null);
} }
const state = reactive({ const checked = ref(props.value.map(() => false));
checked: props.value.map(() => false), const showTitleEditor = computed(() => props.value.map(x => validateTitle(x.title)));
showTitleEditor: computed(() => props.value.map(x => validateTitle(x.title))),
});
const ingredientCopyText = computed(() => { const ingredientCopyText = computed(() => {
const components: string[] = []; const components: string[] = [];
props.value.forEach((ingredient) => { props.value.forEach((ingredient) => {
if (ingredient.title) { if (ingredient.title) {
@ -103,21 +93,13 @@ export default defineNuxtComponent({
}); });
return components.join("\n"); return components.join("\n");
}); });
function toggleChecked(index: number) { function toggleChecked(index: number) {
// TODO Find a better way to do this - $set is not available, and // TODO Find a better way to do this - $set is not available, and
// direct array modifications are not propagated for some reason // direct array modifications are not propagated for some reason
state.checked.splice(index, 1, !state.checked[index]); checked.value.splice(index, 1, !checked.value[index]);
} }
return {
...toRefs(state),
ingredientCopyText,
toggleChecked,
};
},
});
</script> </script>
<style> <style>