import { useMemo } from 'react'; import { selectors } from '@grafana/e2e-selectors'; import { Alert, Input, Switch, TextLink } from '@grafana/ui'; import { t, Trans } from 'app/core/internationalization'; import { OptionsPaneCategoryDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneCategoryDescriptor'; import { OptionsPaneItemDescriptor } from 'app/features/dashboard/components/PanelEditor/OptionsPaneItemDescriptor'; import { RepeatRowSelect2 } from 'app/features/dashboard/components/RepeatRowSelect/RepeatRowSelect'; import { SHARED_DASHBOARD_QUERY } from 'app/plugins/datasource/dashboard/constants'; import { MIXED_DATASOURCE_NAME } from 'app/plugins/datasource/mixed/MixedDataSource'; import { EditPaneHeader } from '../../edit-pane/EditPaneHeader'; import { getDashboardSceneFor, getQueryRunnerFor } from '../../utils/utils'; import { DashboardScene } from '../DashboardScene'; import { DashboardLayoutSelector } from '../layouts-shared/DashboardLayoutSelector'; import { RowItem } from './RowItem'; export function getEditOptions(model: RowItem): OptionsPaneCategoryDescriptor[] { const { layout } = model.useState(); const rowOptions = useMemo(() => { const dashboard = getDashboardSceneFor(model); const editPaneHeaderOptions = new OptionsPaneCategoryDescriptor({ title: t('dashboard.rows-layout.row-options.title', 'Row'), id: 'row-options', isOpenable: false, renderTitle: () => ( model.onDelete()} /> ), }) .addItem( new OptionsPaneItemDescriptor({ title: t('dashboard.rows-layout.row-options.title-option', 'Title'), render: () => , }) ) .addItem( new OptionsPaneItemDescriptor({ title: t('dashboard.layout.common.layout', 'Layout'), render: () => , }) ); if (layout.getOptions) { for (const option of layout.getOptions()) { editPaneHeaderOptions.addItem(option); } } editPaneHeaderOptions .addItem( new OptionsPaneItemDescriptor({ title: t('dashboard.rows-layout.row-options.repeat.variable.title', 'Repeat for'), render: () => , }) ) .addItem( new OptionsPaneItemDescriptor({ title: t('dashboard.rows-layout.row-options.height.hide-row-header', 'Hide row header'), render: () => , }) ); return editPaneHeaderOptions; }, [layout, model]); return [rowOptions]; } function RowTitleInput({ row }: { row: RowItem }) { const { title } = row.useState(); return ( row.onChangeTitle(e.currentTarget.value)} /> ); } function RowHeaderSwitch({ row }: { row: RowItem }) { const { isHeaderHidden = false } = row.useState(); return row.onHeaderHiddenToggle()} />; } function RowRepeatSelect({ row, dashboard }: { row: RowItem; dashboard: DashboardScene }) { const { layout } = row.useState(); const isAnyPanelUsingDashboardDS = layout.getVizPanels().some((vizPanel) => { const runner = getQueryRunnerFor(vizPanel); return ( runner?.state.datasource?.uid === SHARED_DASHBOARD_QUERY || (runner?.state.datasource?.uid === MIXED_DATASOURCE_NAME && runner?.state.queries.some((query) => query.datasource?.uid === SHARED_DASHBOARD_QUERY)) ); }); return ( <> row.onChangeRepeat(repeat)} /> {isAnyPanelUsingDashboardDS ? (

Panels in this row use the {{ SHARED_DASHBOARD_QUERY }} data source. These panels will reference the panel in the original row, not the ones in the repeated rows.

Learn more
) : undefined} ); }