| 
									
										
										
										
											2021-05-29 15:54:18 -08:00
										 |  |  | <template> | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |   <v-tooltip | 
					
						
							|  |  |  |     location="bottom" | 
					
						
							|  |  |  |     nudge-right="50" | 
					
						
							|  |  |  |     :color="buttonStyle ? 'info' : 'secondary'" | 
					
						
							|  |  |  |   > | 
					
						
							|  |  |  |     <template #activator="{ props }"> | 
					
						
							| 
									
										
										
										
											2021-06-12 14:59:14 +08:00
										 |  |  |       <v-btn | 
					
						
							|  |  |  |         v-if="isFavorite || showAlways" | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |         icon | 
					
						
							|  |  |  |         :variant="buttonStyle ? 'flat' : undefined" | 
					
						
							|  |  |  |         :rounded="buttonStyle ? 'circle' : undefined" | 
					
						
							|  |  |  |         size="small" | 
					
						
							| 
									
										
										
										
											2021-07-09 14:33:23 -08:00
										 |  |  |         :color="buttonStyle ? 'info' : 'secondary'" | 
					
						
							| 
									
										
										
										
											2021-06-12 14:59:14 +08:00
										 |  |  |         :fab="buttonStyle" | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |         v-bind="{ ...props, ...$attrs }" | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  |         @click.prevent="toggleFavorite" | 
					
						
							| 
									
										
										
										
											2021-06-12 14:59:14 +08:00
										 |  |  |       > | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |         <v-icon | 
					
						
							|  |  |  |           :size="!buttonStyle ? undefined : 'x-large'" | 
					
						
							|  |  |  |           :color="buttonStyle ? 'white' : 'secondary'" | 
					
						
							|  |  |  |         > | 
					
						
							| 
									
										
										
										
											2021-06-16 18:55:32 -08:00
										 |  |  |           {{ isFavorite ? $globals.icons.heart : $globals.icons.heartOutline }} | 
					
						
							| 
									
										
										
										
											2021-06-12 14:59:14 +08:00
										 |  |  |         </v-icon> | 
					
						
							|  |  |  |       </v-btn> | 
					
						
							|  |  |  |     </template> | 
					
						
							|  |  |  |     <span>{{ isFavorite ? $t("recipe.remove-from-favorites") : $t("recipe.add-to-favorites") }}</span> | 
					
						
							|  |  |  |   </v-tooltip> | 
					
						
							| 
									
										
										
										
											2021-05-29 15:54:18 -08:00
										 |  |  | </template> | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  | <script lang="ts"> | 
					
						
							| 
									
										
										
										
											2024-04-11 21:28:43 -05:00
										 |  |  | import { useUserSelfRatings } from "~/composables/use-users"; | 
					
						
							| 
									
										
										
										
											2021-11-06 11:28:47 -08:00
										 |  |  | import { useUserApi } from "~/composables/api"; | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | 
 | 
					
						
							|  |  |  | export default defineNuxtComponent({ | 
					
						
							| 
									
										
										
										
											2021-05-29 15:54:18 -08:00
										 |  |  |   props: { | 
					
						
							| 
									
										
										
										
											2024-04-11 21:28:43 -05:00
										 |  |  |     recipeId: { | 
					
						
							| 
									
										
										
										
											2021-08-01 19:24:47 -08:00
										 |  |  |       type: String, | 
					
						
							| 
									
										
										
										
											2021-05-29 15:54:18 -08:00
										 |  |  |       default: "", | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     showAlways: { | 
					
						
							|  |  |  |       type: Boolean, | 
					
						
							|  |  |  |       default: false, | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     buttonStyle: { | 
					
						
							|  |  |  |       type: Boolean, | 
					
						
							|  |  |  |       default: false, | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   }, | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  |   setup(props) { | 
					
						
							| 
									
										
										
										
											2021-11-06 11:28:47 -08:00
										 |  |  |     const api = useUserApi(); | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |     const $auth = useMealieAuth(); | 
					
						
							| 
									
										
										
										
											2024-04-11 21:28:43 -05:00
										 |  |  |     const { userRatings, refreshUserRatings } = useUserSelfRatings(); | 
					
						
							| 
									
										
										
										
											2021-08-03 21:38:45 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-11 21:28:43 -05:00
										 |  |  |     const isFavorite = computed(() => { | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |       const rating = userRatings.value.find(r => r.recipeId === props.recipeId); | 
					
						
							| 
									
										
										
										
											2024-04-11 21:28:43 -05:00
										 |  |  |       return rating?.isFavorite || false; | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     async function toggleFavorite() { | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |       if (!$auth.user.value) return; | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  |       if (!isFavorite.value) { | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |         await api.users.addFavorite($auth.user.value?.id, props.recipeId); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       else { | 
					
						
							|  |  |  |         await api.users.removeFavorite($auth.user.value?.id, props.recipeId); | 
					
						
							| 
									
										
										
										
											2021-05-29 15:54:18 -08:00
										 |  |  |       } | 
					
						
							| 
									
										
										
										
											2024-04-11 21:28:43 -05:00
										 |  |  |       await refreshUserRatings(); | 
					
						
							| 
									
										
										
										
											2022-02-23 15:04:45 -09:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2022-01-09 07:15:23 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     return { isFavorite, toggleFavorite }; | 
					
						
							| 
									
										
										
										
											2021-05-29 15:54:18 -08:00
										 |  |  |   }, | 
					
						
							| 
									
										
										
										
											2021-08-03 21:38:45 -08:00
										 |  |  | }); | 
					
						
							| 
									
										
										
										
											2021-05-29 15:54:18 -08:00
										 |  |  | </script> |