import {browserHistory} from 'react-router';
import styled from '@emotion/styled';
import Breadcrumbs from 'sentry/components/breadcrumbs';
import FeatureBadge from 'sentry/components/featureBadge';
import SelectControl, {
ControlProps,
} from 'sentry/components/forms/controls/selectControl';
import * as Layout from 'sentry/components/layouts/thirds';
import {DatePageFilter} from 'sentry/components/organizations/datePageFilter';
import PageFilterBar from 'sentry/components/organizations/pageFilterBar';
import {ProjectPageFilter} from 'sentry/components/organizations/projectPageFilter';
import {t} from 'sentry/locale';
import {space} from 'sentry/styles/space';
import {useLocation} from 'sentry/utils/useLocation';
import useOrganization from 'sentry/utils/useOrganization';
import {normalizeUrl} from 'sentry/utils/withDomainRequired';
import {ResourceSidebar} from 'sentry/views/performance/browser/resources/resourceSidebar';
import ResourceTable from 'sentry/views/performance/browser/resources/resourceTable';
import {useResourceDomainsQuery} from 'sentry/views/performance/browser/resources/utils/useResourceDomansQuery';
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';
import {ModulePageProviders} from 'sentry/views/performance/database/modulePageProviders';
const {RESOURCE_TYPE, SPAN_DOMAIN, TRANSACTION, DESCRIPTION} = BrowserStarfishFields;
type Option = {
label: string;
value: string;
};
function ResourcesLandingPage() {
const organization = useOrganization();
const filters = useResourceModuleFilters();
const sort = useResourceSort();
return (
{t('Resources')}
);
}
function DomainSelector({value}: {value?: string}) {
const location = useLocation();
const {data} = useResourceDomainsQuery();
const options: Option[] = [
{value: '', label: 'All'},
...data.map(domain => ({
value: domain,
label: domain,
})),
];
return (
{
browserHistory.push({
...location,
query: {
...location.query,
[SPAN_DOMAIN]: newValue?.value,
},
});
}}
/>
);
}
function ResourceTypeSelector({value}: {value?: string}) {
const location = useLocation();
const options: Option[] = [
{value: '', label: 'All'},
{value: 'resource.script', label: `${t('JavaScript')} (.js)`},
{value: '.css', label: `${t('Stylesheet')} (.css)`},
{value: 'resource.img', label: `${t('Images')} (.png, .jpg, .jpeg, .gif, etc)`},
];
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,
},
});
}}
/>
);
}
function SelectControlWithProps(props: ControlProps & {options: Option[]}) {
return ;
}
export const PaddedContainer = styled('div')`
margin-bottom: ${space(2)};
`;
const FilterOptionsContainer = styled('div')`
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: ${space(2)};
margin-bottom: ${space(2)};
max-width: 800px;
`;
export default ResourcesLandingPage;