OrderBy.ts 871 B

1234567891011121314151617181920212223242526272829303132333435
  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 { ORDER_BY_DIRECTION } from '~/types/enum/data'
  5. import StringUtils from '~/services/utils/stringUtils'
  6. export default class OrderBy implements ApiFilter {
  7. field: string
  8. mode: ORDER_BY_DIRECTION
  9. /**
  10. * @param field
  11. * @param mode
  12. */
  13. constructor(
  14. field: string,
  15. mode: ORDER_BY_DIRECTION = ORDER_BY_DIRECTION.ASC,
  16. ) {
  17. this.field = field
  18. this.mode = mode
  19. }
  20. public applyToPiniaOrmQuery(
  21. query: PiniaOrmQuery<ApiResource>,
  22. ): PiniaOrmQuery<ApiResource> {
  23. return query.orderBy(
  24. (instance) => StringUtils.normalize(instance[this.field] ?? ''),
  25. this.mode,
  26. )
  27. }
  28. public getApiQueryPart(): string {
  29. return `order[${this.field}]=${this.mode}`
  30. }
  31. }