66 .q-pa-md
77 q-table(
88 :rows ="data?.data" : rows- per- page- options= "[5, 10, 15]" : loading= "pending" : columns= "columns" row-key ="id" : visible- columns= "visibleColumns"
9- v-model:pagination ="pagination" @update:pagination = "paginationQuery($event)" title ="Tickets" @request ="onRequest"
9+ v-model:pagination ="pagination" title ="Tickets" @request ="onRequest"
1010 rows-per-page-label ="Lignes par page" no-data-label ="Aucune donnée" loading-label ="Chargement..." no-results-label ="Aucun résultat"
1111 :pagination-label ="(firstRowIndex, endRowIndex, totalRowsNumber) => `${firstRowIndex}-${endRowIndex} sur ${totalRowsNumber} lignes`"
1212 )
2929<script lang="ts" setup>
3030import { ref } from " vue" ;
3131import { useApiFetch } from " ../composables/useApiFetch" ;
32- import { computed , useDayjs } from " #imports" ;
32+ import { computed , useDayjs , onMounted } from " #imports" ;
3333import type { QTableProps } from " quasar" ;
3434import type { schemas } from " ../composables/useApiFetch" ;
3535import { useRoute , useRouter } from " nuxt/app" ;
@@ -39,6 +39,28 @@ type Ticket = schemas['TicketDto']
3939const daysjs = useDayjs ()
4040const route = useRoute ()
4141const router = useRouter ()
42+
43+
44+ onMounted (() => {
45+ pagination .value ! .rowsNumber = getTotalRowsNumber .value
46+ const query = { ... route .query }
47+ const limit = query .limit
48+ const skip = query .skip
49+ pagination .value ! .rowsPerPage = parseInt (limit as string )
50+ pagination .value ! .page = parseInt (skip as string ) / parseInt (limit as string ) + 1
51+
52+ let sortKey = ' updatedAt'
53+ let sortDirection = ' desc'
54+ for (const key in query ) {
55+ if (key .startsWith (' sort' )) {
56+ sortKey = key .replace (' sort[' , ' ' ).replace (' ]' , ' ' )
57+ sortDirection = query [key ] === ' desc' ? ' desc' : ' asc'
58+ }
59+ }
60+ pagination .value ! .sortBy = sortKey
61+ pagination .value ! .descending = sortDirection === ' desc'
62+ })
63+
4264const columns = ref <QTableProps [' columns' ]>([
4365 {
4466 name: ' sequence' ,
@@ -142,29 +164,50 @@ const pagination = ref<QTableProps['pagination']>({
142164 page: 1 ,
143165 rowsPerPage: 10 ,
144166 rowsNumber: 10 ,
145- sortBy: ' sequence ' ,
146- descending: false
167+ sortBy: ' updatedAt ' ,
168+ descending: true
147169})
148170
149- const onRequest = (request : any ) => {
150- const newPagination = { ... request .pagination }
151- newPagination .rowsNumber = getTotalRowsNumber .value
152- pagination .value = newPagination
153- paginationQuery (newPagination )
171+ const onRequest = (props : any ) => {
172+ const { page, rowsPerPage, sortBy, descending } = props .pagination
173+ pagination .value ! .rowsNumber = getTotalRowsNumber .value
174+ pagination .value ! .page = page
175+ pagination .value ! .rowsPerPage = rowsPerPage
176+ pagination .value ! .sortBy = sortBy
177+ pagination .value ! .descending = descending
178+ paginationQuery ()
154179}
155180
156- const paginationQuery = (pagination : QTableProps [' pagination' ]) => {
157- const skip = (pagination ?.page ! - 1 ) * pagination ?.rowsPerPage !
158- const limit = pagination ?.rowsPerPage !
181+ const paginationQuery = () => {
182+ const query = removeSortKey ()
183+ const skip = ` ${(pagination .value ?.page ! - 1 ) * pagination .value ?.rowsPerPage ! } `
184+ const limit = ` ${pagination .value ?.rowsPerPage ! } `
185+ let sortBy = pagination .value ?.sortBy !
186+ if (sortBy === null ) {
187+ sortBy = ' updatedAt'
188+ }
189+
190+ const sortKey = ` sort[${sortBy }] `
191+ const sortDirection = pagination .value ?.descending ! ? ` desc ` : ` asc `
192+
193+ query [sortKey ] = sortDirection
194+ query [' skip' ] = skip
195+ query [' limit' ] = limit
159196 router .push ({
160- query: {
161- ... route .query ,
162- skip ,
163- limit ,
164- }
197+ query
165198 })
166199}
167200
201+ const removeSortKey = () => {
202+ const query = { ... route .query }
203+ for (const key in query ) {
204+ if (key .startsWith (' sort[' )) {
205+ delete query [key ]
206+ }
207+ }
208+ return query
209+ }
210+
168211const fieldsList = computed (() => {
169212 return columns .value ! .reduce (
170213 (acc : { name: string , label: string , type? : string }[], column ) => {
0 commit comments