PageFilter.ts 945 B

12345678910111213141516171819202122232425262728293031323334
  1. import type { Query as PiniaOrmQuery } from 'pinia-orm'
  2. import type { ApiFilter } from '~/types/data'
  3. import type ApiResource from '~/models/ApiResource'
  4. import RefUtils from '~/services/utils/refUtils'
  5. export default class PageFilter implements ApiFilter {
  6. page: Ref<number>
  7. itemsPerPage: Ref<number>
  8. /**
  9. * @param page
  10. * @param itemsPerPage
  11. */
  12. constructor(page: Ref<number>, itemsPerPage: Ref<number>) {
  13. this.page = page
  14. this.itemsPerPage = itemsPerPage
  15. }
  16. public applyToPiniaOrmQuery(
  17. query: PiniaOrmQuery<ApiResource>,
  18. ): PiniaOrmQuery<ApiResource> {
  19. const page = RefUtils.castToRef(this.page, false)
  20. const itemsPerPage = RefUtils.castToRef(this.itemsPerPage, false)
  21. return query
  22. .offset(itemsPerPage.value * (page.value - 1))
  23. .limit(itemsPerPage.value)
  24. }
  25. public getApiQueryPart(): string {
  26. return `page=${this.page.value}&itemsPerPage=${this.itemsPerPage.value}`
  27. }
  28. }