enumProcessor.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import * as _ from 'lodash'
  2. import {ApiResponse, DataProviderArgs, EnumChoice, EnumChoices, Processor} from '~/types/interfaces'
  3. import BaseProcessor from '~/services/data/processor/baseProcessor'
  4. import { QUERY_TYPE } from '~/types/enums'
  5. class EnumProcessor extends BaseProcessor implements Processor {
  6. /**
  7. * Is the given argument a supported model
  8. * @param args
  9. */
  10. public static support (args:DataProviderArgs): boolean {
  11. return args.type === QUERY_TYPE.ENUM
  12. }
  13. /**
  14. *
  15. * @param data
  16. */
  17. // eslint-disable-next-line require-await
  18. async process (payload: ApiResponse): Promise<any> {
  19. const enums: EnumChoices = []
  20. _.each(payload.data.items, (item, key) => {
  21. const entry:EnumChoice = {
  22. value: key,
  23. label: this.ctx.app.i18n.t(item) as string
  24. }
  25. enums.push(entry)
  26. })
  27. return EnumProcessor.sortEnum(enums)
  28. }
  29. /**
  30. * Sort the given enum by its elements labels
  31. * @param enums
  32. * @private
  33. */
  34. private static sortEnum (enums: EnumChoices) {
  35. return enums.sort((a, b) => {
  36. if (a.label > b.label) { return 1 }
  37. if (a.label < b.label) { return -1 }
  38. return 0
  39. })
  40. }
  41. }
  42. export default EnumProcessor