import { FormEvent, useEffect, useState } from 'react'; import { RawTimeRange, TimeRange } from '@grafana/data'; import { config } from '@grafana/runtime'; import { Button, ClipboardButton, Field, Label, Modal, Stack, Switch, TextArea } from '@grafana/ui'; import { t, Trans } from 'app/core/internationalization'; import { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions'; import { ThemePicker } from './ThemePicker'; import { ShareModalTabProps } from './types'; import { buildIframeHtml, getTrackingSource } from './utils'; interface Props extends Omit { panel?: { timeFrom?: string; id: number }; dashboard: { uid: string; time: RawTimeRange }; range?: TimeRange; buildIframe?: typeof buildIframeHtml; onCancelClick?: () => void; } export function ShareEmbed({ panel, dashboard, range, onCancelClick, buildIframe = buildIframeHtml }: Props) { const [useCurrentTimeRange, setUseCurrentTimeRange] = useState(true); const [selectedTheme, setSelectedTheme] = useState('current'); const [iframeHtml, setIframeHtml] = useState(''); useEffect(() => { const newIframeHtml = buildIframe(useCurrentTimeRange, dashboard.uid, selectedTheme, panel, range); setIframeHtml(newIframeHtml); }, [selectedTheme, useCurrentTimeRange, dashboard, panel, range, buildIframe]); const onIframeHtmlChange = (event: FormEvent) => { setIframeHtml(event.currentTarget.value); }; const onUseCurrentTimeRangeChange = () => { setUseCurrentTimeRange((useCurTimeRange) => !useCurTimeRange); }; const onThemeChange = (value: string) => { setSelectedTheme(value); }; const clipboardButton = ( iframeHtml} onClipboardCopy={() => { DashboardInteractions.embedSnippetCopy({ currentTimeRange: useCurrentTimeRange, theme: selectedTheme, shareResource: getTrackingSource(panel), }); }} > Copy to clipboard ); return ( <>

Generate HTML for embedding an iframe with this panel