X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FUI.git;a=blobdiff_plain;f=skyquake%2Fplugins%2Flogging%2Fsrc%2FgridWidgets.jsx;fp=skyquake%2Fplugins%2Flogging%2Fsrc%2FgridWidgets.jsx;h=74ee42f39a11cf30e6787989d82d3715e1c6759b;hp=0000000000000000000000000000000000000000;hb=e29efc315df33d546237e270470916e26df391d6;hpb=9c5e457509ba5a1822c316635c6308874e61b4b9 diff --git a/skyquake/plugins/logging/src/gridWidgets.jsx b/skyquake/plugins/logging/src/gridWidgets.jsx new file mode 100644 index 000000000..74ee42f39 --- /dev/null +++ b/skyquake/plugins/logging/src/gridWidgets.jsx @@ -0,0 +1,142 @@ + /* + * + * Copyright 2016 RIFT.IO Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +import React from 'react'; + +/* + Simple helper to avoid 'undefined' in class name rendered in the html + + * First incarnation expects additionalClassNames to be a string + * Later, we'll improve to take a string or array + + * And move this into a different file/module, uiHelers.js maybe for now +*/ +function buildClassName(baseClassName, additionalClassNames) { + if (additionalClassNames) { + return baseClassName + " " + additionalClassNames; + } else { + return baseClassName; + } +} + +class GridCell extends React.Component { + render() { + const {baseClassName, className, children, ...props} = this.props; + return ( +
+ {children} +
+ ); + } +} +GridCell.defaultProps = { + baseClassName: "gridCell" +} + +class GridRow extends React.Component { + + columnClass(columnClasses, index) { + // starting point for sanity check + if (columnClasses && index >= 0 && index < columnClasses.length) { + return columnClasses[index]; + } else { + return null; + } + } + render() { + let self = this; + const {className, cells, columnClasses, ...props} = this.props; + return ( +
+ { + cells.map( (cell, index) => + {cell}) + } +
+ ); + } +} + +/** +* Maybe we can do without GridHead as it is a specialized version of GridRow +*/ +class GridHead extends React.Component { + render() { + const {className, cellLabels, columnClasses, ...props} = this.props; + return ( + + ); + } +} + + +class GridBody extends React.Component { + render() { + let self = this; + const {className, rows, columnClasses, ...props} = this.props; + return ( +
+ { + rows.map( (row, index) => + + ) + } +
+ ); + } +} + +/** + * + * TODO: Consider merging cellLabels and columnClasses into array of single structure + */ +class Grid extends React.Component { + + renderHasNoRows() { + return (
No Data
); + } + render() { + const {baseClassName, className, cellLabels, rows, columnClasses, + ...props} = this.props; + + return ( +
+ + { + (rows) ? + : this.renderHasNoRows() + } +
+ ); + } +} +Grid.defaultProps = { + baseClassName: "grid" +} + +module.exports = { + Grid: Grid, + GridBody: GridBody, + GridCell: GridCell, + GridHead: GridHead, + GridRow: GridRow +}