123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- import {browserHistory} from 'react-router';
- import styled from '@emotion/styled';
- import {Location} from 'history';
- import Breadcrumbs, {Crumb, CrumbDropdown} from 'app/components/breadcrumbs';
- import IdBadge from 'app/components/idBadge';
- import {t} from 'app/locale';
- import space from 'app/styles/space';
- import {Project} from 'app/types';
- import {isActiveSuperuser} from 'app/utils/isActiveSuperuser';
- import recreateRoute from 'app/utils/recreateRoute';
- import withProjects from 'app/utils/withProjects';
- import MenuItem from 'app/views/settings/components/settingsBreadcrumb/menuItem';
- import {RouteWithName} from 'app/views/settings/components/settingsBreadcrumb/types';
- type Props = {
- orgSlug: string;
- title: string;
- projectSlug: string;
- projects: Project[];
- routes: RouteWithName[];
- location: Location;
- alertName?: string;
- canChangeProject?: boolean;
- };
- function BuilderBreadCrumbs(props: Props) {
- const {
- orgSlug,
- title,
- alertName,
- projectSlug,
- projects,
- routes,
- canChangeProject,
- location,
- } = props;
- const project = projects.find(({slug}) => projectSlug === slug);
- const isSuperuser = isActiveSuperuser();
- const projectCrumbLink = {
- to: `/organizations/${orgSlug}/alerts/rules/?project=${project?.id}`,
- label: <IdBadge project={project} avatarSize={18} disableLink />,
- preserveGlobalSelection: true,
- };
- const projectCrumbDropdown = {
- onSelect: ({value}) => {
- browserHistory.push(
- recreateRoute('', {
- routes,
- params: {orgId: orgSlug, projectId: value},
- location,
- })
- );
- },
- label: <IdBadge project={project} avatarSize={18} disableLink />,
- items: projects
- .filter(proj => proj.isMember || isSuperuser)
- .map((proj, index) => ({
- index,
- value: proj.slug,
- label: (
- <MenuItem>
- <IdBadge
- project={proj}
- avatarProps={{consistentWidth: true}}
- avatarSize={18}
- disableLink
- />
- </MenuItem>
- ),
- searchKey: proj.slug,
- })),
- };
- const projectCrumb = canChangeProject ? projectCrumbDropdown : projectCrumbLink;
- const crumbs: (Crumb | CrumbDropdown)[] = [
- {
- to: `/organizations/${orgSlug}/alerts/rules/`,
- label: t('Alerts'),
- preserveGlobalSelection: true,
- },
- projectCrumb,
- {
- label: title,
- ...(alertName
- ? {
- to: `/organizations/${orgSlug}/alerts/${projectSlug}/wizard`,
- preserveGlobalSelection: true,
- }
- : {}),
- },
- ];
- if (alertName) {
- crumbs.push({label: alertName});
- }
- return <StyledBreadcrumbs crumbs={crumbs} />;
- }
- const StyledBreadcrumbs = styled(Breadcrumbs)`
- font-size: 18px;
- margin-bottom: ${space(3)};
- `;
- export default withProjects(BuilderBreadCrumbs);
|