UNPKG

6.98 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.ShimmeredDetailsListBase = void 0;
4var tslib_1 = require("tslib");
5var React = require("react");
6var Utilities_1 = require("../../Utilities");
7var Selection_1 = require("../../Selection");
8var DetailsList_1 = require("./DetailsList");
9var Shimmer_1 = require("../../Shimmer");
10var DetailsList_types_1 = require("./DetailsList.types");
11var DetailsRow_styles_1 = require("./DetailsRow.styles");
12var getClassNames = Utilities_1.classNamesFunction();
13var SHIMMER_INITIAL_ITEMS = 10;
14var DEFAULT_SHIMMER_HEIGHT = 7;
15var SHIMMER_LINE_VS_CELL_WIDTH_RATIO = 0.95;
16var ShimmeredDetailsListBase = /** @class */ (function (_super) {
17 tslib_1.__extends(ShimmeredDetailsListBase, _super);
18 function ShimmeredDetailsListBase(props) {
19 var _this = _super.call(this, props) || this;
20 _this._onRenderShimmerPlaceholder = function (index, rowProps) {
21 var onRenderCustomPlaceholder = _this.props.onRenderCustomPlaceholder;
22 var placeholderElements = onRenderCustomPlaceholder
23 ? onRenderCustomPlaceholder(rowProps, index, _this._renderDefaultShimmerPlaceholder)
24 : _this._renderDefaultShimmerPlaceholder(rowProps);
25 return React.createElement(Shimmer_1.Shimmer, { customElementsGroup: placeholderElements });
26 };
27 _this._renderDefaultShimmerPlaceholder = function (rowProps) {
28 var columns = rowProps.columns, compact = rowProps.compact, selectionMode = rowProps.selectionMode, checkboxVisibility = rowProps.checkboxVisibility, _a = rowProps.cellStyleProps, cellStyleProps = _a === void 0 ? DetailsRow_styles_1.DEFAULT_CELL_STYLE_PROPS : _a;
29 var rowHeight = DetailsRow_styles_1.DEFAULT_ROW_HEIGHTS.rowHeight, compactRowHeight = DetailsRow_styles_1.DEFAULT_ROW_HEIGHTS.compactRowHeight;
30 // 1px to take into account the border-bottom of DetailsRow.
31 var gapHeight = compact ? compactRowHeight : rowHeight + 1;
32 var shimmerElementsRow = [];
33 var showCheckbox = selectionMode !== Selection_1.SelectionMode.none && checkboxVisibility !== DetailsList_types_1.CheckboxVisibility.hidden;
34 if (showCheckbox) {
35 shimmerElementsRow.push(React.createElement(Shimmer_1.ShimmerElementsGroup, { key: 'checkboxGap', shimmerElements: [{ type: Shimmer_1.ShimmerElementType.gap, width: '40px', height: gapHeight }] }));
36 }
37 columns.forEach(function (column, columnIdx) {
38 var shimmerElements = [];
39 var groupWidth = cellStyleProps.cellLeftPadding +
40 cellStyleProps.cellRightPadding +
41 column.calculatedWidth +
42 (column.isPadded ? cellStyleProps.cellExtraRightPadding : 0);
43 shimmerElements.push({
44 type: Shimmer_1.ShimmerElementType.gap,
45 width: cellStyleProps.cellLeftPadding,
46 height: gapHeight,
47 });
48 if (column.isIconOnly) {
49 shimmerElements.push({
50 type: Shimmer_1.ShimmerElementType.line,
51 width: column.calculatedWidth,
52 height: column.calculatedWidth,
53 });
54 shimmerElements.push({
55 type: Shimmer_1.ShimmerElementType.gap,
56 width: cellStyleProps.cellRightPadding,
57 height: gapHeight,
58 });
59 }
60 else {
61 shimmerElements.push({
62 type: Shimmer_1.ShimmerElementType.line,
63 width: column.calculatedWidth * SHIMMER_LINE_VS_CELL_WIDTH_RATIO,
64 height: DEFAULT_SHIMMER_HEIGHT,
65 });
66 shimmerElements.push({
67 type: Shimmer_1.ShimmerElementType.gap,
68 width: cellStyleProps.cellRightPadding +
69 (column.calculatedWidth - column.calculatedWidth * SHIMMER_LINE_VS_CELL_WIDTH_RATIO) +
70 (column.isPadded ? cellStyleProps.cellExtraRightPadding : 0),
71 height: gapHeight,
72 });
73 }
74 shimmerElementsRow.push(React.createElement(Shimmer_1.ShimmerElementsGroup, { key: columnIdx, width: groupWidth + "px", shimmerElements: shimmerElements }));
75 });
76 // When resizing the window from narrow to wider, we need to cover the exposed Shimmer wave
77 // until the column resizing logic is done.
78 shimmerElementsRow.push(React.createElement(Shimmer_1.ShimmerElementsGroup, { key: 'endGap', width: '100%', shimmerElements: [{ type: Shimmer_1.ShimmerElementType.gap, width: '100%', height: gapHeight }] }));
79 return React.createElement("div", { style: { display: 'flex' } }, shimmerElementsRow);
80 };
81 _this._shimmerItems = props.shimmerLines ? new Array(props.shimmerLines) : new Array(SHIMMER_INITIAL_ITEMS);
82 return _this;
83 }
84 ShimmeredDetailsListBase.prototype.render = function () {
85 var _a = this.props, detailsListStyles = _a.detailsListStyles, enableShimmer = _a.enableShimmer, items = _a.items, listProps = _a.listProps, onRenderCustomPlaceholder = _a.onRenderCustomPlaceholder, removeFadingOverlay = _a.removeFadingOverlay, shimmerLines = _a.shimmerLines, styles = _a.styles, theme = _a.theme, ariaLabelForGrid = _a.ariaLabelForGrid, ariaLabelForShimmer = _a.ariaLabelForShimmer, restProps = tslib_1.__rest(_a, ["detailsListStyles", "enableShimmer", "items", "listProps", "onRenderCustomPlaceholder", "removeFadingOverlay", "shimmerLines", "styles", "theme", "ariaLabelForGrid", "ariaLabelForShimmer"]);
86 var listClassName = listProps && listProps.className;
87 this._classNames = getClassNames(styles, {
88 theme: theme,
89 });
90 var newListProps = tslib_1.__assign(tslib_1.__assign({}, listProps), {
91 // Adds to the optional listProp className a fading out overlay className only when `enableShimmer` toggled on
92 // and the overlay is not disabled by `removeFadingOverlay` prop.
93 className: enableShimmer && !removeFadingOverlay ? Utilities_1.css(this._classNames.root, listClassName) : listClassName });
94 return (React.createElement(DetailsList_1.DetailsList, tslib_1.__assign({}, restProps, { styles: detailsListStyles, items: enableShimmer ? this._shimmerItems : items, isPlaceholderData: enableShimmer, ariaLabelForGrid: (enableShimmer && ariaLabelForShimmer) || ariaLabelForGrid, onRenderMissingItem: this._onRenderShimmerPlaceholder, listProps: newListProps })));
95 };
96 return ShimmeredDetailsListBase;
97}(React.Component));
98exports.ShimmeredDetailsListBase = ShimmeredDetailsListBase;
99//# sourceMappingURL=ShimmeredDetailsList.base.js.map
\No newline at end of file