index.tsx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import {Fragment, MouseEventHandler} from 'react';
  2. import {browserHistory} from 'react-router';
  3. import styled from '@emotion/styled';
  4. import SwitchButton from 'sentry/components/switchButton';
  5. import {t} from 'sentry/locale';
  6. import {space} from 'sentry/styles/space';
  7. import {useLocation} from 'sentry/utils/useLocation';
  8. import ResourceTable from 'sentry/views/performance/browser/resources/imageView/resourceTable';
  9. import {useImageResourceSort} from 'sentry/views/performance/browser/resources/imageView/utils/useImageResourceSort';
  10. import {FilterOptionsContainer} from 'sentry/views/performance/browser/resources/jsCssView';
  11. import DomainSelector from 'sentry/views/performance/browser/resources/shared/domainSelector';
  12. import {useResourceModuleFilters} from 'sentry/views/performance/browser/resources/utils/useResourceFilters';
  13. import {SpanIndexedField} from 'sentry/views/starfish/types';
  14. const {RESOURCE_RENDER_BLOCKING_STATUS, SPAN_DOMAIN} = SpanIndexedField;
  15. function ImageView() {
  16. const sort = useImageResourceSort();
  17. const location = useLocation();
  18. const filters = useResourceModuleFilters();
  19. const handleBlockingToggle: MouseEventHandler = () => {
  20. const hasBlocking = filters[RESOURCE_RENDER_BLOCKING_STATUS] === 'blocking';
  21. const newBlocking = hasBlocking ? undefined : 'blocking';
  22. browserHistory.push({
  23. ...location,
  24. query: {
  25. ...location.query,
  26. [RESOURCE_RENDER_BLOCKING_STATUS]: newBlocking,
  27. },
  28. });
  29. };
  30. return (
  31. <Fragment>
  32. <FilterOptionsContainer columnCount={4}>
  33. <DomainSelector value={filters[SPAN_DOMAIN] || ''} />
  34. <SwitchContainer>
  35. <SwitchButton
  36. toggle={handleBlockingToggle}
  37. isActive={filters[RESOURCE_RENDER_BLOCKING_STATUS] === 'blocking'}
  38. />
  39. {t('Render Blocking')}
  40. </SwitchContainer>
  41. </FilterOptionsContainer>
  42. <ResourceTable sort={sort} />
  43. </Fragment>
  44. );
  45. }
  46. const SwitchContainer = styled('div')`
  47. display: flex;
  48. align-items: center;
  49. column-gap: ${space(1)};
  50. `;
  51. export default ImageView;