useAvailableDurationAggregates.tsx 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import {decodeScalar} from 'sentry/utils/queryString';
  2. import {useLocation} from 'sentry/utils/useLocation';
  3. import useOrganization from 'sentry/utils/useOrganization';
  4. import {DEFAULT_DURATION_AGGREGATE} from 'sentry/views/performance/database/settings';
  5. // TODO: Type more strictly, these should be limited to only valid aggregate
  6. // functions
  7. type Query = {
  8. aggregate: string;
  9. };
  10. type Result = {
  11. availableAggregates: string[];
  12. selectedAggregate: string;
  13. };
  14. export function useAvailableDurationAggregates(): Result {
  15. const organization = useOrganization();
  16. const location = useLocation<Query>();
  17. let availableAggregates = ['avg'];
  18. const arePercentilesEnabled = organization.features?.includes(
  19. 'performance-database-view-percentiles'
  20. );
  21. if (arePercentilesEnabled) {
  22. availableAggregates = [...availableAggregates, ...['p50', 'p75', 'p95', 'p99']];
  23. }
  24. // TODO: Enable this on the backend
  25. const isMaxEnabled = false;
  26. if (isMaxEnabled) {
  27. availableAggregates.push('max');
  28. }
  29. let selectedAggregate = decodeScalar(
  30. location.query.aggregate,
  31. DEFAULT_DURATION_AGGREGATE
  32. );
  33. if (!availableAggregates.includes(selectedAggregate)) {
  34. selectedAggregate = DEFAULT_DURATION_AGGREGATE;
  35. }
  36. return {
  37. selectedAggregate,
  38. availableAggregates,
  39. };
  40. }