| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  | <template> | 
					
						
							|  |  |  |   <div> | 
					
						
							|  |  |  |     <v-text-field | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |       v-if="model.title || showTitle" | 
					
						
							|  |  |  |       v-model="model.title" | 
					
						
							|  |  |  |       density="compact" | 
					
						
							|  |  |  |       variant="underlined" | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |       hide-details | 
					
						
							| 
									
										
										
										
											2021-10-30 15:46:44 -08:00
										 |  |  |       class="mx-1 mt-3 mb-4" | 
					
						
							| 
									
										
										
										
											2022-08-10 07:12:45 +02:00
										 |  |  |       :placeholder="$t('recipe.section-title')" | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |       style="max-width: 500px" | 
					
						
							| 
									
										
										
										
											2022-09-25 15:00:45 -08:00
										 |  |  |       @click="$emit('clickIngredientField', 'title')" | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |     /> | 
					
						
							|  |  |  |     <v-row | 
					
						
							|  |  |  |       :no-gutters="mdAndUp" | 
					
						
							|  |  |  |       dense | 
					
						
							|  |  |  |       class="d-flex flex-wrap my-1" | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |     > | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |       <v-col | 
					
						
							|  |  |  |         sm="12" | 
					
						
							|  |  |  |         md="2" | 
					
						
							|  |  |  |         cols="12" | 
					
						
							|  |  |  |         class="flex-grow-0 flex-shrink-0" | 
					
						
							|  |  |  |       > | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |         <v-text-field | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |           v-model="model.quantity" | 
					
						
							|  |  |  |           variant="solo" | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |           hide-details | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |           density="compact" | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |           type="number" | 
					
						
							| 
									
										
										
										
											2022-08-10 07:12:45 +02:00
										 |  |  |           :placeholder="$t('recipe.quantity')" | 
					
						
							| 
									
										
										
										
											2022-05-22 11:16:23 -08:00
										 |  |  |           @keypress="quantityFilter" | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |         > | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |           <template #prepend> | 
					
						
							|  |  |  |             <v-icon | 
					
						
							|  |  |  |               class="mr-n1 handle" | 
					
						
							|  |  |  |             > | 
					
						
							|  |  |  |               {{ $globals.icons.arrowUpDown }} | 
					
						
							|  |  |  |             </v-icon> | 
					
						
							|  |  |  |           </template> | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |         </v-text-field> | 
					
						
							|  |  |  |       </v-col> | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |       <v-col | 
					
						
							|  |  |  |         sm="12" | 
					
						
							|  |  |  |         md="3" | 
					
						
							|  |  |  |         cols="12" | 
					
						
							|  |  |  |       > | 
					
						
							| 
									
										
										
										
											2021-08-27 20:05:02 -08:00
										 |  |  |         <v-autocomplete | 
					
						
							| 
									
										
										
										
											2024-05-22 16:58:16 -05:00
										 |  |  |           ref="unitAutocomplete" | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |           v-model="model.unit" | 
					
						
							|  |  |  |           v-model:search="unitSearch" | 
					
						
							| 
									
										
										
										
											2023-03-23 09:21:22 -08:00
										 |  |  |           auto-select-first | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |           hide-details | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |           density="compact" | 
					
						
							|  |  |  |           variant="solo" | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |           return-object | 
					
						
							| 
									
										
										
										
											2022-05-11 17:14:03 -08:00
										 |  |  |           :items="units || []" | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |           item-title="name" | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |           class="mx-1" | 
					
						
							| 
									
										
										
										
											2022-08-10 07:12:45 +02:00
										 |  |  |           :placeholder="$t('recipe.choose-unit')" | 
					
						
							| 
									
										
										
										
											2022-03-03 19:43:56 -09:00
										 |  |  |           clearable | 
					
						
							| 
									
										
										
										
											2021-11-06 14:32:55 -08:00
										 |  |  |           @keyup.enter="handleUnitEnter" | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |         > | 
					
						
							| 
									
										
										
										
											2025-07-29 16:53:33 -05:00
										 |  |  |           <template #prepend> | 
					
						
							|  |  |  |             <v-tooltip v-if="unitError" location="bottom"> | 
					
						
							|  |  |  |               <template #activator="{ props: unitTooltipProps }"> | 
					
						
							|  |  |  |                 <v-icon | 
					
						
							|  |  |  |                   v-bind="unitTooltipProps" | 
					
						
							|  |  |  |                   class="ml-2 mr-n3 opacity-100" | 
					
						
							|  |  |  |                   color="primary" | 
					
						
							|  |  |  |                 > | 
					
						
							|  |  |  |                   {{ $globals.icons.alert }} | 
					
						
							|  |  |  |                 </v-icon> | 
					
						
							|  |  |  |               </template> | 
					
						
							|  |  |  |               <span v-if="unitErrorTooltip"> | 
					
						
							|  |  |  |                 {{ unitErrorTooltip }} | 
					
						
							|  |  |  |               </span> | 
					
						
							|  |  |  |             </v-tooltip> | 
					
						
							|  |  |  |           </template> | 
					
						
							| 
									
										
										
										
											2021-11-06 14:32:55 -08:00
										 |  |  |           <template #no-data> | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |             <div class="caption text-center pb-2"> | 
					
						
							|  |  |  |               {{ $t("recipe.press-enter-to-create") }} | 
					
						
							|  |  |  |             </div> | 
					
						
							| 
									
										
										
										
											2021-11-06 14:32:55 -08:00
										 |  |  |           </template> | 
					
						
							| 
									
										
										
										
											2021-10-30 15:46:44 -08:00
										 |  |  |           <template #append-item> | 
					
						
							|  |  |  |             <div class="px-2"> | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |               <BaseButton | 
					
						
							|  |  |  |                 block | 
					
						
							|  |  |  |                 size="small" | 
					
						
							|  |  |  |                 @click="createAssignUnit()" | 
					
						
							|  |  |  |               /> | 
					
						
							| 
									
										
										
										
											2021-10-30 15:46:44 -08:00
										 |  |  |             </div> | 
					
						
							| 
									
										
										
										
											2021-08-27 20:05:02 -08:00
										 |  |  |           </template> | 
					
						
							|  |  |  |         </v-autocomplete> | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |       </v-col> | 
					
						
							| 
									
										
										
										
											2021-10-30 15:46:44 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |       <!-- Foods Input --> | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |       <v-col | 
					
						
							|  |  |  |         m="12" | 
					
						
							|  |  |  |         md="3" | 
					
						
							|  |  |  |         cols="12" | 
					
						
							|  |  |  |         class="" | 
					
						
							|  |  |  |       > | 
					
						
							| 
									
										
										
										
											2021-08-27 20:05:02 -08:00
										 |  |  |         <v-autocomplete | 
					
						
							| 
									
										
										
										
											2024-05-22 16:58:16 -05:00
										 |  |  |           ref="foodAutocomplete" | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |           v-model="model.food" | 
					
						
							|  |  |  |           v-model:search="foodSearch" | 
					
						
							| 
									
										
										
										
											2023-03-23 09:21:22 -08:00
										 |  |  |           auto-select-first | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |           hide-details | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |           density="compact" | 
					
						
							|  |  |  |           variant="solo" | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |           return-object | 
					
						
							| 
									
										
										
										
											2022-05-11 17:14:03 -08:00
										 |  |  |           :items="foods || []" | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |           item-title="name" | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |           class="mx-1 py-0" | 
					
						
							| 
									
										
										
										
											2022-08-10 07:12:45 +02:00
										 |  |  |           :placeholder="$t('recipe.choose-food')" | 
					
						
							| 
									
										
										
										
											2022-03-03 19:43:56 -09:00
										 |  |  |           clearable | 
					
						
							| 
									
										
										
										
											2021-11-06 14:32:55 -08:00
										 |  |  |           @keyup.enter="handleFoodEnter" | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |         > | 
					
						
							| 
									
										
										
										
											2025-07-29 16:53:33 -05:00
										 |  |  |           <template #prepend> | 
					
						
							|  |  |  |             <v-tooltip v-if="foodError" location="bottom"> | 
					
						
							|  |  |  |               <template #activator="{ props: foodTooltipProps }"> | 
					
						
							|  |  |  |                 <v-icon | 
					
						
							|  |  |  |                   v-bind="foodTooltipProps" | 
					
						
							|  |  |  |                   class="ml-2 mr-n3 opacity-100" | 
					
						
							|  |  |  |                   color="primary" | 
					
						
							|  |  |  |                 > | 
					
						
							|  |  |  |                   {{ $globals.icons.alert }} | 
					
						
							|  |  |  |                 </v-icon> | 
					
						
							|  |  |  |               </template> | 
					
						
							|  |  |  |               <span v-if="foodErrorTooltip"> | 
					
						
							|  |  |  |                 {{ foodErrorTooltip }} | 
					
						
							|  |  |  |               </span> | 
					
						
							|  |  |  |             </v-tooltip> | 
					
						
							|  |  |  |           </template> | 
					
						
							| 
									
										
										
										
											2021-11-06 14:32:55 -08:00
										 |  |  |           <template #no-data> | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |             <div class="caption text-center pb-2"> | 
					
						
							|  |  |  |               {{ $t("recipe.press-enter-to-create") }} | 
					
						
							|  |  |  |             </div> | 
					
						
							| 
									
										
										
										
											2021-11-06 14:32:55 -08:00
										 |  |  |           </template> | 
					
						
							| 
									
										
										
										
											2021-10-30 15:46:44 -08:00
										 |  |  |           <template #append-item> | 
					
						
							|  |  |  |             <div class="px-2"> | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |               <BaseButton | 
					
						
							|  |  |  |                 block | 
					
						
							|  |  |  |                 size="small" | 
					
						
							|  |  |  |                 @click="createAssignFood()" | 
					
						
							|  |  |  |               /> | 
					
						
							| 
									
										
										
										
											2021-10-30 15:46:44 -08:00
										 |  |  |             </div> | 
					
						
							| 
									
										
										
										
											2021-08-27 20:05:02 -08:00
										 |  |  |           </template> | 
					
						
							|  |  |  |         </v-autocomplete> | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |       </v-col> | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |       <v-col | 
					
						
							|  |  |  |         sm="12" | 
					
						
							|  |  |  |         md="" | 
					
						
							|  |  |  |         cols="12" | 
					
						
							|  |  |  |       > | 
					
						
							| 
									
										
										
										
											2022-05-11 17:14:03 -08:00
										 |  |  |         <div class="d-flex"> | 
					
						
							| 
									
										
										
										
											2022-09-25 15:00:45 -08:00
										 |  |  |           <v-text-field | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |             v-model="model.note" | 
					
						
							| 
									
										
										
										
											2022-09-25 15:00:45 -08:00
										 |  |  |             hide-details | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |             density="compact" | 
					
						
							|  |  |  |             variant="solo" | 
					
						
							| 
									
										
										
										
											2022-09-25 15:00:45 -08:00
										 |  |  |             :placeholder="$t('recipe.notes')" | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |             class="mb-auto" | 
					
						
							| 
									
										
										
										
											2022-09-25 15:00:45 -08:00
										 |  |  |             @click="$emit('clickIngredientField', 'note')" | 
					
						
							| 
									
										
										
										
											2025-07-31 10:36:24 -05:00
										 |  |  |           /> | 
					
						
							| 
									
										
										
										
											2022-05-11 17:14:03 -08:00
										 |  |  |           <BaseButtonGroup | 
					
						
							| 
									
										
										
										
											2025-09-20 23:37:14 -05:00
										 |  |  |             v-if="enableContextMenu" | 
					
						
							| 
									
										
										
										
											2022-05-11 17:14:03 -08:00
										 |  |  |             hover | 
					
						
							|  |  |  |             :large="false" | 
					
						
							| 
									
										
										
										
											2023-11-24 10:40:35 +01:00
										 |  |  |             class="my-auto d-flex" | 
					
						
							| 
									
										
										
										
											2023-03-23 09:21:22 -08:00
										 |  |  |             :buttons="btns" | 
					
						
							| 
									
										
										
										
											2022-05-11 17:14:03 -08:00
										 |  |  |             @toggle-section="toggleTitle" | 
					
						
							| 
									
										
										
										
											2024-06-18 06:45:12 -07:00
										 |  |  |             @insert-above="$emit('insert-above')" | 
					
						
							|  |  |  |             @insert-below="$emit('insert-below')" | 
					
						
							| 
									
										
										
										
											2022-05-11 17:14:03 -08:00
										 |  |  |             @delete="$emit('delete')" | 
					
						
							|  |  |  |           /> | 
					
						
							|  |  |  |         </div> | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |       </v-col> | 
					
						
							|  |  |  |     </v-row> | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |     <v-divider | 
					
						
							|  |  |  |       v-if="!mdAndUp" | 
					
						
							|  |  |  |       class="my-4" | 
					
						
							|  |  |  |     /> | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |   </div> | 
					
						
							|  |  |  | </template> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | <script setup lang="ts"> | 
					
						
							|  |  |  | import { ref, computed, reactive, toRefs } from "vue"; | 
					
						
							|  |  |  | import { useDisplay } from "vuetify"; | 
					
						
							|  |  |  | import { useI18n } from "vue-i18n"; | 
					
						
							| 
									
										
										
										
											2022-05-29 17:29:59 -08:00
										 |  |  | import { useFoodStore, useFoodData, useUnitStore, useUnitData } from "~/composables/store"; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | import { useNuxtApp } from "#app"; | 
					
						
							|  |  |  | import type { RecipeIngredient } from "~/lib/api/types/recipe"; | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | // defineModel replaces modelValue prop
 | 
					
						
							|  |  |  | const model = defineModel<RecipeIngredient>({ required: true }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-07-29 16:53:33 -05:00
										 |  |  | defineProps({ | 
					
						
							|  |  |  |   unitError: { | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |     type: Boolean, | 
					
						
							|  |  |  |     default: false, | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  |   }, | 
					
						
							| 
									
										
										
										
											2025-07-29 16:53:33 -05:00
										 |  |  |   unitErrorTooltip: { | 
					
						
							|  |  |  |     type: String, | 
					
						
							|  |  |  |     default: "", | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   foodError: { | 
					
						
							|  |  |  |     type: Boolean, | 
					
						
							|  |  |  |     default: false, | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   foodErrorTooltip: { | 
					
						
							|  |  |  |     type: String, | 
					
						
							|  |  |  |     default: "", | 
					
						
							|  |  |  |   }, | 
					
						
							| 
									
										
										
										
											2025-09-20 23:37:14 -05:00
										 |  |  |   enableContextMenu: { | 
					
						
							|  |  |  |     type: Boolean, | 
					
						
							|  |  |  |     default: false, | 
					
						
							|  |  |  |   }, | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | defineEmits([ | 
					
						
							|  |  |  |   "clickIngredientField", | 
					
						
							|  |  |  |   "insert-above", | 
					
						
							|  |  |  |   "insert-below", | 
					
						
							|  |  |  |   "delete", | 
					
						
							|  |  |  | ]); | 
					
						
							| 
									
										
										
										
											2023-03-23 09:21:22 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | const { mdAndUp } = useDisplay(); | 
					
						
							|  |  |  | const i18n = useI18n(); | 
					
						
							|  |  |  | const { $globals } = useNuxtApp(); | 
					
						
							| 
									
										
										
										
											2023-03-23 09:21:22 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | const state = reactive({ | 
					
						
							|  |  |  |   showTitle: false, | 
					
						
							|  |  |  | }); | 
					
						
							| 
									
										
										
										
											2023-04-01 20:43:59 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | const contextMenuOptions = computed(() => { | 
					
						
							|  |  |  |   const options = [ | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       text: i18n.t("recipe.toggle-section"), | 
					
						
							|  |  |  |       event: "toggle-section", | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       text: i18n.t("recipe.insert-above"), | 
					
						
							|  |  |  |       event: "insert-above", | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       text: i18n.t("recipe.insert-below"), | 
					
						
							|  |  |  |       event: "insert-below", | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   ]; | 
					
						
							| 
									
										
										
										
											2023-03-23 09:21:22 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |   return options; | 
					
						
							|  |  |  | }); | 
					
						
							| 
									
										
										
										
											2023-03-23 09:21:22 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | const btns = computed(() => { | 
					
						
							|  |  |  |   const out = [ | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       icon: $globals.icons.dotsVertical, | 
					
						
							|  |  |  |       text: i18n.t("general.menu"), | 
					
						
							|  |  |  |       event: "open", | 
					
						
							|  |  |  |       children: contextMenuOptions.value, | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   ]; | 
					
						
							| 
									
										
										
										
											2023-03-23 09:21:22 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |   // If delete event is being listened for, show delete button
 | 
					
						
							|  |  |  |   // $attrs is not available in <script setup>, so always show if parent listens
 | 
					
						
							|  |  |  |   out.unshift({ | 
					
						
							|  |  |  |     icon: $globals.icons.delete, | 
					
						
							|  |  |  |     text: i18n.t("general.delete"), | 
					
						
							|  |  |  |     event: "delete", | 
					
						
							|  |  |  |     children: undefined, | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2022-08-10 07:12:45 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |   return out; | 
					
						
							|  |  |  | }); | 
					
						
							| 
									
										
										
										
											2021-10-30 15:46:44 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | // Foods
 | 
					
						
							|  |  |  | const foodStore = useFoodStore(); | 
					
						
							|  |  |  | const foodData = useFoodData(); | 
					
						
							|  |  |  | const foodSearch = ref(""); | 
					
						
							|  |  |  | const foodAutocomplete = ref<HTMLInputElement>(); | 
					
						
							| 
									
										
										
										
											2021-10-30 15:46:44 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | async function createAssignFood() { | 
					
						
							|  |  |  |   foodData.data.name = foodSearch.value; | 
					
						
							|  |  |  |   model.value.food = await foodStore.actions.createOne(foodData.data) || undefined; | 
					
						
							|  |  |  |   foodData.reset(); | 
					
						
							|  |  |  |   foodAutocomplete.value?.blur(); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2021-10-30 15:46:44 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | // Units
 | 
					
						
							|  |  |  | const unitStore = useUnitStore(); | 
					
						
							|  |  |  | const unitsData = useUnitData(); | 
					
						
							|  |  |  | const unitSearch = ref(""); | 
					
						
							|  |  |  | const unitAutocomplete = ref<HTMLInputElement>(); | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | async function createAssignUnit() { | 
					
						
							|  |  |  |   unitsData.data.name = unitSearch.value; | 
					
						
							|  |  |  |   model.value.unit = await unitStore.actions.createOne(unitsData.data) || undefined; | 
					
						
							|  |  |  |   unitsData.reset(); | 
					
						
							|  |  |  |   unitAutocomplete.value?.blur(); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | function toggleTitle() { | 
					
						
							|  |  |  |   if (state.showTitle) { | 
					
						
							|  |  |  |     model.value.title = ""; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   state.showTitle = !state.showTitle; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | function handleUnitEnter() { | 
					
						
							|  |  |  |   if ( | 
					
						
							|  |  |  |     model.value.unit === undefined | 
					
						
							|  |  |  |     || model.value.unit === null | 
					
						
							|  |  |  |     || !model.value.unit.name.includes(unitSearch.value) | 
					
						
							|  |  |  |   ) { | 
					
						
							|  |  |  |     createAssignUnit(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2021-11-06 14:32:55 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | function handleFoodEnter() { | 
					
						
							|  |  |  |   if ( | 
					
						
							|  |  |  |     model.value.food === undefined | 
					
						
							|  |  |  |     || model.value.food === null | 
					
						
							|  |  |  |     || !model.value.food.name.includes(foodSearch.value) | 
					
						
							|  |  |  |   ) { | 
					
						
							|  |  |  |     createAssignFood(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2021-11-06 14:32:55 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | function quantityFilter(e: KeyboardEvent) { | 
					
						
							|  |  |  |   if (e.key === "-" || e.key === "+" || e.key === "e") { | 
					
						
							|  |  |  |     e.preventDefault(); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2022-05-22 11:16:23 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-09-20 23:37:14 -05:00
										 |  |  | const { showTitle } = toRefs(state); | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | 
 | 
					
						
							|  |  |  | const foods = foodStore.store; | 
					
						
							|  |  |  | const units = unitStore.store; | 
					
						
							| 
									
										
										
										
											2021-08-23 12:24:38 -08:00
										 |  |  | </script> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-02-13 12:23:42 -09:00
										 |  |  | <style> | 
					
						
							| 
									
										
										
										
											2021-08-27 20:05:02 -08:00
										 |  |  | .v-input__append-outer { | 
					
						
							|  |  |  |   margin: 0 !important; | 
					
						
							|  |  |  |   padding: 0 !important; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  | </style> |