UNPKG

@uifabric/experiments

Version:

Experimental React components for building experiences for Office 365.

155 lines 8.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var React = require("react"); var TilesList_1 = require("@uifabric/experiments/lib/TilesList"); var Tile_1 = require("@uifabric/experiments/lib/Tile"); var Toggle_1 = require("office-ui-fabric-react/lib/Toggle"); var Selection_1 = require("office-ui-fabric-react/lib/Selection"); var MarqueeSelection_1 = require("office-ui-fabric-react/lib/MarqueeSelection"); var Styling_1 = require("office-ui-fabric-react/lib/Styling"); var ExampleHelpers_1 = require("./ExampleHelpers"); var Shimmer_1 = require("@uifabric/experiments/lib/Shimmer"); var HEADER_VERTICAL_PADDING = 13; var HEADER_FONT_SIZE = 18; function createGroups() { var offset = 0; var groups = []; for (var i = 0; i < 20; i++) { var items = ExampleHelpers_1.createDocumentItems(50 + Math.ceil(Math.random() * 6) * 50, offset); offset += items.length; groups.push(ExampleHelpers_1.createGroup(items, 'document', i)); } return groups; } var GROUPS = createGroups(); var SHIMMER_GROUPS = ExampleHelpers_1.createShimmerGroups('document', 0); var ITEMS = (_a = []).concat.apply(_a, GROUPS.map(function (group) { return group.items; })); var TilesListType = TilesList_1.TilesList; var TilesListDocumentExample = /** @class */ (function (_super) { tslib_1.__extends(TilesListDocumentExample, _super); function TilesListDocumentExample(props) { var _this = _super.call(this, props) || this; _this._onToggleIsModalSelection = function (event, checked) { _this._selection.setModal(checked); }; _this._onToggleIsDataLoaded = function (event, checked) { var tileSize = _this.props.tileSize; var isDataLoaded = _this.state.isDataLoaded; var cells = _this.state.cells; if (cells.length && !cells[0].isPlaceholder) { cells = ExampleHelpers_1.getTileCells(SHIMMER_GROUPS, { onRenderCell: _this._onRenderShimmerCell, onRenderHeader: _this._onRenderShimmerHeader, shimmerMode: true, size: tileSize }); } else { cells = ExampleHelpers_1.getTileCells(GROUPS, { onRenderCell: _this._onRenderDocumentCell, onRenderHeader: _this._onRenderHeader, size: tileSize }); } _this.setState({ isDataLoaded: !isDataLoaded, cells: cells }); }; _this._onSelectionChange = function () { _this.setState({ isModalSelection: _this._selection.isModal() }); }; _this._onItemInvoked = function (item, index, event) { event.stopPropagation(); event.preventDefault(); alert("Invoked item '" + item.name + "'"); }; _this._onRenderDocumentCell = function (item) { var tileSize = _this.props.tileSize; var imgSize = tileSize === 'large' ? 64 : 48; return (React.createElement(Tile_1.Tile, { role: "listitem", "aria-setsize": ITEMS.length, "aria-posinset": item.index, className: Styling_1.AnimationClassNames.fadeIn400, selection: _this._selection, selectionIndex: item.index, invokeSelection: true, foreground: React.createElement("img", { src: "https://spoprod-a.akamaihd.net/files/odsp-next-prod_2018-04-06_20180406.004/odsp-media/images/itemtypes/" + imgSize + "/docx.png", style: { display: 'block', width: imgSize + "px", height: imgSize + "px", margin: tileSize === 'large' ? '16px' : '7px' } }), showForegroundFrame: true, itemName: item.name, itemActivity: item.key, tileSize: tileSize })); }; _this._onRenderShimmerCell = function (item, finalSize) { var tileSize = _this.props.tileSize; return React.createElement(Tile_1.ShimmerTile, { contentSize: finalSize, itemName: true, itemActivity: true, itemThumbnail: true, tileSize: tileSize }); }; _this._onRenderHeader = function (item) { return (React.createElement("div", { role: "presentation", // tslint:disable-next-line:jsx-ban-props style: { padding: HEADER_VERTICAL_PADDING + "px 0", fontSize: HEADER_FONT_SIZE + "px", fontWeight: 700, lineHeight: HEADER_FONT_SIZE + "px" } }, item.name)); }; _this._onRenderShimmerHeader = function (item) { return (React.createElement(Shimmer_1.ShimmerElementsGroup, { shimmerElements: [ { type: Shimmer_1.ShimmerElementType.line, height: HEADER_FONT_SIZE, widthInPercentage: 100 }, { type: Shimmer_1.ShimmerElementType.gap, height: HEADER_VERTICAL_PADDING * 2 + HEADER_FONT_SIZE, widthInPixel: 0 } ] })); }; _this._selection = new Selection_1.Selection({ getKey: function (item) { return item.key; }, onSelectionChanged: _this._onSelectionChange }); _this._selection.setItems(ITEMS); _this.state = { isModalSelection: _this._selection.isModal(), isDataLoaded: false, cells: ExampleHelpers_1.getTileCells(SHIMMER_GROUPS, { onRenderCell: _this._onRenderShimmerCell, onRenderHeader: _this._onRenderShimmerHeader, size: props.tileSize, shimmerMode: true }) }; return _this; } TilesListDocumentExample.prototype.componentDidUpdate = function (previousProps) { var isDataLoaded = this.state.isDataLoaded; if (this.props.tileSize !== previousProps.tileSize) { if (!isDataLoaded) { this.setState({ cells: ExampleHelpers_1.getTileCells(SHIMMER_GROUPS, { onRenderCell: this._onRenderShimmerCell, onRenderHeader: this._onRenderShimmerHeader, size: this.props.tileSize, shimmerMode: true }) }); } else { this.setState({ cells: ExampleHelpers_1.getTileCells(GROUPS, { onRenderCell: this._onRenderDocumentCell, onRenderHeader: this._onRenderHeader, size: this.props.tileSize }) }); } } }; TilesListDocumentExample.prototype.render = function () { return ( // tslint:disable-next-line:jsx-ban-props React.createElement("div", { style: { padding: '4px' } }, React.createElement(Toggle_1.Toggle, { label: "Enable Modal Selection", checked: this.state.isModalSelection, onChange: this._onToggleIsModalSelection, onText: "Modal", offText: "Normal" }), React.createElement(Toggle_1.Toggle, { label: "Load Data Switch", checked: this.state.isDataLoaded, onChange: this._onToggleIsDataLoaded, onText: "Loaded", offText: "Loading..." }), React.createElement(MarqueeSelection_1.MarqueeSelection, { selection: this._selection }, React.createElement(Selection_1.SelectionZone, { selection: this._selection, onItemInvoked: this._onItemInvoked, enterModalOnTouch: true }, React.createElement(TilesListType, { role: "list", items: this.state.cells }))))); }; return TilesListDocumentExample; }(React.Component)); exports.TilesListDocumentExample = TilesListDocumentExample; var _a; //# sourceMappingURL=TilesList.Document.Example.js.map