| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  | import { computed } from "vue"; | 
					
						
							|  |  |  | import type { Recipe } from "~/lib/api/types/recipe"; | 
					
						
							|  |  |  | import type { HouseholdSummary } from "~/lib/api/types/household"; | 
					
						
							|  |  |  | import type { UserOut } from "~/lib/api/types/user"; | 
					
						
							| 
									
										
										
										
											2024-08-31 21:54:10 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-17 10:48:14 -05:00
										 |  |  | export function useRecipePermissions( | 
					
						
							|  |  |  |   recipe: Recipe, | 
					
						
							|  |  |  |   recipeHousehold: Ref<HouseholdSummary | undefined>, | 
					
						
							|  |  |  |   user: UserOut | null, | 
					
						
							|  |  |  | ) { | 
					
						
							|  |  |  |   const canEditRecipe = computed(() => { | 
					
						
							|  |  |  |     // Check recipe owner
 | 
					
						
							|  |  |  |     if (!user?.id) { | 
					
						
							|  |  |  |       return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if (user.id === recipe.userId) { | 
					
						
							|  |  |  |       return true; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2024-08-31 21:54:10 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-17 10:48:14 -05:00
										 |  |  |     // Check group and household
 | 
					
						
							|  |  |  |     if (user.groupId !== recipe.groupId) { | 
					
						
							|  |  |  |       return false; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     if (user.householdId !== recipe.householdId) { | 
					
						
							|  |  |  |       if (!recipeHousehold.value?.preferences) { | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       if (recipeHousehold.value?.preferences.lockRecipeEditsFromOtherHouseholds) { | 
					
						
							|  |  |  |         return false; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2024-08-31 21:54:10 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-17 10:48:14 -05:00
										 |  |  |     // Check recipe
 | 
					
						
							|  |  |  |     if (recipe.settings?.locked) { | 
					
						
							|  |  |  |       return false; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2024-08-31 21:54:10 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-17 10:48:14 -05:00
										 |  |  |     return true; | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2024-08-31 21:54:10 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-17 10:48:14 -05:00
										 |  |  |   return { | 
					
						
							|  |  |  |     canEditRecipe, | 
					
						
							| 
									
										
										
										
											2025-06-20 00:09:12 +07:00
										 |  |  |   }; | 
					
						
							| 
									
										
										
										
											2024-08-31 21:54:10 -05:00
										 |  |  | } |