import {Fragment} from 'react';
import styled from '@emotion/styled';
import {Breadcrumbs, type Crumb} from 'sentry/components/breadcrumbs';
import ButtonBar from 'sentry/components/buttonBar';
import FeedbackWidgetButton from 'sentry/components/feedback/widget/feedbackWidgetButton';
import * as Layout from 'sentry/components/layouts/thirds';
import {TabList} from 'sentry/components/tabs';
import type {TabListItemProps} from 'sentry/components/tabs/item';
import {IconBusiness} from 'sentry/icons';
import {space} from 'sentry/styles/space';
import useOrganization from 'sentry/utils/useOrganization';
import {useModuleTitles} from 'sentry/views/insights/common/utils/useModuleTitle';
import {
type RoutableModuleNames,
useModuleURLBuilder,
} from 'sentry/views/insights/common/utils/useModuleURL';
import {OVERVIEW_PAGE_TITLE} from 'sentry/views/insights/pages/settings';
import {isModuleEnabled, isModuleVisible} from 'sentry/views/insights/pages/utils';
import type {ModuleName} from 'sentry/views/insights/types';
export type Props = {
domainBaseUrl: string;
domainTitle: string;
modules: ModuleName[];
selectedModule: ModuleName | undefined;
additionalBreadCrumbs?: Crumb[];
additonalHeaderActions?: React.ReactNode;
headerTitle?: React.ReactNode;
hideDefaultTabs?: boolean;
tabs?: {onTabChange: (key: string) => void; tabList: React.ReactNode; value: string};
};
export function DomainViewHeader({
modules,
headerTitle,
domainTitle,
selectedModule,
hideDefaultTabs,
additonalHeaderActions,
additionalBreadCrumbs = [],
domainBaseUrl,
tabs,
}: Props) {
const organization = useOrganization();
const moduleURLBuilder = useModuleURLBuilder();
const crumbs: Crumb[] = [
{
label: domainTitle,
to: domainBaseUrl,
preservePageFilters: true,
},
...additionalBreadCrumbs,
];
const tabValue =
hideDefaultTabs && tabs?.value ? tabs.value : selectedModule ?? OVERVIEW_PAGE_TITLE;
const tabList: TabListItemProps[] = [
{
key: OVERVIEW_PAGE_TITLE,
children: OVERVIEW_PAGE_TITLE,
to: domainBaseUrl,
},
...modules
.filter(moduleName => isModuleVisible(moduleName, organization))
.map(moduleName => ({
key: moduleName,
children: ,
to: `${moduleURLBuilder(moduleName as RoutableModuleNames)}/`,
})),
];
return (
{crumbs.length > 1 && }
{headerTitle || domainTitle}
{additonalHeaderActions}
{!hideDefaultTabs && (
{tabList.map(tab => (
))}
)}
{hideDefaultTabs && tabs && tabs.tabList}
);
}
function TabLabel({moduleName}: {moduleName: ModuleName}) {
const moduleTitles = useModuleTitles();
const organization = useOrganization();
const showBusinessIcon = !isModuleEnabled(moduleName, organization);
if (showBusinessIcon) {
return (
{moduleTitles[moduleName]}
);
}
return {moduleTitles[moduleName]};
}
const TabWithIconContainer = styled('div')`
display: inline-flex;
align-items: center;
text-align: left;
gap: ${space(0.5)};
`;