enumProvider.ts 1.2 KB

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