label.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { orderBy } from 'lodash'
  2. import {
  3. LoadedLabel,
  4. Label,
  5. PseudoCurrentStateLabel,
  6. } from '../services/types/label'
  7. import { Nullable } from '../../../../../types/utils'
  8. export const isPseudoLabel = (
  9. label: LoadedLabel
  10. ): label is PseudoCurrentStateLabel => {
  11. return (label as PseudoCurrentStateLabel).isPseudoCurrentStateLabel === true
  12. }
  13. export const isLabel = (label: LoadedLabel): label is Label => {
  14. return !isPseudoLabel(label)
  15. }
  16. const sortLabelsByVersionAndDate = (labels: LoadedLabel[]) => {
  17. return orderBy(
  18. labels,
  19. ['isPseudoCurrentStateLabel', 'version', 'created_at'],
  20. ['asc', 'desc', 'desc']
  21. )
  22. }
  23. const deletePseudoCurrentStateLabelIfExistent = (labels: LoadedLabel[]) => {
  24. if (labels.length && isPseudoLabel(labels[0])) {
  25. const [, ...rest] = labels
  26. return rest
  27. }
  28. return labels
  29. }
  30. const addPseudoCurrentStateLabelIfNeeded = (
  31. labels: LoadedLabel[],
  32. mostRecentVersion: Nullable<number>
  33. ) => {
  34. if (!labels.length || labels[0].version !== mostRecentVersion) {
  35. const pseudoCurrentStateLabel: PseudoCurrentStateLabel = {
  36. id: '1',
  37. isPseudoCurrentStateLabel: true,
  38. version: mostRecentVersion,
  39. created_at: new Date().toISOString(),
  40. }
  41. return [pseudoCurrentStateLabel, ...labels]
  42. }
  43. return labels
  44. }
  45. export const loadLabels = (
  46. labels: Label[],
  47. lastUpdateToV: Nullable<number>
  48. ) => {
  49. const sortedLabels = sortLabelsByVersionAndDate(labels)
  50. const labelsWithoutPseudoLabel =
  51. deletePseudoCurrentStateLabelIfExistent(sortedLabels)
  52. const labelsWithPseudoLabelIfNeeded = addPseudoCurrentStateLabelIfNeeded(
  53. labelsWithoutPseudoLabel,
  54. lastUpdateToV
  55. )
  56. return labelsWithPseudoLabelIfNeeded
  57. }