utils.tsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import type {KeyValueDataContentProps} from 'sentry/components/keyValueData';
  2. import {t} from 'sentry/locale';
  3. export enum OrderBy {
  4. NEWEST = 'newest',
  5. OLDEST = 'oldest',
  6. A_TO_Z = 'a-z',
  7. Z_TO_A = 'z-a',
  8. }
  9. export enum SortBy {
  10. EVAL_ORDER = 'eval',
  11. ALPHABETICAL = 'alphabetical',
  12. }
  13. export const getSelectionType = (selection: string) => {
  14. switch (selection) {
  15. case OrderBy.A_TO_Z:
  16. case OrderBy.Z_TO_A:
  17. return 'alphabetical';
  18. case OrderBy.OLDEST:
  19. case OrderBy.NEWEST:
  20. default:
  21. return 'eval';
  22. }
  23. };
  24. const getOrderByLabel = (sort: string) => {
  25. switch (sort) {
  26. case OrderBy.A_TO_Z:
  27. return t('A-Z');
  28. case OrderBy.Z_TO_A:
  29. return t('Z-A');
  30. case OrderBy.OLDEST:
  31. return t('Oldest First');
  32. case OrderBy.NEWEST:
  33. default:
  34. return t('Newest First');
  35. }
  36. };
  37. const getSortByLabel = (sort: string) => {
  38. switch (sort) {
  39. case SortBy.ALPHABETICAL:
  40. return t('Alphabetical');
  41. case SortBy.EVAL_ORDER:
  42. default:
  43. return t('Evaluation Order');
  44. }
  45. };
  46. export const getDefaultOrderBy = (sortBy: SortBy) => {
  47. return sortBy === SortBy.EVAL_ORDER ? OrderBy.NEWEST : OrderBy.A_TO_Z;
  48. };
  49. export const SORT_BY_OPTIONS = [
  50. {
  51. label: getSortByLabel(SortBy.EVAL_ORDER),
  52. value: SortBy.EVAL_ORDER,
  53. },
  54. {
  55. label: getSortByLabel(SortBy.ALPHABETICAL),
  56. value: SortBy.ALPHABETICAL,
  57. },
  58. ];
  59. export const ORDER_BY_OPTIONS = [
  60. {
  61. label: getOrderByLabel(OrderBy.NEWEST),
  62. value: OrderBy.NEWEST,
  63. },
  64. {
  65. label: getOrderByLabel(OrderBy.OLDEST),
  66. value: OrderBy.OLDEST,
  67. },
  68. {
  69. label: getOrderByLabel(OrderBy.A_TO_Z),
  70. value: OrderBy.A_TO_Z,
  71. },
  72. {
  73. label: getOrderByLabel(OrderBy.Z_TO_A),
  74. value: OrderBy.Z_TO_A,
  75. },
  76. ];
  77. export const enum FlagControlOptions {
  78. SEARCH = 'search',
  79. SORT = 'sort',
  80. }
  81. export const handleSortAlphabetical = (flags: KeyValueDataContentProps[]) => {
  82. return [...flags].sort((a, b) => {
  83. return a.item.key.localeCompare(b.item.key);
  84. });
  85. };
  86. export const sortedFlags = ({
  87. flags,
  88. sort,
  89. }: {
  90. flags: KeyValueDataContentProps[];
  91. sort: OrderBy;
  92. }): KeyValueDataContentProps[] => {
  93. switch (sort) {
  94. case OrderBy.A_TO_Z:
  95. return handleSortAlphabetical(flags);
  96. case OrderBy.Z_TO_A:
  97. return [...handleSortAlphabetical(flags)].reverse();
  98. case OrderBy.OLDEST:
  99. return [...flags].reverse();
  100. default:
  101. return flags;
  102. }
  103. };
  104. export enum ProviderOptions {
  105. LAUNCHDARKLY = 'LaunchDarkly',
  106. GENERIC = 'Generic',
  107. }
  108. export enum IntegrationOptions {
  109. LAUNCHDARKLY = 'LaunchDarkly',
  110. OPENFEATURE = 'OpenFeature',
  111. GENERIC = 'Generic',
  112. }
  113. export const PROVIDER_OPTION_TO_URLS: Record<ProviderOptions, string | undefined> = {
  114. [ProviderOptions.LAUNCHDARKLY]:
  115. 'https://app.launchdarkly.com/settings/integrations/webhooks/new?q=Webhooks',
  116. [ProviderOptions.GENERIC]:
  117. 'https://docs.sentry.io/organization/integrations/feature-flag/generic/#set-up-change-tracking',
  118. };