| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- import type { Query as PiniaOrmQuery } from 'pinia-orm'
- import type { ApiFilter } from '~/types/data'
- import ApiResource from '~/models/ApiResource'
- import { SEARCH_STRATEGY } from '~/types/enum/data'
- export default class PageFilter implements ApiFilter {
- page: Ref<number>
- itemsPerPage: Ref<number>
- reactiveFilter: boolean
- /**
- * @param page
- * @param itemsPerPage
- * @param reactiveFilter Est-ce qu'on doit conserver la réactivité du filtre ? Concrètement, dans le cas d'une
- * recherche textuelle, si le filtre est réactif, le résultat de la query Pinia-ORM sera
- * filtré à chaque fois que le filtre est modifié (même sans refresh ou nouvel appel à
- * fetchCollection). Si reactiveFilter est false (comportement par défaut), le résultat
- * de la query ne sera mis à jour qu'en cas de nouvel appel à fetchCollection (ou à refresh()).
- */
- constructor(
- page: Ref<number>,
- itemsPerPage: Ref<number>,
- reactiveFilter: boolean = false,
- ) {
- this.page = page
- this.itemsPerPage = itemsPerPage
- this.reactiveFilter = reactiveFilter
- }
- public applyToPiniaOrmQuery(
- query: PiniaOrmQuery<ApiResource>,
- ): PiniaOrmQuery<ApiResource> {
- const page = this.reactiveFilter
- ? this.page
- : ref(this.page.value)
- const itemsPerPage = this.reactiveFilter
- ? this.itemsPerPage
- : ref(this.itemsPerPage.value)
- return query.offset(itemsPerPage.value * (page.value - 1)).limit(itemsPerPage.value)
- }
- public getApiQueryPart(): string {
- return `page=${this.page.value}&itemsPerPage=${this.itemsPerPage.value}`
- }
- }
|