mirror of
https://github.com/grafana/grafana.git
synced 2025-08-01 05:01:50 +08:00

* chore(angularsupport): delete feature toggle to disable angular * feat(angular-support): remove config.angularSupportEnabled * chore(jest): remove angular from setup file * chore(angular): delete angular deprecation ui components * refactor(angular): move migration featureflags into migration notice * chore(dashboard): remove angular deprecation notices * chore(annotations): remove angular editor loader * feat(appwrapper): no more angular app loading * feat(pluginscatalog): clean up angular plugin warnings and logic * chore(angular): delete angular app and associated files * feat(plugins): delete old angular graph plugin * feat(plugins): delete old angular table panel * feat(frontend): remove unused appEvent type * feat(dashboards): clean up angular from panel options and menu * feat(plugins): remove graph and table-old from built in plugins and delete sdk * feat(frontend): remove angular related imports in routes and explore graph * feat(theme): remove angular panel styles from global styles * chore(i18n): run make i18n-extract * test(api_plugins_test): refresh snapshot due to deleting old graph and table plugins * chore(angulardeprecation): delete angular migration notice components and usage * test(frontend): clean up tests that assert rendering angular deprecation notices * chore(backend): remove autoMigrateOldPanels feature flag * chore(config): remove angularSupportEnabled from config preventing loading angular plugins * chore(graphpanel): remove autoMigrateGraphPanel from feature toggles * chore(tablepanel): delete autoMigrateTablePanel feature flag * chore(piechart): delete autoMigratePiechartPanel feature flag * chore(worldmappanel): remove autoMigrateWorldmapPanel feature toggle * chore(statpanel): remove autoMigrateStatPanel feature flag * feat(dashboards): remove automigrate feature flags and always auto migrate angular panels * test(pluginsintegration): fix failing loader test * test(frontend): wip: fix failures and skip erroring migration tests * chore(codeowners): remove deleted angular related files and directories * test(graphite): remove angular mock from test file * test(dashboards): skip failing exporter test, remove angularSupportEnabled flags * test(dashbaord): skip another failing panel menu test * Tests: fixes pkg/services/pluginsintegration/loader/loader_test.go (#100505) * Tests: fixes pkg/services/pluginsintegration/plugins_integration_test.go * Trigger Build * chore(dashboards): remove angularComponent from getPanelMenu, update test * feat(dashboards): remove all usage of AngularComponent and getAngularLoader * chore(betterer): refresh results file * feat(plugins): remove PluginAngularBadge component and usage * feat(datasource_srv): remove usage of getLegacyAngularInjector * feat(queryeditor): delete AngularQueryComponentScope type * Chore: removes Angular from plugin_loader * Chore: remove angular from getPlugin * Chore: fix i18n * Trigger Build * Chore: remove more Angular from importPanelPlugin * Chore: remove search options warning * Chore: remove and deprecate Angular related * chore(angular): remove angular dependencies from core and runtime * chore(runtime): delete angular injector * chore(data): delete angular scope from event bus * chore(plugin-catalog): remove code pushing app plugins angular config page * chore(yarn): refresh lock file * chore(frontend): remove ng-loader from webpack configs, remove systemjs cjs plugin * chore(navigation): remove tether-drop cleanup from GrafanaRouter, delete dependency * chore(runtime): delete AngularLoader * chore(betterer): refresh results file * chore(betterer): fix out of sync results file * feat(query): fix type and import errors in QueryEditorRow * test(dashboards): delete skipped angular related tests * Tests: add back tests and fix betterer * Tests: fix broken test * Trigger build * chore(i18n): remove angular deprecation related strings * test: clean up connections and plugins catalog tests * chore(betterer): update results file --------- Co-authored-by: Hugo Häggmark <hugo.haggmark@gmail.com>
117 lines
3.6 KiB
TypeScript
117 lines
3.6 KiB
TypeScript
import * as React from 'react';
|
|
|
|
import { LinkModel, PanelData, PanelPlugin, renderMarkdown } from '@grafana/data';
|
|
import { getTemplateSrv, locationService } from '@grafana/runtime';
|
|
import { PanelPadding } from '@grafana/ui';
|
|
import { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions';
|
|
import { InspectTab } from 'app/features/inspector/types';
|
|
import { getPanelLinksSupplier } from 'app/features/panel/panellinks/linkSuppliers';
|
|
|
|
import { PanelHeaderTitleItems } from '../dashgrid/PanelHeader/PanelHeaderTitleItems';
|
|
import { DashboardModel } from '../state/DashboardModel';
|
|
import { PanelModel } from '../state/PanelModel';
|
|
|
|
interface CommonProps {
|
|
panel: PanelModel;
|
|
data: PanelData;
|
|
dashboard: DashboardModel;
|
|
plugin: PanelPlugin;
|
|
isViewing: boolean;
|
|
isEditing: boolean;
|
|
isInView: boolean;
|
|
isDraggable?: boolean;
|
|
width: number;
|
|
height: number;
|
|
hideMenu?: boolean;
|
|
}
|
|
|
|
export function getPanelChromeProps(props: CommonProps) {
|
|
function hasOverlayHeader() {
|
|
// always show normal header if we have time override
|
|
if (props.data.request && props.data.request.timeInfo) {
|
|
return false;
|
|
}
|
|
|
|
return !props.panel.hasTitle();
|
|
}
|
|
|
|
const onShowPanelDescription = () => {
|
|
const descriptionMarkdown = getTemplateSrv().replace(props.panel.description, props.panel.scopedVars);
|
|
const interpolatedDescription = renderMarkdown(descriptionMarkdown);
|
|
|
|
return interpolatedDescription;
|
|
};
|
|
|
|
const onShowPanelLinks = (): LinkModel[] => {
|
|
const linkSupplier = getPanelLinksSupplier(props.panel);
|
|
if (!linkSupplier) {
|
|
return [];
|
|
}
|
|
const panelLinks = linkSupplier && linkSupplier.getLinks(props.panel.replaceVariables);
|
|
|
|
return panelLinks.map((panelLink) => ({
|
|
...panelLink,
|
|
onClick: (...args) => {
|
|
DashboardInteractions.panelLinkClicked({ has_multiple_links: panelLinks.length > 1 });
|
|
panelLink.onClick?.(...args);
|
|
},
|
|
}));
|
|
};
|
|
|
|
const onOpenInspector = (e: React.SyntheticEvent, tab: string) => {
|
|
e.stopPropagation();
|
|
locationService.partial({ inspect: props.panel.id, inspectTab: tab });
|
|
};
|
|
|
|
const onOpenErrorInspect = (e: React.SyntheticEvent) => {
|
|
e.stopPropagation();
|
|
locationService.partial({ inspect: props.panel.id, inspectTab: InspectTab.Error });
|
|
DashboardInteractions.panelStatusMessageClicked();
|
|
};
|
|
|
|
const onCancelQuery = () => {
|
|
props.panel.getQueryRunner().cancelQuery();
|
|
DashboardInteractions.panelCancelQueryClicked({ data_state: props.data.state });
|
|
};
|
|
|
|
const padding: PanelPadding = props.plugin.noPadding ? 'none' : 'md';
|
|
const alertState = props.data.alertState?.state;
|
|
|
|
const showTitleItems =
|
|
(props.panel.links && props.panel.links.length > 0 && onShowPanelLinks) ||
|
|
(props.data.series.length > 0 && props.data.series.some((v) => (v.meta?.notices?.length ?? 0) > 0)) ||
|
|
(props.data.request && props.data.request.timeInfo) ||
|
|
alertState;
|
|
|
|
const titleItems = showTitleItems && (
|
|
<PanelHeaderTitleItems
|
|
alertState={alertState}
|
|
data={props.data}
|
|
panelId={props.panel.id}
|
|
panelLinks={props.panel.links}
|
|
onShowPanelLinks={onShowPanelLinks}
|
|
/>
|
|
);
|
|
|
|
const description = props.panel.description ? onShowPanelDescription : undefined;
|
|
|
|
const dragClass =
|
|
!(props.isViewing || props.isEditing) && Boolean(props.isDraggable ?? true) ? 'grid-drag-handle' : '';
|
|
|
|
const title = props.panel.getDisplayTitle();
|
|
|
|
return {
|
|
hasOverlayHeader,
|
|
onShowPanelDescription,
|
|
onShowPanelLinks,
|
|
onOpenInspector,
|
|
onOpenErrorInspect,
|
|
onCancelQuery,
|
|
padding,
|
|
description,
|
|
dragClass,
|
|
title,
|
|
titleItems,
|
|
};
|
|
}
|