From e71fc338658d44c3f1ea260afdc447f7bf3c6092 Mon Sep 17 00:00:00 2001 From: Ashley Harrison Date: Tue, 18 Jan 2022 14:24:13 +0000 Subject: [PATCH] Refactor StartModal into PlaylistSettingsModal --- public/app/features/playlist/PlaylistPage.tsx | 10 +- .../features/playlist/PlaylistPageList.tsx | 91 ++----------------- .../playlist/PlaylistSettingsModal.tsx | 87 ++++++++++++++++++ public/app/features/playlist/StartModal.tsx | 54 ----------- 4 files changed, 101 insertions(+), 141 deletions(-) create mode 100644 public/app/features/playlist/PlaylistSettingsModal.tsx delete mode 100644 public/app/features/playlist/StartModal.tsx diff --git a/public/app/features/playlist/PlaylistPage.tsx b/public/app/features/playlist/PlaylistPage.tsx index 3477bc489d8..5ac33e7263d 100644 --- a/public/app/features/playlist/PlaylistPage.tsx +++ b/public/app/features/playlist/PlaylistPage.tsx @@ -11,7 +11,7 @@ import { ConfirmModal } from '@grafana/ui'; import PageActionBar from 'app/core/components/PageActionBar/PageActionBar'; import EmptyListCTA from '../../core/components/EmptyListCTA/EmptyListCTA'; import { deletePlaylist, getAllPlaylist } from './api'; -import { StartModal } from './StartModal'; +import { PlaylistSettingsModal } from './PlaylistSettingsModal'; import { PlaylistPageList } from './PlaylistPageList'; import { EmptyQueryListBanner } from './EmptyQueryListBanner'; @@ -101,7 +101,13 @@ export const PlaylistPage: FC = ({ navModel }) => { onDismiss={onDismissDelete} /> )} - {startPlaylist && setStartPlaylist(undefined)} />} + {startPlaylist && ( + setStartPlaylist(undefined)} + /> + )} ); diff --git a/public/app/features/playlist/PlaylistPageList.tsx b/public/app/features/playlist/PlaylistPageList.tsx index 08efa946101..de6c296b2a7 100644 --- a/public/app/features/playlist/PlaylistPageList.tsx +++ b/public/app/features/playlist/PlaylistPageList.tsx @@ -1,26 +1,11 @@ -import React, { useState } from 'react'; +import React from 'react'; import { PlaylistDTO } from './types'; -import { - Button, - Card, - Checkbox, - ClipboardButton, - Field, - FieldSet, - Icon, - Input, - LinkButton, - Modal, - ModalsController, - RadioButtonGroup, - useStyles2, -} from '@grafana/ui'; +import { Button, Card, LinkButton, ModalsController, useStyles2 } from '@grafana/ui'; import { contextSrv } from 'app/core/services/context_srv'; -import { AppEvents, GrafanaTheme2, SelectableValue, UrlQueryMap, urlUtil } from '@grafana/data'; +import { GrafanaTheme2 } from '@grafana/data'; import { css } from '@emotion/css'; import { DashNavButton } from '../dashboard/components/DashNav/DashNavButton'; -import appEvents from 'app/core/app_events'; -import { buildBaseUrl } from '../dashboard/components/ShareModal/utils'; +import { PlaylistSettingsModal } from './PlaylistSettingsModal'; interface Props { setStartPlaylist: (playlistItem: PlaylistDTO) => void; @@ -28,70 +13,6 @@ interface Props { playlists: PlaylistDTO[] | undefined; } -interface ShareModalProps { - playlistId: number; - onDismiss: () => void; -} - -type PlaylistModes = boolean | 'tv'; - -const PlaylistShareModal = ({ playlistId, onDismiss }: ShareModalProps) => { - const [mode, setMode] = useState(false); - const [autoFit, setAutofit] = useState(false); - - const modes: Array> = [ - { 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 ( - -
- - - - - setAutofit(e.currentTarget.checked)} - /> - - - - shareUrl} onClipboardCopy={onShareUrlCopy}> - Copy - - } - /> - -
-
- ); -}; - export const PlaylistPageList = ({ playlists, setStartPlaylist, setPlaylistToDelete }: Props) => { const styles = useStyles2(getStyles); return ( @@ -108,8 +29,8 @@ export const PlaylistPageList = ({ playlists, setStartPlaylist, setPlaylistToDel icon="share-alt" iconSize="lg" onClick={() => { - showModal(PlaylistShareModal, { - playlistId: playlist.id, + showModal(PlaylistSettingsModal, { + playlist: playlist, onDismiss: hideModal, }); }} diff --git a/public/app/features/playlist/PlaylistSettingsModal.tsx b/public/app/features/playlist/PlaylistSettingsModal.tsx new file mode 100644 index 00000000000..ed2e8eb3ad7 --- /dev/null +++ b/public/app/features/playlist/PlaylistSettingsModal.tsx @@ -0,0 +1,87 @@ +import React, { FC, useState } from 'react'; +import { AppEvents, SelectableValue, UrlQueryMap, urlUtil } from '@grafana/data'; +import { locationService } from '@grafana/runtime'; +import { PlaylistDTO } from './types'; +import { Button, 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'; + +export interface Props { + playlist: PlaylistDTO; + onDismiss: () => void; + showStartButton?: boolean; +} + +export const PlaylistSettingsModal: FC = ({ playlist, onDismiss, showStartButton }) => { + const [mode, setMode] = useState(false); + const [autoFit, setAutofit] = useState(false); + + const modes: Array> = [ + { label: 'Normal', value: false }, + { label: 'TV', value: 'tv' }, + { label: 'Kiosk', value: true }, + ]; + + const onStart = () => { + const params: any = {}; + if (mode) { + params.kiosk = mode; + } + if (autoFit) { + params.autofitpanels = true; + } + locationService.push(urlUtil.renderUrl(`/playlists/play/${playlist.id}`, params)); + }; + + 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/${playlist.id}`, params); + + return ( + +
+ + + + + setAutofit(e.currentTarget.checked)} + /> + + + shareUrl} onClipboardCopy={onShareUrlCopy}> + Copy + + } + /> + +
+ {showStartButton && ( + + + + )} +
+ ); +}; diff --git a/public/app/features/playlist/StartModal.tsx b/public/app/features/playlist/StartModal.tsx deleted file mode 100644 index 371eecb8bec..00000000000 --- a/public/app/features/playlist/StartModal.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import React, { FC, useState } from 'react'; -import { SelectableValue, urlUtil } from '@grafana/data'; -import { locationService } from '@grafana/runtime'; -import { PlaylistDTO } from './types'; -import { Button, Checkbox, Field, Modal, RadioButtonGroup, VerticalGroup } from '@grafana/ui'; - -export interface StartModalProps { - playlist: PlaylistDTO; - onDismiss: () => void; -} - -export const StartModal: FC = ({ playlist, onDismiss }) => { - const [mode, setMode] = useState(false); - const [autoFit, setAutofit] = useState(false); - - const modes: Array> = [ - { label: 'Normal', value: false }, - { label: 'TV', value: 'tv' }, - { label: 'Kiosk', value: true }, - ]; - - const onStart = () => { - const params: any = {}; - if (mode) { - params.kiosk = mode; - } - if (autoFit) { - params.autofitpanels = true; - } - locationService.push(urlUtil.renderUrl(`/playlists/play/${playlist.id}`, params)); - }; - - return ( - - - - - - setAutofit(e.currentTarget.checked)} - /> - - - - - - ); -};