import { css, cx } from '@emotion/css'; import { Controller, useForm } from 'react-hook-form'; import { GrafanaTheme2 } from '@grafana/data'; import { selectors as e2eSelectors } from '@grafana/e2e-selectors'; import { sceneGraph } from '@grafana/scenes'; import { FieldSet, Icon, Label, Spinner, Stack, Text, TimeRangeLabel, Tooltip, useStyles2 } from '@grafana/ui'; import { Switch } from '@grafana/ui/src/components/Switch/Switch'; import { contextSrv } from 'app/core/core'; import { t, Trans } from 'app/core/internationalization'; import { publicDashboardApi, useUpdatePublicDashboardMutation } from 'app/features/dashboard/api/publicDashboardApi'; import { ConfigPublicDashboardForm } from 'app/features/dashboard/components/ShareModal/SharePublicDashboard/ConfigPublicDashboard/ConfigPublicDashboard'; import { DashboardInteractions } from 'app/features/dashboard-scene/utils/interactions'; import { AccessControlAction } from 'app/types'; import { useShareDrawerContext } from '../../ShareDrawer/ShareDrawerContext'; const selectors = e2eSelectors.pages.ShareDashboardDrawer.ShareExternally.Configuration; type FormInput = Omit; export default function ShareConfiguration() { const styles = useStyles2(getStyles); const { dashboard } = useShareDrawerContext(); const [update, { isLoading }] = useUpdatePublicDashboardMutation(); const { data: publicDashboard } = publicDashboardApi.endpoints?.getPublicDashboard.useQueryState( dashboard.state.uid! ); const hasWritePermissions = contextSrv.hasPermission(AccessControlAction.DashboardsPublicWrite); const disableForm = isLoading || !hasWritePermissions; const timeRangeState = sceneGraph.getTimeRange(dashboard); const timeRange = timeRangeState.useState(); const { handleSubmit, setValue, control } = useForm({ defaultValues: { isAnnotationsEnabled: publicDashboard?.annotationsEnabled, isTimeSelectionEnabled: publicDashboard?.timeSelectionEnabled, }, }); const onChange = async (name: keyof FormInput, value: boolean) => { setValue(name, value); await handleSubmit((data) => onUpdate({ ...data, [name]: value }))(); }; const onUpdate = (data: FormInput) => { const { isAnnotationsEnabled, isTimeSelectionEnabled } = data; update({ dashboard: dashboard, payload: { ...publicDashboard!, annotationsEnabled: isAnnotationsEnabled, timeSelectionEnabled: isTimeSelectionEnabled, }, }); }; return ( Settings
( { DashboardInteractions.publicDashboardTimeSelectionChanged({ enabled: e.currentTarget.checked, }); onChange('isTimeSelectionEnabled', e.currentTarget.checked); }} label={t('public-dashboard.configuration.enable-time-range-label', 'Enable time range')} /> )} control={control} name="isTimeSelectionEnabled" /> ( { DashboardInteractions.publicDashboardAnnotationsSelectionChanged({ enabled: e.currentTarget.checked, }); onChange('isAnnotationsEnabled', e.currentTarget.checked); }} label={t('public-dashboard.configuration.display-annotations-label', 'Display annotations')} /> )} control={control} name="isAnnotationsEnabled" />
Time range
{isLoading && }
); } const getStyles = (theme: GrafanaTheme2) => ({ timeRange: css({ fontSize: theme.typography.bodySmall.fontSize, fontWeight: theme.typography.bodySmall.fontWeight, }), timeRangeValue: css({ color: theme.colors.text.secondary, }), });