* ECOMP is a trademark and service mark of AT&T Intellectual Property.
*/
-
+
@import "components/validationForm";
@import "components/slidePanel";
@import "components/toggleInput";
@import "setAttribute/editAttributeform.scss";
@import "inventory/inventory.scss";
@import "vnfSearch/vnfSearch.scss";
+@import "tier-support/tierSupport.scss";
*
* ECOMP is a trademark and service mark of AT&T Intellectual Property.
*/
-
+
.hidden {
display: none;
}
.showContainer {
}
+.spinner-container {
+ overflow: hidden;
+ position: relative;
+}
+
.spinner {
- position: fixed;
+ position: absolute;
z-index: 999;
- height: 2em;
- width: 2em;
- margin: auto;
- top: 0;
- left: 0;
- bottom: 0;
- right: 0;
-}
\ No newline at end of file
+ left: 50%;
+ top: 49%;
+}
+
+.spinner-content {
+ opacity: 0.2;
+}
* ECOMP is a trademark and service mark of AT&T Intellectual Property.
*/
+div.SplitPane.vertical {
+ position: initial !important;
+}
+
.SplitPane {
min-width: $minimum-application-width;
- height: calc(100% - #{$total-header-height}) !important;
}
.Resizer {
--- /dev/null
+.tier-support-ui {
+ height: calc(100% - #{$total-header-height}) !important;
+}
import React, {Component} from 'react';
import {connect} from 'react-redux';
import SplitPane from 'react-split-pane';
-import { ClipLoader } from 'react-spinners';
-import {COLOR_BLUE} from 'utils/GlobalConstants.js';
+import Spinner from 'utils/SpinnerContainer.jsx';
import {setSecondaryTitle} from 'app/MainScreenWrapperActionHelper.js';
import ForceDirectedGraph from 'generic-components/graph/ForceDirectedGraph.jsx';
onNodeMenuSelect,
enableBusyFeedback
} = this.props;
-
- let componentVisibitliyClassName = 'showContainer';
- if(enableBusyFeedback){
- componentVisibitliyClassName = 'hideContainer';
- }
let availableOverlay;
let overlayComponent;
// Currently only ONE overlay can be added to each view.
let currentSelectedMenu = this.getCurrentSelectedMenu(overlayComponent);
return (
<div className='tier-support-ui'>
- <div className='spinner'>
- <ClipLoader color={COLOR_BLUE} loading={enableBusyFeedback} />
- </div>
- <div className={componentVisibitliyClassName}>
+ <Spinner loading={enableBusyFeedback}>
<SplitPane
split='vertical'
enableResizing='true'
{currentSelectedMenu}
</div>
</SplitPane>
- </div>
+ </Spinner>
</div>
);
}
import {CHART_NF_ROLE} from 'app/vnfSearch/VnfSearchConstants.js';
import {COLOR_BLUE} from 'utils/GlobalConstants.js';
-import { ClipLoader } from 'react-spinners';
+import Spinner from 'utils/SpinnerContainer.jsx';
let mapStateToProps = ({vnfSearch}) => {
let {
processedNfRoleCountChartData,
enableBusyFeedback
} = this.props;
- let componentVisibitliyClassName = 'showContainer';
- if(enableBusyFeedback){
- componentVisibitliyClassName = 'hideContainer';
- }
+
let visualizationClass = 'visualizations';
if (processedNfRoleCountChartData.values ===
<div className='visualization-charts'>
<div>
<h3>{i18n(CHART_NF_ROLE.title)}</h3>
- <div className='spinner'>
- <ClipLoader color={COLOR_BLUE} loading={enableBusyFeedback} />
- </div>
- <div className={componentVisibitliyClassName}>
+ <Spinner loading={enableBusyFeedback}>
<ResponsiveContainer width='100%' height={300}>
<BarChart data={processedNfRoleCountChartData.values}>
<XAxis dataKey={xAxisAttrName}/>
dataKey={yAxisAttrName} fill={COLOR_BLUE}/>
</BarChart>
</ResponsiveContainer>
- </div>
+ </Spinner>
</div>
</div>
</div>
import {CHART_NF_TYPE} from 'app/vnfSearch/VnfSearchConstants.js';
import {COLOR_BLUE} from 'utils/GlobalConstants.js';
-import { ClipLoader } from 'react-spinners';
+import Spinner from 'utils/SpinnerContainer.jsx';
let mapStateToProps = ({vnfSearch}) => {
let {
processedNfTypeCountChartData,
enableBusyFeedback
} = this.props;
- let componentVisibitliyClassName = 'showContainer';
- if(enableBusyFeedback){
- componentVisibitliyClassName = 'hideContainer';
- }
+
let visualizationClass = 'visualizations';
if (processedNfTypeCountChartData.values ===
null ||
<div className='visualization-charts'>
<div >
<h3>{i18n(CHART_NF_TYPE.title)}</h3>
- <div className='spinner'>
- <ClipLoader color={COLOR_BLUE} loading={enableBusyFeedback} />
- </div>
- <div className={componentVisibitliyClassName}>
+ <Spinner loading={enableBusyFeedback}>
<ResponsiveContainer width='100%' height={300}>
<BarChart data={processedNfTypeCountChartData.values}>
<XAxis dataKey={xAxisAttrName}/>
dataKey={yAxisAttrName} fill={COLOR_BLUE}/>
</BarChart>
</ResponsiveContainer>
- </div>
+ </Spinner>
</div>
</div>
</div>
import {CHART_ORCH_STATUS} from 'app/vnfSearch/VnfSearchConstants.js';
import {COLOR_BLUE} from 'utils/GlobalConstants.js';
-import { ClipLoader } from 'react-spinners';
+import Spinner from 'utils/SpinnerContainer.jsx';
let mapStateToProps = ({vnfSearch}) => {
let {
processedOrchStatusCountChartData,
enableBusyFeedback
} = this.props;
- let componentVisibitliyClassName = 'showContainer';
- if(enableBusyFeedback){
- componentVisibitliyClassName = 'hideContainer';
- }
+
let visualizationClass = 'visualizations';
if (processedOrchStatusCountChartData.values ===
null ||
<div className='visualization-charts'>
<div >
<h3>{i18n(CHART_ORCH_STATUS.title)}</h3>
- <div className='spinner'>
- <ClipLoader color={COLOR_BLUE} loading={enableBusyFeedback} />
- </div>
- <div className={componentVisibitliyClassName}>
+ <Spinner loading={enableBusyFeedback}>
<ResponsiveContainer width='100%' height={300}>
<BarChart data={processedOrchStatusCountChartData.values}>
<XAxis dataKey={xAxisAttrName}/>
dataKey={yAxisAttrName} fill={COLOR_BLUE}/>
</BarChart>
</ResponsiveContainer>
- </div>
+ </Spinner>
</div>
</div>
</div>
import {CHART_PROV_STATUS} from 'app/vnfSearch/VnfSearchConstants.js';
import {COLOR_BLUE} from 'utils/GlobalConstants.js';
-import { ClipLoader } from 'react-spinners';
+import Spinner from 'utils/SpinnerContainer.jsx';
let mapStateToProps = ({vnfSearch}) => {
let {
enableBusyFeedback
} = this.props;
- let componentVisibitliyClassName = 'showContainer';
- if(enableBusyFeedback){
- componentVisibitliyClassName = 'hideContainer';
- }
let visualizationClass = 'visualizations';
if (processedProvStatusCountChartData.values ===
null ||
<div className='visualization-charts'>
<div className='visualization-side-by-side-70'>
<h3>{i18n(CHART_PROV_STATUS.title)}</h3>
- <div className='spinner'>
- <ClipLoader color={COLOR_BLUE} loading={enableBusyFeedback} />
- </div>
- <div className={componentVisibitliyClassName}>
+ <Spinner loading={enableBusyFeedback}>
<ResponsiveContainer width='100%' height={345} >
- <BarChart
- data={processedProvStatusCountChartData.values}>
- <XAxis dataKey={xAxisAttrName}/>
- <YAxis />
- <CartesianGrid strokeDasharray='3 3'/>
- <Tooltip/>
- <Bar name={i18n(CHART_PROV_STATUS.xAxisLabel)}
- dataKey={yAxisAttrName} fill={COLOR_BLUE}/>
- </BarChart>
- </ResponsiveContainer>
- </div>
+ <BarChart
+ data={processedProvStatusCountChartData.values}>
+ <XAxis dataKey={xAxisAttrName}/>
+ <YAxis />
+ <CartesianGrid strokeDasharray='3 3'/>
+ <Tooltip/>
+ <Bar name={i18n(CHART_PROV_STATUS.xAxisLabel)}
+ dataKey={yAxisAttrName} fill={COLOR_BLUE}/>
+ </BarChart>
+ </ResponsiveContainer>
+ </Spinner>
</div>
</div>
</div>
}
}
-export default connect(mapStateToProps)(VnfSearchProvStatusVisualization);
\ No newline at end of file
+export default connect(mapStateToProps)(VnfSearchProvStatusVisualization);
import i18n from 'utils/i18n/i18n';
import {TOTAL_VNF_COUNT} from 'app/vnfSearch/VnfSearchConstants.js';
-import {COLOR_BLUE} from 'utils/GlobalConstants.js';
-import { ClipLoader } from 'react-spinners';
+import Spinner from 'utils/SpinnerContainer.jsx';
let mapStateToProps = ({vnfSearch}) => {
let {
count,
enableBusyFeedback
} = this.props;
- let componentVisibitliyClassName = 'showContainer';
- if(enableBusyFeedback){
- componentVisibitliyClassName = 'hideContainer';
- }
+
let visualizationClass = 'visualizations';
if (count === null) {
visualizationClass = 'visualizations hidden';
<div className='visualization-side-by-side-30'>
<span> </span>
<h3>{i18n(TOTAL_VNF_COUNT.title)}</h3>
- <div className='spinner'>
- <ClipLoader color={COLOR_BLUE} loading={enableBusyFeedback} />
- </div>
- <div className={componentVisibitliyClassName}>
+ <Spinner loading={enableBusyFeedback}>
<div className='total-box-entity-count'>
<span>{count}</span>
</div>
- </div>
+ </Spinner>
</div>
</div>
</div>
--- /dev/null
+import React, { Component } from 'react';
+import { ClipLoader } from 'react-spinners';
+import {COLOR_BLUE} from 'utils/GlobalConstants.js';
+
+class SpinnerContainer extends Component {
+ render() {
+ // if loading, show content as busy (ex: grey out)
+ const spinnerContentClass = this.props.loading ? 'spinner-content' : '';
+ return (
+ <div className='spinner-container'>
+ <div className='spinner'>
+ <ClipLoader color={COLOR_BLUE} loading={this.props.loading} />
+ </div>
+ <div className={spinnerContentClass}>
+ {this.props.children}
+ </div>
+ </div>
+ );
+ }
+}
+export default SpinnerContainer;
+
+SpinnerContainer.propTypes = {
+ loading: React.PropTypes.bool
+};
+
+SpinnerContainer.defaultProps = {
+ loading: false
+};
+