UNPKG

@primer/react

Version:

An implementation of GitHub's Primer Design System using React

98 lines (92 loc) 3.36 kB
'use strict'; var React = require('react'); var Box = require('../Box/Box.js'); var Spinner = require('../Spinner/Spinner.js'); var Stack = require('../Stack/Stack.js'); var SkeletonBox = require('../experimental/Skeleton/SkeletonBox.js'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var React__default = /*#__PURE__*/_interopDefault(React); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } class FilteredActionListLoadingType { constructor(name, appearsInBody) { this.name = name; this.appearsInBody = appearsInBody; } } const FilteredActionListLoadingTypes = { bodySpinner: new FilteredActionListLoadingType('body-spinner', true), bodySkeleton: new FilteredActionListLoadingType('body-skeleton', true), input: new FilteredActionListLoadingType('input', false) }; const SKELETON_ROW_HEIGHT = 24; const SKELETON_MIN_ROWS = 3; function FilteredActionListBodyLoader({ loadingType, height }) { switch (loadingType) { case FilteredActionListLoadingTypes.bodySpinner: return /*#__PURE__*/React__default.default.createElement(LoadingSpinner, { "data-testid": "filtered-action-list-spinner" }); case FilteredActionListLoadingTypes.bodySkeleton: { const rows = height < SKELETON_ROW_HEIGHT ? SKELETON_MIN_ROWS : height / SKELETON_ROW_HEIGHT; return /*#__PURE__*/React__default.default.createElement(LoadingSkeleton, { "data-testid": "filtered-action-list-skeleton", rows: rows }); } default: return /*#__PURE__*/React__default.default.createElement(React__default.default.Fragment, null); } } function LoadingSpinner({ ...props }) { return /*#__PURE__*/React__default.default.createElement(Box, { p: 3, flexGrow: 1, sx: { alignContent: 'center', textAlign: 'center', height: '100%' } }, /*#__PURE__*/React__default.default.createElement(Spinner, props)); } LoadingSpinner.displayName = "LoadingSpinner"; function LoadingSkeleton({ rows = 10, ...props }) { return /*#__PURE__*/React__default.default.createElement(Box, { p: 2, display: "flex", flexGrow: 1, flexDirection: "column" }, /*#__PURE__*/React__default.default.createElement(Stack.Stack, _extends({ direction: "vertical", justify: "center", gap: "condensed" }, props), Array.from({ length: rows }, (_, i) => /*#__PURE__*/React__default.default.createElement(Stack.Stack, { key: i, direction: "horizontal", gap: "condensed", align: "center" }, /*#__PURE__*/React__default.default.createElement(SkeletonBox.SkeletonBox, { width: "16px", height: "16px" }), /*#__PURE__*/React__default.default.createElement(SkeletonBox.SkeletonBox, { height: "10px", width: `${Math.random() * 60 + 20}%`, sx: { borderRadius: '4px' } }))))); } LoadingSkeleton.displayName = "LoadingSkeleton"; exports.FilteredActionListBodyLoader = FilteredActionListBodyLoader; exports.FilteredActionListLoadingType = FilteredActionListLoadingType; exports.FilteredActionListLoadingTypes = FilteredActionListLoadingTypes;