From 3abf9815f32f211080a37cf0b0ca2913b5df5f64 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Tue, 1 Oct 2019 17:03:27 +0200 Subject: [PATCH] Externalize modal dialogs --- .../components/CancelPendingActionModal.js | 39 ++++++ .../components/ExecutePendingActionModal.js | 41 +++++++ .../plugins/components/MultiPluginAction.js | 46 +------ .../components/MultiPluginActionModal.js | 113 +++--------------- .../components/UpdateAllActionModal.js | 39 ++++++ .../plugins/containers/PluginsOverview.js | 50 +++++++- 6 files changed, 185 insertions(+), 143 deletions(-) create mode 100644 scm-ui/src/admin/plugins/components/CancelPendingActionModal.js create mode 100644 scm-ui/src/admin/plugins/components/ExecutePendingActionModal.js create mode 100644 scm-ui/src/admin/plugins/components/UpdateAllActionModal.js diff --git a/scm-ui/src/admin/plugins/components/CancelPendingActionModal.js b/scm-ui/src/admin/plugins/components/CancelPendingActionModal.js new file mode 100644 index 0000000000..f18c7d81f4 --- /dev/null +++ b/scm-ui/src/admin/plugins/components/CancelPendingActionModal.js @@ -0,0 +1,39 @@ +// @flow + +import React from "react"; +import MultiPluginActionModal from "./MultiPluginActionModal"; +import type {PendingPlugins} from "@scm-manager/ui-types"; +import {apiClient} from "@scm-manager/ui-components"; +import {translate} from "react-i18next"; + +type Props = { + onClose: () => void, + refresh: () => void, + pendingPlugins: PendingPlugins, + + // context props + t: string => string +}; + + +class CancelPendingActionModal extends React.Component { + + render() { + const {onClose, pendingPlugins, t} = this.props; + + return + ; + } + + cancelPending = () => { + const { pendingPlugins, refresh, onClose } = this.props; + return apiClient + .post(pendingPlugins._links.cancel.href) + .then(refresh) + .then(onClose); + }; +} + +export default translate("admin")(CancelPendingActionModal); diff --git a/scm-ui/src/admin/plugins/components/ExecutePendingActionModal.js b/scm-ui/src/admin/plugins/components/ExecutePendingActionModal.js new file mode 100644 index 0000000000..747497cefb --- /dev/null +++ b/scm-ui/src/admin/plugins/components/ExecutePendingActionModal.js @@ -0,0 +1,41 @@ +// @flow + +import React from "react"; +import MultiPluginActionModal from "./MultiPluginActionModal"; +import type {PendingPlugins} from "@scm-manager/ui-types"; +import waitForRestart from "./waitForRestart"; +import {apiClient, Notification} from "@scm-manager/ui-components"; +import {translate} from "react-i18next"; + +type Props = { + onClose: () => void, + pendingPlugins: PendingPlugins, + + // context props + t: string => string +}; + + +class ExecutePendingActionModal extends React.Component { + + render() { + const {onClose, pendingPlugins, t} = this.props; + + return + + {t("plugins.modal.restartNotification")} + + ; + } + + executeAndRestart = () => { + const {pendingPlugins} = this.props; + return apiClient + .post(pendingPlugins._links.execute.href) + .then(waitForRestart); + }; +} + +export default translate("admin")(ExecutePendingActionModal); diff --git a/scm-ui/src/admin/plugins/components/MultiPluginAction.js b/scm-ui/src/admin/plugins/components/MultiPluginAction.js index cf20dbbca8..05e145f215 100644 --- a/scm-ui/src/admin/plugins/components/MultiPluginAction.js +++ b/scm-ui/src/admin/plugins/components/MultiPluginAction.js @@ -3,7 +3,6 @@ import React from "react"; import { Button } from "@scm-manager/ui-components"; import type { PendingPlugins, PluginCollection } from "@scm-manager/ui-types"; import { translate } from "react-i18next"; -import MultiPluginActionModal from "./MultiPluginActionModal"; export const MultiPluginActionType = { UPDATE_ALL: "updateAll", @@ -16,28 +15,13 @@ type Props = { pendingPlugins?: PendingPlugins, installedPlugins?: PluginCollection, refresh: () => void, + onClick: () => void, // context props t: (key: string, params?: Object) => string }; -type State = { - showModal: boolean -}; - -class MultiPluginAction extends React.Component { - constructor(props: Props) { - super(props); - this.state = { - showModal: false - }; - } - - toggleModal = () => { - this.setState(state => ({ - showModal: !state.showModal - })); - }; +class MultiPluginAction extends React.Component { renderLabel = () => { const { t, actionType, installedPlugins } = this.props; @@ -56,28 +40,6 @@ class MultiPluginAction extends React.Component { } }; - renderModal = () => { - const { showModal } = this.state; - const { - pendingPlugins, - installedPlugins, - actionType, - refresh - } = this.props; - if (showModal) { - return ( - - ); - } - return null; - }; - renderIcon = () => { const { actionType } = this.props; @@ -91,15 +53,15 @@ class MultiPluginAction extends React.Component { }; render() { + const { onClick } = this.props; return ( <> - {this.renderModal()}