From fad45dae2480dd6a2949ce7d90c70ddcc8bd0fbc Mon Sep 17 00:00:00 2001
From: Ramesh Kumar <r.kumar@redkarma.eu>
Date: Tue, 4 Aug 2020 22:14:18 +0530
Subject: [PATCH] TMSS-243: Breadcrumb style updated. Loading spinner added to
 Project Create, View and Edit pages

---
 .../src/layout/components/AppBreadcrumb.js           |  8 +++++---
 .../tmss_webapp/src/layout/sass/_breadcrumb.scss     | 12 ++++++++++--
 .../tmss_webapp/src/routes/Project/create.js         |  8 +++++++-
 .../frontend/tmss_webapp/src/routes/Project/edit.js  | 10 +++++++++-
 .../frontend/tmss_webapp/src/routes/Project/view.js  |  5 ++++-
 5 files changed, 35 insertions(+), 8 deletions(-)

diff --git a/SAS/TMSS/frontend/tmss_webapp/src/layout/components/AppBreadcrumb.js b/SAS/TMSS/frontend/tmss_webapp/src/layout/components/AppBreadcrumb.js
index 370f657d16d..0abba394b1c 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/layout/components/AppBreadcrumb.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/layout/components/AppBreadcrumb.js
@@ -54,12 +54,14 @@ export class AppBreadcrumb extends Component {
 	render() {
         const { breadcrumbs } = this.state;
         return (
-            <div className="p-breadcrumb" style={{border : "none"}} >
+            <div className="p-breadcrumb" >
                 <span className="pi b-home"><Link className="b-link pi pi-home" to="/"/></span>
                 {breadcrumbs.map((item, index) => (
-                    <span key={"bc_" + index} className="pi">
+                    <span key={"bc_" + index} >
                         <li className="pi pi-chevron-right b-separator"></li>
-                        {index !== breadcrumbs.length - 1 ? <span className="b-link" onClick={() => this.onNavigate(item)}>{item.name}</span> : item.name}
+                        {index !== breadcrumbs.length - 1 ? 
+                            <span className="b-link" onClick={() => this.onNavigate(item)}>{item.name}</span> 
+                            : <span className="b-text">{item.name}</span>}
                     </span>
                 ))}
             </div>
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/layout/sass/_breadcrumb.scss b/SAS/TMSS/frontend/tmss_webapp/src/layout/sass/_breadcrumb.scss
index e59a812a0ff..8c27dd9432d 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/layout/sass/_breadcrumb.scss
+++ b/SAS/TMSS/frontend/tmss_webapp/src/layout/sass/_breadcrumb.scss
@@ -2,8 +2,11 @@
 body .p-breadcrumb{
     background-color: #F1F1F1;
     padding: 0em;
-    padding-left: 2px;
+    padding-left: 5px;
+    padding-top: 5px;
     margin-bottom: 5px;
+    box-shadow: 2px 2px #d6d9d9;
+    border: none;
 }
 .p-breadcrumb .pi{
   color: #535252;
@@ -11,7 +14,7 @@ body .p-breadcrumb{
 }
 
 .b-link {
-  font-size: large;
+  font-size: 14px;
   color:#007bff;
   cursor: pointer;
   &:hover {
@@ -19,6 +22,11 @@ body .p-breadcrumb{
   }
 }
 
+.b-text {
+  font-size: 14px;
+  columns: #464748;
+}
+
 .b-separator {
   font-size: 0.9rem !important;
   margin: 0 5px;
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/create.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/create.js
index 894e903506e..01160674db3 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/create.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/create.js
@@ -14,6 +14,7 @@ import {Growl} from 'primereact/components/growl/Growl';
 
 import {ResourceInputList} from './ResourceInputList';
 
+import AppLoader from '../../layout/components/AppLoader';
 import CycleService from '../../services/cycle.service';
 import ProjectService from '../../services/project.service';
 import UnitConverter from '../../utils/unit.converter';
@@ -25,6 +26,7 @@ export class ProjectCreate extends Component {
     constructor(props) {
         super(props);
         this.state = {
+            isLoading: true,
             dialog: { header: '', detail: ''},      
             project: {
                 trigger_priority: 1000,
@@ -93,7 +95,7 @@ export class ProjectCreate extends Component {
                 resourceList = _.sortBy(resourceList, "name");
                 const resources = _.remove(resourceList, function(resource) { return _.find(defaultResources, {'name': resource.name})!=null });
                 const projectQuota = this.setProjectQuotaDefaults(resources);
-                this.setState({resourceList: resourceList, resources: resources, projectQuota: projectQuota});
+                this.setState({resourceList: resourceList, resources: resources, projectQuota: projectQuota, isLoading: false});
             });
         // ProjectService.getProjects().then(projects => {
         //     console.log(projects);
@@ -340,6 +342,8 @@ export class ProjectCreate extends Component {
                         </Link>
                     </div>
                 </div>
+                { this.state.isLoading ? <AppLoader /> :
+                <>
                 <div>
                     <div className="p-fluid">
                         <div className="p-field p-grid" style={{display: 'none'}}>
@@ -461,6 +465,8 @@ export class ProjectCreate extends Component {
                         <Button label="Cancel" className="p-button-danger" icon="pi pi-times" onClick={this.cancelCreate}  />
                     </div>
                 </div>
+                </>
+                }
 
                 {/* Dialog component to show messages and get input */}
                 <div className="p-grid" data-testid="confirm_dialog">
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/edit.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/edit.js
index e81114ef1fa..2429356d437 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/edit.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/edit.js
@@ -14,6 +14,7 @@ import {Growl} from 'primereact/components/growl/Growl';
 
 import {ResourceInputList} from './ResourceInputList';
 
+import AppLoader from '../../layout/components/AppLoader';
 import CycleService from '../../services/cycle.service';
 import ProjectService from '../../services/project.service';
 import UnitConverter from '../../utils/unit.converter';
@@ -22,6 +23,7 @@ export class ProjectEdit extends Component {
     constructor(props) {
         super(props);
         this.state = {
+            isLoading: true,
             dialog: { header: '', detail: ''},
             project: {
                 trigger_priority: 1000,
@@ -113,7 +115,8 @@ export class ProjectEdit extends Component {
             };
             // Remove the already assigned resources from the resoureList
             const resources = _.remove(resourceList, (resource) => { return _.find(this.projectQuota, {'resource_type_id': resource.name})!=null });
-            this.setState({project: project, resourceList: resourceList, resources: resources, projectQuota: projectQuota});
+            this.setState({project: project, resourceList: resourceList, resources: resources, 
+                            projectQuota: projectQuota, isLoading: false});
 
             // Validate form if all values are as per the form rules and enable Save button
             this.validateForm();
@@ -362,6 +365,9 @@ export class ProjectEdit extends Component {
                         </Link>
                     </div>
                 </div>
+
+                { this.state.isLoading ? <AppLoader/> :
+                <>
                 <div>
                     <div className="p-fluid">
                         <div className="p-field p-grid">
@@ -479,6 +485,8 @@ export class ProjectEdit extends Component {
                     </div>
                 </div>
 
+                </>
+                }
                 {/* Dialog component to show messages and get input */}
                 <div className="p-grid" data-testid="confirm_dialog">
                     <Dialog header={this.state.dialog.header} visible={this.state.dialogVisible} style={{width: '30vw'}} inputId="confirm_dialog"
diff --git a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/view.js b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/view.js
index 599568731d4..313ac805901 100644
--- a/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/view.js
+++ b/SAS/TMSS/frontend/tmss_webapp/src/routes/Project/view.js
@@ -7,6 +7,7 @@ import { Chips } from 'primereact/chips';
 
 import ResourceDisplayList from './ResourceDisplayList';
 
+import AppLoader from '../../layout/components/AppLoader';
 import ProjectService from '../../services/project.service';
 import UnitConverter from '../../utils/unit.converter';
 
@@ -18,6 +19,7 @@ export class ProjectView extends Component {
     constructor(props) {
         super(props);
         this.state = {
+            isLoading: true,
             redirect: this.props.match.params.id?"":'/project/list'         // If no project id is passed, redirect to Project list page
         };
         if (this.props.match.params.id) {
@@ -57,7 +59,7 @@ export class ProjectView extends Component {
                 quota.resource = resource;
                 projectQuota.push(quota);
             };
-            this.setState({project: project, projectQuota: projectQuota});
+            this.setState({project: project, projectQuota: projectQuota, isLoading: false});
         }   else {
             this.setState({redirect: "../../not-found"})
         }
@@ -83,6 +85,7 @@ export class ProjectView extends Component {
                     </div>
                     }
                 </div>
+                { this.state.isLoading && <AppLoader /> }
                 { this.state.project &&
                     <React.Fragment>
                         <div className="main-content">
-- 
GitLab