9
9
<VChip
10
10
size =" small"
11
11
class =" ma-2 hidden-sm-and-down" >
12
- <template v-if =" loading " >
13
- {{ t('lazyLoading', { value: lazyLoadLimit }) }}
12
+ <template v-if =" ! fullQueryIsCached " >
13
+ {{ t('lazyLoading', { value: items.length }) }}
14
14
</template >
15
15
<template v-else >
16
16
{{ items?.length ?? 0 }}
@@ -73,7 +73,7 @@ import { getItemsApi } from '@jellyfin/sdk/lib/utils/api/items-api';
73
73
import { getMusicGenresApi } from ' @jellyfin/sdk/lib/utils/api/music-genres-api' ;
74
74
import { getPersonsApi } from ' @jellyfin/sdk/lib/utils/api/persons-api' ;
75
75
import { getStudiosApi } from ' @jellyfin/sdk/lib/utils/api/studios-api' ;
76
- import { computed , onMounted , ref , shallowRef } from ' vue' ;
76
+ import { computed , onBeforeMount , ref , shallowRef } from ' vue' ;
77
77
import { useI18n } from ' vue-i18n' ;
78
78
import { useRoute } from ' vue-router/auto' ;
79
79
@@ -93,7 +93,7 @@ const innerItemKind = shallowRef<BaseItemKind>();
93
93
const sortBy = shallowRef <string >();
94
94
const sortAscending = shallowRef (true );
95
95
const queryLimit = shallowRef <number | undefined >(lazyLoadLimit );
96
- const lazyLoadIds = shallowRef <string []>([]);
96
+ const lazyLoadIds = shallowRef <BaseItemDto [ ' Id ' ] []>([]);
97
97
const filters = ref <Filters >({
98
98
status: [],
99
99
features: [],
@@ -222,17 +222,20 @@ const { loading, data: queryItems } = await useBaseItem(api, method)(() => ({
222
222
limit: queryLimit .value
223
223
}));
224
224
225
- const items = computed (() => {
226
- return queryLimit .value ? queryItems .value : [... (apiStore .getItemsById (lazyLoadIds .value ) as BaseItemDto []), ... queryItems .value ];
227
- });
225
+ /**
226
+ * The queryItems for the 2nd request will return the items from (lazyloadLimit, n],
227
+ * so checking if just the first matches is a good solution
228
+ */
229
+ const fullQueryIsCached = computed (() => loading .value ? ! queryLimit .value && queryItems .value [0 ].Id !== lazyLoadIds .value [0 ] : true );
230
+ const items = computed (() => fullQueryIsCached .value ? [... (apiStore .getItemsById (lazyLoadIds .value ) as BaseItemDto []), ... queryItems .value ] : queryItems .value );
228
231
229
232
route .meta .title = library .value .Name ;
230
233
231
234
/**
232
235
* We fetch the 1st 100 items and, after mount, we fetch the rest.
233
236
*/
234
- onMounted (() => {
235
- lazyLoadIds .value = queryItems .value .map ((i ) => i .Id as string );
237
+ onBeforeMount (() => {
238
+ lazyLoadIds .value = queryItems .value .map ((i ) => i .Id );
236
239
queryLimit .value = undefined ;
237
240
});
238
241
</script >
0 commit comments