| 
									
										
										
										
											2022-06-09 18:01:25 +02:00
										 |  |  | <template> | 
					
						
							|  |  |  |   <div> | 
					
						
							|  |  |  |     <div class="text-center d-flex align-center"> | 
					
						
							|  |  |  |       <div> | 
					
						
							| 
									
										
										
										
											2022-06-19 10:27:32 -08:00
										 |  |  |         <v-menu v-model="menu" :disabled="!editScale" offset-y top nudge-top="6" :close-on-content-click="false"> | 
					
						
							| 
									
										
										
										
											2022-06-09 18:01:25 +02:00
										 |  |  |           <template #activator="{ on, attrs }"> | 
					
						
							|  |  |  |             <v-card class="pa-1 px-2" dark color="secondary darken-1" small v-bind="attrs" v-on="on"> | 
					
						
							|  |  |  |               <span v-if="!recipeYield"> x {{ scale }} </span> | 
					
						
							| 
									
										
										
										
											2024-10-01 16:31:04 +02:00
										 |  |  |               <div v-else-if="!numberParsed && recipeYield"> | 
					
						
							|  |  |  |                 <span v-if="numerator === 1"> {{ recipeYield }} </span> | 
					
						
							|  |  |  |                 <span v-else> {{ numerator }}x {{ scaledYield }} </span> | 
					
						
							|  |  |  |               </div> | 
					
						
							|  |  |  |               <span v-else> {{ scaledYield }} </span> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-09 18:01:25 +02:00
										 |  |  |             </v-card> | 
					
						
							|  |  |  |           </template> | 
					
						
							|  |  |  |           <v-card min-width="300px"> | 
					
						
							|  |  |  |             <v-card-title class="mb-0"> | 
					
						
							| 
									
										
										
										
											2024-10-01 16:31:04 +02:00
										 |  |  |               {{ $t("recipe.servings") }} | 
					
						
							| 
									
										
										
										
											2022-06-09 18:01:25 +02:00
										 |  |  |             </v-card-title> | 
					
						
							|  |  |  |             <v-card-text class="mt-n5"> | 
					
						
							|  |  |  |               <div class="mt-4 d-flex align-center"> | 
					
						
							| 
									
										
										
										
											2024-10-01 16:31:04 +02:00
										 |  |  |                 <v-text-field v-model="numerator" type="number" :min="0" hide-spin-buttons /> | 
					
						
							| 
									
										
										
										
											2022-06-09 18:01:25 +02:00
										 |  |  |                 <v-tooltip right color="secondary darken-1"> | 
					
						
							|  |  |  |                   <template #activator="{ on, attrs }"> | 
					
						
							|  |  |  |                     <v-btn v-bind="attrs" icon class="mx-1" small v-on="on" @click="scale = 1"> | 
					
						
							|  |  |  |                       <v-icon> | 
					
						
							|  |  |  |                         {{ $globals.icons.undo }} | 
					
						
							|  |  |  |                       </v-icon> | 
					
						
							|  |  |  |                     </v-btn> | 
					
						
							|  |  |  |                   </template> | 
					
						
							| 
									
										
										
										
											2024-10-01 16:31:04 +02:00
										 |  |  |                   <span> {{ $t("recipe.reset-servings-count") }} </span> | 
					
						
							| 
									
										
										
										
											2022-06-09 18:01:25 +02:00
										 |  |  |                 </v-tooltip> | 
					
						
							|  |  |  |               </div> | 
					
						
							|  |  |  |             </v-card-text> | 
					
						
							|  |  |  |           </v-card> | 
					
						
							|  |  |  |         </v-menu> | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |       <BaseButtonGroup | 
					
						
							| 
									
										
										
										
											2022-06-19 10:27:32 -08:00
										 |  |  |         v-if="editScale" | 
					
						
							| 
									
										
										
										
											2022-06-09 18:01:25 +02:00
										 |  |  |         class="pl-2" | 
					
						
							|  |  |  |         :large="false" | 
					
						
							|  |  |  |         :buttons="[ | 
					
						
							|  |  |  |           { | 
					
						
							|  |  |  |             icon: $globals.icons.minus, | 
					
						
							| 
									
										
										
										
											2024-10-01 16:31:04 +02:00
										 |  |  |             text: $tc('recipe.decrease-scale-label'), | 
					
						
							| 
									
										
										
										
											2022-06-09 18:01:25 +02:00
										 |  |  |             event: 'decrement', | 
					
						
							| 
									
										
										
										
											2024-10-01 16:31:04 +02:00
										 |  |  |             disabled: disableDecrement, | 
					
						
							| 
									
										
										
										
											2022-06-09 18:01:25 +02:00
										 |  |  |           }, | 
					
						
							|  |  |  |           { | 
					
						
							|  |  |  |             icon: $globals.icons.createAlt, | 
					
						
							| 
									
										
										
										
											2024-10-01 16:31:04 +02:00
										 |  |  |             text: $tc('recipe.increase-scale-label'), | 
					
						
							| 
									
										
										
										
											2022-06-09 18:01:25 +02:00
										 |  |  |             event: 'increment', | 
					
						
							|  |  |  |           }, | 
					
						
							|  |  |  |         ]" | 
					
						
							| 
									
										
										
										
											2024-10-01 16:31:04 +02:00
										 |  |  |         @decrement="numerator--" | 
					
						
							|  |  |  |         @increment="numerator++" | 
					
						
							| 
									
										
										
										
											2022-06-09 18:01:25 +02:00
										 |  |  |       /> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  |   </div> | 
					
						
							|  |  |  | </template> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <script lang="ts"> | 
					
						
							| 
									
										
										
										
											2024-10-01 16:31:04 +02:00
										 |  |  | import { defineComponent, ref, computed, watch  } from "@nuxtjs/composition-api"; | 
					
						
							| 
									
										
										
										
											2022-06-09 18:01:25 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | export default defineComponent({ | 
					
						
							|  |  |  |   props: { | 
					
						
							|  |  |  |     recipeYield: { | 
					
						
							|  |  |  |       type: String, | 
					
						
							|  |  |  |       default: null, | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2024-10-01 16:31:04 +02:00
										 |  |  |     scaledYield: { | 
					
						
							| 
									
										
										
										
											2022-06-09 18:01:25 +02:00
										 |  |  |       type: String, | 
					
						
							|  |  |  |       default: null, | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2024-10-01 16:31:04 +02:00
										 |  |  |     basicYieldNum: { | 
					
						
							|  |  |  |       type: Number, | 
					
						
							| 
									
										
										
										
											2022-06-09 18:01:25 +02:00
										 |  |  |       default: null, | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     editScale: { | 
					
						
							|  |  |  |       type: Boolean, | 
					
						
							|  |  |  |       default: false, | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     value: { | 
					
						
							|  |  |  |       type: Number, | 
					
						
							|  |  |  |       required: true, | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   setup(props, { emit }) { | 
					
						
							| 
									
										
										
										
											2024-10-01 16:31:04 +02:00
										 |  |  |     const menu = ref<boolean>(false); | 
					
						
							| 
									
										
										
										
											2022-06-09 18:01:25 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     const scale = computed({ | 
					
						
							|  |  |  |       get: () => props.value, | 
					
						
							|  |  |  |       set: (value) => { | 
					
						
							|  |  |  |         const newScaleNumber = parseFloat(`${value}`); | 
					
						
							|  |  |  |         emit("input", isNaN(newScaleNumber) ? 0 : newScaleNumber); | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-01 16:31:04 +02:00
										 |  |  |     const numerator = ref<number>(parseFloat(props.basicYieldNum.toFixed(3)) ?? 1); | 
					
						
							|  |  |  |     const denominator = parseFloat(props.basicYieldNum.toFixed(32)) ?? 1; | 
					
						
							|  |  |  |     const numberParsed = !!props.basicYieldNum; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     watch(() => numerator.value, () => { | 
					
						
							|  |  |  |       scale.value = parseFloat((numerator.value / denominator).toFixed(3)); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |     const disableDecrement = computed(() => { | 
					
						
							|  |  |  |       return numerator.value <= 1; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-09 18:01:25 +02:00
										 |  |  |     return { | 
					
						
							| 
									
										
										
										
											2024-10-01 16:31:04 +02:00
										 |  |  |       menu, | 
					
						
							| 
									
										
										
										
											2022-06-09 18:01:25 +02:00
										 |  |  |       scale, | 
					
						
							| 
									
										
										
										
											2024-10-01 16:31:04 +02:00
										 |  |  |       numerator, | 
					
						
							|  |  |  |       disableDecrement, | 
					
						
							|  |  |  |       numberParsed, | 
					
						
							| 
									
										
										
										
											2022-06-09 18:01:25 +02:00
										 |  |  |     }; | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | </script> |