/* * * 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 }