1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- 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 {
- playlistUid: string;
- onDismiss: () => void;
- }
- export const ShareModal = ({ playlistUid, 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/${playlistUid}`, 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>
- );
- };
|