office-ui-fabric-react
Version:
Reusable React components for building experiences for Office 365.
145 lines (143 loc) • 5.35 kB
JavaScript
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var React = require('react');
require('./PropertiesTable.scss');
var DetailsList_1 = require('../../../DetailsList');
var interfaces_1 = require('../../../utilities/selection/interfaces');
var object_1 = require('../../../utilities/object');
(function (InterfacePropertyType) {
InterfacePropertyType[InterfacePropertyType["required"] = 0] = "required";
InterfacePropertyType[InterfacePropertyType["optional"] = 1] = "optional";
InterfacePropertyType[InterfacePropertyType["deprecated"] = 2] = "deprecated";
})(exports.InterfacePropertyType || (exports.InterfacePropertyType = {}));
var InterfacePropertyType = exports.InterfacePropertyType;
(function (PropertyType) {
PropertyType[PropertyType["enum"] = 0] = "enum";
PropertyType[PropertyType["interface"] = 1] = "interface";
})(exports.PropertyType || (exports.PropertyType = {}));
var PropertyType = exports.PropertyType;
var DEFAULT_COLUMNS = [
{
key: 'name',
name: 'Name',
fieldName: 'name',
minWidth: 150,
maxWidth: 250,
isCollapsable: false,
isRowHeader: true,
isResizable: true
},
{
key: 'type',
name: 'Type',
fieldName: 'type',
minWidth: 130,
maxWidth: 150,
isCollapsable: false,
isResizable: true
},
{
key: 'defaultValue',
name: 'Default value',
fieldName: 'defaultValue',
minWidth: 130,
maxWidth: 150,
isCollapsable: false,
isResizable: true
}, {
key: 'description',
name: 'Description',
fieldName: 'description',
minWidth: 300,
maxWidth: 400,
isCollapsable: false,
isResizable: true,
isMultiline: true
}
];
var ENUM_COLUMNS = [
{
key: 'name',
name: 'Name',
fieldName: 'name',
minWidth: 150,
maxWidth: 250,
isCollapsable: false,
isRowHeader: true,
isResizable: true
},
{
key: 'description',
name: 'Description',
fieldName: 'description',
minWidth: 300,
maxWidth: 400,
isCollapsable: false,
isResizable: true
}
];
var PropertiesTable = (function (_super) {
__extends(PropertiesTable, _super);
function PropertiesTable(props) {
_super.call(this, props);
var properties = props.properties
.map(function (prop, index) { return object_1.assign({ key: index }, prop); })
.sort(function (a, b) { return (a.name > b.name) ? -1 : 1; })
.sort(function (a, b) { return (a.interfacePropertyType < b.interfacePropertyType) ? -1 : 1; });
var groups = null;
if (!props.renderAsEnum) {
groups = this._getGroups(properties);
}
this.state = {
properties: properties,
groups: groups,
isEnum: !!props.renderAsEnum
};
}
PropertiesTable.prototype.render = function () {
var title = this.props.title;
var _a = this.state, properties = _a.properties, isEnum = _a.isEnum, groups = _a.groups;
return (React.createElement("div", {className: 'PropertiesTable'},
React.createElement("h2", {className: 'ms-font-xl'}, title),
(properties && properties.length) ? (React.createElement(DetailsList_1.DetailsList, {selectionMode: interfaces_1.SelectionMode.none, layoutMode: DetailsList_1.DetailsListLayoutMode.justified, items: properties, groups: groups, columns: isEnum ? ENUM_COLUMNS : DEFAULT_COLUMNS})) : (React.createElement("div", {className: 'PropertiesTable-noProperties'}, "This component is missing properties. Please provide properties or remove the table from the example."))));
};
PropertiesTable.prototype._getGroups = function (props) {
var groups = [];
var index = 0;
index = this._tryAddGroup(props, InterfacePropertyType.required, 'Required members', index, groups);
index = this._tryAddGroup(props, InterfacePropertyType.optional, 'Optional members', index, groups);
index = this._tryAddGroup(props, InterfacePropertyType.deprecated, 'Deprecated members', index, groups);
return groups;
};
PropertiesTable.prototype._tryAddGroup = function (props, typeToCompare, name, index, allGroups) {
var group;
while (index < props.length) {
var prop = props[index];
if (prop.interfacePropertyType !== typeToCompare) {
break;
}
if (!group) {
group = {
key: name,
name: name,
startIndex: index,
count: 0
};
allGroups.push(group);
}
group.count++;
index++;
}
return index;
};
PropertiesTable.defaultProps = {
title: 'Properties'
};
return PropertiesTable;
}(React.Component));
exports.PropertiesTable = PropertiesTable;
//# sourceMappingURL=PropertiesTable.js.map
;