human-readable-operator.tsx 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { DATETIME_OPERATORS } from './filters/data-table-datetime-filter.js';
  2. import { BOOLEAN_OPERATORS } from './filters/data-table-boolean-filter.js';
  3. import { ID_OPERATORS } from './filters/data-table-id-filter.js';
  4. import { NUMBER_OPERATORS } from './filters/data-table-number-filter.js';
  5. import { STRING_OPERATORS } from './filters/data-table-string-filter.js';
  6. import { Trans } from '@/lib/trans.js';
  7. type Operator =
  8. | (typeof DATETIME_OPERATORS)[number]
  9. | (typeof BOOLEAN_OPERATORS)[number]
  10. | (typeof ID_OPERATORS)[number]
  11. | (typeof NUMBER_OPERATORS)[number]
  12. | (typeof STRING_OPERATORS)[number];
  13. export function HumanReadableOperator({
  14. operator,
  15. mode = 'long',
  16. }: {
  17. operator: Operator;
  18. mode?: 'short' | 'long';
  19. }) {
  20. switch (operator) {
  21. case 'eq':
  22. return mode === 'short' ? <Trans>=</Trans> : <Trans>is equal to</Trans>;
  23. case 'notEq':
  24. return mode === 'short' ? <Trans>!=</Trans> : <Trans>is not equal to</Trans>;
  25. case 'before':
  26. return mode === 'short' ? <Trans>before</Trans> : <Trans>is before</Trans>;
  27. case 'after':
  28. return mode === 'short' ? <Trans>after</Trans> : <Trans>is after</Trans>;
  29. case 'between':
  30. return mode === 'short' ? <Trans>between</Trans> : <Trans>is between</Trans>;
  31. case 'isNull':
  32. return mode === 'short' ? <Trans>is null</Trans> : <Trans>is null</Trans>;
  33. case 'in':
  34. return mode === 'short' ? <Trans>in</Trans> : <Trans>is in</Trans>;
  35. case 'notIn':
  36. return mode === 'short' ? <Trans>not in</Trans> : <Trans>is not in</Trans>;
  37. case 'gt':
  38. return mode === 'short' ? <Trans>greater than</Trans> : <Trans>is greater than</Trans>;
  39. case 'gte':
  40. return mode === 'short' ? (
  41. <Trans>greater than or equal</Trans>
  42. ) : (
  43. <Trans>is greater than or equal to</Trans>
  44. );
  45. case 'lt':
  46. return mode === 'short' ? <Trans>less than</Trans> : <Trans>is less than</Trans>;
  47. case 'lte':
  48. return mode === 'short' ? (
  49. <Trans>less than or equal</Trans>
  50. ) : (
  51. <Trans>is less than or equal to</Trans>
  52. );
  53. case 'contains':
  54. return mode === 'short' ? <Trans>contains</Trans> : <Trans>contains</Trans>;
  55. case 'notContains':
  56. return mode === 'short' ? <Trans>does not contain</Trans> : <Trans>does not contain</Trans>;
  57. case 'regex':
  58. return mode === 'short' ? <Trans>matches regex</Trans> : <Trans>matches regex</Trans>;
  59. default:
  60. operator satisfies never;
  61. return <Trans>{operator}</Trans>;
  62. }
  63. }