10
10
</ion-header >
11
11
<ion-content :fullscreen =" true" >
12
12
<ion-toolbar >
13
- <ion-searchbar @ionInput =" filterDisplayedItems($event.target.value)" ></ion-searchbar >
13
+ <ion-searchbar
14
+ @ionInput =" filterDisplayedItems($event.target.value)"
15
+ ></ion-searchbar >
14
16
</ion-toolbar >
15
17
<ion-list >
16
18
<ion-list-header >
20
22
<ion-label >{{ item.name }}</ion-label >
21
23
</ion-item >
22
24
</ion-list >
25
+ <ion-infinite-scroll
26
+ @ionInfinite =" infiteLoadItems($event)"
27
+ threshold =" 100px"
28
+ id =" infinite-scroll"
29
+ >
30
+ <ion-infinite-scroll-content
31
+ loading-spinner =" bubbles"
32
+ loading-text =" Loading more data..."
33
+ >
34
+ </ion-infinite-scroll-content >
35
+ </ion-infinite-scroll >
23
36
</ion-content >
37
+
38
+ <ion-loading
39
+ :is-open =" catalogueLoading || itemsLoading"
40
+ message =" Please wait..."
41
+ :duration =" 1000"
42
+ >
43
+ </ion-loading >
24
44
</ion-page >
25
45
</template >
26
46
@@ -38,11 +58,15 @@ import {
38
58
IonTitle ,
39
59
IonListHeader ,
40
60
IonBackButton ,
61
+ IonLoading ,
62
+ IonInfiniteScroll ,
63
+ IonInfiniteScrollContent ,
41
64
} from ' @ionic/vue' ;
42
65
43
- import { useCatalogue } from ' @/composables/useCatalogue ' ;
66
+ import { useItem } from ' @/composables/useItem ' ;
44
67
import { onMounted } from ' @vue/runtime-core' ;
45
68
import router from ' @/router' ;
69
+ import { useCatalogue } from ' @/composables/useCatalogue' ;
46
70
47
71
export default {
48
72
name: ' Catalogue' ,
@@ -58,26 +82,48 @@ export default {
58
82
IonContent ,
59
83
IonPage ,
60
84
IonListHeader ,
85
+ IonLoading ,
61
86
IonBackButton ,
87
+ IonInfiniteScroll ,
88
+ IonInfiniteScrollContent ,
62
89
},
63
90
setup() {
91
+ const {
92
+ runWrappedGetItems,
93
+ filterDisplayedItems,
94
+ itemsLoading,
95
+ displayedItems,
96
+ itemFilter,
97
+ page,
98
+ infiteLoadItems,
99
+ } = useItem ();
100
+
64
101
const {
65
102
selectedCatalogue,
66
103
getCatalogue,
67
- displayedItems,
68
- filterDisplayedItems,
104
+ catalogueLoading,
69
105
} = useCatalogue ();
70
106
71
107
onMounted (async () => {
72
108
try {
73
- const routeID = router .currentRoute .value .params .id as string ;
74
- await getCatalogue (routeID );
109
+ const catalogueID = router .currentRoute .value .params .id as string ;
110
+ await getCatalogue (catalogueID );
111
+ itemFilter .value = { catalogue: catalogueID };
112
+ await runWrappedGetItems ();
75
113
} catch (error ) {
76
114
console .log (error );
77
115
}
78
116
});
117
+
79
118
80
- return { selectedCatalogue , filterDisplayedItems , displayedItems };
119
+ return {
120
+ selectedCatalogue ,
121
+ catalogueLoading ,
122
+ itemsLoading ,
123
+ filterDisplayedItems ,
124
+ displayedItems ,
125
+ infiteLoadItems ,
126
+ };
81
127
},
82
128
};
83
129
</script >
0 commit comments