UNPKG

ukelli-ui

Version:

Base on React's UI lib. Make frontend's dev simpler and faster.

74 lines (73 loc) 3.38 kB
var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); import React, { Component } from 'react'; import { TransitionGroup, CSSTransition } from 'react-transition-group'; import { IsFunc } from 'basic-helper'; // import LoadingDOMSnip from './snip'; import LoadingProgress from './progress'; import LoadingDOMPlaceholder from './placeholder'; var childrenFuncFilter = function (children) { return (IsFunc(children) ? children() : children); }; var Loading = /** @class */ (function (_super) { __extends(Loading, _super); function Loading() { return _super !== null && _super.apply(this, arguments) || this; } Loading.prototype.transitionWrap = function (key, children) { var timeout = this.props.timeout; return (React.createElement(CSSTransition, { classNames: "loading", timeout: timeout, key: key }, React.createElement("div", null, children))); }; Loading.prototype.render = function () { var _a = this.props, loading = _a.loading, children = _a.children, inrow = _a.inrow, loadingDOM = _a.loadingDOM; var loadingDOMFilterRes; switch (true) { case !!loadingDOM: // custom mode loadingDOMFilterRes = loadingDOM; break; case inrow: // progress loadingDOMFilterRes = React.createElement(LoadingProgress, null); break; default: // placeholder loadingDOMFilterRes = React.createElement(LoadingDOMPlaceholder, null); } var container; switch (true) { // solution 1, render chidlren with progress case loading && inrow: container = [ this.transitionWrap('loading', React.createElement("div", { className: "loading-container" }, loadingDOMFilterRes)), this.transitionWrap('loaded', childrenFuncFilter(children)) ]; break; // solution 2, when inrow and no children or not inrow, just render placeholder case loading && !inrow: container = this.transitionWrap('loading', React.createElement("div", { className: "loading-container" }, loadingDOMFilterRes)); break; // solution 3, just render children case !loading: container = this.transitionWrap('loaded', childrenFuncFilter(children)); break; default: } return (React.createElement("div", { className: "loading-control " + (loading ? 'loading' : 'planning') }, React.createElement(TransitionGroup, { component: null }, container))); }; Loading.defaultProps = { inrow: false, timeout: 200, animationClass: 'loading', }; return Loading; }(Component)); export default Loading;