diff --git a/.eslintrc.js b/.eslintrc.js index d783c34..9ca1dc3 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,66 +1,6 @@ -const path = require("path"); - module.exports = { - "env": { - "browser": true, - "node": true, - "es6": true, - "jest": true - }, - "extends": [ - "airbnb", - "airbnb/hooks" - ], - "globals": { - "_": "readonly", - "babel": "readonly", - "ForisTranslations": "readonly", - "ngettext": "readonly", - "ForisPlugins": "readonly" - }, - "parser": "babel-eslint", - "rules": { - "quotes": ["error", "double"], - "indent": ["error", 4], - "react/jsx-indent": ["error", 4], - "react/jsx-indent-props": ["error", 4], - "react/prop-types": "warn", - "react/no-array-index-key": "warn", - "react/button-has-type": "warn", + extends: "eslint-config-reforis", + rules: { "import/prefer-default-export": "off", - "import/no-unresolved": [ - "error", - // Ignore imports used only in tests - { ignore: ["customTestRender"] } - ], - "import/no-cycle": "warn", - "no-console": "error", - "no-use-before-define": ["error", { - functions: false, - classes: true, - variables: true - }], - "no-restricted-syntax": "warn", - // Should be enabled in the future - "camelcase": "off", - "no-param-reassign": "off", - "react/jsx-props-no-spreading": "off", - "react/require-default-props": "off", - "react/default-props-match-prop-types": "off", - "react/forbid-prop-types": "off", - // Permanently disabled - "react/jsx-filename-extension": "off", - "no-plusplus": "off", - "consistent-return": "off", - "radix": "off", - "no-continue": "off", - "react/no-danger": "off", }, - "settings": { - "import/resolver": { - "node": { - "paths": ["src"] - } - } - } }; diff --git a/.gitignore b/.gitignore index f668a42..1ce182b 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,9 @@ logs *.log +# Python +venv/ + # NodeJS ## Logs npm-debug.log* diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index dac26a3..76aa24e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -6,25 +6,26 @@ stages: - publish before_script: + - apk add make - npm install test: stage: test script: - - npm test + - make test lint: stage: test script: - - npm run lint + - make lint build: stage: build script: - - npm pack + - make pack artifacts: paths: - - foris-*.tgz + - dist/foris-*.tgz publish_beta: stage: publish @@ -32,7 +33,7 @@ publish_beta: refs: - dev script: - - sh scripts/publish.sh beta + - make publish-beta publish_latest: stage: publish @@ -40,4 +41,4 @@ publish_latest: refs: - master script: - - sh scripts/publish.sh latest + - make publish-latest diff --git a/Makefile b/Makefile index 2ddbdea..f01f172 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,8 @@ -.PHONY: all install-js watch-js build-js lint-js test-js create-messages update-messages docs clean +.PHONY: all install-js watch-js build-js collect-files pack publish-beta publish-latest lint test test-js-update-snapshots create-messages update-messages docs docs-watch clean + +DEV_PYTHON=python3.7 +VENV_NAME?=venv +VENV_BIN=$(shell pwd)/$(VENV_NAME)/bin all: @echo "make install-js" @@ -22,6 +26,12 @@ all: @echo "make clean" @echo " Remove python artifacts and virtualenv." +venv: $(VENV_NAME)/bin/activate +$(VENV_NAME)/bin/activate: + test -d $(VENV_NAME) || $(DEV_PYTHON) -m virtualenv -p $(DEV_PYTHON) $(VENV_NAME) + $(VENV_BIN)/$(DEV_PYTHON) -m pip install -r requirements.txt + touch $(VENV_NAME)/bin/activate + install-js: package.json npm install --save-dev @@ -30,6 +40,15 @@ watch-js: build-js: npm run build +collect-files: + sh scripts/collect_files.sh +pack: collect-files + cd dist && npm pack +publish-beta: collect-files + sh scripts/publish.sh beta +publish-latest: collect-files + sh scripts/publish.sh latest + lint: npm run lint @@ -38,10 +57,10 @@ test: test-js-update-snapshots: npm test -- -u -create-messages: - pybabel extract -F babel.cfg -o ./translations/forisjs.pot . -update-messages: - pybabel update -i translations/forisjs.pot -d translations +create-messages: venv + $(VENV_BIN)/pybabel extract -F babel.cfg -o ./translations/forisjs.pot . +update-messages: venv + $(VENV_BIN)/pybabel update -i ./translations/forisjs.pot -d ./translations -D forisjs docs: npm run-script docs diff --git a/babel.config.js b/babel.config.js index fcf53b6..5d9e8a8 100644 --- a/babel.config.js +++ b/babel.config.js @@ -14,4 +14,12 @@ module.exports = { }, }], ], + env: { + development: { + ignore: ["**/__tests__/**", "**/__mocks__/**"], + }, + test: { + ignore: [], + }, + }, }; diff --git a/package-lock.json b/package-lock.json index 7f32ef6..c8ff325 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "foris", - "version": "1.2.0", + "version": "1.3.1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -3001,9 +3001,9 @@ } }, "confusing-browser-globals": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.8.tgz", - "integrity": "sha512-lI7asCibVJ6Qd3FGU7mu4sfG4try4LX3+GVS+Gv8UlrEf2AeW57piecapnog2UHZSbcX/P/1UDWVaTsblowlZg==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz", + "integrity": "sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw==", "dev": true }, "connect-history-api-fallback": { @@ -4098,6 +4098,20 @@ "object.entries": "^1.1.0" } }, + "eslint-config-reforis": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-reforis/-/eslint-config-reforis-1.0.0.tgz", + "integrity": "sha512-c0IgYlGfFMfhXmGilDVgkFIcUU34/i6wUiOzdRmg0CRi2Ko5LgmW/jRT5vdiXlFKYOk5WK1UWFbC19KBdGQEig==", + "dev": true, + "requires": { + "babel-eslint": "^9.0.0", + "eslint-config-airbnb": "^18.0.1", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-jsx-a11y": "^6.2.3", + "eslint-plugin-react": "^7.14.3", + "eslint-plugin-react-hooks": "^1.7.0" + } + }, "eslint-import-resolver-node": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", @@ -4356,20 +4370,20 @@ } }, "eslint-plugin-react": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.14.3.tgz", - "integrity": "sha512-EzdyyBWC4Uz2hPYBiEJrKCUi2Fn+BJ9B/pJQcjw5X+x/H2Nm59S4MJIvL4O5NEE0+WbnQwEBxWY03oUk+Bc3FA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.16.0.tgz", + "integrity": "sha512-GacBAATewhhptbK3/vTP09CbFrgUJmBSaaRcWdbQLFvUZy9yVcQxigBNHGPU/KE2AyHpzj3AWXpxoMTsIDiHug==", "dev": true, "requires": { "array-includes": "^3.0.3", "doctrine": "^2.1.0", "has": "^1.0.3", - "jsx-ast-utils": "^2.1.0", + "jsx-ast-utils": "^2.2.1", "object.entries": "^1.1.0", "object.fromentries": "^2.0.0", "object.values": "^1.1.0", "prop-types": "^15.7.2", - "resolve": "^1.10.1" + "resolve": "^1.12.0" }, "dependencies": { "doctrine": { @@ -7546,9 +7560,9 @@ } }, "jsx-ast-utils": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz", - "integrity": "sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz", + "integrity": "sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==", "dev": true, "requires": { "array-includes": "^3.0.3", @@ -8345,6 +8359,12 @@ } } }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, "object-is": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", @@ -8391,15 +8411,35 @@ } }, "object.fromentries": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", - "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.1.tgz", + "integrity": "sha512-PUQv8Hbg3j2QX0IQYv3iAGCbGcu4yY4KQ92/dhA4sFSixBmSmp13UpDLs6jGK8rBtbmhNNIK99LD2k293jpiGA==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.11.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.15.0", "function-bind": "^1.1.1", - "has": "^1.0.1" + "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.0.tgz", + "integrity": "sha512-xdQnfykZ9JMEiasTAJZJdMWCQ1Vm00NBw79/AWi7ELfZuuPCSOMDZbT9mkOfSctVtfhb+sAAzrm+j//GjjLHLg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.0", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.6.0", + "object-keys": "^1.1.1", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + } } }, "object.getownpropertydescriptors": { @@ -11163,6 +11203,26 @@ "strip-ansi": "^4.0.0" } }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", diff --git a/package.json b/package.json index 19a00cd..2e72014 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "foris", - "version": "1.2.0", + "version": "1.3.1", "description": "Set of components and utils for Foris and its plugins.", "author": "CZ.NIC, z.s.p.o.", "repository": { @@ -12,7 +12,7 @@ "reforis" ], "license": "GPL-3.0", - "main": "./dist/index.js", + "main": "index.js", "dependencies": { "axios": "^0.19.0", "immutability-helper": "^3.0.0", @@ -38,7 +38,6 @@ "@babel/preset-react": "^7.0.0", "@fortawesome/fontawesome-free": "^5.11.2", "@testing-library/react": "^8.0.9", - "babel-eslint": "^9.0.0", "babel-jest": "^24.8.0", "babel-loader": "^8.0.6", "babel-plugin-module-resolver": "^3.2.0", @@ -48,11 +47,7 @@ "copy-webpack-plugin": "^5.0.4", "css-loader": "^3.2.0", "eslint": "^6.1.0", - "eslint-config-airbnb": "^18.0.1", - "eslint-plugin-import": "^2.18.2", - "eslint-plugin-jsx-a11y": "^6.2.3", - "eslint-plugin-react": "^7.14.3", - "eslint-plugin-react-hooks": "^1.7.0", + "eslint-config-reforis": "^1.0.0", "file-loader": "^4.2.0", "jest": "^24.8.0", "jest-mock-axios": "^3.0.0", @@ -66,18 +61,13 @@ "webpack": "^4.41.0" }, "scripts": { - "build": "rm -rf dist; babel src --out-dir dist --ignore '**/__tests__' --source-maps inline --copy-files", - "build:watch": "babel src --verbose --watch --out-dir dist --ignore '**/__tests__' --source-maps inline --copy-files", - "prepare": "rm -rf ./dist && npm run build", + "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", "test:coverage": "jest --coverage --colors", "docs": "npx styleguidist build ", "docs:watch": "styleguidist server" - }, - "files": [ - "dist/**", - "translations" - ] + } } diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..01cbce3 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +Babel diff --git a/scripts/collect_files.sh b/scripts/collect_files.sh new file mode 100644 index 0000000..6d45f1b --- /dev/null +++ b/scripts/collect_files.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +# Collect files +npm run build +cp package.json dist +cp -rf translations dist +# Remove unwanted files +rm -rf dist/**/__tests__ +rm -rf dist/__mocks__ diff --git a/scripts/publish.sh b/scripts/publish.sh index 6aa73cd..172b7a7 100755 --- a/scripts/publish.sh +++ b/scripts/publish.sh @@ -5,7 +5,8 @@ then echo "\$NPM_TOKEN is not set" exit 1 else - # Need to replace "_" with "_" as GitLab CI won't accept secret vars with "-" + cd dist + # Need to replace "_" with "-" as GitLab CI won't accept secret vars with "-" echo "//registry.npmjs.org/:_authToken=$(echo "$NPM_TOKEN" | tr _ -)" > .npmrc echo "unsafe-perm = true" >> ~/.npmrc if test "$1" = "beta" diff --git a/src/alertContext/AlertContext.js b/src/alertContext/AlertContext.js index bcdb347..c262dba 100644 --- a/src/alertContext/AlertContext.js +++ b/src/alertContext/AlertContext.js @@ -5,10 +5,11 @@ * See /LICENSE for more information. */ -import React, { useState } from "react"; +import React, { useState, useContext, useCallback } from "react"; import PropTypes from "prop-types"; -import { Alert } from "bootstrap/Alert"; +import { Alert, ALERT_TYPES } from "bootstrap/Alert"; +import { Portal } from "utils/Portal"; const AlertContext = React.createContext(); @@ -22,14 +23,30 @@ AlertContextProvider.propTypes = { function AlertContextProvider({ children }) { const [alert, setAlert] = useState(null); + const setAlertWrapper = useCallback((message, type = ALERT_TYPES.DANGER) => { + setAlert({ message, type }); + }, [setAlert]); + + const dismissAlert = useCallback(() => setAlert(null), [setAlert]); + return ( <> - {alert && setAlert(null)} />} - + {alert && ( + + + {alert.message} + + + )} + { children } ); } -export { AlertContext, AlertContextProvider }; +function useAlert() { + return useContext(AlertContext); +} + +export { AlertContext, AlertContextProvider, useAlert }; diff --git a/src/alertContext/__tests__/AlertContext.test.js b/src/alertContext/__tests__/AlertContext.test.js index 3c986a3..012b692 100644 --- a/src/alertContext/__tests__/AlertContext.test.js +++ b/src/alertContext/__tests__/AlertContext.test.js @@ -5,14 +5,21 @@ * See /LICENSE for more information. */ -import React, { useContext } from "react"; +import React from "react"; import { render, getByText, queryByText, fireEvent } from "customTestRender"; -import { AlertContext, AlertContextProvider } from "../AlertContext"; +import { useAlert, AlertContextProvider } from "../AlertContext"; function AlertTest() { - const setAlert = useContext(AlertContext); - return ; + const [setAlert, dismissAlert] = useAlert(); + // alert-container serves as an output for Portal which renders Alert + return ( + <> +
+ + + + ); }; describe("AlertContext", () => { @@ -36,7 +43,7 @@ describe("AlertContext", () => { expect(componentContainer).toMatchSnapshot(); }); - it("should dismiss alert", () => { + it("should dismiss alert with alert button", () => { fireEvent.click(getByText(componentContainer, "Set alert")); // Alert is present expect(getByText(componentContainer, "Alert content")).toBeDefined(); @@ -45,4 +52,14 @@ describe("AlertContext", () => { // Alert is gone expect(queryByText(componentContainer, "Alert content")).toBeNull(); }); + + it("should dismiss alert with external button", () => { + fireEvent.click(getByText(componentContainer, "Set alert")); + // Alert is present + expect(getByText(componentContainer, "Alert content")).toBeDefined(); + + fireEvent.click(getByText(componentContainer, "Dismiss alert")); + // Alert is gone + expect(queryByText(componentContainer, "Alert content")).toBeNull(); + }); }); diff --git a/src/alertContext/__tests__/__snapshots__/AlertContext.test.js.snap b/src/alertContext/__tests__/__snapshots__/AlertContext.test.js.snap index 97a4dc3..8117aa5 100644 --- a/src/alertContext/__tests__/__snapshots__/AlertContext.test.js.snap +++ b/src/alertContext/__tests__/__snapshots__/AlertContext.test.js.snap @@ -3,26 +3,39 @@ exports[`AlertContext should render alert 1`] = `
- - Alert content + + Alert content +
+
`; exports[`AlertContext should render component without alert 1`] = `
+
+
`; diff --git a/src/api/delete.js b/src/api/delete.js deleted file mode 100644 index dc4574f..0000000 --- a/src/api/delete.js +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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 { useReducer, useCallback } from "react"; -import axios from "axios"; - -import { - API_ACTIONS, TIMEOUT, HEADERS, APIReducer, getErrorMessage, -} from "./utils"; - -export function useAPIDelete(url) { - const [state, dispatch] = useReducer(APIReducer, { - isSending: false, - isError: false, - isSuccess: false, - data: null, - }); - - const requestDelete = useCallback(async () => { - dispatch({ type: API_ACTIONS.INIT }); - try { - await axios.delete(url, { - timeout: TIMEOUT, - headers: HEADERS, - }); - dispatch({ type: API_ACTIONS.SUCCESS }); - } catch (error) { - dispatch({ - type: API_ACTIONS.FAILURE, - payload: getErrorMessage(error), - status: error.response.status, - }); - } - }, [url]); - - return [state, requestDelete]; -} diff --git a/src/api/get.js b/src/api/get.js deleted file mode 100644 index 14c9d69..0000000 --- a/src/api/get.js +++ /dev/null @@ -1,65 +0,0 @@ -/* - * 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 { useReducer, useCallback } from "react"; -import axios from "axios"; - -import { ForisURLs } from "forisUrls"; -import { API_ACTIONS, TIMEOUT } from "./utils"; - -const APIGetReducer = (state, action) => { - switch (action.type) { - case API_ACTIONS.INIT: - return { - ...state, - isLoading: true, - isError: false, - }; - case API_ACTIONS.SUCCESS: - return { - ...state, - isLoading: false, - isError: false, - data: action.payload, - }; - case API_ACTIONS.FAILURE: - if (action.status === 403) window.location.assign(ForisURLs.login); - return { - ...state, - isLoading: false, - isError: true, - data: action.payload, - }; - default: - throw new Error(); - } -}; - -export function useAPIGet(url) { - const [state, dispatch] = useReducer(APIGetReducer, { - isLoading: false, - isError: false, - data: null, - }); - const get = useCallback(async () => { - dispatch({ type: API_ACTIONS.INIT }); - try { - const result = await axios.get(url, { - timeout: TIMEOUT, - }); - dispatch({ type: API_ACTIONS.SUCCESS, payload: result.data }); - } catch (error) { - dispatch({ - type: API_ACTIONS.FAILURE, - payload: error.response.data, - status: error.response.status, - }); - } - }, [url]); - - return [state, get]; -} diff --git a/src/api/hooks.js b/src/api/hooks.js new file mode 100644 index 0000000..da236d0 --- /dev/null +++ b/src/api/hooks.js @@ -0,0 +1,92 @@ +/* + * 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 { useCallback, useReducer } from "react"; + +import { ForisURLs } from "forisUrls"; +import { + API_ACTIONS, API_METHODS, API_STATE, getErrorPayload, HEADERS, TIMEOUT, +} from "./utils"; + +const DATA_METHODS = ["POST", "PATCH", "PUT"]; + +function createAPIHook(method) { + return (url, contentType) => { + const [state, dispatch] = useReducer(APIReducer, { + state: API_STATE.INIT, + data: null, + }); + + const sendRequest = useCallback(async (data) => { + const headers = { ...HEADERS }; + if (contentType) { + headers["Content-Type"] = contentType; + } + + dispatch({ type: API_ACTIONS.INIT }); + try { + const request = API_METHODS[method]; + const config = { + timeout: TIMEOUT, + headers, + }; + let result; + if (DATA_METHODS.includes(method)) { + result = await request(url, data, config); + } else { + result = await request(url, config); + } + dispatch({ + type: API_ACTIONS.SUCCESS, + payload: result.data, + }); + } catch (error) { + dispatch({ + type: API_ACTIONS.FAILURE, + status: error.response && error.response.status, + payload: getErrorPayload(error), + }); + } + }, [url, contentType]); + return [state, sendRequest]; + }; +} + +function APIReducer(state, action) { + switch (action.type) { + case API_ACTIONS.INIT: + return { + ...state, + state: API_STATE.SENDING, + }; + case API_ACTIONS.SUCCESS: + return { + state: API_STATE.SUCCESS, + data: action.payload, + }; + case API_ACTIONS.FAILURE: + if (action.status === 403) { + window.location.assign(ForisURLs.login); + } + return { + state: API_STATE.ERROR, + data: action.payload, + }; + default: + throw new Error(); + } +} + +const useAPIGet = createAPIHook("GET"); +const useAPIPost = createAPIHook("POST"); +const useAPIPatch = createAPIHook("PATCH"); +const useAPIPut = createAPIHook("PUT"); +const useAPIDelete = createAPIHook("DELETE"); + +export { + useAPIGet, useAPIPost, useAPIPatch, useAPIPut, useAPIDelete, +}; diff --git a/src/api/patch.js b/src/api/patch.js deleted file mode 100644 index ba3ed9e..0000000 --- a/src/api/patch.js +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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 { useReducer } from "react"; -import axios from "axios"; - -import { - API_ACTIONS, TIMEOUT, HEADERS, APIReducer, getErrorMessage, -} from "./utils"; - -export function useAPIPatch(url) { - const [state, dispatch] = useReducer(APIReducer, { - isSending: false, - isError: false, - isSuccess: false, - data: null, - }); - - const patch = async (data) => { - dispatch({ type: API_ACTIONS.INIT }); - try { - const result = await axios.patch(url, data, { - timeout: TIMEOUT, - headers: HEADERS, - }); - dispatch({ type: API_ACTIONS.SUCCESS, payload: result.data }); - } catch (error) { - dispatch({ - type: API_ACTIONS.FAILURE, - payload: getErrorMessage(error), - status: error.response.status, - }); - } - }; - return [state, patch]; -} diff --git a/src/api/post.js b/src/api/post.js deleted file mode 100644 index 6a3933a..0000000 --- a/src/api/post.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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 { useReducer } from "react"; -import axios from "axios"; - -import { - API_ACTIONS, TIMEOUT, HEADERS, APIReducer, getErrorMessage, -} from "./utils"; - -export function useAPIPost(url, contentType) { - const [state, dispatch] = useReducer(APIReducer, { - isSending: false, - isError: false, - isSuccess: false, - data: null, - }); - - const headers = { ...HEADERS }; - if (contentType) { - headers["Content-Type"] = contentType; - } - - const post = async (data) => { - dispatch({ type: API_ACTIONS.INIT }); - try { - const result = await axios.post(url, data, { - timeout: TIMEOUT, - headers, - }); - dispatch({ type: API_ACTIONS.SUCCESS, payload: result.data }); - } catch (error) { - dispatch({ - type: API_ACTIONS.FAILURE, - payload: getErrorMessage(error), - status: error.response.status, - }); - } - }; - return [state, post]; -} diff --git a/src/api/utils.js b/src/api/utils.js index fd85c8c..8e6c23b 100644 --- a/src/api/utils.js +++ b/src/api/utils.js @@ -5,7 +5,36 @@ * See /LICENSE for more information. */ -import { ForisURLs } from "forisUrls"; +import axios from "axios"; + +export const HEADERS = { + Accept: "application/json", + "Content-Type": "application/json", + "X-CSRFToken": getCookie("_csrf_token"), +}; + +export const TIMEOUT = 5000; + +export const API_ACTIONS = { + INIT: 1, + SUCCESS: 2, + FAILURE: 3, +}; + +export const API_STATE = { + INIT: "init", + SENDING: "sending", + SUCCESS: "success", + ERROR: "error", +}; + +export const API_METHODS = { + GET: axios.get, + POST: axios.post, + PATCH: axios.patch, + PUT: axios.put, + DELETE: axios.delete, +}; function getCookie(name) { let cookieValue = null; @@ -23,55 +52,27 @@ function getCookie(name) { return cookieValue; } -export const HEADERS = { - Accept: "application/json", - "Content-Type": "application/json", - "X-CSRFToken": getCookie("_csrf_token"), -}; - -export const TIMEOUT = 5000; - -export const API_ACTIONS = { - INIT: 1, - SUCCESS: 2, - FAILURE: 3, -}; - -export function APIReducer(state, action) { - switch (action.type) { - case API_ACTIONS.INIT: - return { - ...state, - isSending: true, - isError: false, - isSuccess: false, - }; - case API_ACTIONS.SUCCESS: - return { - ...state, - isSending: false, - isError: false, - isSuccess: true, - data: action.payload, - }; - case API_ACTIONS.FAILURE: - if (action.status === 403) window.location.assign(ForisURLs.login); - return { - ...state, - isSending: false, - isError: true, - isSuccess: false, - data: action.payload, - }; - default: - throw new Error(); +export function getErrorPayload(error) { + if (error.response) { + if (error.response.status === 403) { + return _("The session is expired. Please log in again."); + } + return getJSONErrorMessage(error); } + if (error.code === "ECONNABORTED") { + return _("Timeout error occurred."); + } + if (error.request) { + return _("No response received."); + } + /* eslint no-console: "off" */ + console.error(error); + return _("An unknown error occurred. Check the console for more info."); } -export function getErrorMessage(error) { - let payload = "An unknown error occurred"; +export function getJSONErrorMessage(error) { if (error.response.headers["content-type"] === "application/json") { - payload = error.response.data; + return error.response.data; } - return payload; + return _("An unknown API error occurred."); } diff --git a/src/bootstrap/Alert.js b/src/bootstrap/Alert.js index 902bede..5671f89 100644 --- a/src/bootstrap/Alert.js +++ b/src/bootstrap/Alert.js @@ -8,11 +8,20 @@ import React from "react"; import PropTypes from "prop-types"; +export const ALERT_TYPES = Object.freeze({ + PRIMARY: "primary", + SECONDARY: "secondary", + SUCCESS: "success", + DANGER: "danger", + WARNING: "warning", + INFO: "info", + LIGHT: "light", + DARK: "dark", +}); + Alert.propTypes = { /** Type of the alert it adds as `alert-${type}` class. */ - type: PropTypes.string.isRequired, - /** Alert message. */ - message: PropTypes.string, + type: PropTypes.oneOf(Object.values(ALERT_TYPES)), /** Alert content. */ children: PropTypes.oneOfType([ PropTypes.arrayOf(PropTypes.node), @@ -22,13 +31,16 @@ Alert.propTypes = { onDismiss: PropTypes.func, }; +Alert.defaultProps = { + type: ALERT_TYPES.DANGER, +}; + export function Alert({ - type, message, onDismiss, children, + type, onDismiss, children, }) { return (
{onDismiss ? : false} - {message} {children}
); diff --git a/src/bootstrap/EmailInput.js b/src/bootstrap/EmailInput.js index 9e499cd..44e78de 100644 --- a/src/bootstrap/EmailInput.js +++ b/src/bootstrap/EmailInput.js @@ -12,7 +12,6 @@ import { Input } from "./Input"; export const EmailInput = ({ ...props }) => ; - EmailInput.propTypes = { /** Field label. */ label: PropTypes.string.isRequired, diff --git a/src/bootstrap/Modal.js b/src/bootstrap/Modal.js index d0e02b0..a212c1f 100644 --- a/src/bootstrap/Modal.js +++ b/src/bootstrap/Modal.js @@ -37,11 +37,10 @@ export function Modal({ shown, setShown, children }) { }; }, [setShown]); - return (
-
+
{children}
diff --git a/src/bootstrap/RadioSet.js b/src/bootstrap/RadioSet.js index 48017a4..63af8f0 100644 --- a/src/bootstrap/RadioSet.js +++ b/src/bootstrap/RadioSet.js @@ -11,7 +11,6 @@ import { useUID } from "react-uid"; import { formFieldsSize } from "./constants"; - RadioSet.propTypes = { /** Name attribute of the input HTML tag. */ name: PropTypes.string.isRequired, diff --git a/src/bootstrap/Select.js b/src/bootstrap/Select.js index bc524c4..0d90752 100644 --- a/src/bootstrap/Select.js +++ b/src/bootstrap/Select.js @@ -9,7 +9,6 @@ import React from "react"; import PropTypes from "prop-types"; import { useUID } from "react-uid"; - Select.propTypes = { /** Select field Label. */ label: PropTypes.string.isRequired, diff --git a/src/bootstrap/Spinner.js b/src/bootstrap/Spinner.js index c45776a..43ca59f 100644 --- a/src/bootstrap/Spinner.js +++ b/src/bootstrap/Spinner.js @@ -28,7 +28,7 @@ export function Spinner({ }) { if (!fullScreen) { return ( -
+
{children}
); diff --git a/src/bootstrap/TextInput.js b/src/bootstrap/TextInput.js index 137e114..be60bb6 100644 --- a/src/bootstrap/TextInput.js +++ b/src/bootstrap/TextInput.js @@ -10,10 +10,8 @@ import PropTypes from "prop-types"; import { Input } from "./Input"; - export const TextInput = ({ ...props }) => ; - TextInput.propTypes = { /** Field label. */ label: PropTypes.string.isRequired, diff --git a/src/form/components/ForisForm.js b/src/form/components/ForisForm.js index 12e1854..86b552b 100644 --- a/src/form/components/ForisForm.js +++ b/src/form/components/ForisForm.js @@ -5,16 +5,19 @@ * See /LICENSE for more information. */ -import React, { useEffect, useState } from "react"; +import React, { useEffect } from "react"; import PropTypes from "prop-types"; import { Spinner } from "bootstrap/Spinner"; -import { useAPIPost } from "api/post"; +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 { useForisModule, useForm } from "../hooks"; import { STATES as SUBMIT_BUTTON_STATES, SubmitButton } from "./SubmitButton"; -import { FailAlert, SuccessAlert } from "./alerts"; ForisForm.propTypes = { /** WebSocket object see `scr/common/WebSockets.js`. */ @@ -69,22 +72,34 @@ export function ForisForm({ children, }) { const [formState, onFormChangeHandler, resetFormData] = useForm(validator, prepData); + const [setAlert] = useAlert(); const [forisModuleState] = useForisModule(ws, forisConfig); useEffect(() => { - if (forisModuleState.data) { + if (forisModuleState.state === API_STATE.SUCCESS) { resetFormData(forisModuleState.data); } - }, [forisModuleState.data, resetFormData, prepData]); + }, [forisModuleState, resetFormData, prepData]); const [postState, post] = useAPIPost(forisConfig.endpoint); useEffect(() => { - if (postState.isSuccess) postCallback(); - }, [postCallback, postState.isSuccess]); + if (postState.state === API_STATE.SUCCESS) { + postCallback(); + setAlert(_("Settings saved successfully"), ALERT_TYPES.SUCCESS); + } else if (postState.state === API_STATE.ERROR) { + setAlert(postState.data); + } + }, [postCallback, postState.state, postState.data, setAlert]); + if (forisModuleState.state === API_STATE.ERROR) { + return ; + } + if (!formState.data) { + return ; + } - function onSubmitHandler(e) { - e.preventDefault(); + function onSubmitHandler(event) { + event.preventDefault(); resetFormData(); const copiedFormData = JSON.parse(JSON.stringify(formState.data)); const preparedData = prepDataToSubmit(copiedFormData); @@ -92,16 +107,18 @@ export function ForisForm({ } function getSubmitButtonState() { - if (postState.isSending) return SUBMIT_BUTTON_STATES.SAVING; - if (forisModuleState.isLoading) return SUBMIT_BUTTON_STATES.LOAD; + if (postState.state === API_STATE.SENDING) { + return SUBMIT_BUTTON_STATES.SAVING; + } + if (forisModuleState.state === API_STATE.SENDING) { + return SUBMIT_BUTTON_STATES.LOAD; + } return SUBMIT_BUTTON_STATES.READY; } - const [alertIsDismissed, setAlertIsDismissed] = useState(false); - - if (!formState.data) return ; - - const formIsDisabled = disabled || forisModuleState.isLoading || postState.isSending; + const formIsDisabled = (disabled + || forisModuleState.state === API_STATE.SENDING + || postState.state === API_STATE.SENDING); const submitButtonIsDisabled = disabled || !!formState.errors; const childrenWithFormProps = React.Children.map( @@ -123,19 +140,9 @@ export function ForisForm({ return _("Changes you made may not be saved. Are you sure you want to leave?"); } - let alert = null; - if (!alertIsDismissed) { - if (postState.isSuccess) { - alert = setAlertIsDismissed(true)} />; - } else if (postState.isError) { - alert = setAlertIsDismissed(true)} />; - } - } - return ( <> - {alert}
{childrenWithFormProps} - - - ); -} - -FailAlert.propTypes = { - onDismiss: PropTypes.func.isRequired, -}; - -export function FailAlert({ onDismiss }) { - return ( - - - - ); -} diff --git a/src/form/hooks.js b/src/form/hooks.js index 3b14499..f91b5da 100644 --- a/src/form/hooks.js +++ b/src/form/hooks.js @@ -8,10 +8,9 @@ import { useCallback, useEffect, useReducer } from "react"; import update from "immutability-helper"; -import { useAPIGet } from "api/get"; +import { useAPIGet } from "api/hooks"; import { useWSForisModule } from "webSockets/hooks"; - const FORM_ACTIONS = { updateValue: 1, resetData: 2, @@ -49,7 +48,6 @@ export function useForm(validator, dataPreprocessor) { ]; } - function formReducer(state, action) { switch (action.type) { case FORM_ACTIONS.updateValue: { diff --git a/src/index.js b/src/index.js index 9561621..5f755d9 100644 --- a/src/index.js +++ b/src/index.js @@ -6,13 +6,13 @@ */ // API -export { useAPIGet } from "api/get"; -export { useAPIPost } from "api/post"; -export { useAPIDelete } from "api/delete"; -export { useAPIPatch } from "api/patch"; +export { + useAPIGet, useAPIPost, useAPIPatch, useAPIPut, useAPIDelete, +} from "api/hooks"; +export { API_STATE } from "api/utils"; // Bootstrap -export { Alert } from "bootstrap/Alert"; +export { Alert, ALERT_TYPES } from "bootstrap/Alert"; export { Button } from "bootstrap/Button"; export { CheckBox } from "bootstrap/CheckBox"; export { DownloadButton } from "bootstrap/DownloadButton"; @@ -50,6 +50,10 @@ export { WebSockets } from "webSockets/WebSockets"; // Utils 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"; // Foris URL export { ForisURLs, REFORIS_URL_PREFIX } from "forisUrls"; @@ -66,4 +70,4 @@ export { } from "validations"; // Alert context -export { AlertContext, AlertContextProvider } from "alertContext/AlertContext"; +export { AlertContext, AlertContextProvider, useAlert } from "alertContext/AlertContext"; diff --git a/src/testUtils/alertContextMock.js b/src/testUtils/alertContextMock.js new file mode 100644 index 0000000..22347e3 --- /dev/null +++ b/src/testUtils/alertContextMock.js @@ -0,0 +1,23 @@ +/* + * 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 { AlertContext } from "../alertContext/AlertContext"; + +const mockSetAlert = jest.fn(); +const mockDismissAlert = jest.fn(); + +function AlertContextMock({ children }) { + return ( + + { children } + + ); +} + +export { AlertContextMock, mockSetAlert, mockDismissAlert }; diff --git a/src/testUtils/customTestRender.js b/src/testUtils/customTestRender.js index ee927de..fbf1718 100644 --- a/src/testUtils/customTestRender.js +++ b/src/testUtils/customTestRender.js @@ -7,31 +7,37 @@ /* eslint import/export: "off" */ -import React from 'react'; -import PropTypes from 'prop-types'; -import {UIDReset} from 'react-uid'; -import {StaticRouter} from 'react-router'; -import {render} from '@testing-library/react' +import React from "react"; +import { UIDReset } from "react-uid"; +import { StaticRouter } from "react-router"; +import { render } from "@testing-library/react"; +import PropTypes from "prop-types"; + +import { AlertContextMock } from "./alertContextMock"; Wrapper.propTypes = { children: PropTypes.oneOfType([ PropTypes.arrayOf(PropTypes.node), - PropTypes.node - ]) + PropTypes.node, + ]), }; -function Wrapper({children}) { - return - - {children} - - +function Wrapper({ children }) { + return ( + + + + {children} + + + + ); } -const customTestRender = (ui, options) => render(ui, {wrapper: Wrapper, ...options}); +const customTestRender = (ui, options) => render(ui, { wrapper: Wrapper, ...options }); // re-export everything -export * from '@testing-library/react' +export * from "@testing-library/react"; // override render method -export {customTestRender as render} +export { customTestRender as render }; diff --git a/src/testUtils/network.js b/src/testUtils/network.js new file mode 100644 index 0000000..05efa59 --- /dev/null +++ b/src/testUtils/network.js @@ -0,0 +1,12 @@ +/* + * 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 mockAxios from 'jest-mock-axios'; + +export function mockJSONError(data) { + mockAxios.mockError({ response: { data, headers: { "content-type": "application/json" } } }); +} diff --git a/src/testUtils/setup.js b/src/testUtils/setup.js index af4800b..5c9ca17 100644 --- a/src/testUtils/setup.js +++ b/src/testUtils/setup.js @@ -15,12 +15,15 @@ global.afterEach(() => { // Mock babel (gettext) global._ = str => str; +global.ngettext = str => str; global.babel = {format: (str) => str}; global.ForisTranslations = {}; +// Mock web sockets +window.WebSocket = jest.fn(); + // Mock scrollIntoView -global.HTMLElement.prototype.scrollIntoView = () => { -}; +global.HTMLElement.prototype.scrollIntoView = () => {}; jest.doMock('moment', () => { moment.tz.setDefault('UTC'); diff --git a/src/utils/ErrorMessage.js b/src/utils/ErrorMessage.js new file mode 100644 index 0000000..22e4f7b --- /dev/null +++ b/src/utils/ErrorMessage.js @@ -0,0 +1,16 @@ +/* + * 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"; + +export function ErrorMessage() { + return ( +

+ {_("An error occurred while fetching data.")} +

+ ); +} diff --git a/src/utils/__tests__/__snapshots__/conditionalHOCs.test.js.snap b/src/utils/__tests__/__snapshots__/conditionalHOCs.test.js.snap new file mode 100644 index 0000000..f2e1040 --- /dev/null +++ b/src/utils/__tests__/__snapshots__/conditionalHOCs.test.js.snap @@ -0,0 +1,61 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`conditional HOCs withError should render error message 1`] = ` +
+

+ An error occurred while fetching data. +

+
+`; + +exports[`conditional HOCs withErrorMessage should render error message 1`] = ` +
+

+ An error occurred while fetching data. +

+
+`; + +exports[`conditional HOCs withSpinner should render spinner 1`] = ` +
+
+
+ +
+
+
+
+`; + +exports[`conditional HOCs withSpinnerOnSending should render spinner 1`] = ` +
+
+
+ +
+
+
+
+`; diff --git a/src/utils/__tests__/conditionalHOCs.test.js b/src/utils/__tests__/conditionalHOCs.test.js new file mode 100644 index 0000000..eb8985e --- /dev/null +++ b/src/utils/__tests__/conditionalHOCs.test.js @@ -0,0 +1,110 @@ +/* + * 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 { render } from "customTestRender"; +import { + withEither, withSpinner, withSending, withSpinnerOnSending, withError, withErrorMessage, +} from "../conditionalHOCs"; +import { API_STATE } from "api/utils"; + +describe("conditional HOCs", () => { + const First = () =>

First

; + const Alternative = () =>

Alternative

; + + describe("withEither", () => { + it("should render First component", () => { + const withAlternative = withEither(() => false, Alternative); + const FirstWithConditional = withAlternative(First); + const { getByText } = render(); + expect(getByText("First")).toBeDefined(); + }); + + it("should render Alternative component", () => { + const withAlternative = withEither(() => true, Alternative); + const FirstWithConditional = withAlternative(First); + const { getByText } = render(); + expect(getByText("Alternative")).toBeDefined(); + }); + }); + + describe("withSpinner", () => { + it("should render First component", () => { + const withSpinnerHidden = withSpinner(() => false); + const FirstWithConditional = withSpinnerHidden(First); + const { getByText } = render(); + expect(getByText("First")).toBeDefined(); + }); + + it("should render spinner", () => { + const withSpinnerVisible = withSpinner(() => true); + const FirstWithConditional = withSpinnerVisible(First); + const { container } = render(); + expect(container).toMatchSnapshot(); + }); + }); + + describe("withSending", () => { + it("should render First component", () => { + const withAlternative = withSending(Alternative); + const FirstWithConditional = withAlternative(First); + const { getByText } = render(); + expect(getByText("First")).toBeDefined(); + }); + + it("should render Alternative component", () => { + const withAlternative = withSending(Alternative); + const FirstWithConditional = withAlternative(First); + const { getByText } = render(); + expect(getByText("Alternative")).toBeDefined(); + }); + }); + + describe("withSpinnerOnSending", () => { + it("should render First component", () => { + const FirstWithConditional = withSpinnerOnSending(First); + const { getByText } = render(); + expect(getByText("First")).toBeDefined(); + }); + + it("should render spinner", () => { + const FirstWithConditional = withSpinnerOnSending(First); + const { container } = render(); + expect(container).toMatchSnapshot(); + }); + }); + + describe("withError", () => { + it("should render First component", () => { + const withErrorHidden = withError(() => false); + const FirstWithConditional = withErrorHidden(First); + const { getByText } = render(); + expect(getByText("First")).toBeDefined(); + }); + + it("should render error message", () => { + const withErrorVisible = withError(() => true); + const FirstWithConditional = withErrorVisible(First); + const { container } = render(); + expect(container).toMatchSnapshot(); + }); + }); + + describe("withErrorMessage", () => { + it("should render First component", () => { + const FirstWithConditional = withErrorMessage(First); + const { getByText } = render(); + expect(getByText("First")).toBeDefined(); + }); + + it("should render error message", () => { + const FirstWithConditional = withErrorMessage(First); + const { container } = render(); + expect(container).toMatchSnapshot(); + }); + }); +}); diff --git a/src/utils/conditionalHOCs.js b/src/utils/conditionalHOCs.js new file mode 100644 index 0000000..4c38fb4 --- /dev/null +++ b/src/utils/conditionalHOCs.js @@ -0,0 +1,52 @@ +/* + * 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 { 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 ; + } + return ; + }; +} + +// Loading + +function isSending(props) { + if (Array.isArray(props.apiState)) { + return props.apiState.some( + (state) => [API_STATE.INIT, API_STATE.SENDING].includes(state), + ); + } + return [API_STATE.INIT, API_STATE.SENDING].includes(props.apiState); +} + +const withSpinner = (conditionalFn) => withEither(conditionalFn, Spinner); +const withSending = (Either) => withEither(isSending, Either); +const withSpinnerOnSending = withSpinner(isSending); + +// Error handling + +const withError = (conditionalFn) => withEither(conditionalFn, ErrorMessage); +const withErrorMessage = withError( + (props) => { + if (Array.isArray(props.apiState)) { + return props.apiState.includes(API_STATE.ERROR); + } + return props.apiState === API_STATE.ERROR; + }, +); + +export { + withEither, withSpinner, withSending, withSpinnerOnSending, withError, withErrorMessage, +}; diff --git a/src/validations.js b/src/validations.js index 692d005..2af2855 100644 --- a/src/validations.js +++ b/src/validations.js @@ -29,7 +29,6 @@ const REs = { MultipleEmails: /^([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+ *)( *, *[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+ *)*$/, }; - const createValidator = (fieldType) => (value) => { if (value && value !== "") return REs[fieldType].test(value) ? undefined : ERROR_MESSAGES[fieldType]; }; diff --git a/translations/cs/LC_MESSAGES/forisjs.po b/translations/cs/LC_MESSAGES/forisjs.po index 085c508..51cac6a 100644 --- a/translations/cs/LC_MESSAGES/forisjs.po +++ b/translations/cs/LC_MESSAGES/forisjs.po @@ -1,4 +1,4 @@ -# Translations template for PROJECT. +# Czech translations for PROJECT. # Copyright (C) 2019 ORGANIZATION # This file is distributed under the same license as the PROJECT project. # FIRST AUTHOR , 2019. @@ -7,17 +7,16 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\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 \n" -"Language-Team: Czech \n" "Language: cs\n" +"Language-Team: Czech \n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" -"X-Generator: Weblate 3.9-dev\n" "Generated-By: Babel 2.7.0\n" #: src/validations.js:13 @@ -48,7 +47,31 @@ msgstr "Tohle není platná MAC adresa." msgid "Doesn't contain a list of emails separated by commas." msgstr "Neobsahuje seznam e-mailů oddělených čárkou." -#: src/form/components/ForisForm.js:123 +#: 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/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 "" "Změny, které byly provedeny, nebyly uloženy. Jste si jistý, že chcete " @@ -66,10 +89,13 @@ msgstr "Načítám nastavení" msgid "Save" msgstr "Uložit" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." -msgstr "Nastavení bylo úspěšně uloženo." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." +msgstr "" + +#~ msgid "Settings were successfully saved." +#~ msgstr "Nastavení bylo úspěšně uloženo." + +#~ msgid "Settings update was failed." +#~ msgstr "Ukládání nastavení selhalo." -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "Ukládání nastavení selhalo." diff --git a/translations/da/LC_MESSAGES/forisjs.po b/translations/da/LC_MESSAGES/forisjs.po index 6df1d29..f8c53dc 100644 --- a/translations/da/LC_MESSAGES/forisjs.po +++ b/translations/da/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:54+0200\n" "Last-Translator: FULL NAME \n" "Language: da\n" @@ -16,7 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -46,7 +46,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -62,11 +86,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/de/LC_MESSAGES/forisjs.po b/translations/de/LC_MESSAGES/forisjs.po index 3c3cff0..8e247a3 100644 --- a/translations/de/LC_MESSAGES/forisjs.po +++ b/translations/de/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:54+0200\n" "Last-Translator: FULL NAME \n" "Language: de\n" @@ -16,7 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -46,7 +46,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -62,11 +86,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/el/LC_MESSAGES/forisjs.po b/translations/el/LC_MESSAGES/forisjs.po index ae15ae1..3591b4d 100644 --- a/translations/el/LC_MESSAGES/forisjs.po +++ b/translations/el/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:54+0200\n" "Last-Translator: FULL NAME \n" "Language: el\n" @@ -16,7 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -46,7 +46,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -62,11 +86,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/en/LC_MESSAGES/forisjs.po b/translations/en/LC_MESSAGES/forisjs.po index 070c293..7a20e38 100644 --- a/translations/en/LC_MESSAGES/forisjs.po +++ b/translations/en/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:21+0200\n" "Last-Translator: FULL NAME \n" "Language: en\n" @@ -16,7 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -46,7 +46,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -62,11 +86,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/fi/LC_MESSAGES/forisjs.po b/translations/fi/LC_MESSAGES/forisjs.po index e510d10..ac64b52 100644 --- a/translations/fi/LC_MESSAGES/forisjs.po +++ b/translations/fi/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:54+0200\n" "Last-Translator: FULL NAME \n" "Language: fi\n" @@ -16,7 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -46,7 +46,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -62,11 +86,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/fo/LC_MESSAGES/forisjs.po b/translations/fo/LC_MESSAGES/forisjs.po index 2559f6d..a795b2a 100644 --- a/translations/fo/LC_MESSAGES/forisjs.po +++ b/translations/fo/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:54+0200\n" "Last-Translator: FULL NAME \n" "Language: fo\n" @@ -16,7 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -46,7 +46,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -62,11 +86,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/forisjs.pot b/translations/forisjs.pot index 6f2cf22..13921da 100644 --- a/translations/forisjs.pot +++ b/translations/forisjs.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -45,7 +45,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -61,11 +85,7 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." -msgstr "" - -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" diff --git a/translations/fr/LC_MESSAGES/forisjs.po b/translations/fr/LC_MESSAGES/forisjs.po index 031bc27..60af4c6 100644 --- a/translations/fr/LC_MESSAGES/forisjs.po +++ b/translations/fr/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:54+0200\n" "Last-Translator: FULL NAME \n" "Language: fr\n" @@ -16,7 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -46,7 +46,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -62,11 +86,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/hr/LC_MESSAGES/forisjs.po b/translations/hr/LC_MESSAGES/forisjs.po index 8143216..d0b6b2b 100644 --- a/translations/hr/LC_MESSAGES/forisjs.po +++ b/translations/hr/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:55+0200\n" "Last-Translator: FULL NAME \n" "Language: hr\n" @@ -17,7 +17,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -47,7 +47,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -63,11 +87,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/hu/LC_MESSAGES/forisjs.po b/translations/hu/LC_MESSAGES/forisjs.po index ed637f5..639b6bd 100644 --- a/translations/hu/LC_MESSAGES/forisjs.po +++ b/translations/hu/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:55+0200\n" "Last-Translator: FULL NAME \n" "Language: hu\n" @@ -16,7 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -46,7 +46,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -62,11 +86,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/it/LC_MESSAGES/forisjs.po b/translations/it/LC_MESSAGES/forisjs.po index 8fb67f4..33e6b01 100644 --- a/translations/it/LC_MESSAGES/forisjs.po +++ b/translations/it/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:55+0200\n" "Last-Translator: FULL NAME \n" "Language: it\n" @@ -16,7 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -46,7 +46,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -62,11 +86,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/ja/LC_MESSAGES/forisjs.po b/translations/ja/LC_MESSAGES/forisjs.po index 766c8f8..c3e8a0b 100644 --- a/translations/ja/LC_MESSAGES/forisjs.po +++ b/translations/ja/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:55+0200\n" "Last-Translator: FULL NAME \n" "Language: ja\n" @@ -16,7 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -46,7 +46,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -62,11 +86,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/ko/LC_MESSAGES/forisjs.po b/translations/ko/LC_MESSAGES/forisjs.po index 1d98f8e..24bb8d1 100644 --- a/translations/ko/LC_MESSAGES/forisjs.po +++ b/translations/ko/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:55+0200\n" "Last-Translator: FULL NAME \n" "Language: ko\n" @@ -16,7 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -46,7 +46,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -62,11 +86,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/lt/LC_MESSAGES/forisjs.po b/translations/lt/LC_MESSAGES/forisjs.po index c186bb9..a4b8957 100644 --- a/translations/lt/LC_MESSAGES/forisjs.po +++ b/translations/lt/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:55+0200\n" "Last-Translator: FULL NAME \n" "Language: lt\n" @@ -17,7 +17,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -47,7 +47,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -63,11 +87,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/nb/LC_MESSAGES/forisjs.po b/translations/nb/LC_MESSAGES/forisjs.po index 6890f9d..0e62422 100644 --- a/translations/nb/LC_MESSAGES/forisjs.po +++ b/translations/nb/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:56+0200\n" "Last-Translator: FULL NAME \n" "Language: nb\n" @@ -16,7 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -46,7 +46,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -62,11 +86,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/nb_NO/LC_MESSAGES/forisjs.po b/translations/nb_NO/LC_MESSAGES/forisjs.po index 9e67527..26865a1 100644 --- a/translations/nb_NO/LC_MESSAGES/forisjs.po +++ b/translations/nb_NO/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:55+0200\n" "Last-Translator: FULL NAME \n" "Language: nb_NO\n" @@ -16,7 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -46,7 +46,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -62,11 +86,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/nl/LC_MESSAGES/forisjs.po b/translations/nl/LC_MESSAGES/forisjs.po index ebe6210..208b636 100644 --- a/translations/nl/LC_MESSAGES/forisjs.po +++ b/translations/nl/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:56+0200\n" "Last-Translator: FULL NAME \n" "Language: nl\n" @@ -16,7 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -46,7 +46,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -62,11 +86,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/pl/LC_MESSAGES/forisjs.po b/translations/pl/LC_MESSAGES/forisjs.po index fd803d9..35715ea 100644 --- a/translations/pl/LC_MESSAGES/forisjs.po +++ b/translations/pl/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:56+0200\n" "Last-Translator: FULL NAME \n" "Language: pl\n" @@ -17,7 +17,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -47,7 +47,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -63,11 +87,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/ro/LC_MESSAGES/forisjs.po b/translations/ro/LC_MESSAGES/forisjs.po index a2a451a..6213ccc 100644 --- a/translations/ro/LC_MESSAGES/forisjs.po +++ b/translations/ro/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:56+0200\n" "Last-Translator: FULL NAME \n" "Language: ro\n" @@ -17,7 +17,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -47,7 +47,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -63,11 +87,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/ru/LC_MESSAGES/forisjs.po b/translations/ru/LC_MESSAGES/forisjs.po index 8232f2a..9c81ac8 100644 --- a/translations/ru/LC_MESSAGES/forisjs.po +++ b/translations/ru/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:56+0200\n" "Last-Translator: FULL NAME \n" "Language: ru\n" @@ -17,7 +17,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -47,7 +47,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -63,11 +87,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/sk/LC_MESSAGES/forisjs.po b/translations/sk/LC_MESSAGES/forisjs.po index b890ff6..ab80b80 100644 --- a/translations/sk/LC_MESSAGES/forisjs.po +++ b/translations/sk/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:56+0200\n" "Last-Translator: FULL NAME \n" "Language: sk\n" @@ -16,7 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -46,7 +46,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -62,11 +86,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr "" diff --git a/translations/sv/LC_MESSAGES/forisjs.po b/translations/sv/LC_MESSAGES/forisjs.po index d8fd25f..e06729b 100644 --- a/translations/sv/LC_MESSAGES/forisjs.po +++ b/translations/sv/LC_MESSAGES/forisjs.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2019-08-28 14:34+0200\n" +"POT-Creation-Date: 2019-11-14 11:13+0100\n" "PO-Revision-Date: 2019-08-28 17:56+0200\n" "Last-Translator: FULL NAME \n" "Language: sv\n" @@ -16,7 +16,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.6.0\n" +"Generated-By: Babel 2.7.0\n" #: src/validations.js:13 msgid "This is not a valid IPv4 address." @@ -46,7 +46,31 @@ msgstr "" msgid "Doesn't contain a list of emails separated by commas." msgstr "" -#: src/form/components/ForisForm.js:123 +#: 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/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 "" @@ -62,11 +86,13 @@ msgstr "" msgid "Save" msgstr "" -#: src/form/components/alerts.js:25 -msgid "Settings were successfully saved." +#: src/utils/ErrorMessage.js:13 +msgid "An error occurred while fetching data." msgstr "" -#: src/form/components/alerts.js:41 -msgid "Settings update was failed." -msgstr "" +#~ msgid "Settings were successfully saved." +#~ msgstr "" + +#~ msgid "Settings update was failed." +#~ msgstr ""