mirror of
https://gitlab.nic.cz/turris/reforis/foris-js.git
synced 2025-06-15 13:36:35 +02:00
Compare commits
63 Commits
Author | SHA1 | Date | |
---|---|---|---|
1e6278abdf | |||
6769e84e62 | |||
71b0a9a5fa | |||
418e38de31 | |||
56a4c47948 | |||
c67ad164ce | |||
6374fd5adf | |||
cc13e9c164 | |||
bb90800945 | |||
6d4bff2b4f | |||
92f560b69f | |||
32e3a57bd7 | |||
dd27802056 | |||
bd4e1953e3 | |||
68e4368ae3 | |||
51ba380cf0 | |||
4eae1ed8d2 | |||
3d290114fa | |||
3f87e9e4b4 | |||
6d5cb6a951 | |||
8d3be8df67 | |||
90509f2a23 | |||
73f84a2d81 | |||
cea7325427 | |||
a8d8c872f9 | |||
cda7898a96 | |||
26bea9c7c4 | |||
fd1518265f | |||
61d10e91e0 | |||
aac6c6bf2a | |||
d55615abcc | |||
9d322811c3 | |||
f30685d9c2 | |||
5bb298270b | |||
8d0c640994 | |||
25ddb5949c | |||
7b739f55a0 | |||
03a020f87c | |||
c6fd9bbadb | |||
acaaab0654 | |||
04a667eb6f | |||
d71f638bd5 | |||
1064277cd9 | |||
8d1d5b57fd | |||
fd01bc6f56 | |||
e27a23600f | |||
daf787e2df | |||
512c65c213 | |||
3925fb6439 | |||
21bbfb6d2e | |||
1dcba1dfa8 | |||
fd8acd1ceb | |||
48d5cf0119 | |||
1a82f8e225 | |||
638821d025 | |||
fbaa73e378 | |||
e54db2c577 | |||
a6866a0673 | |||
429814ebb5 | |||
73e213c467 | |||
2e68e56e44 | |||
b3bb4de646 | |||
b30f9f59b4 |
5
Makefile
5
Makefile
@ -35,11 +35,6 @@ $(VENV_NAME)/bin/activate:
|
||||
install-js: package.json
|
||||
npm install --save-dev
|
||||
|
||||
watch-js:
|
||||
npm run build:watch
|
||||
build-js:
|
||||
npm run build
|
||||
|
||||
collect-files:
|
||||
sh scripts/collect_files.sh
|
||||
pack: collect-files
|
||||
|
@ -1,4 +1,5 @@
|
||||
# foris-js
|
||||
Set of utils and common React elements for reForis.
|
||||
|
||||
## Publishing package
|
||||
|
||||
|
1459
package-lock.json
generated
1459
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
23
package.json
23
package.json
@ -1,21 +1,20 @@
|
||||
{
|
||||
"name": "foris",
|
||||
"version": "1.3.1",
|
||||
"version": "3.0.0",
|
||||
"description": "Set of components and utils for Foris and its plugins.",
|
||||
"author": "CZ.NIC, z.s.p.o.",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://gitlab.labs.nic.cz/turris/reforis/forisjs.git"
|
||||
"url": "https://gitlab.labs.nic.cz/turris/reforis/foris-js.git"
|
||||
},
|
||||
"keywords": [
|
||||
"foris",
|
||||
"reforis"
|
||||
],
|
||||
"license": "GPL-3.0",
|
||||
"main": "index.js",
|
||||
"main": "./index.js",
|
||||
"dependencies": {
|
||||
"axios": "^0.19.0",
|
||||
"immutability-helper": "^3.0.0",
|
||||
"jest-transform-css": "^2.0.0",
|
||||
"moment": "^2.24.0",
|
||||
"moment-timezone": "^0.5.25",
|
||||
@ -25,8 +24,9 @@
|
||||
"react-uid": "^2.2.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "^16.9.0",
|
||||
"react-dom": "^16.9.0"
|
||||
"immutability-helper": "3.0.1",
|
||||
"react": "16.9.0",
|
||||
"react-dom": "16.9.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/cli": "^7.4.4",
|
||||
@ -44,25 +44,24 @@
|
||||
"babel-plugin-react-transform": "^3.0.0",
|
||||
"babel-polyfill": "^6.26.0",
|
||||
"bootstrap": "^4.3.1",
|
||||
"copy-webpack-plugin": "^5.0.4",
|
||||
"copy-webpack-plugin": "^5.1.1",
|
||||
"css-loader": "^3.2.0",
|
||||
"eslint": "^6.1.0",
|
||||
"eslint-config-reforis": "^1.0.0",
|
||||
"file-loader": "^4.2.0",
|
||||
"immutability-helper": "3.0.1",
|
||||
"jest": "^24.8.0",
|
||||
"jest-mock-axios": "^3.0.0",
|
||||
"moment": "^2.24.0",
|
||||
"moment-timezone": "^0.5.25",
|
||||
"react": "^16.9.0",
|
||||
"react-dom": "^16.9.0",
|
||||
"react-styleguidist": "^9.1.16",
|
||||
"react": "16.9.0",
|
||||
"react-dom": "16.9.0",
|
||||
"react-styleguidist": "^10.3.2",
|
||||
"snapshot-diff": "^0.5.1",
|
||||
"style-loader": "^1.0.0",
|
||||
"webpack": "^4.41.0"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "rm -rf dist; babel src --out-dir dist --source-maps inline --copy-files",
|
||||
"build:watch": "babel src --verbose --watch --out-dir dist --source-maps inline --copy-files",
|
||||
"lint": "eslint src",
|
||||
"test": "jest",
|
||||
"test:watch": "jest --watch",
|
||||
|
@ -1,8 +1,9 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Collect files
|
||||
npm run build
|
||||
cp package.json dist
|
||||
mkdir -p dist
|
||||
cp -rf ./src/* dist
|
||||
cp package.json package-lock.json README.md dist
|
||||
cp -rf translations dist
|
||||
# Remove unwanted files
|
||||
rm -rf dist/**/__tests__
|
||||
|
@ -8,10 +8,8 @@
|
||||
import React, { useState, useContext, useCallback } from "react";
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import { Alert, ALERT_TYPES } from "bootstrap/Alert";
|
||||
import { Portal } from "utils/Portal";
|
||||
|
||||
const AlertContext = React.createContext();
|
||||
import { Alert, ALERT_TYPES } from "../bootstrap/Alert";
|
||||
import { Portal } from "../utils/Portal";
|
||||
|
||||
AlertContextProvider.propTypes = {
|
||||
children: PropTypes.oneOfType([
|
||||
@ -21,6 +19,7 @@ AlertContextProvider.propTypes = {
|
||||
};
|
||||
|
||||
function AlertContextProvider({ children }) {
|
||||
const { AlertContext } = window;
|
||||
const [alert, setAlert] = useState(null);
|
||||
|
||||
const setAlertWrapper = useCallback((message, type = ALERT_TYPES.DANGER) => {
|
||||
@ -46,7 +45,8 @@ function AlertContextProvider({ children }) {
|
||||
}
|
||||
|
||||
function useAlert() {
|
||||
const { AlertContext } = window;
|
||||
return useContext(AlertContext);
|
||||
}
|
||||
|
||||
export { AlertContext, AlertContextProvider, useAlert };
|
||||
export { AlertContextProvider, useAlert };
|
||||
|
@ -5,9 +5,11 @@
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import { useCallback, useReducer } from "react";
|
||||
import {
|
||||
useCallback, useEffect, useReducer, useState,
|
||||
} from "react";
|
||||
|
||||
import { ForisURLs } from "forisUrls";
|
||||
import { ForisURLs } from "../forisUrls";
|
||||
import {
|
||||
API_ACTIONS, API_METHODS, API_STATE, getErrorPayload, HEADERS, TIMEOUT,
|
||||
} from "./utils";
|
||||
@ -15,13 +17,13 @@ import {
|
||||
const DATA_METHODS = ["POST", "PATCH", "PUT"];
|
||||
|
||||
function createAPIHook(method) {
|
||||
return (url, contentType) => {
|
||||
return (urlRoot, contentType) => {
|
||||
const [state, dispatch] = useReducer(APIReducer, {
|
||||
state: API_STATE.INIT,
|
||||
data: null,
|
||||
});
|
||||
|
||||
const sendRequest = useCallback(async (data) => {
|
||||
const sendRequest = useCallback(async ({ data, suffix } = {}) => {
|
||||
const headers = { ...HEADERS };
|
||||
if (contentType) {
|
||||
headers["Content-Type"] = contentType;
|
||||
@ -29,17 +31,23 @@ function createAPIHook(method) {
|
||||
|
||||
dispatch({ type: API_ACTIONS.INIT });
|
||||
try {
|
||||
// Prepare request
|
||||
const request = API_METHODS[method];
|
||||
const config = {
|
||||
timeout: TIMEOUT,
|
||||
headers,
|
||||
};
|
||||
const url = suffix ? `${urlRoot}/${suffix}` : urlRoot;
|
||||
|
||||
// Make request
|
||||
let result;
|
||||
if (DATA_METHODS.includes(method)) {
|
||||
result = await request(url, data, config);
|
||||
} else {
|
||||
result = await request(url, config);
|
||||
}
|
||||
|
||||
// Process request result
|
||||
dispatch({
|
||||
type: API_ACTIONS.SUCCESS,
|
||||
payload: result.data,
|
||||
@ -51,7 +59,7 @@ function createAPIHook(method) {
|
||||
payload: getErrorPayload(error),
|
||||
});
|
||||
}
|
||||
}, [url, contentType]);
|
||||
}, [urlRoot, contentType]);
|
||||
return [state, sendRequest];
|
||||
};
|
||||
}
|
||||
@ -90,3 +98,23 @@ const useAPIDelete = createAPIHook("DELETE");
|
||||
export {
|
||||
useAPIGet, useAPIPost, useAPIPatch, useAPIPut, useAPIDelete,
|
||||
};
|
||||
|
||||
export function useAPIPolling(endpoint, delay = 1000, until) { // delay ms
|
||||
const [state, setState] = useState({ state: API_STATE.INIT });
|
||||
const [getResponse, get] = useAPIGet(endpoint);
|
||||
|
||||
useEffect(() => {
|
||||
if (getResponse.state !== API_STATE.INIT) {
|
||||
setState(getResponse);
|
||||
}
|
||||
}, [getResponse]);
|
||||
|
||||
useEffect(() => {
|
||||
if (until) {
|
||||
const interval = setInterval(get, delay);
|
||||
return () => clearInterval(interval);
|
||||
}
|
||||
}, [until, delay, get]);
|
||||
|
||||
return [state];
|
||||
}
|
||||
|
@ -8,11 +8,6 @@
|
||||
import React from "react";
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
const OFFSET = 8;
|
||||
const SIZE = 3;
|
||||
const SIZE_CLASS = ` offset-lg-${OFFSET} col-lg-${SIZE}`;
|
||||
const SIZE_CLASS_SM = " col-sm-12";
|
||||
|
||||
Button.propTypes = {
|
||||
/** Additional class name. */
|
||||
className: PropTypes.string,
|
||||
@ -32,14 +27,16 @@ Button.propTypes = {
|
||||
export function Button({
|
||||
className, loading, forisFormSize, children, ...props
|
||||
}) {
|
||||
className = className ? `btn ${className}` : "btn btn-primary ";
|
||||
if (forisFormSize) className += SIZE_CLASS + SIZE_CLASS_SM;
|
||||
let buttonClass = className ? `btn ${className}` : "btn btn-primary ";
|
||||
if (forisFormSize) {
|
||||
buttonClass = `${buttonClass} col-sm-12 col-lg-3`;
|
||||
}
|
||||
|
||||
const span = loading
|
||||
? <span className="spinner-border spinner-border-sm" role="status" aria-hidden="true" /> : null;
|
||||
|
||||
return (
|
||||
<button type="button" className={className} {...props}>
|
||||
<button type="button" className={buttonClass} {...props}>
|
||||
{span}
|
||||
{" "}
|
||||
{span ? " " : null}
|
||||
|
@ -9,30 +9,25 @@ import React from "react";
|
||||
import PropTypes from "prop-types";
|
||||
import { useUID } from "react-uid";
|
||||
|
||||
import { formFieldsSize } from "./constants";
|
||||
|
||||
CheckBox.propTypes = {
|
||||
/** Label message */
|
||||
label: PropTypes.string.isRequired,
|
||||
/** Help text message */
|
||||
helpText: PropTypes.string,
|
||||
/** Apply default size (full-width) */
|
||||
useDefaultSize: PropTypes.bool,
|
||||
/** Control if checkbox is clickable */
|
||||
disabled: PropTypes.bool,
|
||||
};
|
||||
|
||||
CheckBox.defaultProps = {
|
||||
useDefaultSize: true,
|
||||
disabled: false,
|
||||
};
|
||||
|
||||
export function CheckBox({
|
||||
label, helpText, useDefaultSize, disabled, ...props
|
||||
label, helpText, disabled, ...props
|
||||
}) {
|
||||
const uid = useUID();
|
||||
return (
|
||||
<div className={`form-group ${useDefaultSize ? formFieldsSize : ""}`.trim()}>
|
||||
<div className="form-group">
|
||||
<div className="custom-control custom-checkbox ">
|
||||
<input
|
||||
className="custom-control-input"
|
||||
@ -42,8 +37,10 @@ export function CheckBox({
|
||||
|
||||
{...props}
|
||||
/>
|
||||
<label className="custom-control-label" htmlFor={uid}>{label}</label>
|
||||
{helpText && <small className="form-text text-muted">{helpText}</small>}
|
||||
<label className="custom-control-label" htmlFor={uid}>
|
||||
{label}
|
||||
{helpText && <small className="form-text text-muted">{helpText}</small>}
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
4
src/bootstrap/DataTimeInput.css
Normal file
4
src/bootstrap/DataTimeInput.css
Normal file
@ -0,0 +1,4 @@
|
||||
/* Override defaults from "react-datetime" - display picker above input */
|
||||
.rdtPicker {
|
||||
bottom: 0;
|
||||
}
|
@ -10,6 +10,7 @@ import PropTypes from "prop-types";
|
||||
import Datetime from "react-datetime/DateTime";
|
||||
import moment from "moment/moment";
|
||||
import "react-datetime/css/react-datetime.css";
|
||||
import "./DataTimeInput.css";
|
||||
|
||||
import { Input } from "./Input";
|
||||
|
||||
|
@ -10,12 +10,25 @@ import PropTypes from "prop-types";
|
||||
|
||||
DownloadButton.propTypes = {
|
||||
href: PropTypes.string.isRequired,
|
||||
className: PropTypes.string,
|
||||
children: PropTypes.oneOfType([
|
||||
PropTypes.arrayOf(PropTypes.node),
|
||||
PropTypes.node,
|
||||
]),
|
||||
};
|
||||
|
||||
export function DownloadButton({ href, children }) {
|
||||
return <a href={href} className="btn btn-primary" download>{children}</a>;
|
||||
DownloadButton.defaultProps = {
|
||||
className: "btn-primary",
|
||||
};
|
||||
|
||||
export function DownloadButton({ href, className, children }) {
|
||||
return (
|
||||
<a
|
||||
href={href}
|
||||
className={`btn ${className}`.trim()}
|
||||
download
|
||||
>
|
||||
{children}
|
||||
</a>
|
||||
);
|
||||
}
|
||||
|
@ -6,8 +6,8 @@
|
||||
*/
|
||||
|
||||
import React from "react";
|
||||
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import { Input } from "./Input";
|
||||
|
||||
export const EmailInput = ({ ...props }) => <Input type="email" {...props} />;
|
||||
|
@ -9,8 +9,6 @@ import React from "react";
|
||||
import { useUID } from "react-uid";
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import { formFieldsSize } from "./constants";
|
||||
|
||||
Input.propTypes = {
|
||||
type: PropTypes.string.isRequired,
|
||||
label: PropTypes.string.isRequired,
|
||||
@ -32,7 +30,7 @@ export function Input({
|
||||
const uid = useUID();
|
||||
const inputClassName = `form-control ${className || ""} ${(error ? "is-invalid" : "")}`.trim();
|
||||
return (
|
||||
<div className={`form-group ${formFieldsSize}`}>
|
||||
<div className="form-group">
|
||||
<label className={labelClassName} htmlFor={uid}>{label}</label>
|
||||
<div className={`input-group ${groupClassName || ""}`.trim()}>
|
||||
<input
|
||||
|
@ -5,10 +5,11 @@
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
import React, { useEffect, useRef } from "react";
|
||||
import React, { useRef } from "react";
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import { Portal } from "utils/Portal";
|
||||
import { Portal } from "../utils/Portal";
|
||||
import { useClickOutside } from "../utils/hooks";
|
||||
|
||||
Modal.propTypes = {
|
||||
/** Is modal shown value */
|
||||
@ -26,16 +27,7 @@ Modal.propTypes = {
|
||||
export function Modal({ shown, setShown, children }) {
|
||||
const dialogRef = useRef();
|
||||
|
||||
useEffect(() => {
|
||||
function handleClickOutsideDialog(e) {
|
||||
if (!dialogRef.current.contains(e.target)) setShown(false);
|
||||
}
|
||||
|
||||
document.addEventListener("mousedown", handleClickOutsideDialog);
|
||||
return () => {
|
||||
document.removeEventListener("mousedown", handleClickOutsideDialog);
|
||||
};
|
||||
}, [setShown]);
|
||||
useClickOutside(dialogRef, () => setShown(false));
|
||||
|
||||
return (
|
||||
<Portal containerId="modal-container">
|
||||
|
@ -8,7 +8,7 @@
|
||||
import React from "react";
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import { useConditionalTimeout } from "utils/hooks";
|
||||
import { useConditionalTimeout } from "../utils/hooks";
|
||||
import { Input } from "./Input";
|
||||
import "./NumberInput.css";
|
||||
|
||||
|
@ -9,8 +9,6 @@ import React from "react";
|
||||
import PropTypes from "prop-types";
|
||||
import { useUID } from "react-uid";
|
||||
|
||||
import { formFieldsSize } from "./constants";
|
||||
|
||||
RadioSet.propTypes = {
|
||||
/** Name attribute of the input HTML tag. */
|
||||
name: PropTypes.string.isRequired,
|
||||
@ -51,7 +49,7 @@ export function RadioSet({
|
||||
});
|
||||
|
||||
return (
|
||||
<div className={`form-group ${formFieldsSize}`}>
|
||||
<div className="form-group">
|
||||
{label && <label htmlFor={uid} className="d-block">{label}</label>}
|
||||
{radios}
|
||||
{helpText && <small className="form-text text-muted">{helpText}</small>}
|
||||
@ -65,7 +63,7 @@ Radio.propTypes = {
|
||||
helpText: PropTypes.string,
|
||||
};
|
||||
|
||||
function Radio({
|
||||
export function Radio({
|
||||
label, id, helpText, ...props
|
||||
}) {
|
||||
return (
|
||||
|
@ -33,7 +33,7 @@ export function Select({
|
||||
);
|
||||
|
||||
return (
|
||||
<div className="form-group col-sm-12 offset-lg-1 col-lg-10">
|
||||
<div className="form-group">
|
||||
<label htmlFor={uid}>{label}</label>
|
||||
<select
|
||||
className="custom-select"
|
||||
|
@ -24,18 +24,18 @@ Spinner.defaultProps = {
|
||||
};
|
||||
|
||||
export function Spinner({
|
||||
fullScreen, children, className, ...props
|
||||
fullScreen, children, className,
|
||||
}) {
|
||||
if (!fullScreen) {
|
||||
return (
|
||||
<div className={`spinner-wrapper ${className || "my-3 text-center"}`} {...props}>
|
||||
<div className={`spinner-wrapper ${className || "my-3 text-center"}`}>
|
||||
<SpinnerElement>{children}</SpinnerElement>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="spinner-fs-wrapper" {...props}>
|
||||
<div className="spinner-fs-wrapper">
|
||||
<div className="spinner-fs-background">
|
||||
<SpinnerElement>{children}</SpinnerElement>
|
||||
</div>
|
||||
@ -46,6 +46,8 @@ export function Spinner({
|
||||
SpinnerElement.propTypes = {
|
||||
/** Spinner's size */
|
||||
small: PropTypes.bool,
|
||||
/** Additional className */
|
||||
className: PropTypes.string,
|
||||
/** Children components */
|
||||
children: PropTypes.oneOfType([
|
||||
PropTypes.arrayOf(PropTypes.node),
|
||||
@ -53,13 +55,16 @@ SpinnerElement.propTypes = {
|
||||
]),
|
||||
};
|
||||
|
||||
export function SpinnerElement({ small, children }) {
|
||||
export function SpinnerElement({ small, className, children }) {
|
||||
return (
|
||||
<>
|
||||
<div className={`spinner-border ${small ? "spinner-border-sm" : ""}`} role="status">
|
||||
<div
|
||||
className={`spinner-border ${small ? "spinner-border-sm" : ""} ${className || ""}`.trim()}
|
||||
role="status"
|
||||
>
|
||||
<span className="sr-only" />
|
||||
</div>
|
||||
<div className="spinner-text">{children}</div>
|
||||
{children && <div className="spinner-text">{children}</div>}
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
exports[`<Checkbox/> Render checkbox 1`] = `
|
||||
<div
|
||||
class="form-group col-sm-12 offset-lg-1 col-lg-10"
|
||||
class="form-group"
|
||||
>
|
||||
<div
|
||||
class="custom-control custom-checkbox "
|
||||
@ -18,19 +18,19 @@ exports[`<Checkbox/> Render checkbox 1`] = `
|
||||
for="1"
|
||||
>
|
||||
Test label
|
||||
<small
|
||||
class="form-text text-muted"
|
||||
>
|
||||
Some help text
|
||||
</small>
|
||||
</label>
|
||||
<small
|
||||
class="form-text text-muted"
|
||||
>
|
||||
Some help text
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
exports[`<Checkbox/> Render uncheked checkbox 1`] = `
|
||||
<div
|
||||
class="form-group col-sm-12 offset-lg-1 col-lg-10"
|
||||
class="form-group"
|
||||
>
|
||||
<div
|
||||
class="custom-control custom-checkbox "
|
||||
@ -45,12 +45,12 @@ exports[`<Checkbox/> Render uncheked checkbox 1`] = `
|
||||
for="1"
|
||||
>
|
||||
Test label
|
||||
<small
|
||||
class="form-text text-muted"
|
||||
>
|
||||
Some help text
|
||||
</small>
|
||||
</label>
|
||||
<small
|
||||
class="form-text text-muted"
|
||||
>
|
||||
Some help text
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
exports[`<NumberInput/> Render number input 1`] = `
|
||||
<div
|
||||
class="form-group col-sm-12 offset-lg-1 col-lg-10"
|
||||
class="form-group"
|
||||
>
|
||||
<label
|
||||
for="1"
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
exports[`<PasswordInput/> Render password input 1`] = `
|
||||
<div
|
||||
class="form-group col-sm-12 offset-lg-1 col-lg-10"
|
||||
class="form-group"
|
||||
>
|
||||
<label
|
||||
for="1"
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
exports[`<RadioSet/> Render radio set 1`] = `
|
||||
<div
|
||||
class="form-group col-sm-12 offset-lg-1 col-lg-10"
|
||||
class="form-group"
|
||||
>
|
||||
<label
|
||||
class="d-block"
|
||||
|
@ -3,7 +3,7 @@
|
||||
exports[`<Select/> Test with snapshot. 1`] = `
|
||||
<div>
|
||||
<div
|
||||
class="form-group col-sm-12 offset-lg-1 col-lg-10"
|
||||
class="form-group"
|
||||
>
|
||||
<label
|
||||
for="1"
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
exports[`<TextInput/> Render text input 1`] = `
|
||||
<div
|
||||
class="form-group col-sm-12 offset-lg-1 col-lg-10"
|
||||
class="form-group"
|
||||
>
|
||||
<label
|
||||
for="1"
|
||||
|
@ -7,4 +7,4 @@
|
||||
|
||||
/** Bootstrap column size for form fields */
|
||||
// eslint-disable-next-line import/prefer-default-export
|
||||
export const formFieldsSize = "col-sm-12 offset-lg-1 col-lg-10";
|
||||
export const formFieldsSize = "col-sm-12 offset-lg-1 col-lg-10 p-0 mb-3";
|
||||
|
77
src/common/RebootButton.js
Normal file
77
src/common/RebootButton.js
Normal file
@ -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 shown={modalShown} setShown={setModalShown} onReboot={rebootHandler} />
|
||||
<Button
|
||||
className="btn-danger"
|
||||
loading={triggered}
|
||||
disabled={triggered}
|
||||
onClick={() => setModalShown(true)}
|
||||
|
||||
{...props}
|
||||
>
|
||||
{_("Reboot")}
|
||||
</Button>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
RebootModal.propTypes = {
|
||||
shown: PropTypes.bool.isRequired,
|
||||
setShown: PropTypes.func.isRequired,
|
||||
onReboot: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
function RebootModal({ shown, setShown, onReboot }) {
|
||||
return (
|
||||
<Modal shown={shown} setShown={setShown}>
|
||||
<ModalHeader setShown={setShown} title={_("Reboot confirmation")} />
|
||||
<ModalBody><p>{_("Are you sure you want to restart the router?")}</p></ModalBody>
|
||||
<ModalFooter>
|
||||
<Button onClick={() => setShown(false)}>{_("Cancel")}</Button>
|
||||
<Button className="btn-danger" onClick={onReboot}>{_("Confirm reboot")}</Button>
|
||||
</ModalFooter>
|
||||
</Modal>
|
||||
);
|
||||
}
|
55
src/common/__tests__/RebootButton.test.js
Normal file
55
src/common/__tests__/RebootButton.test.js
Normal file
@ -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("<RebootButton/>", () => {
|
||||
let componentContainer;
|
||||
beforeEach(() => {
|
||||
const { container } = render(<>
|
||||
<div id="modal-container"/>
|
||||
<RebootButton/>
|
||||
</>);
|
||||
componentContainer = container;
|
||||
});
|
||||
|
||||
it("Render.", () => {
|
||||
expect(componentContainer)
|
||||
.toMatchSnapshot();
|
||||
});
|
||||
|
||||
it("Render modal.", () => {
|
||||
expect(queryByText(componentContainer, "Confirm reboot"))
|
||||
.toBeNull();
|
||||
fireEvent.click(getByText(componentContainer, "Reboot"));
|
||||
expect(componentContainer)
|
||||
.toMatchSnapshot();
|
||||
});
|
||||
|
||||
it("Confirm reboot.", () => {
|
||||
fireEvent.click(getByText(componentContainer, "Reboot"));
|
||||
fireEvent.click(getByText(componentContainer, "Confirm reboot"));
|
||||
expect(mockAxios.post)
|
||||
.toHaveBeenCalledWith("/reforis/api/reboot", undefined, expect.anything());
|
||||
});
|
||||
|
||||
it("Hold error.", async () => {
|
||||
fireEvent.click(getByText(componentContainer, "Reboot"));
|
||||
fireEvent.click(getByText(componentContainer, "Confirm reboot"));
|
||||
mockJSONError();
|
||||
await wait(() => expect(mockSetAlert)
|
||||
.toBeCalledWith("Reboot request failed."));
|
||||
});
|
||||
|
||||
});
|
94
src/common/__tests__/__snapshots__/RebootButton.test.js.snap
Normal file
94
src/common/__tests__/__snapshots__/RebootButton.test.js.snap
Normal file
@ -0,0 +1,94 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`<RebootButton/> Render modal. 1`] = `
|
||||
<div>
|
||||
<div
|
||||
id="modal-container"
|
||||
>
|
||||
<div
|
||||
class="modal fade show"
|
||||
role="dialog"
|
||||
>
|
||||
<div
|
||||
class="modal-dialog modal-dialog-centered"
|
||||
role="document"
|
||||
>
|
||||
<div
|
||||
class="modal-content"
|
||||
>
|
||||
<div
|
||||
class="modal-header"
|
||||
>
|
||||
<h5
|
||||
class="modal-title"
|
||||
>
|
||||
Reboot confirmation
|
||||
</h5>
|
||||
<button
|
||||
class="close"
|
||||
type="button"
|
||||
>
|
||||
<span
|
||||
aria-hidden="true"
|
||||
>
|
||||
×
|
||||
</span>
|
||||
</button>
|
||||
</div>
|
||||
<div
|
||||
class="modal-body"
|
||||
>
|
||||
<p>
|
||||
Are you sure you want to restart the router?
|
||||
</p>
|
||||
</div>
|
||||
<div
|
||||
class="modal-footer"
|
||||
>
|
||||
<button
|
||||
class="btn btn-primary "
|
||||
type="button"
|
||||
>
|
||||
|
||||
|
||||
Cancel
|
||||
</button>
|
||||
<button
|
||||
class="btn btn-danger"
|
||||
type="button"
|
||||
>
|
||||
|
||||
|
||||
Confirm reboot
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<button
|
||||
class="btn btn-danger"
|
||||
type="button"
|
||||
>
|
||||
|
||||
|
||||
Reboot
|
||||
</button>
|
||||
</div>
|
||||
`;
|
||||
|
||||
exports[`<RebootButton/> Render. 1`] = `
|
||||
<div>
|
||||
<div
|
||||
id="modal-container"
|
||||
/>
|
||||
<button
|
||||
class="btn btn-danger"
|
||||
type="button"
|
||||
>
|
||||
|
||||
|
||||
Reboot
|
||||
</button>
|
||||
</div>
|
||||
`;
|
@ -5,12 +5,14 @@
|
||||
* See /LICENSE for more information.
|
||||
*/
|
||||
|
||||
export const REFORIS_URL_PREFIX = process.env.LIGHTTPD ? "/reforis" : "";
|
||||
export const REFORIS_URL_PREFIX = "/reforis";
|
||||
export const REFORIS_API_URL_PREFIX = `${REFORIS_URL_PREFIX}/api`;
|
||||
|
||||
export const ForisURLs = {
|
||||
login: `${REFORIS_URL_PREFIX}/login`,
|
||||
static: `${REFORIS_URL_PREFIX}/static/reforis`,
|
||||
wifi: `${REFORIS_URL_PREFIX}/network-settings/wifi`,
|
||||
|
||||
packageManagement: {
|
||||
updateSettings: `${REFORIS_URL_PREFIX}/package-management/update-settings`,
|
||||
updates: `${REFORIS_URL_PREFIX}/package-management/updates`,
|
||||
@ -21,4 +23,7 @@ export const ForisURLs = {
|
||||
notificationsSettings: "/administration/notifications-settings",
|
||||
|
||||
luci: "/cgi-bin/luci",
|
||||
|
||||
// API
|
||||
reboot: `${REFORIS_API_URL_PREFIX}/reboot`,
|
||||
};
|
||||
|
@ -3,7 +3,7 @@
|
||||
exports[`<SubmitButton/> Render load 1`] = `
|
||||
<div>
|
||||
<button
|
||||
class="btn btn-primary offset-lg-8 col-lg-3 col-sm-12"
|
||||
class="btn btn-primary col-sm-12 col-lg-3"
|
||||
disabled=""
|
||||
type="submit"
|
||||
>
|
||||
@ -23,7 +23,7 @@ exports[`<SubmitButton/> Render load 1`] = `
|
||||
exports[`<SubmitButton/> Render ready 1`] = `
|
||||
<div>
|
||||
<button
|
||||
class="btn btn-primary offset-lg-8 col-lg-3 col-sm-12"
|
||||
class="btn btn-primary col-sm-12 col-lg-3"
|
||||
type="submit"
|
||||
>
|
||||
|
||||
@ -36,7 +36,7 @@ exports[`<SubmitButton/> Render ready 1`] = `
|
||||
exports[`<SubmitButton/> Render saving 1`] = `
|
||||
<div>
|
||||
<button
|
||||
class="btn btn-primary offset-lg-8 col-lg-3 col-sm-12"
|
||||
class="btn btn-primary col-sm-12 col-lg-3"
|
||||
disabled=""
|
||||
type="submit"
|
||||
>
|
||||
|
@ -10,6 +10,7 @@ import React from 'react';
|
||||
import { act, fireEvent, render, waitForElement } from 'customTestRender';
|
||||
import mockAxios from 'jest-mock-axios';
|
||||
import { ForisForm } from "../components/ForisForm";
|
||||
import { WebSockets } from "webSockets/WebSockets";
|
||||
|
||||
|
||||
// It's possible to unittest each hooks via react-hooks-testing-library.
|
||||
@ -30,7 +31,6 @@ describe('useForm hook.', () => {
|
||||
let mockValidator;
|
||||
let mockPrepData;
|
||||
let mockPrepDataToSubmit;
|
||||
let mockWebSockets;
|
||||
let input;
|
||||
let form;
|
||||
const Child = jest.fn(props => <TestForm {...props}/>);
|
||||
@ -41,7 +41,7 @@ describe('useForm hook.', () => {
|
||||
mockValidator = jest.fn(data => data.field === 'invalidValue' ? {field: 'Error'} : {});
|
||||
const {getByTestId, container} = render(
|
||||
<ForisForm
|
||||
ws={mockWebSockets}
|
||||
ws={new WebSockets()}
|
||||
// Just some module which exists...
|
||||
forisConfig={{
|
||||
endpoint: 'testEndpoint',
|
||||
@ -59,7 +59,7 @@ describe('useForm hook.', () => {
|
||||
input = await waitForElement(() =>
|
||||
getByTestId('test-input')
|
||||
);
|
||||
form = container.firstChild
|
||||
form = container.firstChild.firstChild;
|
||||
});
|
||||
|
||||
it('Validation on changing.', () => {
|
||||
|
@ -7,27 +7,30 @@
|
||||
|
||||
import React, { useEffect } from "react";
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import { Spinner } from "bootstrap/Spinner";
|
||||
import { useAPIPost } from "api/hooks";
|
||||
|
||||
import { Prompt } from "react-router";
|
||||
import { API_STATE } from "api/utils";
|
||||
import { ErrorMessage } from "utils/ErrorMessage";
|
||||
import { useAlert } from "alertContext/AlertContext";
|
||||
import { ALERT_TYPES } from "bootstrap/Alert";
|
||||
|
||||
import { ALERT_TYPES } from "../../bootstrap/Alert";
|
||||
import { API_STATE } from "../../api/utils";
|
||||
import { ErrorMessage } from "../../utils/ErrorMessage";
|
||||
import { formFieldsSize } from "../../bootstrap/constants";
|
||||
import { Spinner } from "../../bootstrap/Spinner";
|
||||
import { useAlert } from "../../alertContext/AlertContext";
|
||||
import { useAPIPost } from "../../api/hooks";
|
||||
|
||||
import { useForisModule, useForm } from "../hooks";
|
||||
import { STATES as SUBMIT_BUTTON_STATES, SubmitButton } from "./SubmitButton";
|
||||
|
||||
ForisForm.propTypes = {
|
||||
/** WebSocket object see `scr/common/WebSockets.js`. */
|
||||
/** Optional WebSocket object. See `scr/common/WebSockets.js`.
|
||||
* `forisConfig.wsModule` should be specified when it's passed.
|
||||
* */
|
||||
ws: PropTypes.object,
|
||||
/** Foris configuration object. See usage in main components. */
|
||||
forisConfig: PropTypes.shape({
|
||||
/** reForis Flask aplication API endpoint from `src/common/API.js`. */
|
||||
endpoint: PropTypes.string.isRequired,
|
||||
/** `foris-controller` module name to be used via WebSockets.
|
||||
* If it's not passed then WebSockets aren't used
|
||||
* It can be use only with `ws` prop.
|
||||
* */
|
||||
wsModule: PropTypes.string,
|
||||
/** `foris-controller` action name to be used via WebSockets.
|
||||
@ -49,6 +52,17 @@ ForisForm.propTypes = {
|
||||
children: PropTypes.node.isRequired,
|
||||
/** Optional override of form submit callback */
|
||||
onSubmitOverridden: PropTypes.func,
|
||||
|
||||
// eslint-disable-next-line react/no-unused-prop-types
|
||||
customWSProp(props) {
|
||||
const wsModuleIsSpecified = !!(props.forisConfig && props.forisConfig.wsModule);
|
||||
if (props.ws && !wsModuleIsSpecified) {
|
||||
return new Error("forisConfig.wsModule should be specified when ws object is passed.");
|
||||
}
|
||||
if (!props.ws && wsModuleIsSpecified) {
|
||||
return new Error("forisConfig.wsModule is specified without passing ws object.");
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
ForisForm.defaultProps = {
|
||||
@ -103,7 +117,7 @@ export function ForisForm({
|
||||
resetFormData();
|
||||
const copiedFormData = JSON.parse(JSON.stringify(formState.data));
|
||||
const preparedData = prepDataToSubmit(copiedFormData);
|
||||
post(preparedData);
|
||||
post({ data: preparedData });
|
||||
}
|
||||
|
||||
function getSubmitButtonState() {
|
||||
@ -141,15 +155,17 @@ export function ForisForm({
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className={formFieldsSize}>
|
||||
<Prompt message={getMessageOnLeavingPage} />
|
||||
<form onSubmit={onSubmit}>
|
||||
{childrenWithFormProps}
|
||||
<SubmitButton
|
||||
state={getSubmitButtonState()}
|
||||
disabled={submitButtonIsDisabled}
|
||||
/>
|
||||
<div className="text-right">
|
||||
<SubmitButton
|
||||
state={getSubmitButtonState()}
|
||||
disabled={submitButtonIsDisabled}
|
||||
/>
|
||||
</div>
|
||||
</form>
|
||||
</>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
@ -8,7 +8,7 @@
|
||||
import React from "react";
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
import { Button } from "bootstrap/Button";
|
||||
import { Button } from "../../bootstrap/Button";
|
||||
|
||||
export const STATES = {
|
||||
READY: 1,
|
||||
|
@ -8,8 +8,8 @@
|
||||
import { useCallback, useEffect, useReducer } from "react";
|
||||
import update from "immutability-helper";
|
||||
|
||||
import { useAPIGet } from "api/hooks";
|
||||
import { useWSForisModule } from "webSockets/hooks";
|
||||
import { useAPIGet } from "../api/hooks";
|
||||
import { useWSForisModule } from "../webSockets/hooks";
|
||||
|
||||
const FORM_ACTIONS = {
|
||||
updateValue: 1,
|
||||
|
71
src/index.js
71
src/index.js
@ -7,56 +7,65 @@
|
||||
|
||||
// API
|
||||
export {
|
||||
useAPIGet, useAPIPost, useAPIPatch, useAPIPut, useAPIDelete,
|
||||
} from "api/hooks";
|
||||
export { API_STATE } from "api/utils";
|
||||
useAPIGet,
|
||||
useAPIPost,
|
||||
useAPIPatch,
|
||||
useAPIPut,
|
||||
useAPIDelete,
|
||||
useAPIPolling,
|
||||
} from "./api/hooks";
|
||||
export { API_STATE } from "./api/utils";
|
||||
|
||||
// Bootstrap
|
||||
export { Alert, ALERT_TYPES } from "bootstrap/Alert";
|
||||
export { Button } from "bootstrap/Button";
|
||||
export { CheckBox } from "bootstrap/CheckBox";
|
||||
export { DownloadButton } from "bootstrap/DownloadButton";
|
||||
export { DataTimeInput } from "bootstrap/DataTimeInput";
|
||||
export { EmailInput } from "bootstrap/EmailInput";
|
||||
export { FileInput } from "bootstrap/FileInput";
|
||||
export { Input } from "bootstrap/Input";
|
||||
export { NumberInput } from "bootstrap/NumberInput";
|
||||
export { PasswordInput } from "bootstrap/PasswordInput";
|
||||
export { RadioSet } from "bootstrap/RadioSet";
|
||||
export { Select } from "bootstrap/Select";
|
||||
export { TextInput } from "bootstrap/TextInput";
|
||||
export { formFieldsSize } from "bootstrap/constants";
|
||||
export { Alert, ALERT_TYPES } from "./bootstrap/Alert";
|
||||
export { Button } from "./bootstrap/Button";
|
||||
export { CheckBox } from "./bootstrap/CheckBox";
|
||||
export { DownloadButton } from "./bootstrap/DownloadButton";
|
||||
export { DataTimeInput } from "./bootstrap/DataTimeInput";
|
||||
export { EmailInput } from "./bootstrap/EmailInput";
|
||||
export { FileInput } from "./bootstrap/FileInput";
|
||||
export { Input } from "./bootstrap/Input";
|
||||
export { NumberInput } from "./bootstrap/NumberInput";
|
||||
export { PasswordInput } from "./bootstrap/PasswordInput";
|
||||
export { Radio, RadioSet } from "./bootstrap/RadioSet";
|
||||
export { Select } from "./bootstrap/Select";
|
||||
export { TextInput } from "./bootstrap/TextInput";
|
||||
export { formFieldsSize } from "./bootstrap/constants";
|
||||
|
||||
export {
|
||||
Spinner,
|
||||
SpinnerElement,
|
||||
} from "bootstrap/Spinner";
|
||||
} from "./bootstrap/Spinner";
|
||||
export {
|
||||
Modal,
|
||||
ModalBody,
|
||||
ModalFooter,
|
||||
ModalHeader,
|
||||
} from "bootstrap/Modal";
|
||||
} from "./bootstrap/Modal";
|
||||
|
||||
// Common
|
||||
export { RebootButton } from "./common/RebootButton";
|
||||
|
||||
// Form
|
||||
export { ForisForm } from "form/components/ForisForm";
|
||||
export { SubmitButton, STATES as SUBMIT_BUTTON_STATES } from "form/components/SubmitButton";
|
||||
export { useForisModule, useForm } from "form/hooks";
|
||||
export { ForisForm } from "./form/components/ForisForm";
|
||||
export { SubmitButton, STATES as SUBMIT_BUTTON_STATES } from "./form/components/SubmitButton";
|
||||
export { useForisModule, useForm } from "./form/hooks";
|
||||
|
||||
// WebSockets
|
||||
export { useWSForisModule } from "webSockets/hooks";
|
||||
export { WebSockets } from "webSockets/WebSockets";
|
||||
export { useWSForisModule } from "./webSockets/hooks";
|
||||
export { WebSockets } from "./webSockets/WebSockets";
|
||||
|
||||
// Utils
|
||||
export { Portal } from "utils/Portal";
|
||||
export { undefinedIfEmpty, withoutUndefinedKeys, onlySpecifiedKeys } from "utils/objectHelpers";
|
||||
export { Portal } from "./utils/Portal";
|
||||
export { undefinedIfEmpty, withoutUndefinedKeys, onlySpecifiedKeys } from "./utils/objectHelpers";
|
||||
export {
|
||||
withEither, withSpinner, withSending, withSpinnerOnSending, withError, withErrorMessage,
|
||||
} from "utils/conditionalHOCs";
|
||||
export { ErrorMessage } from "utils/ErrorMessage";
|
||||
} from "./utils/conditionalHOCs";
|
||||
export { ErrorMessage } from "./utils/ErrorMessage";
|
||||
export { useClickOutside } from "./utils/hooks";
|
||||
|
||||
// Foris URL
|
||||
export { ForisURLs, REFORIS_URL_PREFIX } from "forisUrls";
|
||||
export { ForisURLs, REFORIS_URL_PREFIX } from "./forisUrls";
|
||||
|
||||
// Validation
|
||||
export {
|
||||
@ -67,7 +76,7 @@ export {
|
||||
validateDUID,
|
||||
validateMAC,
|
||||
validateMultipleEmails,
|
||||
} from "validations";
|
||||
} from "./validations";
|
||||
|
||||
// Alert context
|
||||
export { AlertContext, AlertContextProvider, useAlert } from "alertContext/AlertContext";
|
||||
export { AlertContextProvider, useAlert } from "./alertContext/AlertContext";
|
||||
|
@ -7,11 +7,11 @@
|
||||
|
||||
import React from "react";
|
||||
|
||||
import { AlertContext } from "../alertContext/AlertContext";
|
||||
|
||||
const mockSetAlert = jest.fn();
|
||||
const mockDismissAlert = jest.fn();
|
||||
|
||||
window.AlertContext = React.createContext();
|
||||
|
||||
function AlertContextMock({ children }) {
|
||||
return (
|
||||
<AlertContext.Provider value={[mockSetAlert, mockDismissAlert]}>
|
||||
|
@ -26,16 +26,13 @@ exports[`conditional HOCs withSpinner should render spinner 1`] = `
|
||||
class="spinner-wrapper my-3 text-center"
|
||||
>
|
||||
<div
|
||||
class="spinner-border "
|
||||
class="spinner-border"
|
||||
role="status"
|
||||
>
|
||||
<span
|
||||
class="sr-only"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="spinner-text"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
@ -46,16 +43,13 @@ exports[`conditional HOCs withSpinnerOnSending should render spinner 1`] = `
|
||||
class="spinner-wrapper my-3 text-center"
|
||||
>
|
||||
<div
|
||||
class="spinner-border "
|
||||
class="spinner-border"
|
||||
role="status"
|
||||
>
|
||||
<span
|
||||
class="sr-only"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
class="spinner-text"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
`;
|
||||
|
@ -7,14 +7,14 @@
|
||||
|
||||
import React from "react";
|
||||
|
||||
import { Spinner } from "bootstrap/Spinner";
|
||||
import { API_STATE } from "api/utils";
|
||||
import { Spinner } from "../bootstrap/Spinner";
|
||||
import { API_STATE } from "../api/utils";
|
||||
import { ErrorMessage } from "./ErrorMessage";
|
||||
|
||||
function withEither(conditionalFn, Either) {
|
||||
return (Component) => (props) => {
|
||||
if (conditionalFn(props)) {
|
||||
return <Either />;
|
||||
return <Either {...props} />;
|
||||
}
|
||||
return <Component {...props} />;
|
||||
};
|
||||
|
@ -18,3 +18,19 @@ export function useConditionalTimeout({ callback, timeout = 125 }, ...callbackAr
|
||||
}, [condition, callback, timeout, callbackArgs]);
|
||||
return setCondition;
|
||||
}
|
||||
|
||||
/** Execute callback when user clicks outside specified element. */
|
||||
export function useClickOutside(element, callback) {
|
||||
function handleClickOutside(event) {
|
||||
if (element.current && !element.current.contains(event.target)) {
|
||||
callback(event);
|
||||
}
|
||||
}
|
||||
|
||||
useEffect(() => {
|
||||
document.addEventListener("mousedown", handleClickOutside);
|
||||
return () => {
|
||||
document.removeEventListener("mousedown", handleClickOutside);
|
||||
};
|
||||
});
|
||||
}
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
/* eslint no-console: "off" */
|
||||
|
||||
import { ForisURLs } from "forisUrls";
|
||||
import { ForisURLs } from "../forisUrls";
|
||||
|
||||
const PROTOCOL = window.location.protocol === "http:" ? "ws" : "wss";
|
||||
|
||||
@ -25,18 +25,18 @@ export class WebSockets {
|
||||
console.error("WS: Error observed, you aren't logged probably.");
|
||||
window.location.replace(ForisURLs.login);
|
||||
}
|
||||
console.log(`WS: Error: ${e}`);
|
||||
console.error(`WS: Error: ${e}`);
|
||||
};
|
||||
this.ws.onmessage = (e) => {
|
||||
console.log(`WS: Received Message: ${e.data}`);
|
||||
console.debug(`WS: Received Message: ${e.data}`);
|
||||
const data = JSON.parse(e.data);
|
||||
this.dispatch(data);
|
||||
};
|
||||
this.ws.onopen = () => {
|
||||
console.log("WS: Connection open.");
|
||||
console.debug("WS: Connection open.");
|
||||
};
|
||||
this.ws.onclose = () => {
|
||||
console.log("WS: Connection closed.");
|
||||
console.debug("WS: Connection closed.");
|
||||
};
|
||||
|
||||
// callbacks[module][action]
|
||||
@ -61,9 +61,36 @@ export class WebSockets {
|
||||
return this;
|
||||
}
|
||||
|
||||
subscribe(params) {
|
||||
subscribe(module) {
|
||||
this.waitForConnection(() => {
|
||||
this.send("subscribe", params);
|
||||
this.send("subscribe", module);
|
||||
});
|
||||
return this;
|
||||
}
|
||||
|
||||
unbind(module, action, callback) {
|
||||
const callbacks = this.callbacks[module][action];
|
||||
|
||||
const index = callbacks.indexOf(callback);
|
||||
if (index !== -1) {
|
||||
callbacks.splice(index, 1);
|
||||
}
|
||||
|
||||
if (callbacks.length === 0) {
|
||||
delete this.callbacks[module][action];
|
||||
}
|
||||
|
||||
if (Object.keys(this.callbacks[module]).length === 0) {
|
||||
this.unsubscribe(module);
|
||||
}
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
unsubscribe(module) {
|
||||
this.waitForConnection(() => {
|
||||
this.send("unsubscribe", module);
|
||||
delete this.callbacks[module];
|
||||
});
|
||||
return this;
|
||||
}
|
||||
@ -82,15 +109,15 @@ export class WebSockets {
|
||||
let chain;
|
||||
try {
|
||||
chain = this.callbacks[json.module][json.action];
|
||||
} catch (e) {
|
||||
if (e instanceof TypeError) {
|
||||
console.log(`Callback for this message wasn't found:${e.data}`);
|
||||
} else throw e;
|
||||
} catch (error) {
|
||||
if (error instanceof TypeError) {
|
||||
console.warn(`Callback for this message wasn't found:${error.data}`);
|
||||
} else throw error;
|
||||
}
|
||||
|
||||
if (typeof chain === "undefined") return;
|
||||
|
||||
for (let i = 0; i < chain.length; i++) chain[i](json);
|
||||
chain.forEach((callback) => callback(json));
|
||||
}
|
||||
|
||||
close() {
|
||||
|
@ -11,12 +11,21 @@ export function useWSForisModule(ws, module, action = "update_settings") {
|
||||
const [data, setData] = useState(null);
|
||||
|
||||
useEffect(() => {
|
||||
if (ws && module) {
|
||||
ws.subscribe(module)
|
||||
.bind(module, action, (msg) => {
|
||||
setData(msg.data);
|
||||
});
|
||||
// Sometimes we want to disable this hook if WS is not passed. We can't make conditional
|
||||
// hooks, but we can disable it here. It's used especially in ForisForm when a module
|
||||
// doesn't present any WS endpoint.
|
||||
if (!ws) return;
|
||||
|
||||
function callback(msg) {
|
||||
setData(msg.data);
|
||||
}
|
||||
|
||||
ws.subscribe(module)
|
||||
.bind(module, action, callback);
|
||||
|
||||
return () => {
|
||||
ws.unbind(module, action, callback);
|
||||
};
|
||||
}, [action, module, ws]);
|
||||
|
||||
return [data];
|
||||
|
@ -7,9 +7,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 12:55+0000\n"
|
||||
"Last-Translator: Stepan Henek <stepan+github@henek.name>\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-11-21 17:04+0000\n"
|
||||
"Last-Translator: Pavel Borecki <pavel.borecki@gmail.com>\n"
|
||||
"Language: cs\n"
|
||||
"Language-Team: Czech <https://hosted.weblate.org/projects/turris/foris-"
|
||||
"js/cs/>\n"
|
||||
@ -21,7 +21,7 @@ msgstr ""
|
||||
|
||||
#: src/validations.js:13
|
||||
msgid "This is not a valid IPv4 address."
|
||||
msgstr "Tohle není platná IPv4 adresa."
|
||||
msgstr "Toto není platná IPv4 adresa."
|
||||
|
||||
#: src/validations.js:14
|
||||
msgid "This is not a valid IPv6 address."
|
||||
@ -29,11 +29,11 @@ msgstr "Tohle není platná IPv6 adresa."
|
||||
|
||||
#: src/validations.js:15
|
||||
msgid "This is not a valid IPv6 prefix."
|
||||
msgstr "Tohle není platný IPv6 prefix."
|
||||
msgstr "Toto není platný IPv6 prefix."
|
||||
|
||||
#: src/validations.js:16
|
||||
msgid "This is not a valid domain name."
|
||||
msgstr "Tohle není platné doménové jméno."
|
||||
msgstr "Toto není platné doménové jméno."
|
||||
|
||||
#: src/validations.js:17
|
||||
msgid "This is not a valid DUID."
|
||||
@ -41,7 +41,7 @@ msgstr "Tohle není platné DUID."
|
||||
|
||||
#: src/validations.js:18
|
||||
msgid "This is not a valid MAC address."
|
||||
msgstr "Tohle není platná MAC adresa."
|
||||
msgstr "Toto není platná MAC adresa."
|
||||
|
||||
#: src/validations.js:19
|
||||
msgid "Doesn't contain a list of emails separated by commas."
|
||||
@ -49,27 +49,51 @@ msgstr "Neobsahuje seznam e-mailů oddělených čárkou."
|
||||
|
||||
#: src/api/utils.js:58
|
||||
msgid "The session is expired. Please log in again."
|
||||
msgstr ""
|
||||
msgstr "Platnost relace skončila. Přihlaste se znovu."
|
||||
|
||||
#: src/api/utils.js:63
|
||||
msgid "Timeout error occurred."
|
||||
msgstr ""
|
||||
msgstr "Došlo k chybě kvůli překročení časového limitu."
|
||||
|
||||
#: src/api/utils.js:66
|
||||
msgid "No response received."
|
||||
msgstr ""
|
||||
msgstr "Neobdržena žádná odezva."
|
||||
|
||||
#: src/api/utils.js:70
|
||||
msgid "An unknown error occurred. Check the console for more info."
|
||||
msgstr ""
|
||||
msgstr "Došlo k neznámé chybě. Další informace naleznete v konzoli."
|
||||
|
||||
#: src/api/utils.js:77
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr "Došlo k neznámé chybě v aplikačním programovém rozhraní."
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
msgstr "Nastavení úspěšně uložena"
|
||||
|
||||
#: src/form/components/ForisForm.js:140
|
||||
msgid "Changes you made may not be saved. Are you sure you want to leave?"
|
||||
@ -91,7 +115,7 @@ msgstr "Uložit"
|
||||
|
||||
#: src/utils/ErrorMessage.js:13
|
||||
msgid "An error occurred while fetching data."
|
||||
msgstr ""
|
||||
msgstr "Došlo k chybě při získávání dat."
|
||||
|
||||
#~ msgid "Settings were successfully saved."
|
||||
#~ msgstr "Nastavení bylo úspěšně uloženo."
|
||||
@ -99,3 +123,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr "Ukládání nastavení selhalo."
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:54+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: da\n"
|
||||
@ -66,6 +66,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -96,3 +120,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:54+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: de\n"
|
||||
@ -66,6 +66,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -96,3 +120,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:54+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: el\n"
|
||||
@ -66,6 +66,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -96,3 +120,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:21+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: en\n"
|
||||
@ -66,6 +66,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -96,3 +120,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
128
translations/es/LC_MESSAGES/forisjs.po
Normal file
128
translations/es/LC_MESSAGES/forisjs.po
Normal file
@ -0,0 +1,128 @@
|
||||
# Spanish translations for PROJECT.
|
||||
# Copyright (C) 2019 ORGANIZATION
|
||||
# This file is distributed under the same license as the PROJECT project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2019.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language: es\n"
|
||||
"Language-Team: none\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.7.0\n"
|
||||
|
||||
#: src/validations.js:13
|
||||
msgid "This is not a valid IPv4 address."
|
||||
msgstr ""
|
||||
|
||||
#: src/validations.js:14
|
||||
msgid "This is not a valid IPv6 address."
|
||||
msgstr ""
|
||||
|
||||
#: src/validations.js:15
|
||||
msgid "This is not a valid IPv6 prefix."
|
||||
msgstr ""
|
||||
|
||||
#: src/validations.js:16
|
||||
msgid "This is not a valid domain name."
|
||||
msgstr ""
|
||||
|
||||
#: src/validations.js:17
|
||||
msgid "This is not a valid DUID."
|
||||
msgstr ""
|
||||
|
||||
#: src/validations.js:18
|
||||
msgid "This is not a valid MAC address."
|
||||
msgstr ""
|
||||
|
||||
#: src/validations.js:19
|
||||
msgid "Doesn't contain a list of emails separated by commas."
|
||||
msgstr ""
|
||||
|
||||
#: src/api/utils.js:58
|
||||
msgid "The session is expired. Please log in again."
|
||||
msgstr ""
|
||||
|
||||
#: src/api/utils.js:63
|
||||
msgid "Timeout error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/api/utils.js:66
|
||||
msgid "No response received."
|
||||
msgstr ""
|
||||
|
||||
#: src/api/utils.js:70
|
||||
msgid "An unknown error occurred. Check the console for more info."
|
||||
msgstr ""
|
||||
|
||||
#: src/api/utils.js:77
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:140
|
||||
msgid "Changes you made may not be saved. Are you sure you want to leave?"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:32
|
||||
msgid "Updating"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:35
|
||||
msgid "Load settings"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/SubmitButton.js:38
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
#: src/utils/ErrorMessage.js:13
|
||||
msgid "An error occurred while fetching data."
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:54+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: fi\n"
|
||||
@ -66,6 +66,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -96,3 +120,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:54+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: fo\n"
|
||||
@ -66,6 +66,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -96,3 +120,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -65,6 +65,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:54+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: fr\n"
|
||||
@ -66,6 +66,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -96,3 +120,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:55+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: hr\n"
|
||||
@ -67,6 +67,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -97,3 +121,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:55+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: hu\n"
|
||||
@ -66,6 +66,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -96,3 +120,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:55+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: it\n"
|
||||
@ -66,6 +66,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -96,3 +120,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:55+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: ja\n"
|
||||
@ -66,6 +66,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -96,3 +120,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:55+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: ko\n"
|
||||
@ -66,6 +66,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -96,3 +120,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:55+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: lt\n"
|
||||
@ -67,6 +67,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -97,3 +121,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:56+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: nb\n"
|
||||
@ -66,6 +66,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -96,3 +120,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:55+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: nb_NO\n"
|
||||
@ -66,6 +66,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -96,3 +120,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:56+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: nl\n"
|
||||
@ -66,6 +66,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -96,3 +120,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:56+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: pl\n"
|
||||
@ -67,6 +67,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -97,3 +121,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:56+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: ro\n"
|
||||
@ -67,6 +67,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -97,3 +121,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:56+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: ru\n"
|
||||
@ -67,6 +67,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -97,3 +121,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:56+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: sk\n"
|
||||
@ -66,6 +66,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -96,3 +120,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2019-11-14 11:13+0100\n"
|
||||
"POT-Creation-Date: 2019-11-29 16:27+0100\n"
|
||||
"PO-Revision-Date: 2019-08-28 17:56+0200\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: sv\n"
|
||||
@ -66,6 +66,30 @@ msgstr ""
|
||||
msgid "An unknown API error occurred."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:33
|
||||
msgid "Reboot request failed."
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:54
|
||||
msgid "Reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:69
|
||||
msgid "Reboot confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:70
|
||||
msgid "Are you sure you want to restart the router?"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:72
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: src/common/RebootButton.js:73
|
||||
msgid "Confirm reboot"
|
||||
msgstr ""
|
||||
|
||||
#: src/form/components/ForisForm.js:88
|
||||
msgid "Settings saved successfully"
|
||||
msgstr ""
|
||||
@ -96,3 +120,15 @@ msgstr ""
|
||||
#~ msgid "Settings update was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Warning!"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering was failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot triggering failed."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Reboot requestq failed."
|
||||
#~ msgstr ""
|
||||
|
||||
|
Reference in New Issue
Block a user