mirror of https://github.com/grafana/grafana
Playlists: Enable sharing direct links to playlists (#44161)
* Special case mixed datasources... :/ * Hacky implementation of playlist share modal * Refactor StartModal into PlaylistSettingsModal * Revert "Refactor StartModal into PlaylistSettingsModal" This reverts commitpull/44197/heade71fc33865
. * Create new ShareModal component * Revert "Special case mixed datasources... :/" This reverts commitdd0e3ea4a8
. * PlaylistMode instead of PlaylistModes * kick drone
parent
7dab52869e
commit
252645b330
@ -0,0 +1,68 @@ |
||||
import React, { useState } from 'react'; |
||||
import { AppEvents, SelectableValue, UrlQueryMap, urlUtil } from '@grafana/data'; |
||||
import { Checkbox, ClipboardButton, Field, FieldSet, Icon, Input, Modal, RadioButtonGroup } from '@grafana/ui'; |
||||
import appEvents from 'app/core/app_events'; |
||||
import { buildBaseUrl } from '../dashboard/components/ShareModal/utils'; |
||||
import { PlaylistMode } from './types'; |
||||
|
||||
interface ShareModalProps { |
||||
playlistId: number; |
||||
onDismiss: () => void; |
||||
} |
||||
|
||||
export const ShareModal = ({ playlistId, onDismiss }: ShareModalProps) => { |
||||
const [mode, setMode] = useState<PlaylistMode>(false); |
||||
const [autoFit, setAutofit] = useState(false); |
||||
|
||||
const modes: Array<SelectableValue<PlaylistMode>> = [ |
||||
{ label: 'Normal', value: false }, |
||||
{ label: 'TV', value: 'tv' }, |
||||
{ label: 'Kiosk', value: true }, |
||||
]; |
||||
|
||||
const onShareUrlCopy = () => { |
||||
appEvents.emit(AppEvents.alertSuccess, ['Content copied to clipboard']); |
||||
}; |
||||
|
||||
const params: UrlQueryMap = {}; |
||||
if (mode) { |
||||
params.kiosk = mode; |
||||
} |
||||
if (autoFit) { |
||||
params.autofitpanels = true; |
||||
} |
||||
|
||||
const shareUrl = urlUtil.renderUrl(`${buildBaseUrl()}/play/${playlistId}`, params); |
||||
|
||||
return ( |
||||
<Modal isOpen={true} title="Share playlist" onDismiss={onDismiss}> |
||||
<FieldSet> |
||||
<Field label="Mode"> |
||||
<RadioButtonGroup value={mode} options={modes} onChange={setMode} /> |
||||
</Field> |
||||
<Field> |
||||
<Checkbox |
||||
label="Autofit" |
||||
description="Panel heights will be adjusted to fit screen size" |
||||
name="autofix" |
||||
value={autoFit} |
||||
onChange={(e) => setAutofit(e.currentTarget.checked)} |
||||
/> |
||||
</Field> |
||||
|
||||
<Field label="Link URL"> |
||||
<Input |
||||
id="link-url-input" |
||||
value={shareUrl} |
||||
readOnly |
||||
addonAfter={ |
||||
<ClipboardButton variant="primary" getText={() => shareUrl} onClipboardCopy={onShareUrlCopy}> |
||||
<Icon name="copy" /> Copy |
||||
</ClipboardButton> |
||||
} |
||||
/> |
||||
</Field> |
||||
</FieldSet> |
||||
</Modal> |
||||
); |
||||
}; |
Loading…
Reference in new issue