From 8ae4d0f0274613f0251970ac5c9ae7f88bd1979b Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sun, 20 Jan 2019 21:38:20 +0000
Subject: [PATCH] Create new repositories...

---
 borgbutler-webapp/src/components/views/repos/CreateRepoPage.jsx |   64 ++++++++++++++++++++++++++++++++
 borgbutler-webapp/src/containers/WebApp.jsx                     |    2 +
 borgbutler-webapp/src/components/views/repos/RepoListView.jsx   |   21 +++++++---
 3 files changed, 80 insertions(+), 7 deletions(-)

diff --git a/borgbutler-webapp/src/components/views/repos/CreateRepoPage.jsx b/borgbutler-webapp/src/components/views/repos/CreateRepoPage.jsx
new file mode 100644
index 0000000..98530a1
--- /dev/null
+++ b/borgbutler-webapp/src/components/views/repos/CreateRepoPage.jsx
@@ -0,0 +1,64 @@
+import React from 'react';
+import {FormGroup} from 'reactstrap';
+import {FormButton, FormField, FormLabelInputField} from '../../general/forms/FormComponents';
+import I18n from "../../general/translation/I18n";
+import {PageHeader} from "../../general/BootstrapComponents";
+
+class CreateRepoPage extends React.Component {
+
+    constructor(props) {
+        super(props);
+        this.handleTextChange = this.handleTextChange.bind(this);
+        this.state = {
+            repoConfig: {}
+        };
+    }
+
+    handleTextChange = event => {
+        event.preventDefault();
+        this.setState({repoConfig: {...this.state.repoConfig, [event.target.name]: event.target.value}});
+    }
+
+    render() {
+        const repoConfig = this.state.repoConfig;
+        return <React.Fragment>
+            <PageHeader>
+                Configure new repository
+            </PageHeader>
+            <FormGroup>
+                <FormLabelInputField label={'Display name'} fieldLength={12}
+                                     name={'displayName'} value={repoConfig.displayName}
+                                     onChange={this.handleTextChange}
+                                     placeholder="Enter display name (only for displaying purposes)."/>
+                <FormLabelInputField label={'Repo'} fieldLength={12}
+                                     name={'repo'} value={repoConfig.repo}
+                                     onChange={this.handleTextChange}
+                                     placeholder="Enter the name of the repo, used by Borg."/>
+                <FormLabelInputField label={'RSH'} fieldLength={12}
+                                     name={'rsh'} value={repoConfig.rsh}
+                                     onChange={this.handleTextChange}
+                                     placeholder="Enter the rsh value (ssh command) for remote repository."/>
+                <FormLabelInputField label={'Password command'} fieldLength={12}
+                                     name={'passwordCommand'} value={repoConfig.passwordCommand}
+                                     onChange={this.handleTextChange}
+                                     placeholder="Enter the password command to get the command from."/>
+                <FormLabelInputField label={'Password'} fieldLength={6} type={'password'}
+                                     name={'passphrase'} value={repoConfig.passphrase}
+                                     onChange={this.handleTextChange}
+                                     hint={"It's recommended to use password command instead."}
+                />
+                <FormField length={12}>
+                    <FormButton onClick={this.onCancel}
+                                hintKey="configuration.cancel.hint"><I18n name={'common.cancel'}/>
+                    </FormButton>
+                    <FormButton onClick={this.onSave} bsStyle="primary"
+                                hintKey="configuration.save.hint"><I18n name={'common.save'}/>
+                    </FormButton>
+                </FormField>
+            </FormGroup>
+        </React.Fragment>;
+    }
+}
+
+export default CreateRepoPage;
+
diff --git a/borgbutler-webapp/src/components/views/repos/RepoListView.jsx b/borgbutler-webapp/src/components/views/repos/RepoListView.jsx
index 7c03a4a..60c4599 100644
--- a/borgbutler-webapp/src/components/views/repos/RepoListView.jsx
+++ b/borgbutler-webapp/src/components/views/repos/RepoListView.jsx
@@ -1,11 +1,12 @@
 import React from 'react'
+import {Link} from 'react-router-dom'
 import './RepoListView.css';
 import {CardDeck} from 'reactstrap';
 import {PageHeader} from '../../general/BootstrapComponents';
 import {getRestServiceUrl} from '../../../utilities/global';
 import ErrorAlert from '../../general/ErrorAlert';
 import RepoCard from './RepoCard';
-import {IconRefresh} from "../../general/IconComponents";
+import {IconAdd, IconRefresh} from "../../general/IconComponents";
 
 class RepoListView extends React.Component {
 
@@ -73,12 +74,12 @@
 
             content = <React.Fragment>
                 <CardDeck>
-                {this.state.repos.map(repo => {
-                    return <RepoCard
-                        key={repo.id}
-                        repo={repo}
-                    />;
-                })}
+                    {this.state.repos.map(repo => {
+                        return <RepoCard
+                            key={repo.id}
+                            repo={repo}
+                        />;
+                    })}
                 </CardDeck>
             </React.Fragment>;
 
@@ -95,6 +96,12 @@
                 </div>
             </PageHeader>
             {content}
+            <br/>
+            <Link to={'/repo/new'}
+                  className={'btn btn-outline-primary'}
+            >
+                <IconAdd/>
+            </Link>
         </React.Fragment>;
     };
 
diff --git a/borgbutler-webapp/src/containers/WebApp.jsx b/borgbutler-webapp/src/containers/WebApp.jsx
index 7f878c8..0b01aa6 100644
--- a/borgbutler-webapp/src/containers/WebApp.jsx
+++ b/borgbutler-webapp/src/containers/WebApp.jsx
@@ -17,6 +17,7 @@
 import Footer from '../components/views/footer/Footer';
 import {loadVersion} from '../actions';
 import {getTranslation} from '../utilities/i18n';
+import CreateRepoPage from "../components/views/repos/CreateRepoPage";
 
 class WebApp extends React.Component {
 
@@ -83,6 +84,7 @@
                             }
                             <Route path={'/repoArchives/:id/:displayName'} component={RepoArchiveListView}/>
                             <Route path={'/archives/:repoId/:archiveId'} component={ArchiveView}/>
+                            <Route path={'/repo/new'} component={CreateRepoPage}/>
                         </Switch>
                     </div>
                     <Footer versionInfo={this.props.version}/>

--
Gitblit v1.10.0