21
21
{{/if}}
22
22
23
23
<q-table
24
- v-model :pagination =" pagination"
24
+ :pagination =" pagination"
25
25
:rows =" items"
26
26
:columns =" columns"
27
+ :rows-per-page-options =" [30]"
27
28
:loading =" isLoading"
28
29
:no-data-label =" $t('unavail')"
29
30
:no-results-label =" $t('noresults')"
42
43
@delete =" deleteItem(row)"
43
44
/>
44
45
</template >
46
+
45
47
{{#each fields}}
46
48
{{#if isReferences}}
47
49
<template #body-cell- {{reference.name }}="{ value }">
119
121
</template >
120
122
{{/if}}
121
123
{{/each}}
124
+
125
+ <template #pagination =" { pagesNumber } " >
126
+ <template v-if =" view " >
127
+ <q-btn
128
+ v-if =" pagesNumber > 2"
129
+ :to =" view['hydra:first'] ? view['hydra:first'] : { name: 'BookList' }"
130
+ :disable =" !view['hydra:previous']"
131
+ icon =" first_page"
132
+ color =" grey-8"
133
+ round
134
+ dense
135
+ flat
136
+ />
137
+
138
+ <q-btn
139
+ :to ="
140
+ !view['hydra:previous'] ||
141
+ view['hydra:previous'] === view['hydra:first']
142
+ ? { name: 'BookList' }
143
+ : view['hydra:previous']
144
+ "
145
+ :disable =" !view['hydra:previous']"
146
+ icon =" chevron_left"
147
+ color =" grey-8"
148
+ round
149
+ dense
150
+ flat
151
+ />
152
+
153
+ <q-btn
154
+ :to =" view['hydra:next'] ? view['hydra:next'] : '#'"
155
+ :disable =" !view['hydra:next']"
156
+ icon =" chevron_right"
157
+ color =" grey-8"
158
+ round
159
+ dense
160
+ flat
161
+ />
162
+
163
+ <q-btn
164
+ v-if =" pagesNumber > 2"
165
+ :to =" view['hydra:last'] ? view['hydra:last'] : '#'"
166
+ :disable =" !view['hydra:next']"
167
+ icon =" last_page"
168
+ color =" grey-8"
169
+ round
170
+ dense
171
+ flat
172
+ />
173
+ </template >
174
+ </template >
122
175
</q-table >
123
176
</template >
124
177
@@ -130,7 +183,7 @@ import Filter from 'src/components/{{lc}}/{{titleUcFirst}}Filter.vue';
130
183
import Toolbar from ' src/components/common/CommonToolbar.vue' ;
131
184
import Breadcrumb from ' src/components/common/CommonBreadcrumb.vue' ;
132
185
import ActionCell from ' src/components/common/CommonActionCell.vue' ;
133
- import { useRouter } from ' vue-router' ;
186
+ import { useRoute , useRouter } from ' vue-router' ;
134
187
import { useI18n } from ' vue-i18n' ;
135
188
{{#if hasDateField }}
136
189
import { formatDateTime } from ' src/utils/date' ;
@@ -146,28 +199,26 @@ import { {{titleUcFirst}} } from 'src/types/{{lc}}';
146
199
import { Pagination {{#if parameters .length }}, Filters {{/if }} } from ' src/types/list' ;
147
200
148
201
const { t } = useI18n ();
202
+ const route = useRoute ();
149
203
const router = useRouter ();
150
204
const breadcrumb = useBreadcrumb ();
151
205
152
206
const {{lc}}ListStore = use {{titleUcFirst }}ListStore ();
153
- const { items, totalItems, error, isLoading } = storeToRefs ({{lc }}ListStore );
207
+ const { items, totalItems, view, error, isLoading } = storeToRefs ({{lc }}ListStore );
154
208
155
209
const {{lc}}DeleteStore = use {{titleUcFirst }}DeleteStore ();
156
210
const { deleted, mercureDeleted } = storeToRefs ({{lc }}DeleteStore );
157
211
158
- async function sendRequest(params = {}) {
159
- await {{lc }}ListStore .getItems (params );
160
- }
161
-
162
- useMercureList ({ store: {{lc }}ListStore , deleteStore: {{lc }}DeleteStore });
163
-
164
- const nextPage = ref (1 );
212
+ const page = ref (' 1' );
213
+ {{#if parameters .length }}
214
+ const filters: Ref <Filters > = ref ({});
215
+ {{/ if }}
165
216
const pagination: Pagination = {
166
217
sortBy: undefined ,
167
218
descending: false ,
168
- page: 1 , // page to be displayed
169
- rowsPerPage: 3 , // maximum displayed rows
170
- rowsNumber: 10 , // max number of rows
219
+ page: 1 ,
220
+ rowsPerPage: 3 ,
221
+ rowsNumber: 1 ,
171
222
};
172
223
const columns = [
173
224
{ name: ' actions' , label: t (' actions' ), field: ' ' },
@@ -189,22 +240,29 @@ const columns = [
189
240
{{/ each }}
190
241
];
191
242
192
- await sendRequest ({ pagination });
243
+ watch (
244
+ () => route .query .page ,
245
+ (newPage ) => {
246
+ page .value = newPage as string ;
247
+ sendRequest ();
248
+ },
249
+ { immediate: true }
250
+ );
193
251
194
- watch (items , () => {
195
- pagination .page = nextPage .value ;
196
- pagination .rowsNumber = totalItems .value ;
197
- nextPage .value = 1 ;
198
- });
252
+ async function sendRequest() {
253
+ await {{lc }}ListStore .getItems (page .value , { {{#if parameters .length }}filters: filters .value {{/ if }} });
254
+ }
199
255
200
- {{#if parameters .length }}
201
- const filters: Ref <Filters > = ref ({});
256
+ useMercureList ({ store: {{lc }}ListStore , deleteStore: {{lc }}DeleteStore });
257
+
258
+ await sendRequest ();
259
+
260
+ pagination .rowsPerPage = items .value .length ;
261
+ pagination .rowsNumber = totalItems .value ;
202
262
263
+ {{#if parameters .length }}
203
264
function onSendFilter() {
204
- sendRequest ({
205
- filters: filters .value ,
206
- pagination ,
207
- });
265
+ sendRequest ();
208
266
}
209
267
210
268
function resetFilter() {
@@ -233,7 +291,7 @@ function gotToEditPage(item: {{titleUcFirst}}) {
233
291
async function deleteItem(item : {{titleUcFirst}}) {
234
292
await {{lc }}DeleteStore .deleteItem (item );
235
293
236
- sendRequest ({ pagination } );
294
+ sendRequest ();
237
295
}
238
296
239
297
useWatchErrors ([error ]);
0 commit comments