diff --git a/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/ThirdPartyStorageModule.js b/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/ThirdPartyStorageModule.js
index 1de1b729da..baea4b9bf2 100644
--- a/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/ThirdPartyStorageModule.js
+++ b/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/ThirdPartyStorageModule.js
@@ -131,17 +131,20 @@ class ThirdPartyStorageModule extends React.PureComponent {
};
isInvalidForm = (formSettings) => {
+ let errors = {};
+ let firstError = false;
+
for (let key in formSettings) {
const elem = formSettings[key];
+ errors[key] = !elem.trim();
- if (!elem.trim()) {
- return true;
+ if (!elem.trim() && !firstError) {
+ firstError = true;
}
}
- return false;
+ return [firstError, errors];
};
-
render() {
const { t, helpUrlCreatingBackup, isLoadingData, maxProgress } = this.props;
const {
diff --git a/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/storages/AmazonStorage.js b/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/storages/AmazonStorage.js
index 4af379e478..e73f050f0a 100644
--- a/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/storages/AmazonStorage.js
+++ b/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/storages/AmazonStorage.js
@@ -1,23 +1,26 @@
import React from "react";
import { withTranslation } from "react-i18next";
import Button from "@appserver/components/button";
-import TextInput from "@appserver/components/text-input";
-
+import AmazonSettings from "../../consumer-storage-settings/AmazonSettings";
class AmazonStorage extends React.Component {
constructor(props) {
super(props);
const { t, availableStorage, selectedId } = this.props;
this.state = {
- bucket: "",
- forcePathStyle: "",
- region: "",
- serviceUrl: "",
- sse: "",
- useHttp: "",
- isError: false,
+ formSettings: {
+ bucket: "",
+ forcePathStyle: "",
+ region: "",
+ serviceUrl: "",
+ sse: "",
+ useHttp: "",
+ },
+ formErrors: {},
isChangedInput: false,
};
+ this.namesArray = AmazonSettings.formNames();
+
this.isDisabled =
availableStorage[selectedId] && !availableStorage[selectedId].isSet;
@@ -40,125 +43,57 @@ class AmazonStorage extends React.Component {
}
onChange = (event) => {
+ const { formSettings } = this.state;
const { target } = event;
const value = target.value;
const name = target.name;
- this.setState({ [name]: value });
+ this.setState({ formSettings: { ...formSettings, [name]: value } });
};
onMakeCopy = () => {
- const {
- bucket,
- forcePathStyle,
- region,
- serviceUrl,
- sse,
- useHttp,
- isError,
- } = this.state;
-
+ const { formSettings } = this.state;
+ const { bucket, region } = formSettings;
const { onMakeCopyIntoStorage, isInvalidForm } = this.props;
- if (isInvalidForm([bucket, region])) {
- this.setState({
- isError: true,
- });
+ const isInvalid = isInvalidForm({
+ bucket,
+ region,
+ });
+
+ const hasError = isInvalid[0];
+ const errors = isInvalid[1];
+
+ if (hasError) {
+ this.setState({ formErrors: errors });
return;
}
- isError &&
- this.setState({
- isError: false,
- });
-
- const valuesArray = [
- bucket,
- forcePathStyle,
- region,
- serviceUrl,
- sse,
- useHttp,
- ];
-
- onMakeCopyIntoStorage(valuesArray);
+ onMakeCopyIntoStorage(this.namesArray);
+ this.setState({ formErrors: {} });
};
render() {
+ const { formSettings, formErrors } = this.state;
const {
- isError,
- bucket,
- forcePathStyle,
- region,
- serviceUrl,
- sse,
- useHttp,
- } = this.state;
- const { t, isLoadingData, isLoading, maxProgress } = this.props;
+ t,
+ isLoadingData,
+ isLoading,
+ maxProgress,
+ availableStorage,
+ selectedId,
+ } = this.props;
return (
<>
-
-
-
-
-
-
-
diff --git a/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/storages/GoogleCloudStorage.js b/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/storages/GoogleCloudStorage.js
index ad6885cbd2..dfbc6b8f1c 100644
--- a/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/storages/GoogleCloudStorage.js
+++ b/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/storages/GoogleCloudStorage.js
@@ -1,8 +1,7 @@
import React from "react";
import { withTranslation } from "react-i18next";
-
import Button from "@appserver/components/button";
-import TextInput from "@appserver/components/text-input";
+import GoogleCloudSettings from "../../consumer-storage-settings/GoogleCloudSettings";
class GoogleCloudStorage extends React.Component {
constructor(props) {
@@ -10,9 +9,12 @@ class GoogleCloudStorage extends React.Component {
const { availableStorage, selectedId } = this.props;
this.state = {
- bucket: "",
+ formSettings: {
+ bucket: "",
+ },
isError: false,
isChangedInput: false,
+ formErrors: {},
};
this.isDisabled =
availableStorage[selectedId] && !availableStorage[selectedId].isSet;
@@ -24,59 +26,55 @@ class GoogleCloudStorage extends React.Component {
}
onChange = (event) => {
+ const { formSettings } = this.state;
const { target } = event;
const value = target.value;
const name = target.name;
- this.setState({ [name]: value });
- };
-
- isInvalidForm = () => {
- const { bucket } = this.state;
- if (bucket) return false;
-
- this.setState({
- isError: true,
- });
- return true;
+ this.setState({ formSettings: { ...formSettings, [name]: value } });
};
onMakeCopy = () => {
- const { bucket, isError } = this.state;
+ const { formSettings } = this.state;
+ const { bucket } = formSettings;
const { onMakeCopyIntoStorage, isInvalidForm } = this.props;
- const valuesArray = [bucket];
+ const isInvalid = isInvalidForm({
+ bucket,
+ });
- if (isInvalidForm(valuesArray)) {
- this.setState({
- isError: true,
- });
+ const hasError = isInvalid[0];
+ const errors = isInvalid[1];
+
+ if (hasError) {
+ this.setState({ formErrors: errors });
return;
}
- isError &&
- this.setState({
- isError: false,
- });
-
- onMakeCopyIntoStorage(valuesArray);
+ onMakeCopyIntoStorage([bucket]);
+ this.setState({ formErrors: {} });
};
render() {
- const { bucket, isError } = this.state;
- const { t, isLoadingData, isLoading, maxProgress } = this.props;
+ const { formSettings, formErrors } = this.state;
+ const {
+ t,
+ isLoadingData,
+ isLoading,
+ maxProgress,
+ availableStorage,
+ selectedId,
+ } = this.props;
return (
<>
-
diff --git a/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/storages/RackspaceStorage.js b/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/storages/RackspaceStorage.js
index a7e9d0b1ea..3427c67822 100644
--- a/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/storages/RackspaceStorage.js
+++ b/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/storages/RackspaceStorage.js
@@ -1,18 +1,22 @@
import React from "react";
import { withTranslation } from "react-i18next";
import Button from "@appserver/components/button";
-import TextInput from "@appserver/components/text-input";
+import RackspaceSettings from "../../consumer-storage-settings/RackspaceSettings";
class RackspaceStorage extends React.Component {
constructor(props) {
super(props);
const { availableStorage, selectedId } = this.props;
+ this.namesArray = RackspaceSettings.formNames();
+
this.state = {
- private_container: "",
- public_container: "",
- region: "",
- isError: false,
+ formSettings: {
+ private_container: "",
+ public_container: "",
+ region: "",
+ },
+ formErrors: {},
};
this.isDisabled =
availableStorage[selectedId] && !availableStorage[selectedId].isSet;
@@ -33,71 +37,58 @@ class RackspaceStorage extends React.Component {
}
onChange = (event) => {
+ const { formSettings } = this.state;
const { target } = event;
const value = target.value;
const name = target.name;
- this.setState({ [name]: value });
+ this.setState({ formSettings: { ...formSettings, [name]: value } });
};
onMakeCopy = () => {
- const { private_container, public_container, region, isError } = this.state;
+ const { formSettings } = this.state;
+ const { private_container, public_container, region } = formSettings;
const { onMakeCopyIntoStorage, isInvalidForm } = this.props;
- const valuesArray = [private_container, public_container, region];
+ const isInvalid = isInvalidForm({
+ private_container,
+ public_container,
+ region,
+ });
- if (isInvalidForm(valuesArray)) {
- this.setState({
- isError: true,
- });
+ const hasError = isInvalid[0];
+ const errors = isInvalid[1];
+
+ if (hasError) {
+ this.setState({ formErrors: errors });
return;
}
- isError &&
- this.setState({
- isError: false,
- });
-
- onMakeCopyIntoStorage(valuesArray);
+ onMakeCopyIntoStorage(this.namesArray);
+ this.setState({ formErrors: {} });
};
render() {
- const { private_container, public_container, region, isError } = this.state;
- const { t, isLoadingData, isLoading, maxProgress } = this.props;
+ const { formSettings, formErrors } = this.state;
+ const {
+ t,
+ isLoadingData,
+ isLoading,
+ maxProgress,
+ selectedId,
+ availableStorage,
+ } = this.props;
return (
<>
-
-
-
diff --git a/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/storages/SelectelStorage.js b/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/storages/SelectelStorage.js
index 68986be879..e70a01ae51 100644
--- a/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/storages/SelectelStorage.js
+++ b/web/ASC.Web.Client/src/components/pages/Settings/categories/data-management/sub-components-manual-backup/storages/SelectelStorage.js
@@ -1,17 +1,21 @@
import React from "react";
import { withTranslation } from "react-i18next";
import Button from "@appserver/components/button";
-import TextInput from "@appserver/components/text-input";
+import SelectelSettings from "../../consumer-storage-settings/SelectelSettings";
class SelectelStorage extends React.Component {
constructor(props) {
super(props);
const { availableStorage, selectedId } = this.props;
+ this.namesArray = SelectelSettings.formNames();
+
this.state = {
- private_container: "",
- public_container: "",
- isError: false,
+ formSettings: {
+ private_container: "",
+ public_container: "",
+ },
+ formErrors: {},
};
this.isDisabled =
@@ -27,61 +31,58 @@ class SelectelStorage extends React.Component {
}
onChange = (event) => {
+ const { formSettings } = this.state;
const { target } = event;
const value = target.value;
const name = target.name;
- this.setState({ [name]: value });
+ this.setState({ formSettings: { ...formSettings, [name]: value } });
};
onMakeCopy = () => {
- const { private_container, public_container, isError } = this.state;
+ const { formSettings } = this.state;
+ const { private_container, public_container } = formSettings;
const { onMakeCopyIntoStorage, isInvalidForm } = this.props;
- const valuesArray = [private_container, public_container];
+ const isInvalid = isInvalidForm({
+ private_container,
+ public_container,
+ });
- if (isInvalidForm(valuesArray)) {
- this.setState({
- isError: true,
- });
+ const hasError = isInvalid[0];
+ const errors = isInvalid[1];
+
+ if (hasError) {
+ this.setState({ formErrors: errors });
return;
}
- isError &&
- this.setState({
- isError: false,
- });
-
- onMakeCopyIntoStorage(valuesArray);
+ onMakeCopyIntoStorage(this.namesArray);
+ this.setState({ formErrors: {} });
};
render() {
- const { private_container, public_container, isError } = this.state;
- const { t, isLoadingData, isLoading, maxProgress } = this.props;
+ const { formSettings, formErrors } = this.state;
+ const {
+ t,
+ isLoadingData,
+ isLoading,
+ maxProgress,
+ selectedId,
+ availableStorage,
+ } = this.props;
return (
<>
-
-