import styled from '@emotion/styled';
import Feature from 'sentry/components/acl/feature';
import {DropdownMenu, type MenuItemProps} from 'sentry/components/dropdownMenu';
import {IconEllipsis} from 'sentry/icons';
import {t} from 'sentry/locale';
import {trackAnalytics} from 'sentry/utils/analytics';
import useOrganization from 'sentry/utils/useOrganization';
import usePageFilters from 'sentry/utils/usePageFilters';
import useProjects from 'sentry/utils/useProjects';
import {Dataset} from 'sentry/views/alerts/rules/metric/types';
import {useAddToDashboard} from 'sentry/views/explore/hooks/useAddToDashboard';
import {getAlertsUrl} from 'sentry/views/insights/common/utils/getAlertsUrl';
function ChartContextMenu({
visualizeIndex,
visualizeYAxes,
query,
interval,
}: {
interval: string;
query: string;
visualizeIndex: number;
visualizeYAxes: string[];
}) {
const {addToDashboard} = useAddToDashboard();
const organization = useOrganization();
const {projects} = useProjects();
const pageFilters = usePageFilters();
const project =
projects.length === 1
? projects[0]
: projects.find(p => p.id === `${pageFilters.selection.projects[0]}`);
const alertsUrls = visualizeYAxes.map((yAxis, index) => ({
key: `${yAxis}-${index}`,
label: yAxis,
to: getAlertsUrl({
project,
query,
pageFilters: pageFilters.selection,
aggregate: yAxis,
orgSlug: organization.slug,
dataset: Dataset.EVENTS_ANALYTICS_PLATFORM,
interval,
}),
onAction: () => {
trackAnalytics('trace_explorer.save_as', {
save_type: 'alert',
ui_source: 'chart',
organization,
});
return undefined;
},
}));
const items: MenuItemProps[] = [];
if (organization.features.includes('alerts-eap')) {
items.push({
key: 'create-alert',
label: t('Create an alert for'),
children: alertsUrls ?? [],
disabled: !alertsUrls || alertsUrls.length === 0,
isSubmenu: true,
});
}
if (organization.features.includes('dashboards-eap')) {
const disableAddToDashboard = !organization.features.includes('dashboards-edit');
items.push({
key: 'add-to-dashboard',
textValue: t('Add to Dashboard'),
label: (
{t('Add to Dashboard')}}
>
{t('Add to Dashboard')}
),
disabled: disableAddToDashboard,
onAction: () => {
if (disableAddToDashboard) {
return undefined;
}
trackAnalytics('trace_explorer.save_as', {
save_type: 'dashboard',
ui_source: 'chart',
organization,
});
return addToDashboard(visualizeIndex);
},
});
}
if (items.length === 0) {
return null;
}
return (
,
}}
position="bottom-end"
items={items}
/>
);
}
export default ChartContextMenu;
const DisabledText = styled('span')`
color: ${p => p.theme.disabled};
`;