From 4aa0285d00558ccec3e5a5f6978dfda820d866d6 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sun, 10 Feb 2019 15:40:05 +0000
Subject: [PATCH] Test button of BorgRepoConfig...

---
 borgbutler-webapp/src/components/views/repos/RepoConfigPanel.jsx |   61 ++++++++++++++++++++++++++++--
 1 files changed, 57 insertions(+), 4 deletions(-)

diff --git a/borgbutler-webapp/src/components/views/repos/RepoConfigPanel.jsx b/borgbutler-webapp/src/components/views/repos/RepoConfigPanel.jsx
index cf92052..4603d4b 100644
--- a/borgbutler-webapp/src/components/views/repos/RepoConfigPanel.jsx
+++ b/borgbutler-webapp/src/components/views/repos/RepoConfigPanel.jsx
@@ -1,5 +1,5 @@
 import React from 'react';
-import {FormGroup} from 'reactstrap';
+import {Alert, FormGroup} from 'reactstrap';
 import {FormButton, FormField} from '../../general/forms/FormComponents';
 import {getRestServiceUrl} from '../../../utilities/global';
 import I18n from "../../general/translation/I18n";
@@ -15,13 +15,16 @@
         super(props);
         this.state = {
             loading: false,
-            repoConfig: undefined
+            repoConfig: undefined,
+            testStatus: undefined,
+            testResult: undefined
         };
 
         this.fetch = this.fetch.bind(this);
         this.setRepoValue = this.setRepoValue.bind(this);
         this.onSave = this.onSave.bind(this);
         this.onCancel = this.onCancel.bind(this);
+        this.onTest = this.onTest.bind(this);
     }
 
     componentDidMount = () => this.fetch();
@@ -80,6 +83,34 @@
         }
     }
 
+    onTest(event) {
+        this.setState({
+            testStatus: 'fetching',
+            testResult: undefined
+        });
+        fetch(getRestServiceUrl("repoConfig/check"), {
+            method: 'POST',
+            headers: {
+                'Content-Type': 'application/json'
+            },
+            body: JSON.stringify(this.state.repoConfig)
+        })
+            .then(response => response.text())
+            .then(result => {
+                //console.log("test-result: " + result);
+                this.setState({
+                    testStatus: result === 'OK' ? 'OK' : 'error',
+                    testResult: result
+                })
+            })
+            .catch((error) => {
+                console.log("error", error);
+                this.setState({
+                    testStatus: 'exception'
+                });
+            });
+    }
+
     async onCancel() {
         const response = this.fetch();
         if (response) await response;
@@ -93,10 +124,29 @@
         let repoError = '';
         if (this.props.repoError) {
             repoError = <ErrorAlert
-                title={'Cannot access repository'}
+                title={'Internal error'}
                 description={'Repo not available or mis-configured (please refer the log files for more details).'}
             />
         }
+        let testResult = '';
+        if (!this.state.testStatus) {
+            // No test available.
+        } else if (this.state.testStatus === 'exception') {
+            testResult = <ErrorAlert title={'Unknown error'} description={'Internal error while calling Rest API.'}/>;
+        } else if (this.state.testStatus === 'OK') {
+            testResult = <Alert color={'success'}>
+                OK
+            </Alert>;
+        } else if (this.state.testStatus === 'fetching') {
+            testResult = <Alert color={'warning'}>
+                Testing...
+            </Alert>;
+        } else {
+            testResult = <ErrorAlert
+                title={'Error while testing repo configuration'}
+                description={this.state.testResult}
+            />
+        }
         if (this.state.isFetching) {
             content = <React.Fragment>Loading...</React.Fragment>;
         } else if (this.state.failed) {
@@ -126,6 +176,9 @@
                         <FormButton onClick={this.onCancel}
                                     hintKey="configuration.cancel.hint"><I18n name={'common.cancel'}/>
                         </FormButton>
+                        <FormButton onClick={this.onTest} disabled={this.state.testResult === 'fetching'} bsStyle="info"
+                                    hint={'Tries to connect to the repo and to get info from.'}>Test
+                        </FormButton>
                         <FormButton onClick={this.onSave} bsStyle="primary"
                                     hintKey="configuration.save.hint"><I18n name={'common.save'}/>
                         </FormButton>
@@ -134,7 +187,7 @@
                 <LoadingOverlay active={this.state.loading}/>
             </React.Fragment>;
         }
-        return <React.Fragment>{content}{repoError}</React.Fragment>;
+        return <React.Fragment>{content}{testResult}{repoError}</React.Fragment>;
     }
 }
 

--
Gitblit v1.10.0