import * as tslib_1 from "tslib";
import * as React from 'react';
import { TextField } from 'office-ui-fabric-react/lib/TextField';
import { DetailsList, DetailsListLayoutMode, Selection } from 'office-ui-fabric-react/lib/DetailsList';
import { createRef } from 'office-ui-fabric-react/lib/Utilities';
import { TooltipHost } from 'office-ui-fabric-react/lib/Tooltip';
import { ScrollablePane } from 'office-ui-fabric-react/lib/ScrollablePane';
import { Sticky, StickyPositionType } from 'office-ui-fabric-react/lib/Sticky';
import { MarqueeSelection } from 'office-ui-fabric-react/lib/MarqueeSelection';
var _items = [];
var _columns = [
    {
        key: 'column1',
        name: 'Name',
        fieldName: 'name',
        minWidth: 100,
        maxWidth: 200,
        isResizable: true,
        ariaLabel: 'Operations for name'
    },
    {
        key: 'column2',
        name: 'Value',
        fieldName: 'value',
        minWidth: 100,
        maxWidth: 200,
        isResizable: true,
        ariaLabel: 'Operations for value'
    }
];
var ScrollablePaneDetailsListExample = /** @class */ (function (_super) {
    tslib_1.__extends(ScrollablePaneDetailsListExample, _super);
    function ScrollablePaneDetailsListExample(props) {
        var _this = _super.call(this, props) || this;
        _this._scrollablePane = createRef();
        _this._onScroll = function (e) {
            if (_this._scrollablePane.current) {
                _this._scrollablePane.current.forceLayoutUpdate();
            }
        };
        // Populate with items for demos.
        if (_items.length === 0) {
            for (var i = 0; i < 200; i++) {
                _items.push({
                    key: i,
                    name: 'Item ' + i,
                    value: i
                });
            }
        }
        _this._selection = new Selection({
            onSelectionChanged: function () { return _this.setState({ selectionDetails: _this._getSelectionDetails() }); }
        });
        _this.state = {
            items: _items,
            selectionDetails: _this._getSelectionDetails()
        };
        return _this;
    }
    ScrollablePaneDetailsListExample.prototype.render = function () {
        var _this = this;
        var _a = this.state, items = _a.items, selectionDetails = _a.selectionDetails;
        return (React.createElement("div", { style: {
                height: '10000px',
                position: 'relative',
                maxHeight: 'inherit'
            } },
            React.createElement(ScrollablePane, { componentRef: this._scrollablePane },
                React.createElement(Sticky, { stickyPosition: StickyPositionType.Header }, selectionDetails),
                React.createElement(TextField, { label: "Filter by name:", 
                    // tslint:disable-next-line:jsx-no-lambda
                    onChanged: function (text) {
                        return _this.setState({ items: text ? _items.filter(function (i) { return i.name.toLowerCase().indexOf(text) > -1; }) : _items });
                    } }),
                React.createElement(Sticky, { stickyPosition: StickyPositionType.Header },
                    React.createElement("h1", { style: { margin: '0px' } }, "Item List")),
                React.createElement(MarqueeSelection, { selection: this._selection },
                    React.createElement(DetailsList, { items: items, columns: _columns, setKey: "set", layoutMode: DetailsListLayoutMode.fixedColumns, onScroll: this._onScroll, onRenderDetailsHeader: 
                        // tslint:disable-next-line:jsx-no-lambda
                        function (detailsHeaderProps, defaultRender) { return (React.createElement(Sticky, { stickyPosition: StickyPositionType.Header }, defaultRender(tslib_1.__assign({}, detailsHeaderProps, { onRenderColumnHeaderTooltip: function (tooltipHostProps) { return (React.createElement(TooltipHost, tslib_1.__assign({}, tooltipHostProps))); } })))); }, selection: this._selection, selectionPreservedOnEmptyClick: true, ariaLabelForSelectionColumn: "Toggle selection", ariaLabelForSelectAllCheckbox: "Toggle selection for all items", 
                        // tslint:disable-next-line:jsx-no-lambda
                        onItemInvoked: function (item) { return alert("Item invoked: " + item.name); } })))));
    };
    ScrollablePaneDetailsListExample.prototype._getSelectionDetails = function () {
        var selectionCount = this._selection.getSelectedCount();
        switch (selectionCount) {
            case 0:
                return 'No items selected';
            case 1:
                return '1 item selected: ' + this._selection.getSelection()[0].name;
            default:
                return selectionCount + " items selected";
        }
    };
    return ScrollablePaneDetailsListExample;
}(React.Component));
export { ScrollablePaneDetailsListExample };
//# sourceMappingURL=ScrollablePane.DetailsList.Example.js.map