@td-design/rn-hooks
Version:
从ahooks里面抽取的一些在rn项目里可以使用的hooks。提高开发效率
83 lines (79 loc) • 3.53 kB
JavaScript
;
var _tslib = require('../_virtual/_tslib.js');
var index$2 = require('../useMemoizedFn/index.js');
var index$1 = require('../useRequest/index.js');
var index = require('../useSafeState/index.js');
var index$3 = require('../useUpdateEffect/index.js');
var INITIAL_PAGE = 1;
var INITIAL_PAGE_SIZE = 10;
function useInfiniteScroll(service, options) {
var _this = this;
var _a = options || {}, _b = _a.manual, manual = _b === void 0 ? false : _b, _c = _a.refreshDeps, refreshDeps = _c === void 0 ? [] : _c, onBefore = _a.onBefore, onSuccess = _a.onSuccess, onError = _a.onError, onFinally = _a.onFinally;
var _d = _tslib.__read(index(), 2), data = _d[0], setData = _d[1];
var _e = _tslib.__read(index(false), 2), loadingMore = _e[0], setLoadingMore = _e[1];
var _f = _tslib.__read(index(false), 2), noMoreData = _f[0], setNoMoreData = _f[1];
var _g = index$1.default(function (lastData) { return _tslib.__awaiter(_this, void 0, void 0, function () {
var currentData;
return _tslib.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, service(lastData
? {
page: lastData.page + 1,
pageSize: lastData.pageSize,
}
: {
page: INITIAL_PAGE,
pageSize: INITIAL_PAGE_SIZE,
})];
case 1:
currentData = _a.sent();
if (!currentData) {
setNoMoreData(true);
return [2 /*return*/, currentData];
}
setNoMoreData(currentData.page * currentData.pageSize >= currentData.total);
if (!lastData) {
setData(_tslib.__assign(_tslib.__assign({}, currentData), { list: _tslib.__spreadArray([], _tslib.__read((currentData.list || [])), false) }));
}
else {
setData(_tslib.__assign(_tslib.__assign({}, currentData), { list: _tslib.__spreadArray(_tslib.__spreadArray([], _tslib.__read((lastData.list || [])), false), _tslib.__read((currentData.list || [])), false) }));
}
return [2 /*return*/, currentData];
}
});
}); }, {
manual: manual,
onBefore: onBefore,
onSuccess: onSuccess,
onError: onError,
onFinally: function (_, d, e) {
setLoadingMore(false);
onFinally === null || onFinally === void 0 ? void 0 : onFinally(d, e);
},
}), loading = _g.loading, error = _g.error, run = _g.run, runAsync = _g.runAsync, cancel = _g.cancel;
var loadMore = index$2(function () {
if (noMoreData)
return;
setLoadingMore(true);
return run(data);
});
var refresh = index$2(function () {
setLoadingMore(false);
return runAsync();
});
index$3(function () {
run();
}, _tslib.__spreadArray([], _tslib.__read(refreshDeps), false));
return {
data: (data === null || data === void 0 ? void 0 : data.list) || [],
loading: loading,
loadingMore: loadingMore,
noMoreData: noMoreData,
error: error,
loadMore: loadMore,
refresh: refresh,
cancel: cancel,
mutate: setData,
};
}
module.exports = useInfiniteScroll;