@pinnacle0/web-ui 0.4.10 → 0.4.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/FlatList/Content/Footer/index.d.ts +10 -0
- package/core/FlatList/Content/Footer/index.js +11 -0
- package/core/FlatList/Content/Footer/index.js.map +1 -0
- package/core/FlatList/{shared → Content}/Footer/index.less +2 -3
- package/core/FlatList/Content/index.d.ts +9 -0
- package/core/FlatList/Content/index.js +71 -0
- package/core/FlatList/Content/index.js.map +1 -0
- package/core/FlatList/Loader/index.d.ts +3 -0
- package/core/FlatList/Loader/index.js +9 -0
- package/core/FlatList/Loader/index.js.map +1 -0
- package/core/FlatList/Loader/index.less +39 -0
- package/core/FlatList/{shared/Spinner → Refresh}/index.d.ts +1 -1
- package/core/FlatList/Refresh/index.js +8 -0
- package/core/FlatList/Refresh/index.js.map +1 -0
- package/core/FlatList/Refresh/index.less +22 -0
- package/core/FlatList/index.d.ts +3 -1
- package/core/FlatList/index.js +76 -26
- package/core/FlatList/index.js.map +1 -1
- package/core/FlatList/index.less +40 -0
- package/core/FlatList/type.d.ts +71 -37
- package/core/FlatList/type.js +1 -1
- package/core/FlatList/type.js.map +1 -1
- package/core/FlatList/useGap.d.ts +2 -0
- package/core/FlatList/useGap.js +12 -0
- package/core/FlatList/useGap.js.map +1 -0
- package/core/FlatList/util.d.ts +8 -0
- package/core/FlatList/util.js +35 -0
- package/core/FlatList/util.js.map +1 -0
- package/core/VirtualList.d.ts +5 -2
- package/core/VirtualList.js +8 -7
- package/core/VirtualList.js.map +1 -1
- package/hooks/useSwipe/controller.js +1 -0
- package/hooks/useSwipe/controller.js.map +1 -1
- package/hooks/useSwipe/type.d.ts +1 -0
- package/hooks/useSwipe/type.js.map +1 -1
- package/internal/polyfill/IntersectionObserver.d.ts +1 -0
- package/internal/polyfill/IntersectionObserver.js +5 -0
- package/internal/polyfill/IntersectionObserver.js.map +1 -0
- package/package.json +4 -2
- package/core/FlatList/VirtualFlatList/Item.d.ts +0 -11
- package/core/FlatList/VirtualFlatList/Item.js +0 -20
- package/core/FlatList/VirtualFlatList/Item.js.map +0 -1
- package/core/FlatList/VirtualFlatList/index.d.ts +0 -8
- package/core/FlatList/VirtualFlatList/index.js +0 -111
- package/core/FlatList/VirtualFlatList/index.js.map +0 -1
- package/core/FlatList/VirtualFlatList/index.less +0 -22
- package/core/FlatList/VirtualFlatList/type.d.ts +0 -20
- package/core/FlatList/VirtualFlatList/type.js +0 -2
- package/core/FlatList/VirtualFlatList/type.js.map +0 -1
- package/core/FlatList/shared/Footer/index.d.ts +0 -8
- package/core/FlatList/shared/Footer/index.js +0 -13
- package/core/FlatList/shared/Footer/index.js.map +0 -1
- package/core/FlatList/shared/GetRowKey.d.ts +0 -2
- package/core/FlatList/shared/GetRowKey.js +0 -12
- package/core/FlatList/shared/GetRowKey.js.map +0 -1
- package/core/FlatList/shared/Spinner/index.js +0 -10
- package/core/FlatList/shared/Spinner/index.js.map +0 -1
- package/core/FlatList/shared/Spinner/index.less +0 -13
- package/core/FlatList/shared/Wrapper/Loading.d.ts +0 -8
- package/core/FlatList/shared/Wrapper/Loading.js +0 -7
- package/core/FlatList/shared/Wrapper/Loading.js.map +0 -1
- package/core/FlatList/shared/Wrapper/index.d.ts +0 -14
- package/core/FlatList/shared/Wrapper/index.js +0 -109
- package/core/FlatList/shared/Wrapper/index.js.map +0 -1
- package/core/FlatList/shared/Wrapper/index.less +0 -33
- package/core/FlatList/shared/hooks/useBounceSwipe.d.ts +0 -22
- package/core/FlatList/shared/hooks/useBounceSwipe.js +0 -111
- package/core/FlatList/shared/hooks/useBounceSwipe.js.map +0 -1
- package/core/FlatList/shared/hooks/useElementScrollState.d.ts +0 -8
- package/core/FlatList/shared/hooks/useElementScrollState.js +0 -38
- package/core/FlatList/shared/hooks/useElementScrollState.js.map +0 -1
- package/core/FlatList/shared/hooks/useLoadingWithDelay.d.ts +0 -9
- package/core/FlatList/shared/hooks/useLoadingWithDelay.js +0 -52
- package/core/FlatList/shared/hooks/useLoadingWithDelay.js.map +0 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import "./index.less";
|
|
3
|
+
interface Props {
|
|
4
|
+
hasNextPage: boolean;
|
|
5
|
+
endOfListMessage?: string;
|
|
6
|
+
hasNextPageMessage?: string;
|
|
7
|
+
loading?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare const Footer: ({ loading, hasNextPage, hasNextPageMessage, endOfListMessage }: Props) => JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Loader } from "../../Loader";
|
|
3
|
+
import "./index.less";
|
|
4
|
+
export var Footer = function (_a) {
|
|
5
|
+
var loading = _a.loading, hasNextPage = _a.hasNextPage, hasNextPageMessage = _a.hasNextPageMessage, endOfListMessage = _a.endOfListMessage;
|
|
6
|
+
var ref = React.useRef(null);
|
|
7
|
+
var end = endOfListMessage !== null && endOfListMessage !== void 0 ? endOfListMessage : "All data loaded";
|
|
8
|
+
var next = hasNextPageMessage !== null && hasNextPageMessage !== void 0 ? hasNextPageMessage : "Pull up to load more";
|
|
9
|
+
return (React.createElement("div", { ref: ref, className: "g-flat-list-footer" }, loading ? React.createElement(Loader, null) : hasNextPage ? next : end));
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/FlatList/Content/Footer/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,MAAM,EAAC,MAAM,cAAc,CAAC;AACpC,OAAO,cAAc,CAAC;AAQtB,MAAM,CAAC,IAAM,MAAM,GAAG,UAAC,EAAmE;QAAlE,OAAO,aAAA,EAAE,WAAW,iBAAA,EAAE,kBAAkB,wBAAA,EAAE,gBAAgB,sBAAA;IAC9E,IAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAwB,IAAI,CAAC,CAAC;IACtD,IAAM,GAAG,GAAG,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,iBAAiB,CAAC;IAClD,IAAM,IAAI,GAAG,kBAAkB,aAAlB,kBAAkB,cAAlB,kBAAkB,GAAI,sBAAsB,CAAC;IAE1D,OAAO,CACH,6BAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAC,oBAAoB,IACxC,OAAO,CAAC,CAAC,CAAC,oBAAC,MAAM,OAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAC9C,CACT,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import type { FlatListProps } from "../type";
|
|
3
|
+
import "../../../internal/polyfill/IntersectionObserver";
|
|
4
|
+
interface Props<T> extends Pick<FlatListProps<T>, "data" | "renderItem" | "gap" | "emptyPlaceholder" | "rowKey" | "Footer" | "endOfListMessage" | "onPullUpLoading"> {
|
|
5
|
+
loading: boolean;
|
|
6
|
+
hasNextPageMessage?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function Content<T>({ data, emptyPlaceholder, renderItem, gap, rowKey, loading, Footer, endOfListMessage, onPullUpLoading, hasNextPageMessage }: Props<T>): JSX.Element;
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
2
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
3
|
+
if (!m) return o;
|
|
4
|
+
var i = m.call(o), r, ar = [], e;
|
|
5
|
+
try {
|
|
6
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
7
|
+
}
|
|
8
|
+
catch (error) { e = { error: error }; }
|
|
9
|
+
finally {
|
|
10
|
+
try {
|
|
11
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
12
|
+
}
|
|
13
|
+
finally { if (e) throw e.error; }
|
|
14
|
+
}
|
|
15
|
+
return ar;
|
|
16
|
+
};
|
|
17
|
+
import React from "react";
|
|
18
|
+
import { useGap } from "../useGap";
|
|
19
|
+
import { Footer as DefaultFooter } from "./Footer";
|
|
20
|
+
import "../../../internal/polyfill/IntersectionObserver";
|
|
21
|
+
export function Content(_a) {
|
|
22
|
+
var data = _a.data, emptyPlaceholder = _a.emptyPlaceholder, renderItem = _a.renderItem, gap = _a.gap, rowKey = _a.rowKey, loading = _a.loading, Footer = _a.Footer, endOfListMessage = _a.endOfListMessage, onPullUpLoading = _a.onPullUpLoading, hasNextPageMessage = _a.hasNextPageMessage;
|
|
23
|
+
var Item = renderItem;
|
|
24
|
+
var itemStyle = useGap(gap);
|
|
25
|
+
var markerId = React.useRef(createKey());
|
|
26
|
+
var loadedDataKey = React.useRef(null);
|
|
27
|
+
var _b = React.useMemo(function () { return splitByLast(data, 2); }, [data]), first = _b.first, second = _b.second;
|
|
28
|
+
var _c = __read(React.useState(createKey()), 2), dataKey = _c[0], setDataKey = _c[1];
|
|
29
|
+
var onPullUpLoadingRef = React.useRef(onPullUpLoading);
|
|
30
|
+
onPullUpLoadingRef.current = onPullUpLoading;
|
|
31
|
+
React.useEffect(function () { return setDataKey(createKey()); }, [data]);
|
|
32
|
+
React.useEffect(function () {
|
|
33
|
+
var marker = document.getElementById(markerId.current);
|
|
34
|
+
if (!marker)
|
|
35
|
+
return;
|
|
36
|
+
var observer = new IntersectionObserver(function (mutations) {
|
|
37
|
+
var _a;
|
|
38
|
+
var mutation = mutations[0];
|
|
39
|
+
if (!mutation.isIntersecting)
|
|
40
|
+
return;
|
|
41
|
+
var currentDataKey = mutation.target.getAttribute("data-key");
|
|
42
|
+
if (loadedDataKey.current === currentDataKey)
|
|
43
|
+
return;
|
|
44
|
+
loadedDataKey.current = currentDataKey;
|
|
45
|
+
(_a = onPullUpLoadingRef.current) === null || _a === void 0 ? void 0 : _a.call(onPullUpLoadingRef);
|
|
46
|
+
});
|
|
47
|
+
observer.observe(marker);
|
|
48
|
+
return function () { return observer.disconnect(); };
|
|
49
|
+
}, []);
|
|
50
|
+
var createItem = function (source) {
|
|
51
|
+
return source.map(function (_a) {
|
|
52
|
+
var d = _a.d, i = _a.i;
|
|
53
|
+
return (React.createElement("div", { className: "g-flat-list-item", key: rowKey === "index" ? i : String(d[rowKey]), style: itemStyle },
|
|
54
|
+
React.createElement(Item, { data: d, index: i })));
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
return (React.createElement("div", { className: "g-flat-list-content" }, data.length === 0 && emptyPlaceholder ? (emptyPlaceholder) : (React.createElement(React.Fragment, null,
|
|
58
|
+
createItem(first),
|
|
59
|
+
React.createElement("div", { id: markerId.current, "data-key": dataKey }),
|
|
60
|
+
createItem(second),
|
|
61
|
+
Footer && data.length > 0 ? (React.createElement(Footer, { loading: loading })) : (React.createElement(DefaultFooter, { loading: loading, hasNextPage: onPullUpLoading !== undefined, endOfListMessage: endOfListMessage, hasNextPageMessage: hasNextPageMessage }))))));
|
|
62
|
+
}
|
|
63
|
+
function splitByLast(data, last) {
|
|
64
|
+
var pair = data.map(function (d, i) { return ({ d: d, i: i }); });
|
|
65
|
+
var from = Math.max(0, data.length - last);
|
|
66
|
+
return { first: pair.slice(0, from), second: pair.slice(from) };
|
|
67
|
+
}
|
|
68
|
+
function createKey() {
|
|
69
|
+
return Date.now().toString(36) + Math.random().toString(36).substring(2);
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/FlatList/Content/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import "./index.less";
|
|
3
|
+
export var Loader = function () {
|
|
4
|
+
return (React.createElement("div", { className: "g-flat-list-loader" },
|
|
5
|
+
React.createElement("div", { className: "dot" }),
|
|
6
|
+
React.createElement("div", { className: "dot" }),
|
|
7
|
+
React.createElement("div", { className: "dot" })));
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/FlatList/Loader/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,cAAc,CAAC;AAEtB,MAAM,CAAC,IAAM,MAAM,GAAG;IAClB,OAAO,CACH,6BAAK,SAAS,EAAC,oBAAoB;QAC/B,6BAAK,SAAS,EAAC,KAAK,GAAG;QACvB,6BAAK,SAAS,EAAC,KAAK,GAAG;QACvB,6BAAK,SAAS,EAAC,KAAK,GAAG,CACrB,CACT,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
.g-flat-list-loader {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-flow: row nowrap;
|
|
4
|
+
gap: 10px;
|
|
5
|
+
|
|
6
|
+
.dot {
|
|
7
|
+
width: 8px;
|
|
8
|
+
height: 8px;
|
|
9
|
+
border-radius: 50%;
|
|
10
|
+
background-color: #c2c2c2;
|
|
11
|
+
animation-name: jumping;
|
|
12
|
+
animation-duration: 750ms;
|
|
13
|
+
animation-timing-function: ease-in-out;
|
|
14
|
+
animation-iteration-count: infinite;
|
|
15
|
+
|
|
16
|
+
.delay(@count) when (@count > 0) {
|
|
17
|
+
&:nth-of-type(@{count}) {
|
|
18
|
+
animation-delay: @count * 250ms;
|
|
19
|
+
}
|
|
20
|
+
.delay(@count - 1);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.delay(4);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@keyframes jumping {
|
|
27
|
+
0% {
|
|
28
|
+
opacity: 1;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
50% {
|
|
32
|
+
opacity: 0;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
100% {
|
|
36
|
+
opacity: 1;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Loader } from "../Loader";
|
|
3
|
+
import "./index.less";
|
|
4
|
+
export var Refresh = function (_a) {
|
|
5
|
+
var loading = _a.loading, message = _a.message;
|
|
6
|
+
return React.createElement("div", { className: "g-flat-list-default-refresh" }, loading ? React.createElement(Loader, null) : React.createElement("span", null, message !== null && message !== void 0 ? message : "release to refresh"));
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/FlatList/Refresh/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,MAAM,EAAC,MAAM,WAAW,CAAC;AACjC,OAAO,cAAc,CAAC;AAOtB,MAAM,CAAC,IAAM,OAAO,GAAG,UAAC,EAAyB;QAAxB,OAAO,aAAA,EAAE,OAAO,aAAA;IACrC,OAAO,6BAAK,SAAS,EAAC,6BAA6B,IAAE,OAAO,CAAC,CAAC,CAAC,oBAAC,MAAM,OAAG,CAAC,CAAC,CAAC,kCAAO,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,oBAAoB,CAAQ,CAAO,CAAC;AACtI,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
.g-flat-list-default-refresh {
|
|
2
|
+
width: 100%;
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-flow: column nowrap;
|
|
5
|
+
justify-content: center;
|
|
6
|
+
align-items: center;
|
|
7
|
+
padding: 20px 0;
|
|
8
|
+
|
|
9
|
+
> span {
|
|
10
|
+
animation: fade-in 200ms ease-in;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@keyframes fade-in {
|
|
14
|
+
from {
|
|
15
|
+
opacity: 0;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
to {
|
|
19
|
+
opacity: 1;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
package/core/FlatList/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import type { FlatListProps } from "./type";
|
|
3
|
-
|
|
3
|
+
import "./index.less";
|
|
4
|
+
export * from "./type";
|
|
5
|
+
export declare const FlatList: <T>({ renderItem, data, rowKey, id, className, gap, refreshing, loading, onPullDownRefresh, onPullUpLoading, emptyPlaceholder, Refresh, Footer, pullDownMessage, pullUpMessage, endOfListMessage, }: FlatListProps<T>) => JSX.Element;
|
package/core/FlatList/index.js
CHANGED
|
@@ -26,35 +26,85 @@ var __read = (this && this.__read) || function (o, n) {
|
|
|
26
26
|
return ar;
|
|
27
27
|
};
|
|
28
28
|
import React from "react";
|
|
29
|
-
import { Wrapper } from "./shared/Wrapper";
|
|
30
|
-
import { Footer } from "./shared/Footer";
|
|
31
|
-
import { useLoadingWithDelay } from "./shared/hooks/useLoadingWithDelay";
|
|
32
29
|
import { classNames } from "../../util/ClassNames";
|
|
33
|
-
import {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
30
|
+
import { Direction } from "../../hooks/useSwipe";
|
|
31
|
+
import { useSwipe, useTransform } from "../../hooks";
|
|
32
|
+
import { getBounaryFromStartDirection, isExceededBounary, isScrollBottom, isScrollTop } from "./util";
|
|
33
|
+
import { Refresh as DefaultRefresh } from "./Refresh";
|
|
34
|
+
import { Content } from "./Content";
|
|
35
|
+
import "./index.less";
|
|
36
|
+
export * from "./type";
|
|
37
|
+
var PULL_DOWN_REFRESH_THRESHOLD = 50;
|
|
38
|
+
export var FlatList = function (_a) {
|
|
39
|
+
var renderItem = _a.renderItem, data = _a.data, rowKey = _a.rowKey, id = _a.id, className = _a.className, gap = _a.gap, refreshing = _a.refreshing, _b = _a.loading, loading = _b === void 0 ? false : _b, onPullDownRefresh = _a.onPullDownRefresh, onPullUpLoading = _a.onPullUpLoading, emptyPlaceholder = _a.emptyPlaceholder, Refresh = _a.Refresh, Footer = _a.Footer, pullDownMessage = _a.pullDownMessage, pullUpMessage = _a.pullUpMessage, endOfListMessage = _a.endOfListMessage;
|
|
40
|
+
var scrollRef = React.useRef(null);
|
|
41
|
+
var animtedRef = React.useRef(null);
|
|
42
|
+
var refreshHeight = React.useRef(0);
|
|
43
|
+
var previousBoundary = React.useRef(null);
|
|
44
|
+
var _c = __read(React.useState(null), 2), startDelta = _c[0], setStartDelta = _c[1];
|
|
45
|
+
var transit = useTransform(animtedRef, {
|
|
46
|
+
timingFunction: "cubic-bezier(0, 0.89, 0.26, 1.02)",
|
|
47
|
+
duration: 800,
|
|
48
|
+
});
|
|
49
|
+
var transitRef = React.useRef(transit);
|
|
50
|
+
transitRef.current = transit;
|
|
51
|
+
var threshold = function (_a) {
|
|
52
|
+
var direction = _a.direction;
|
|
53
|
+
var element = scrollRef.current;
|
|
54
|
+
if (!element)
|
|
55
|
+
return false;
|
|
56
|
+
if (direction === Direction.DOWN && isScrollTop(element)) {
|
|
57
|
+
return true;
|
|
42
58
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
var onScroll = function (e) {
|
|
46
|
-
if (!loadingWithDelay && onPullUpLoading) {
|
|
47
|
-
var _a = e.currentTarget, scrollHeight = _a.scrollHeight, scrollTop = _a.scrollTop, clientHeight = _a.clientHeight;
|
|
48
|
-
if (scrollHeight * 0.8 < clientHeight + scrollTop) {
|
|
49
|
-
setLoadingType("loading");
|
|
50
|
-
onPullUpLoading === null || onPullUpLoading === void 0 ? void 0 : onPullUpLoading();
|
|
51
|
-
}
|
|
59
|
+
else if (direction === Direction.UP && isScrollBottom(element)) {
|
|
60
|
+
return true;
|
|
52
61
|
}
|
|
62
|
+
return false;
|
|
53
63
|
};
|
|
54
|
-
var
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
64
|
+
var clear = function () {
|
|
65
|
+
transit.clear();
|
|
66
|
+
setStartDelta(null);
|
|
67
|
+
};
|
|
68
|
+
var bind = useSwipe({
|
|
69
|
+
onStart: function (_a) {
|
|
70
|
+
var _b = __read(_a.delta, 2), y = _b[1], direction = _a.direction;
|
|
71
|
+
setStartDelta(y);
|
|
72
|
+
previousBoundary.current = getBounaryFromStartDirection(direction);
|
|
73
|
+
},
|
|
74
|
+
onMove: function (_a) {
|
|
75
|
+
var _b = __read(_a.delta, 2), y = _b[1], cancel = _a.cancel;
|
|
76
|
+
if (!startDelta || !previousBoundary.current)
|
|
77
|
+
return;
|
|
78
|
+
var transform = y - startDelta;
|
|
79
|
+
transit.to({ y: transform, immediate: true });
|
|
80
|
+
isExceededBounary(transform, previousBoundary.current) && cancel();
|
|
81
|
+
},
|
|
82
|
+
onEnd: function (_a) {
|
|
83
|
+
var _b = __read(_a.delta, 2), y = _b[1];
|
|
84
|
+
if (!startDelta)
|
|
85
|
+
return;
|
|
86
|
+
if (previousBoundary.current === "top" && onPullDownRefresh && y - startDelta >= PULL_DOWN_REFRESH_THRESHOLD && !refreshing) {
|
|
87
|
+
onPullDownRefresh();
|
|
88
|
+
}
|
|
89
|
+
clear();
|
|
90
|
+
},
|
|
91
|
+
onCancel: clear,
|
|
92
|
+
}, { threshold: threshold, preventDefault: true, stopPropagation: true });
|
|
93
|
+
var onScroll = function () { return transit.clear(); };
|
|
94
|
+
var updateRefreshHeight = function (node) { return node && (refreshHeight.current = node.getBoundingClientRect().height); };
|
|
95
|
+
React.useEffect(function () {
|
|
96
|
+
if (refreshing && previousBoundary.current === "top") {
|
|
97
|
+
previousBoundary.current === null;
|
|
98
|
+
transitRef.current.to({ y: refreshHeight.current });
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
transitRef.current.clear();
|
|
102
|
+
}
|
|
103
|
+
}, [refreshing]);
|
|
104
|
+
return (React.createElement("div", __assign({ id: id, className: classNames("g-flat-list", className) }, bind),
|
|
105
|
+
React.createElement("div", { className: "g-flat-list-inner-wrapper", ref: animtedRef },
|
|
106
|
+
onPullDownRefresh && refreshing !== undefined && (React.createElement("div", { className: "g-flat-list-refresh", ref: updateRefreshHeight }, Refresh ? React.createElement(Refresh, { loading: refreshing }) : React.createElement(DefaultRefresh, { loading: refreshing, message: pullDownMessage }))),
|
|
107
|
+
React.createElement("div", { className: "g-flat-list-scrollable", ref: scrollRef, style: { overflow: startDelta ? "hidden" : undefined }, onScroll: onScroll },
|
|
108
|
+
React.createElement(Content, { data: data, rowKey: rowKey, renderItem: renderItem, gap: gap, emptyPlaceholder: emptyPlaceholder, Footer: Footer, loading: loading, endOfListMessage: endOfListMessage, hasNextPageMessage: pullUpMessage, onPullUpLoading: onPullUpLoading })))));
|
|
59
109
|
};
|
|
60
110
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/FlatList/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/FlatList/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
.g-flat-list {
|
|
2
|
+
position: relative;
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-flow: column nowrap;
|
|
5
|
+
flex: 1;
|
|
6
|
+
overflow: hidden;
|
|
7
|
+
width: 100%;
|
|
8
|
+
height: 100%;
|
|
9
|
+
|
|
10
|
+
.g-flat-list-inner-wrapper {
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-flow: column nowrap;
|
|
13
|
+
flex: 1;
|
|
14
|
+
max-height: 100%;
|
|
15
|
+
will-change: transform;
|
|
16
|
+
transition-timing-function: cubic-bezier(0, 0.89, 0.26, 1.02);
|
|
17
|
+
transition-duration: 800ms;
|
|
18
|
+
|
|
19
|
+
.g-flat-list-refresh {
|
|
20
|
+
position: absolute;
|
|
21
|
+
width: 100%;
|
|
22
|
+
height: auto;
|
|
23
|
+
transform: translateY(-100%);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.g-flat-list-scrollable {
|
|
27
|
+
display: flex;
|
|
28
|
+
height: 100%;
|
|
29
|
+
overflow: auto;
|
|
30
|
+
overscroll-behavior: none;
|
|
31
|
+
flex-flow: column nowrap;
|
|
32
|
+
|
|
33
|
+
.g-flat-list-content {
|
|
34
|
+
display: flex;
|
|
35
|
+
flex-flow: column nowrap;
|
|
36
|
+
height: 100%;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
package/core/FlatList/type.d.ts
CHANGED
|
@@ -1,48 +1,82 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
export type
|
|
4
|
-
export interface FlatListItemProps<T> {
|
|
5
|
-
data: T;
|
|
6
|
-
index: number;
|
|
7
|
-
}
|
|
8
|
-
export type Gap = {
|
|
1
|
+
import type React from "react";
|
|
2
|
+
export type Boundary = "top" | "bottom";
|
|
3
|
+
export type Gap = number | {
|
|
9
4
|
top?: number;
|
|
10
5
|
bottom?: number;
|
|
11
6
|
left?: number;
|
|
12
7
|
right?: number;
|
|
13
|
-
}
|
|
14
|
-
export
|
|
15
|
-
|
|
8
|
+
};
|
|
9
|
+
export interface FlatListItemProps<T> {
|
|
10
|
+
data: T;
|
|
11
|
+
index: number;
|
|
12
|
+
}
|
|
16
13
|
export interface FlatListProps<T> {
|
|
14
|
+
/**
|
|
15
|
+
* List of data to show in the list
|
|
16
|
+
*/
|
|
17
17
|
data: T[];
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Specify key for each `item` using Object key of type `T`
|
|
20
|
+
*/
|
|
21
|
+
rowKey: keyof T | "index";
|
|
22
|
+
/**
|
|
23
|
+
* A component render for each item
|
|
24
|
+
*/
|
|
25
|
+
renderItem: React.ComponentType<FlatListItemProps<T>>;
|
|
26
|
+
/**
|
|
27
|
+
* Set this to true when waiting for new data by pull down refresh
|
|
28
|
+
*/
|
|
29
|
+
refreshing?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Set this to true when waiting for new data by pull down refresh
|
|
32
|
+
*/
|
|
20
33
|
loading?: boolean;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
onPullUpLoading?: () => void;
|
|
34
|
+
/**
|
|
35
|
+
* If Provided, `Refresh` component will be loaded into the FlatList, you can also specify your own Refresh component using `refresh` props
|
|
36
|
+
*/
|
|
25
37
|
onPullDownRefresh?: () => void;
|
|
38
|
+
/**
|
|
39
|
+
* If Provided, `Footer` component will be loaded into the FlatList, you can also specify your own Refresh component using `footer` props
|
|
40
|
+
*/
|
|
41
|
+
onPullUpLoading?: () => void;
|
|
42
|
+
/**
|
|
43
|
+
* If Provided, Element will be shown when `data` is a empty array
|
|
44
|
+
*/
|
|
26
45
|
emptyPlaceholder?: string | React.ReactElement;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
46
|
+
/**
|
|
47
|
+
* if Provided, default `Footer` component will be replaced
|
|
48
|
+
*/
|
|
49
|
+
Footer?: React.ComponentType<{
|
|
50
|
+
loading: boolean;
|
|
51
|
+
}>;
|
|
52
|
+
/**
|
|
53
|
+
* `refresh` component will be shown when `refreshing` is equal `true`
|
|
54
|
+
* if Provided, default `Refresh` component will be replaced
|
|
55
|
+
*/
|
|
56
|
+
Refresh?: React.ComponentType<{
|
|
57
|
+
loading: boolean;
|
|
58
|
+
}>;
|
|
59
|
+
/**
|
|
60
|
+
* `pullUpMessage` will be show in `Refresh` only if `onPullDownRefresh` is defined
|
|
61
|
+
* if Provided, this message will replace the pull down message in default `Refresh`
|
|
62
|
+
* if `Refresh` is provided, this props will be ignored
|
|
63
|
+
*/
|
|
64
|
+
pullDownMessage?: string;
|
|
65
|
+
/**
|
|
66
|
+
* `pullUpMessage` will be show in `Footer` only if `onPullUpLoading` is defined
|
|
67
|
+
* if Provided, this message will replace end of list message in default `Footer`
|
|
68
|
+
* if `Footer` is provided, this props will be ignored
|
|
69
|
+
*/
|
|
70
|
+
pullUpMessage?: string;
|
|
71
|
+
/**
|
|
72
|
+
* if Provided, this message will replace end of list message in default `Footer`
|
|
73
|
+
* if `Footer` is provided, this props will be ignored
|
|
74
|
+
*/
|
|
75
|
+
endOfListMessage?: string;
|
|
76
|
+
/**
|
|
77
|
+
* Set margin for each item
|
|
78
|
+
*/
|
|
30
79
|
gap?: Gap;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
pullUpLoadMoreMessage?: React.ReactElement | string;
|
|
34
|
-
pullUpLoadingMessage?: React.ReactElement | string;
|
|
35
|
-
endOfListMessage?: React.ReactElement | string;
|
|
36
|
-
}
|
|
37
|
-
export interface FlatListItemProps<T> {
|
|
38
|
-
data: T;
|
|
39
|
-
index: number;
|
|
40
|
-
}
|
|
41
|
-
export interface FooterData {
|
|
42
|
-
__markedAsFooterData: true;
|
|
43
|
-
loading: boolean;
|
|
44
|
-
ended: boolean;
|
|
45
|
-
loadMoreMessage?: React.ReactElement | string;
|
|
46
|
-
loadingMessage?: React.ReactElement | string;
|
|
47
|
-
endMessage?: React.ReactElement | string;
|
|
80
|
+
className?: string;
|
|
81
|
+
id?: string;
|
|
48
82
|
}
|
package/core/FlatList/type.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export
|
|
1
|
+
export {};
|
|
2
2
|
//# sourceMappingURL=type.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../../src/core/FlatList/type.
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../../src/core/FlatList/type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export var useGap = function (gap) {
|
|
2
|
+
if (!gap)
|
|
3
|
+
return {};
|
|
4
|
+
if (typeof gap === "number") {
|
|
5
|
+
return { paddingTop: gap, paddingBottom: gap, paddingLeft: gap, paddingRight: gap };
|
|
6
|
+
}
|
|
7
|
+
else {
|
|
8
|
+
var top_1 = gap.top, bottom = gap.bottom, left = gap.left, right = gap.right;
|
|
9
|
+
return { paddingTop: top_1, paddingBottom: bottom, paddingLeft: left, paddingRight: right };
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=useGap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useGap.js","sourceRoot":"","sources":["../../../src/core/FlatList/useGap.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,IAAM,MAAM,GAAG,UAAC,GAAS;IAC5B,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QACzB,OAAO,EAAC,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAC,CAAC;KACrF;SAAM;QACI,IAAA,KAAG,GAAyB,GAAG,IAA5B,EAAE,MAAM,GAAiB,GAAG,OAApB,EAAE,IAAI,GAAW,GAAG,KAAd,EAAE,KAAK,GAAI,GAAG,MAAP,CAAQ;QACvC,OAAO,EAAC,UAAU,EAAE,KAAG,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAC,CAAC;KAC3F;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Direction } from "../../hooks/useSwipe";
|
|
2
|
+
import type { Boundary } from "./type";
|
|
3
|
+
export declare function isExceededBounary(delta: number, boundary: Boundary): boolean;
|
|
4
|
+
export declare function getBounaryFromStartDirection(direction: Direction): Boundary | null;
|
|
5
|
+
export declare function isScrollTop(element: HTMLElement): boolean;
|
|
6
|
+
export declare function isScrollBottom(element: HTMLElement): boolean;
|
|
7
|
+
export declare function isScrollLeft(element: HTMLElement): boolean;
|
|
8
|
+
export declare function isScrollRight(element: HTMLElement): boolean;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Direction } from "../../hooks/useSwipe";
|
|
2
|
+
var OVER_BOUNDARY_LIMIT = 40;
|
|
3
|
+
export function isExceededBounary(delta, boundary) {
|
|
4
|
+
switch (boundary) {
|
|
5
|
+
case "top":
|
|
6
|
+
return delta < -OVER_BOUNDARY_LIMIT;
|
|
7
|
+
case "bottom":
|
|
8
|
+
return delta > OVER_BOUNDARY_LIMIT;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function getBounaryFromStartDirection(direction) {
|
|
12
|
+
switch (direction) {
|
|
13
|
+
case Direction.DOWN:
|
|
14
|
+
return "top";
|
|
15
|
+
case Direction.UP:
|
|
16
|
+
return "bottom";
|
|
17
|
+
default:
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function isScrollTop(element) {
|
|
22
|
+
return element.scrollTop === 0;
|
|
23
|
+
}
|
|
24
|
+
export function isScrollBottom(element) {
|
|
25
|
+
var scrollTop = element.scrollTop, clientHeight = element.clientHeight, scrollHeight = element.scrollHeight;
|
|
26
|
+
return Math.ceil(scrollTop) + clientHeight >= scrollHeight;
|
|
27
|
+
}
|
|
28
|
+
export function isScrollLeft(element) {
|
|
29
|
+
return element.scrollLeft === 0;
|
|
30
|
+
}
|
|
31
|
+
export function isScrollRight(element) {
|
|
32
|
+
var scrollWidth = element.scrollWidth, scrollLeft = element.scrollLeft, clientWidth = element.clientWidth;
|
|
33
|
+
return Math.ceil(scrollLeft) + clientWidth >= scrollWidth;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=util.js.map
|