import {Fragment, MouseEventHandler} from 'react'; import {browserHistory} from 'react-router'; import styled from '@emotion/styled'; import SwitchButton from 'sentry/components/switchButton'; import {t} from 'sentry/locale'; import {space} from 'sentry/styles/space'; import {useLocation} from 'sentry/utils/useLocation'; import ResourceTable from 'sentry/views/performance/browser/resources/jsCssView/resourceTable'; import DomainSelector from 'sentry/views/performance/browser/resources/shared/domainSelector'; import SelectControlWithProps from 'sentry/views/performance/browser/resources/shared/selectControlWithProps'; import { BrowserStarfishFields, useResourceModuleFilters, } from 'sentry/views/performance/browser/resources/utils/useResourceFilters'; import {useResourcePagesQuery} from 'sentry/views/performance/browser/resources/utils/useResourcePagesQuery'; import {useResourceSort} from 'sentry/views/performance/browser/resources/utils/useResourceSort'; const { SPAN_OP: RESOURCE_TYPE, SPAN_DOMAIN, TRANSACTION, RESOURCE_RENDER_BLOCKING_STATUS, } = BrowserStarfishFields; type Option = { label: string; value: string; }; function JSCSSView() { const filters = useResourceModuleFilters(); const sort = useResourceSort(); const location = useLocation(); const handleBlockingToggle: MouseEventHandler = () => { const hasBlocking = filters[RESOURCE_RENDER_BLOCKING_STATUS] === 'blocking'; const newBlocking = hasBlocking ? undefined : 'blocking'; browserHistory.push({ ...location, query: { ...location.query, [RESOURCE_RENDER_BLOCKING_STATUS]: newBlocking, }, }); }; return ( {t('Render Blocking')} ); } function ResourceTypeSelector({value}: {value?: string}) { const location = useLocation(); const options: Option[] = [ {value: '', label: 'All'}, {value: 'resource.script', label: `${t('JavaScript')} (.js)`}, {value: 'resource.css', label: `${t('Stylesheet')} (.css)`}, ]; return ( { browserHistory.push({ ...location, query: { ...location.query, [RESOURCE_TYPE]: newValue?.value, }, }); }} /> ); } function PageSelector({value}: {value?: string}) { const location = useLocation(); const {data: pages} = useResourcePagesQuery(); const options: Option[] = [ {value: '', label: 'All'}, ...pages.map(page => ({value: page, label: page})), ]; return ( { browserHistory.push({ ...location, query: { ...location.query, [TRANSACTION]: newValue?.value, }, }); }} /> ); } const SwitchContainer = styled('div')` display: flex; align-items: center; column-gap: ${space(1)}; `; export const FilterOptionsContainer = styled('div')` display: grid; grid-template-columns: repeat(4, 1fr); gap: ${space(2)}; margin-bottom: ${space(2)}; max-width: 800px; `; export default JSCSSView;