diff --git a/scm-ui/public/locales/de/admin.json b/scm-ui/public/locales/de/admin.json index 395c8ade6a..af34c5b759 100644 --- a/scm-ui/public/locales/de/admin.json +++ b/scm-ui/public/locales/de/admin.json @@ -29,9 +29,11 @@ "installedNavLink": "Installiert", "availableNavLink": "Verfügbar" }, - "executePending": "Ausstehende Änderungen ausführen", + "executePending": "Änderungen ausführen", + "outdatedPlugins": "{{count}} veraltetes Plugin", + "outdatedPlugins_plural": "{{count}} veraltete Plugins", "updateAll": "Alle Plugins aktualisieren", - "cancelPending": "Ausstehende Änderungen abbrechen", + "cancelPending": "Änderungen abbrechen", "noPlugins": "Keine Plugins gefunden.", "modal": { "title": { @@ -50,7 +52,7 @@ "updateAndRestart": "Aktualisieren und Neustarten", "uninstallAndRestart": "Deinstallieren and Neustarten", "executeAndRestart": "Ausführen und Neustarten", - "updateAllAndRestart": "Alle aktualisieren und Neustarten", + "updateAll": "Alle Plugins aktualisieren", "abort": "Abbrechen", "author": "Autor", "version": "Version", diff --git a/scm-ui/public/locales/en/admin.json b/scm-ui/public/locales/en/admin.json index 430949ec26..c315d1d142 100644 --- a/scm-ui/public/locales/en/admin.json +++ b/scm-ui/public/locales/en/admin.json @@ -29,9 +29,11 @@ "installedNavLink": "Installed", "availableNavLink": "Available" }, - "executePending": "Execute pending changes", - "updateAll": "Update all", - "cancelPending": "Cancel pending changes", + "executePending": "Execute changes", + "outdatedPlugins": "{{count}} outdated plugin", + "outdatedPlugins_plural": "{{count}} outdated plugins", + "updateAll": "Update all plugins", + "cancelPending": "Cancel changes", "noPlugins": "No plugins found.", "modal": { "title": { diff --git a/scm-ui/src/admin/plugins/components/MultiPluginAction.js b/scm-ui/src/admin/plugins/components/MultiPluginAction.js index 164148cec3..2fe3ae6985 100644 --- a/scm-ui/src/admin/plugins/components/MultiPluginAction.js +++ b/scm-ui/src/admin/plugins/components/MultiPluginAction.js @@ -1,7 +1,7 @@ // @flow import React from "react"; import { Button } from "@scm-manager/ui-components"; -import type {PendingPlugins, PluginCollection} from "@scm-manager/ui-types"; +import type { PendingPlugins, PluginCollection } from "@scm-manager/ui-types"; import { translate } from "react-i18next"; import MultiPluginActionModal from "./MultiPluginActionModal"; @@ -17,7 +17,7 @@ type Props = { installedPlugins?: PluginCollection, // context props - t: string => string + t: (key: string, params?: Object) => string }; type State = { @@ -39,19 +39,25 @@ class MultiPluginAction extends React.Component { }; renderLabel = () => { - const {t, actionType} = this.props; + const { t, actionType, installedPlugins } = this.props; + const outdatedPlugins = + actionType === MultiPluginActionType.UPDATE_ALL && + installedPlugins._embedded.plugins.filter(p => p._links.update).length; + if (actionType === MultiPluginActionType.EXECUTE_PENDING) { return t("plugins.executePending"); } else if (actionType === MultiPluginActionType.CANCEL_PENDING) { return t("plugins.cancelPending"); } else { - return t("plugins.updateAll"); + return t("plugins.outdatedPlugins", { + count: outdatedPlugins + }); } }; renderModal = () => { const { showModal } = this.state; - const {pendingPlugins, installedPlugins, actionType} = this.props; + const { pendingPlugins, installedPlugins, actionType } = this.props; if (showModal) { return ( { return null; }; + renderIcon = () => { + const { actionType } = this.props; + + if (actionType === MultiPluginActionType.EXECUTE_PENDING) { + return "arrow-circle-right"; + } else if (actionType === MultiPluginActionType.CANCEL_PENDING) { + return "times"; + } else { + return "sync-alt"; + } + }; + render() { return ( <> {this.renderModal()}