import {browserHistory} from 'react-router';
import styled from '@emotion/styled';
import type {Location} from 'history';
import Breadcrumbs, {Crumb, CrumbDropdown} from 'sentry/components/breadcrumbs';
import IdBadge from 'sentry/components/idBadge';
import {t} from 'sentry/locale';
import space from 'sentry/styles/space';
import {Organization} from 'sentry/types';
import {isActiveSuperuser} from 'sentry/utils/isActiveSuperuser';
import recreateRoute from 'sentry/utils/recreateRoute';
import useProjects from 'sentry/utils/useProjects';
import MenuItem from 'sentry/views/settings/components/settingsBreadcrumb/menuItem';
import type {RouteWithName} from 'sentry/views/settings/components/settingsBreadcrumb/types';
interface Props {
location: Location;
organization: Organization;
projectSlug: string;
routes: RouteWithName[];
title: string;
alertName?: string;
alertType?: string;
canChangeProject?: boolean;
}
function BuilderBreadCrumbs({
title,
alertName,
projectSlug,
routes,
canChangeProject,
location,
organization,
alertType,
}: Props) {
const {projects} = useProjects();
const isSuperuser = isActiveSuperuser();
const project = projects.find(({slug}) => projectSlug === slug);
const hasAlertWizardV3 = organization.features.includes('alert-wizard-v3');
const label = (
);
const projectCrumbLink: Crumb = {
to: `/organizations/${organization.slug}/alerts/rules/?project=${project?.id}`,
label,
};
function getProjectDropdownCrumb(): CrumbDropdown {
return {
onSelect: ({value: projectId}) => {
// TODO(taylangocmen): recreating route doesn't update query, don't edit recreateRoute will add project selector for alert-wizard-v3
browserHistory.push(
recreateRoute('', {
routes,
params: hasAlertWizardV3
? {orgId: organization.slug, alertType}
: {orgId: organization.slug, projectId},
location,
})
);
},
label,
items: projects
.filter(proj => proj.isMember || isSuperuser)
.map((proj, index) => ({
index,
value: proj.slug,
label: (
),
searchKey: proj.slug,
})),
};
}
const projectCrumb = canChangeProject ? getProjectDropdownCrumb() : projectCrumbLink;
const crumbs: (Crumb | CrumbDropdown)[] = [
{
to: `/organizations/${organization.slug}/alerts/rules/`,
label: t('Alerts'),
preservePageFilters: true,
},
...(hasAlertWizardV3 ? [] : [projectCrumb]),
{
label: title,
...(alertName
? {
to: `/organizations/${organization.slug}/alerts/${projectSlug}/wizard`,
preservePageFilters: true,
}
: {}),
},
];
if (alertName) {
crumbs.push({label: alertName});
}
return ;
}
const StyledBreadcrumbs = styled(Breadcrumbs)`
font-size: 18px;
margin-bottom: ${space(3)};
`;
export default BuilderBreadCrumbs;