diff --git a/package-lock.json b/package-lock.json index 2364dd8..04e4540 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "foris", - "version": "1.3.3", + "version": "1.4.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -5947,9 +5947,9 @@ "dev": true }, "handlebars": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.3.1.tgz", - "integrity": "sha512-c0HoNHzDiHpBt4Kqe99N8tdLPKAnGCQ73gYMPWtAYM4PwGnf7xl8PBUHJqh9ijlzt2uQKaSRxbXRt+rZ7M2/kA==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz", + "integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==", "dev": true, "requires": { "neo-async": "^2.6.0", @@ -11784,16 +11784,23 @@ "integrity": "sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw==" }, "uglify-js": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", - "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.0.tgz", + "integrity": "sha512-PC/ee458NEMITe1OufAjal65i6lB58R1HWMRcxwvdz1UopW0DYqlRL3xdu3IcTvTXsB02CRHykidkTRL+A3hQA==", "dev": true, "optional": true, "requires": { - "commander": "~2.20.0", + "commander": "~2.20.3", "source-map": "~0.6.1" }, "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "optional": true + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", diff --git a/package.json b/package.json index bc59525..4b44a5c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "foris", - "version": "1.3.3", + "version": "1.4.0", "description": "Set of components and utils for Foris and its plugins.", "author": "CZ.NIC, z.s.p.o.", "repository": { diff --git a/src/common/RebootButton.js b/src/common/RebootButton.js new file mode 100644 index 0000000..3b6c256 --- /dev/null +++ b/src/common/RebootButton.js @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/) + * + * This is free software, licensed under the GNU General Public License v3. + * See /LICENSE for more information. + */ + +import React, { useState, useEffect } from "react"; +import PropTypes from "prop-types"; + +import { useAPIPost } from "api/hooks"; +import { API_STATE } from "api/utils"; +import { ForisURLs } from "forisUrls"; + +import { Button } from "bootstrap/Button"; +import { + Modal, ModalHeader, ModalBody, ModalFooter, +} from "bootstrap/Modal"; +import { useAlert } from "alertContext/AlertContext"; + +RebootButton.propTypes = { + forisFormSize: PropTypes.bool, +}; + +export function RebootButton(props) { + const [triggered, setTriggered] = useState(false); + const [modalShown, setModalShown] = useState(false); + const [triggerRebootStatus, triggerReboot] = useAPIPost(ForisURLs.reboot); + + const [setAlert] = useAlert(); + useEffect(() => { + if (triggerRebootStatus.state === API_STATE.ERROR) { + setAlert(_("Reboot request failed.")); + } + }); + + function rebootHandler() { + setTriggered(true); + triggerReboot(); + setModalShown(false); + } + + return ( + <> + + + + ); +} + +RebootModal.propTypes = { + shown: PropTypes.bool.isRequired, + setShown: PropTypes.func.isRequired, + onReboot: PropTypes.func.isRequired, +}; + +function RebootModal({ shown, setShown, onReboot }) { + return ( + + +

{_("Are you sure you want to restart the router?")}

+ + + + +
+ ); +} diff --git a/src/common/__tests__/RebootButton.test.js b/src/common/__tests__/RebootButton.test.js new file mode 100644 index 0000000..8c52725 --- /dev/null +++ b/src/common/__tests__/RebootButton.test.js @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/) + * + * This is free software, licensed under the GNU General Public License v3. + * See /LICENSE for more information. + */ + +import React from "react"; + +import { fireEvent, getByText, queryByText, render, wait } from "customTestRender"; +import mockAxios from "jest-mock-axios"; +import { mockJSONError } from "testUtils/network"; +import { mockSetAlert } from "testUtils/alertContextMock"; + +import { RebootButton } from "../RebootButton"; + +describe("", () => { + let componentContainer; + beforeEach(() => { + const { container } = render(<> +