| 
									
										
										
										
											2022-08-27 10:44:58 -08:00
										 |  |  | <template> | 
					
						
							|  |  |  |   <div> | 
					
						
							| 
									
										
										
										
											2024-11-20 08:46:27 -06:00
										 |  |  |     <RecipePageInfoCard :recipe="recipe" :recipe-scale="recipeScale" :landscape="landscape" /> | 
					
						
							|  |  |  |     <v-divider /> | 
					
						
							| 
									
										
										
										
											2022-08-27 10:44:58 -08:00
										 |  |  |     <RecipeActionMenu | 
					
						
							| 
									
										
										
										
											2022-08-28 20:08:33 -08:00
										 |  |  |       :recipe="recipe" | 
					
						
							| 
									
										
										
										
											2022-08-27 10:44:58 -08:00
										 |  |  |       :slug="recipe.slug" | 
					
						
							| 
									
										
										
										
											2022-12-30 16:47:35 -06:00
										 |  |  |       :recipe-scale="recipeScale" | 
					
						
							| 
									
										
										
										
											2024-08-31 21:54:10 -05:00
										 |  |  |       :can-edit="canEditRecipe" | 
					
						
							| 
									
										
										
										
											2022-08-27 10:44:58 -08:00
										 |  |  |       :name="recipe.name" | 
					
						
							| 
									
										
										
										
											2023-11-05 19:07:02 -06:00
										 |  |  |       :logged-in="isOwnGroup" | 
					
						
							| 
									
										
										
										
											2022-08-27 10:44:58 -08:00
										 |  |  |       :open="isEditMode" | 
					
						
							|  |  |  |       :recipe-id="recipe.id" | 
					
						
							|  |  |  |       class="ml-auto mt-n8 pb-4" | 
					
						
							|  |  |  |       @close="setMode(PageMode.VIEW)" | 
					
						
							|  |  |  |       @json="toggleEditMode()" | 
					
						
							|  |  |  |       @edit="setMode(PageMode.EDIT)" | 
					
						
							|  |  |  |       @save="$emit('save')" | 
					
						
							|  |  |  |       @delete="$emit('delete')" | 
					
						
							|  |  |  |       @print="printRecipe" | 
					
						
							|  |  |  |     /> | 
					
						
							|  |  |  |   </div> | 
					
						
							|  |  |  | </template> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <script lang="ts"> | 
					
						
							| 
									
										
										
										
											2023-12-14 20:26:43 -06:00
										 |  |  | import { defineComponent, useContext, computed, ref, watch } from "@nuxtjs/composition-api"; | 
					
						
							| 
									
										
										
										
											2023-11-05 19:07:02 -06:00
										 |  |  | import { useLoggedInState } from "~/composables/use-logged-in-state"; | 
					
						
							| 
									
										
										
										
											2024-08-31 21:54:10 -05:00
										 |  |  | import { useRecipePermissions } from "~/composables/recipes"; | 
					
						
							| 
									
										
										
										
											2024-11-20 08:46:27 -06:00
										 |  |  | import RecipePageInfoCard from "~/components/Domain/Recipe/RecipePage/RecipePageParts/RecipePageInfoCard.vue"; | 
					
						
							| 
									
										
										
										
											2022-08-27 10:44:58 -08:00
										 |  |  | import RecipeActionMenu from "~/components/Domain/Recipe/RecipeActionMenu.vue"; | 
					
						
							| 
									
										
										
										
											2024-09-17 10:48:14 -05:00
										 |  |  | import { useStaticRoutes, useUserApi  } from "~/composables/api"; | 
					
						
							|  |  |  | import { HouseholdSummary } from "~/lib/api/types/household"; | 
					
						
							| 
									
										
										
										
											2022-10-22 11:51:07 -08:00
										 |  |  | import { Recipe } from "~/lib/api/types/recipe"; | 
					
						
							|  |  |  | import { NoUndefinedField } from "~/lib/api/types/non-generated"; | 
					
						
							| 
									
										
										
										
											2022-08-27 10:44:58 -08:00
										 |  |  | import { usePageState, usePageUser, PageMode, EditorMode } from "~/composables/recipe-page/shared-state"; | 
					
						
							|  |  |  | export default defineComponent({ | 
					
						
							|  |  |  |   components: { | 
					
						
							| 
									
										
										
										
											2024-11-20 08:46:27 -06:00
										 |  |  |     RecipePageInfoCard, | 
					
						
							| 
									
										
										
										
											2022-08-27 10:44:58 -08:00
										 |  |  |     RecipeActionMenu, | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   props: { | 
					
						
							|  |  |  |     recipe: { | 
					
						
							|  |  |  |       type: Object as () => NoUndefinedField<Recipe>, | 
					
						
							|  |  |  |       required: true, | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2022-12-30 16:47:35 -06:00
										 |  |  |     recipeScale: { | 
					
						
							|  |  |  |       type: Number, | 
					
						
							|  |  |  |       default: 1, | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2022-08-27 10:44:58 -08:00
										 |  |  |     landscape: { | 
					
						
							|  |  |  |       type: Boolean, | 
					
						
							|  |  |  |       default: false, | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   setup(props) { | 
					
						
							| 
									
										
										
										
											2023-12-14 20:26:43 -06:00
										 |  |  |     const { $vuetify } = useContext(); | 
					
						
							| 
									
										
										
										
											2022-08-27 10:44:58 -08:00
										 |  |  |     const { recipeImage } = useStaticRoutes(); | 
					
						
							|  |  |  |     const { imageKey, pageMode, editMode, setMode, toggleEditMode, isEditMode } = usePageState(props.recipe.slug); | 
					
						
							|  |  |  |     const { user } = usePageUser(); | 
					
						
							| 
									
										
										
										
											2023-11-05 19:07:02 -06:00
										 |  |  |     const { isOwnGroup } = useLoggedInState(); | 
					
						
							| 
									
										
										
										
											2024-09-17 10:48:14 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     const recipeHousehold = ref<HouseholdSummary>(); | 
					
						
							|  |  |  |     if (user) { | 
					
						
							|  |  |  |       const userApi = useUserApi(); | 
					
						
							| 
									
										
										
										
											2024-09-22 09:59:20 -05:00
										 |  |  |       userApi.households.getOne(props.recipe.householdId).then(({ data }) => { | 
					
						
							| 
									
										
										
										
											2024-09-17 10:48:14 -05:00
										 |  |  |         recipeHousehold.value = data || undefined; | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     const { canEditRecipe } = useRecipePermissions(props.recipe, recipeHousehold, user); | 
					
						
							| 
									
										
										
										
											2023-11-05 19:07:02 -06:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-27 10:44:58 -08:00
										 |  |  |     function printRecipe() { | 
					
						
							| 
									
										
										
										
											2022-08-28 20:08:33 -08:00
										 |  |  |       window.print(); | 
					
						
							| 
									
										
										
										
											2022-08-27 10:44:58 -08:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const hideImage = ref(false); | 
					
						
							|  |  |  |     const imageHeight = computed(() => { | 
					
						
							|  |  |  |       return $vuetify.breakpoint.xs ? "200" : "400"; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-28 20:08:33 -08:00
										 |  |  |     const recipeImageUrl = computed(() => { | 
					
						
							|  |  |  |       return recipeImage(props.recipe.id, props.recipe.image, imageKey.value); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     watch( | 
					
						
							|  |  |  |       () => recipeImageUrl.value, | 
					
						
							|  |  |  |       () => { | 
					
						
							|  |  |  |         hideImage.value = false; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-27 10:44:58 -08:00
										 |  |  |     return { | 
					
						
							| 
									
										
										
										
											2023-11-05 19:07:02 -06:00
										 |  |  |       isOwnGroup, | 
					
						
							| 
									
										
										
										
											2022-08-27 10:44:58 -08:00
										 |  |  |       setMode, | 
					
						
							|  |  |  |       toggleEditMode, | 
					
						
							|  |  |  |       recipeImage, | 
					
						
							| 
									
										
										
										
											2024-08-31 21:54:10 -05:00
										 |  |  |       canEditRecipe, | 
					
						
							| 
									
										
										
										
											2022-08-27 10:44:58 -08:00
										 |  |  |       imageKey, | 
					
						
							|  |  |  |       user, | 
					
						
							|  |  |  |       PageMode, | 
					
						
							|  |  |  |       pageMode, | 
					
						
							|  |  |  |       EditorMode, | 
					
						
							|  |  |  |       editMode, | 
					
						
							|  |  |  |       printRecipe, | 
					
						
							|  |  |  |       imageHeight, | 
					
						
							|  |  |  |       hideImage, | 
					
						
							|  |  |  |       isEditMode, | 
					
						
							| 
									
										
										
										
											2022-08-28 20:08:33 -08:00
										 |  |  |       recipeImageUrl, | 
					
						
							| 
									
										
										
										
											2022-08-27 10:44:58 -08:00
										 |  |  |     }; | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | </script> |