mirror of
https://github.com/grafana/grafana.git
synced 2025-08-01 05:41:49 +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>
125 lines
2.8 KiB
TypeScript
125 lines
2.8 KiB
TypeScript
import { PureComponent } from 'react';
|
|
import { connect, ConnectedProps } from 'react-redux';
|
|
|
|
import { StoreState } from 'app/types';
|
|
|
|
import { initPanelState } from '../../panel/state/actions';
|
|
import { setPanelInstanceState } from '../../panel/state/reducers';
|
|
import { DashboardModel } from '../state/DashboardModel';
|
|
import { PanelModel } from '../state/PanelModel';
|
|
|
|
import { LazyLoader } from './LazyLoader';
|
|
import { PanelStateWrapper } from './PanelStateWrapper';
|
|
|
|
export interface OwnProps {
|
|
panel: PanelModel;
|
|
stateKey: string;
|
|
dashboard: DashboardModel;
|
|
isEditing: boolean;
|
|
isViewing: boolean;
|
|
isDraggable?: boolean;
|
|
width: number;
|
|
height: number;
|
|
lazy?: boolean;
|
|
timezone?: string;
|
|
hideMenu?: boolean;
|
|
}
|
|
|
|
const mapStateToProps = (state: StoreState, props: OwnProps) => {
|
|
const panelState = state.panels[props.stateKey];
|
|
if (!panelState) {
|
|
return { plugin: undefined };
|
|
}
|
|
|
|
return {
|
|
plugin: panelState.plugin,
|
|
instanceState: panelState.instanceState,
|
|
};
|
|
};
|
|
|
|
const mapDispatchToProps = {
|
|
initPanelState,
|
|
setPanelInstanceState,
|
|
};
|
|
|
|
const connector = connect(mapStateToProps, mapDispatchToProps);
|
|
|
|
export type Props = OwnProps & ConnectedProps<typeof connector>;
|
|
|
|
export class DashboardPanelUnconnected extends PureComponent<Props> {
|
|
static defaultProps: Partial<Props> = {
|
|
lazy: true,
|
|
};
|
|
|
|
componentDidMount() {
|
|
this.props.panel.isInView = !this.props.lazy;
|
|
if (!this.props.lazy) {
|
|
this.onPanelLoad();
|
|
}
|
|
}
|
|
|
|
onInstanceStateChange = (value: unknown) => {
|
|
this.props.setPanelInstanceState({ key: this.props.stateKey, value });
|
|
};
|
|
|
|
onVisibilityChange = (v: boolean) => {
|
|
this.props.panel.isInView = v;
|
|
};
|
|
|
|
onPanelLoad = () => {
|
|
if (!this.props.plugin) {
|
|
this.props.initPanelState(this.props.panel);
|
|
}
|
|
};
|
|
|
|
renderPanel = ({ isInView }: { isInView: boolean }) => {
|
|
const {
|
|
dashboard,
|
|
panel,
|
|
isViewing,
|
|
isEditing,
|
|
width,
|
|
height,
|
|
plugin,
|
|
timezone,
|
|
hideMenu,
|
|
isDraggable = true,
|
|
} = this.props;
|
|
|
|
if (!plugin) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<PanelStateWrapper
|
|
plugin={plugin}
|
|
panel={panel}
|
|
dashboard={dashboard}
|
|
isViewing={isViewing}
|
|
isEditing={isEditing}
|
|
isInView={isInView}
|
|
isDraggable={isDraggable}
|
|
width={width}
|
|
height={height}
|
|
onInstanceStateChange={this.onInstanceStateChange}
|
|
timezone={timezone}
|
|
hideMenu={hideMenu}
|
|
/>
|
|
);
|
|
};
|
|
|
|
render() {
|
|
const { width, height, lazy } = this.props;
|
|
|
|
return lazy ? (
|
|
<LazyLoader width={width} height={height} onChange={this.onVisibilityChange} onLoad={this.onPanelLoad}>
|
|
{this.renderPanel}
|
|
</LazyLoader>
|
|
) : (
|
|
this.renderPanel({ isInView: true })
|
|
);
|
|
}
|
|
}
|
|
|
|
export const DashboardPanel = connector(DashboardPanelUnconnected);
|