mirror of
				https://github.com/mealie-recipes/mealie.git
				synced 2025-10-31 02:03:35 -04:00 
			
		
		
		
	fix: Optimize Recipe Timeline Requests (#5811)
This commit is contained in:
		| @@ -3,7 +3,10 @@ | |||||||
|     <v-expand-transition> |     <v-expand-transition> | ||||||
|       <v-card |       <v-card | ||||||
|         :ripple="false" |         :ripple="false" | ||||||
|         :class="isFlat ? 'mx-auto flat' : 'mx-auto'" |         :class="[ | ||||||
|  |           isFlat ? 'mx-auto flat' : 'mx-auto', | ||||||
|  |           { 'disable-highlight': disableHighlight }, | ||||||
|  |         ]" | ||||||
|         :style="{ cursor }" |         :style="{ cursor }" | ||||||
|         hover |         hover | ||||||
|         height="100%" |         height="100%" | ||||||
| @@ -181,6 +184,10 @@ export default defineNuxtComponent({ | |||||||
|       type: [Number], |       type: [Number], | ||||||
|       default: 150, |       default: 150, | ||||||
|     }, |     }, | ||||||
|  |     disableHighlight: { | ||||||
|  |       type: Boolean, | ||||||
|  |       default: false, | ||||||
|  |     }, | ||||||
|   }, |   }, | ||||||
|   emits: ["selected", "delete"], |   emits: ["selected", "delete"], | ||||||
|   setup(props) { |   setup(props) { | ||||||
| @@ -241,4 +248,8 @@ export default defineNuxtComponent({ | |||||||
|   box-shadow: none !important; |   box-shadow: none !important; | ||||||
|   background-color: transparent !important; |   background-color: transparent !important; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | .disable-highlight :deep(.v-card__overlay) { | ||||||
|  |   opacity: 0 !important; | ||||||
|  | } | ||||||
| </style> | </style> | ||||||
|   | |||||||
| @@ -242,28 +242,28 @@ export default defineNuxtComponent({ | |||||||
|       alert.success(i18n.t("events.event-deleted") as string); |       alert.success(i18n.t("events.event-deleted") as string); | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     async function getRecipe(recipeId: string): Promise<Recipe | null> { |     async function getRecipes(recipeIds: string[]): Promise<Recipe[]> { | ||||||
|       const { data } = await api.recipes.getOne(recipeId); |       const qf = "id IN [" + recipeIds.map(id => `"${id}"`).join(", ") + "]"; | ||||||
|       return data; |       const { data } = await api.recipes.getAll(1, -1, { queryFilter: qf }); | ||||||
|  |       return data?.items || []; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     async function updateRecipes(events: RecipeTimelineEventOut[]) { |     async function updateRecipes(events: RecipeTimelineEventOut[]) { | ||||||
|       const recipePromises: Promise<Recipe | null>[] = []; |       const recipeIds: string[] = []; | ||||||
|       const seenRecipeIds: string[] = []; |  | ||||||
|       events.forEach((event) => { |       events.forEach((event) => { | ||||||
|         if (seenRecipeIds.includes(event.recipeId) || recipes.has(event.recipeId)) { |         if (recipeIds.includes(event.recipeId) || recipes.has(event.recipeId)) { | ||||||
|           return; |           return; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         seenRecipeIds.push(event.recipeId); |         recipeIds.push(event.recipeId); | ||||||
|         recipePromises.push(getRecipe(event.recipeId)); |  | ||||||
|       }); |       }); | ||||||
|  |  | ||||||
|       const results = await Promise.all(recipePromises); |       const results = await getRecipes(recipeIds); | ||||||
|       results.forEach((result) => { |       results.forEach((result) => { | ||||||
|         if (result && result.id) { |         if (!result?.id) { | ||||||
|           recipes.set(result.id, result); |           return; | ||||||
|         } |         } | ||||||
|  |         recipes.set(result.id, result); | ||||||
|       }); |       }); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -53,6 +53,7 @@ | |||||||
|         <v-row :class="useMobileFormat ? 'py-3 mx-0' : 'py-3 mx-0'" style="max-width: 100%"> |         <v-row :class="useMobileFormat ? 'py-3 mx-0' : 'py-3 mx-0'" style="max-width: 100%"> | ||||||
|           <v-col align-self="center" class="pa-0"> |           <v-col align-self="center" class="pa-0"> | ||||||
|             <RecipeCardMobile |             <RecipeCardMobile | ||||||
|  |               disable-highlight | ||||||
|               :vertical="useMobileFormat" |               :vertical="useMobileFormat" | ||||||
|               :name="recipe.name" |               :name="recipe.name" | ||||||
|               :slug="recipe.slug" |               :slug="recipe.slug" | ||||||
|   | |||||||
| @@ -16,7 +16,10 @@ | |||||||
|         {{ $t("recipe.group-global-timeline", { groupName }) }} |         {{ $t("recipe.group-global-timeline", { groupName }) }} | ||||||
|       </template> |       </template> | ||||||
|     </BasePageTitle> |     </BasePageTitle> | ||||||
|     <v-sheet :class="$vuetify.display.smAndDown ? 'pa-0' : 'px-3 py-0'"> |     <v-sheet | ||||||
|  |       :class="$vuetify.display.smAndDown ? 'pa-0' : 'px-3 py-0'" | ||||||
|  |       style="background-color: transparent;" | ||||||
|  |     > | ||||||
|       <RecipeTimeline |       <RecipeTimeline | ||||||
|         v-if="queryFilter" |         v-if="queryFilter" | ||||||
|         v-model="ready" |         v-model="ready" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user