12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- import type {AlertProps} from 'sentry/components/alert';
- import {t} from 'sentry/locale';
- import type {EventGroupingConfig} from 'sentry/types/event';
- import type {Project} from 'sentry/types/project';
- export function getGroupingChanges(
- project: Project,
- groupingConfigs: EventGroupingConfig[]
- ): {
- latestGroupingConfig: EventGroupingConfig | null;
- riskLevel: number;
- updateNotes: string;
- } {
- const byId: Record<string, EventGroupingConfig> = {};
- let updateNotes: string = '';
- let riskLevel: number = 0;
- let latestGroupingConfig: EventGroupingConfig | null = null;
- groupingConfigs.forEach(cfg => {
- byId[cfg.id] = cfg;
- if (cfg.latest && project.groupingConfig !== cfg.id) {
- updateNotes = cfg.changelog;
- latestGroupingConfig = cfg;
- riskLevel = cfg.risk;
- }
- });
- if (latestGroupingConfig) {
- let next = (latestGroupingConfig as EventGroupingConfig).base ?? '';
- while (next !== project.groupingConfig) {
- const cfg = byId[next];
- if (!cfg) {
- break;
- }
- riskLevel = Math.max(riskLevel, cfg.risk);
- updateNotes = cfg.changelog + '\n' + updateNotes;
- next = cfg.base ?? '';
- }
- }
- return {updateNotes, riskLevel, latestGroupingConfig};
- }
- export function getGroupingRisk(riskLevel: number): {
- alertType: AlertProps['type'];
- riskNote: React.ReactNode;
- } {
- switch (riskLevel) {
- case 0:
- return {
- riskNote: t('This upgrade has the chance to create some new issues.'),
- alertType: 'info',
- };
- case 1:
- return {
- riskNote: t('This upgrade will create some new issues.'),
- alertType: 'warning',
- };
- case 2:
- return {
- riskNote: (
- <strong>
- {t(
- 'The new grouping strategy is incompatible with the current and will create entirely new issues.'
- )}
- </strong>
- ),
- alertType: 'error',
- };
- default:
- return {riskNote: undefined, alertType: undefined};
- }
- }
|