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