office-ui-fabric-react
Version: 
Reusable React components for building experiences for Office 365.
92 lines • 4.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
/* tslint:disable:no-unused-variable */
var React = require("react");
/* tslint:enable:no-unused-variable */
var example_app_base_1 = require("@uifabric/example-app-base");
var Utilities_1 = require("../../../Utilities");
var Link_1 = require("office-ui-fabric-react/lib/Link");
var Image_1 = require("office-ui-fabric-react/lib/Image");
var DetailsList_1 = require("office-ui-fabric-react/lib/DetailsList");
var _items;
var DetailsListCustomColumnsExample = /** @class */ (function (_super) {
    tslib_1.__extends(DetailsListCustomColumnsExample, _super);
    function DetailsListCustomColumnsExample(props) {
        var _this = _super.call(this, props) || this;
        _items = _items || example_app_base_1.createListItems(500);
        _this.state = {
            sortedItems: _items,
            columns: _buildColumns()
        };
        return _this;
    }
    DetailsListCustomColumnsExample.prototype.render = function () {
        var _a = this.state, sortedItems = _a.sortedItems, columns = _a.columns;
        return (React.createElement(DetailsList_1.DetailsList, { items: sortedItems, setKey: 'set', columns: columns, onRenderItemColumn: _renderItemColumn, onColumnHeaderClick: this._onColumnClick, onItemInvoked: this._onItemInvoked, onColumnHeaderContextMenu: this._onColumnHeaderContextMenu }));
    };
    DetailsListCustomColumnsExample.prototype._onColumnClick = function (event, column) {
        var columns = this.state.columns;
        var sortedItems = this.state.sortedItems;
        var isSortedDescending = column.isSortedDescending;
        // If we've sorted this column, flip it.
        if (column.isSorted) {
            isSortedDescending = !isSortedDescending;
        }
        // Sort the items.
        sortedItems = sortedItems.concat([]).sort(function (a, b) {
            var firstValue = a[column.fieldName];
            var secondValue = b[column.fieldName];
            if (isSortedDescending) {
                return firstValue > secondValue ? -1 : 1;
            }
            else {
                return firstValue > secondValue ? 1 : -1;
            }
        });
        // Reset the items and columns to match the state.
        this.setState({
            sortedItems: sortedItems,
            columns: columns.map(function (col) {
                col.isSorted = (col.key === column.key);
                if (col.isSorted) {
                    col.isSortedDescending = isSortedDescending;
                }
                return col;
            })
        });
    };
    DetailsListCustomColumnsExample.prototype._onColumnHeaderContextMenu = function (column, ev) {
        console.log("column " + column.key + " contextmenu opened.");
    };
    DetailsListCustomColumnsExample.prototype._onItemInvoked = function (item, index) {
        alert("Item " + item.name + " at index " + index + " has been invoked.");
    };
    tslib_1.__decorate([
        Utilities_1.autobind
    ], DetailsListCustomColumnsExample.prototype, "_onColumnClick", null);
    return DetailsListCustomColumnsExample;
}(React.Component));
exports.DetailsListCustomColumnsExample = DetailsListCustomColumnsExample;
function _buildColumns() {
    var columns = DetailsList_1.buildColumns(_items);
    var thumbnailColumn = columns.filter(function (column) { return column.name === 'thumbnail'; })[0];
    // Special case one column's definition.
    thumbnailColumn.name = '';
    thumbnailColumn.maxWidth = 50;
    return columns;
}
function _renderItemColumn(item, index, column) {
    var fieldContent = item[column.fieldName];
    switch (column.key) {
        case 'thumbnail':
            return React.createElement(Image_1.Image, { src: fieldContent, width: 50, height: 50, imageFit: Image_1.ImageFit.cover });
        case 'name':
            return React.createElement(Link_1.Link, { href: '#' }, fieldContent);
        case 'color':
            return React.createElement("span", { "data-selection-disabled": true, style: { color: fieldContent } }, fieldContent);
        default:
            return React.createElement("span", null, fieldContent);
    }
}
//# sourceMappingURL=DetailsList.CustomColumns.Example.js.map