UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

175 lines (174 loc) 11.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Loading = exports.Success = void 0; var tslib_1 = require("tslib"); var react_1 = tslib_1.__importStar(require("react")); var core_1 = tslib_1.__importDefault(require("@better-scroll/core")); var pull_down_1 = tslib_1.__importDefault(require("@better-scroll/pull-down")); var pull_up_1 = tslib_1.__importDefault(require("@better-scroll/pull-up")); var scroll_bar_1 = tslib_1.__importDefault(require("@better-scroll/scroll-bar")); var nested_scroll_1 = tslib_1.__importDefault(require("@better-scroll/nested-scroll")); var observe_dom_1 = tslib_1.__importDefault(require("@better-scroll/observe-dom")); var Bubble_1 = tslib_1.__importDefault(require("./Bubble")); // import './index.scss'; var rc_resize_observer_1 = tslib_1.__importDefault(require("rc-resize-observer")); core_1.default.use(nested_scroll_1.default); var defaultState = { beforePullDown: true, isPullingDown: false, beforePullUp: true, isPullingUp: false, hasPullup: false, isEnd: false, }; var defaultProps = { scrollConfig: { scrollbar: { fade: true }, click: true, preventDefault: false, tap: 'tap', bounceTime: 800, pullDownRefresh: undefined, pullUpLoad: undefined, // 实时派发 // 关闭自动失焦,否则移动端对同一输入框点击会触发失焦再Focus // autoBlur: false } }; var ScrollMb = react_1.default.forwardRef(function (props, ref) { var scrollRef = props.scrollRef, nestedScroll = props.nestedScroll, _a = props.scrollConfig, scrollConfig = _a === void 0 ? {} : _a, _b = props.children, children = _b === void 0 ? null : _b, className = props.className, loadingNode = props.loadingNode, successNode = props.successNode, onPullingDown = props.onPullingDown, onPullingUp = props.onPullingUp, onScroll = props.onScroll; var _c = (0, react_1.useState)(), bScroll = _c[0], setBScroll = _c[1]; var _d = (0, react_1.useState)(0), bubbleY = _d[0], setBubbleY = _d[1]; var _e = (0, react_1.useState)(defaultState), state = _e[0], setState = _e[1]; var beforePullDown = state.beforePullDown, isPullingDown = state.isPullingDown, beforePullUp = state.beforePullUp, isPullingUp = state.isPullingUp, hasPullup = state.hasPullup, isEnd = state.isEnd; var config = Object.assign(defaultProps.scrollConfig, scrollConfig); nestedScroll && (config.nestedScroll = nestedScroll); var wrapperEle = (0, react_1.useRef)(null); var childrenEle = (0, react_1.useRef)(null); react_1.default.useImperativeHandle(ref, function () { bScroll; }); (0, react_1.useEffect)(function () { bScroll && bScroll.destroy(); init(); }, [config.pullUpLoad]); var init = function () { // 根据配置选择性加载必要插件 config.scrollbar && core_1.default.use(scroll_bar_1.default); config.pullDownRefresh && core_1.default.use(pull_down_1.default); config.pullUpLoad && core_1.default.use(pull_up_1.default); config.observeDOM && core_1.default.use(observe_dom_1.default); var bScroll = new core_1.default(wrapperEle.current, config); typeof scrollRef === 'function' && scrollRef(bScroll); setBScroll(bScroll); /** * 下拉刷新 */ config.pullDownRefresh && bScroll.on('pullingDown', function () { if (!beforePullDown) return; setState(function (state) { return tslib_1.__assign(tslib_1.__assign({}, state), { beforePullDown: false }); }); config.pullDownRefresh && onPullingDown && onPullingDown() .then(function (response) { setState(function (state) { return tslib_1.__assign(tslib_1.__assign({}, state), { isEnd: false }); }); }) .finally(function () { setState(function (state) { return tslib_1.__assign(tslib_1.__assign({}, state), { isPullingDown: true }); }); setTimeout(function () { bScroll.finishPullDown(); }, 400); setTimeout(function () { setState(function (state) { return tslib_1.__assign(tslib_1.__assign({}, state), { beforePullDown: true, isPullingDown: false }); }); }, (config.bounceTime || 800) + 400); }); }); /** * 上拉加载更多 */ config.pullUpLoad && bScroll.on('pullingUp', function () { if (!beforePullUp) { return; } setState(function (state) { return tslib_1.__assign(tslib_1.__assign({}, state), { beforePullUp: false }); }); config.pullUpLoad && onPullingUp && onPullingUp() .then(function (response) { var _a = (response || {}).isEnd, isEnd = _a === void 0 ? false : _a; setTimeout(function () { bScroll.finishPullUp(); setState(function (state) { return tslib_1.__assign(tslib_1.__assign({}, state), { isPullingUp: false, isEnd: isEnd }); }); }, 400); setState(function (state) { return tslib_1.__assign(tslib_1.__assign({}, state), { beforePullUp: true, isPullingUp: true }); }); }); }); bScroll.on('scroll', function (pos) { onScroll && onScroll(pos); if (pos.y < 0) return; config.pullDownRefresh && setBubbleY(Math.max(0, !isPullingDown ? pos.y - 40 : 0)); }); }; return react_1.default.createElement(rc_resize_observer_1.default, { onResize: function () { bScroll === null || bScroll === void 0 ? void 0 : bScroll.refresh(); setState(function (data) { var _a, _b; return tslib_1.__assign(tslib_1.__assign({}, data), { hasPullup: ((_a = childrenEle === null || childrenEle === void 0 ? void 0 : childrenEle.current) === null || _a === void 0 ? void 0 : _a.clientHeight) > ((_b = wrapperEle === null || wrapperEle === void 0 ? void 0 : wrapperEle.current) === null || _b === void 0 ? void 0 : _b.clientHeight) }); }); } }, react_1.default.createElement("div", { ref: wrapperEle, className: !className ? 'scroll-wrapper' : "scroll-wrapper ".concat(className) }, react_1.default.createElement("div", { className: "scroll-content" }, config.pullDownRefresh !== false && react_1.default.createElement("div", { style: typeof config.pullDownRefresh === 'object' ? { height: config.pullDownRefresh.stop } : {}, className: "pulldown-wrapper" }, beforePullDown && !isPullingDown && react_1.default.createElement(Bubble_1.default, { y: bubbleY }), !beforePullDown && !isPullingDown && (loadingNode || react_1.default.createElement(exports.Loading, null)), isPullingDown && (successNode || react_1.default.createElement(exports.Success, null))), react_1.default.createElement(rc_resize_observer_1.default, { onResize: function () { bScroll === null || bScroll === void 0 ? void 0 : bScroll.refresh(); setState(function (data) { var _a, _b; return tslib_1.__assign(tslib_1.__assign({}, data), { hasPullup: ((_a = childrenEle === null || childrenEle === void 0 ? void 0 : childrenEle.current) === null || _a === void 0 ? void 0 : _a.clientHeight) > ((_b = wrapperEle === null || wrapperEle === void 0 ? void 0 : wrapperEle.current) === null || _b === void 0 ? void 0 : _b.clientHeight) }); }); } }, react_1.default.createElement("div", { ref: childrenEle, className: "scroll-content-children" }, children)), // 当开启上拉加载更多 且当前滚动区域大于父容器时才展示 加载组件 (scrollConfig === null || scrollConfig === void 0 ? void 0 : scrollConfig.pullUpLoad) === true && react_1.default.createElement("div", { className: "pullup-wrapper" }, hasPullup && (!isEnd ? (!isPullingUp ? react_1.default.createElement(react_1.default.Fragment, null, react_1.default.createElement(exports.Loading, null), react_1.default.createElement("span", null, "\u52A0\u8F7D\u4E2D...")) : react_1.default.createElement(exports.Success, { label: "\u52A0\u8F7D\u6210\u529F\uFF01" })) : react_1.default.createElement("span", null, "\u5DF2\u7ECF\u5230\u5E95\u5566\uFF01\u4E0D\u8981\u518D\u62C9\u4E86")))))); }); exports.default = ScrollMb; var Success = function (_a) { var _b = _a.label, label = _b === void 0 ? '刷新成功' : _b; return react_1.default.createElement("div", { className: "pulldown-success" }, react_1.default.createElement("svg", { viewBox: "0 0 1024 1024", version: "1.1", xmlns: "http://www.w3.org/2000/svg", "p-id": "3538", width: "1em", height: "1em" }, react_1.default.createElement("path", { d: "M878.08 731.275a32 32 0 0 1-54.88-32.939A360.79 360.79 0 0 0 874.667 512c0-200.299-162.368-362.667-362.667-362.667S149.333 311.701 149.333 512 311.701 874.667 512 874.667a360.79 360.79 0 0 0 186.315-51.446 32 32 0 0 1 32.928 54.88A424.779 424.779 0 0 1 512 938.667c-235.637 0-426.667-191.03-426.667-426.667S276.363 85.333 512 85.333 938.667 276.363 938.667 512c0 78.293-21.152 153.568-60.587 219.275zM374.581 489.45l84.342 83.989 190.432-190.72a32 32 0 0 1 45.29 45.227L481.632 641.28a32 32 0 0 1-45.227 0.064L329.42 534.794a32 32 0 1 1 45.162-45.343z", "p-id": "3539", fill: "#999999" })), react_1.default.createElement("span", null, label)); }; exports.Success = Success; var Loading = function () { return react_1.default.createElement("svg", { className: "pull-loading", viewBox: "0 0 1024 1024", version: "1.1", xmlns: "http://www.w3.org/2000/svg", "p-id": "2742", width: "1em", height: "1em" }, react_1.default.createElement("path", { d: "M512 907c-24.852 0-45-20.148-45-45s20.148-45 45-45c168.446 0 305-136.554 305-305S680.446 207 512 207 207 343.554 207 512c0 24.852-20.148 45-45 45S117 536.852 117 512c0-218.152 176.848-395 395-395S907 293.848 907 512 730.152 907 512 907z", "p-id": "2743", fill: "#999999" })); }; exports.Loading = Loading; //# sourceMappingURL=./components/ScrollMB/index.js.map