mirror of
				https://github.com/mealie-recipes/mealie.git
				synced 2025-10-31 10:13:32 -04:00 
			
		
		
		
	* feat(frontend): ✨ lazy-load all recipes page * feat(frontend): ✨ enable runtime theme through env-variables * docs(docs): 📝 update v1 changelog * bump version Co-authored-by: Hayden <hay-kot@pm.me>
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <v-container>
 | |
|     <RecipeCardSection
 | |
|       :icon="$globals.icons.primary"
 | |
|       :title="$t('page.all-recipes')"
 | |
|       :recipes="recipes"
 | |
|     ></RecipeCardSection>
 | |
|     <v-card v-intersect="infiniteScroll"></v-card>
 | |
|     <v-fade-transition>
 | |
|       <AppLoader v-if="loading" :loading="loading" />
 | |
|     </v-fade-transition>
 | |
|   </v-container>
 | |
| </template>
 | |
|   
 | |
| <script lang="ts">
 | |
| import { defineComponent, onMounted, ref } from "@nuxtjs/composition-api";
 | |
| import { useThrottleFn } from "@vueuse/core";
 | |
| import RecipeCardSection from "~/components/Domain/Recipe/RecipeCardSection.vue";
 | |
| import { useLazyRecipes } from "~/composables/use-recipes";
 | |
| 
 | |
| export default defineComponent({
 | |
|   components: { RecipeCardSection },
 | |
|   setup() {
 | |
|     const start = ref(1);
 | |
|     const limit = ref(30);
 | |
|     const increment = ref(30);
 | |
|     const ready = ref(false);
 | |
|     const loading = ref(false);
 | |
| 
 | |
|     const { recipes, fetchMore } = useLazyRecipes();
 | |
| 
 | |
|     onMounted(async () => {
 | |
|       await fetchMore(start.value, limit.value);
 | |
|       ready.value = true;
 | |
|     });
 | |
| 
 | |
|     const infiniteScroll = useThrottleFn(() => {
 | |
|       if (!ready.value) {
 | |
|         return;
 | |
|       }
 | |
|       loading.value = true;
 | |
|       start.value = limit.value + 1;
 | |
|       limit.value = limit.value + increment.value;
 | |
|       fetchMore(start.value, limit.value);
 | |
|       loading.value = false;
 | |
|     }, 500);
 | |
| 
 | |
|     return { recipes, infiniteScroll, loading };
 | |
|   },
 | |
| });
 | |
| </script>
 | |
|    |