OrderBy.ts 796 B

12345678910111213141516171819202122232425262728293031323334
  1. import type { Query as PiniaOrmQuery } from 'pinia-orm'
  2. import type { ApiFilter } from '~/types/data'
  3. import ApiResource from '~/models/ApiResource'
  4. import { ORDER_BY_DIRECTION } from '~/types/enum/data'
  5. export default class OrderBy implements ApiFilter {
  6. field: string
  7. mode: ORDER_BY_DIRECTION
  8. /**
  9. * @param field
  10. * @param mode
  11. */
  12. constructor(
  13. field: string,
  14. mode: ORDER_BY_DIRECTION = ORDER_BY_DIRECTION.ASC,
  15. ) {
  16. this.field = field
  17. this.mode = mode
  18. }
  19. public applyToPiniaOrmQuery(
  20. query: PiniaOrmQuery<ApiResource>,
  21. ): PiniaOrmQuery<ApiResource> {
  22. return query.orderBy(
  23. (instance) => instance[this.field].toLowerCase(),
  24. this.mode,
  25. )
  26. }
  27. public getApiQueryPart(): string {
  28. return `order[${this.field}]=${this.mode}`
  29. }
  30. }