@pinnacle0/web-ui 0.3.1 → 0.3.2-beta0
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/VirtualizedFlatList/CellMeasurer.d.ts +17 -0
- package/core/VirtualizedFlatList/CellMeasurer.js +36 -0
- package/core/VirtualizedFlatList/CellMeasurer.js.map +1 -0
- package/core/VirtualizedFlatList/CellMeasurerCache.d.ts +16 -0
- package/core/VirtualizedFlatList/CellMeasurerCache.js +31 -0
- package/core/VirtualizedFlatList/CellMeasurerCache.js.map +1 -0
- package/core/VirtualizedFlatList/Footer.d.ts +8 -0
- package/core/VirtualizedFlatList/Footer.js +27 -0
- package/core/VirtualizedFlatList/Footer.js.map +1 -0
- package/core/VirtualizedFlatList/ListItem.d.ts +4 -0
- package/core/VirtualizedFlatList/ListItem.js +43 -0
- package/core/VirtualizedFlatList/ListItem.js.map +1 -0
- package/core/VirtualizedFlatList/Loading.d.ts +7 -0
- package/core/VirtualizedFlatList/Loading.js +9 -0
- package/core/VirtualizedFlatList/Loading.js.map +1 -0
- package/core/VirtualizedFlatList/index.d.ts +29 -0
- package/core/VirtualizedFlatList/index.js +182 -0
- package/core/VirtualizedFlatList/index.js.map +1 -0
- package/core/VirtualizedFlatList/index.less +59 -0
- package/core/VirtualizedFlatList/type.d.ts +29 -0
- package/core/VirtualizedFlatList/type.js +2 -0
- package/core/VirtualizedFlatList/type.js.map +1 -0
- package/core/VirtualizedFlatList/useLoadingWithDelay.d.ts +1 -0
- package/core/VirtualizedFlatList/useLoadingWithDelay.js +51 -0
- package/core/VirtualizedFlatList/useLoadingWithDelay.js.map +1 -0
- package/hooks/useSwipe/controller.d.ts +20 -0
- package/hooks/useSwipe/controller.js +126 -0
- package/hooks/useSwipe/controller.js.map +1 -0
- package/hooks/useSwipe/index.d.ts +3 -0
- package/hooks/useSwipe/index.js +9 -0
- package/hooks/useSwipe/index.js.map +1 -0
- package/hooks/useSwipe/type.d.ts +38 -0
- package/hooks/useSwipe/type.js +8 -0
- package/hooks/useSwipe/type.js.map +1 -0
- package/hooks/useTransform.d.ts +18 -0
- package/hooks/useTransform.js +50 -0
- package/hooks/useTransform.js.map +1 -0
- package/package.json +10 -4
- package/util/SwipeUtil.d.ts +8 -0
- package/util/SwipeUtil.js +26 -0
- package/util/SwipeUtil.js.map +1 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { VariableSizeList } from "react-window";
|
|
3
|
+
import type { CellMeasurerCache } from "./CellMeasurerCache";
|
|
4
|
+
import type { Measure } from "./type";
|
|
5
|
+
export declare type RegisterChild = (instance: HTMLElement | null) => void;
|
|
6
|
+
export interface CellMeasurerChildProps {
|
|
7
|
+
registerChild: RegisterChild;
|
|
8
|
+
measure: Measure;
|
|
9
|
+
}
|
|
10
|
+
interface Props {
|
|
11
|
+
rowIndex: number;
|
|
12
|
+
cache: CellMeasurerCache;
|
|
13
|
+
children: React.FunctionComponent<CellMeasurerChildProps>;
|
|
14
|
+
parent: React.RefObject<VariableSizeList>;
|
|
15
|
+
}
|
|
16
|
+
export declare function CellMeasurer(props: Props): React.ReactElement<any, any> | null;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export function CellMeasurer(props) {
|
|
3
|
+
var cache = props.cache, rowIndex = props.rowIndex, children = props.children, parent = props.parent;
|
|
4
|
+
var childRef = React.useRef();
|
|
5
|
+
var calculateSize = React.useCallback(function (node) {
|
|
6
|
+
var originalStyleHeight = node.style.height;
|
|
7
|
+
node.style.height = "auto";
|
|
8
|
+
var height = node.getBoundingClientRect().height;
|
|
9
|
+
node.style.height = originalStyleHeight;
|
|
10
|
+
return height;
|
|
11
|
+
}, []);
|
|
12
|
+
var measure = React.useCallback(function () {
|
|
13
|
+
var _a;
|
|
14
|
+
if (childRef.current) {
|
|
15
|
+
var height = calculateSize(childRef.current);
|
|
16
|
+
cache.set(height, rowIndex);
|
|
17
|
+
(_a = parent.current) === null || _a === void 0 ? void 0 : _a.resetAfterIndex(rowIndex);
|
|
18
|
+
}
|
|
19
|
+
}, [cache, parent, calculateSize, rowIndex]);
|
|
20
|
+
var registerChild = function (node) {
|
|
21
|
+
var _a;
|
|
22
|
+
if (node) {
|
|
23
|
+
childRef.current = node;
|
|
24
|
+
var height = calculateSize(node);
|
|
25
|
+
if (!cache.has(rowIndex)) {
|
|
26
|
+
cache.set(height, rowIndex);
|
|
27
|
+
(_a = parent.current) === null || _a === void 0 ? void 0 : _a.resetAfterIndex(rowIndex);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
childRef.current = null;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
return children({ registerChild: registerChild, measure: measure });
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=CellMeasurer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CellMeasurer.js","sourceRoot":"","sources":["../../../src/core/VirtualizedFlatList/CellMeasurer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAmB1B,MAAM,UAAU,YAAY,CAAC,KAAY;IAC9B,IAAA,KAAK,GAAgC,KAAK,MAArC,EAAE,QAAQ,GAAsB,KAAK,SAA3B,EAAE,QAAQ,GAAY,KAAK,SAAjB,EAAE,MAAM,GAAI,KAAK,OAAT,CAAU;IAClD,IAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAsB,CAAC;IAEpD,IAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,UAAC,IAAiB;QACtD,IAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;QACpB,IAAA,MAAM,GAAI,IAAI,CAAC,qBAAqB,EAAE,OAAhC,CAAiC;QAC9C,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,mBAAmB,CAAC;QACxC,OAAO,MAAM,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAM,OAAO,GAAY,KAAK,CAAC,WAAW,CAAC;;QACvC,IAAI,QAAQ,CAAC,OAAO,EAAE;YAClB,IAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC/C,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC5B,MAAA,MAAM,CAAC,OAAO,0CAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;SAC7C;IACL,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE7C,IAAM,aAAa,GAAG,UAAC,IAAwB;;QAC3C,IAAI,IAAI,EAAE;YACN,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;YACxB,IAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBACtB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC5B,MAAA,MAAM,CAAC,OAAO,0CAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;aAC7C;SACJ;aAAM;YACH,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;SAC3B;IACL,CAAC,CAAC;IAEF,OAAO,QAAQ,CAAC,EAAC,aAAa,eAAA,EAAE,OAAO,SAAA,EAAC,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
interface CellMeasurerCacheOptions {
|
|
2
|
+
defaultHeight: number;
|
|
3
|
+
}
|
|
4
|
+
export declare class CellMeasurerCache {
|
|
5
|
+
private cellHeightCache;
|
|
6
|
+
private defaultHeight;
|
|
7
|
+
constructor(options: CellMeasurerCacheOptions);
|
|
8
|
+
private createCacheKey;
|
|
9
|
+
clearAll(): void;
|
|
10
|
+
has(index: number): boolean;
|
|
11
|
+
set(height: number, index: number): void;
|
|
12
|
+
clear(index: number): void;
|
|
13
|
+
getKey(index: number): string;
|
|
14
|
+
itemSize(index: number): number;
|
|
15
|
+
}
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
var CellMeasurerCache = /** @class */ (function () {
|
|
2
|
+
function CellMeasurerCache(options) {
|
|
3
|
+
this.defaultHeight = options.defaultHeight;
|
|
4
|
+
this.cellHeightCache = {};
|
|
5
|
+
}
|
|
6
|
+
CellMeasurerCache.prototype.createCacheKey = function (index) {
|
|
7
|
+
return "key-".concat(index);
|
|
8
|
+
};
|
|
9
|
+
CellMeasurerCache.prototype.clearAll = function () {
|
|
10
|
+
this.cellHeightCache = {};
|
|
11
|
+
};
|
|
12
|
+
CellMeasurerCache.prototype.has = function (index) {
|
|
13
|
+
return this.cellHeightCache[this.createCacheKey(index)] !== undefined;
|
|
14
|
+
};
|
|
15
|
+
CellMeasurerCache.prototype.set = function (height, index) {
|
|
16
|
+
this.cellHeightCache[this.createCacheKey(index)] = height;
|
|
17
|
+
};
|
|
18
|
+
CellMeasurerCache.prototype.clear = function (index) {
|
|
19
|
+
delete this.cellHeightCache[this.createCacheKey(index)];
|
|
20
|
+
};
|
|
21
|
+
CellMeasurerCache.prototype.getKey = function (index) {
|
|
22
|
+
return this.createCacheKey(index);
|
|
23
|
+
};
|
|
24
|
+
CellMeasurerCache.prototype.itemSize = function (index) {
|
|
25
|
+
var cachedHeight = this.cellHeightCache[this.createCacheKey(index)];
|
|
26
|
+
return cachedHeight !== null && cachedHeight !== void 0 ? cachedHeight : this.defaultHeight;
|
|
27
|
+
};
|
|
28
|
+
return CellMeasurerCache;
|
|
29
|
+
}());
|
|
30
|
+
export { CellMeasurerCache };
|
|
31
|
+
//# sourceMappingURL=CellMeasurerCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CellMeasurerCache.js","sourceRoot":"","sources":["../../../src/core/VirtualizedFlatList/CellMeasurerCache.ts"],"names":[],"mappings":"AAIA;IAII,2BAAY,OAAiC;QACzC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;IAC9B,CAAC;IAEO,0CAAc,GAAtB,UAAuB,KAAa;QAChC,OAAO,cAAO,KAAK,CAAE,CAAC;IAC1B,CAAC;IAED,oCAAQ,GAAR;QACI,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;IAC9B,CAAC;IAED,+BAAG,GAAH,UAAI,KAAa;QACb,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,KAAK,SAAS,CAAC;IAC1E,CAAC;IAED,+BAAG,GAAH,UAAI,MAAc,EAAE,KAAa;QAC7B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC;IAC9D,CAAC;IAED,iCAAK,GAAL,UAAM,KAAa;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,kCAAM,GAAN,UAAO,KAAa;QAChB,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,oCAAQ,GAAR,UAAS,KAAa;QAClB,IAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,OAAO,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,IAAI,CAAC,aAAa,CAAC;IAC9C,CAAC;IACL,wBAAC;AAAD,CAAC,AArCD,IAqCC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { FooterData, Measure } from "./type";
|
|
3
|
+
interface Props extends FooterData {
|
|
4
|
+
style: React.CSSProperties;
|
|
5
|
+
measure: Measure;
|
|
6
|
+
}
|
|
7
|
+
export declare const Footer: React.ForwardRefExoticComponent<Props & React.RefAttributes<HTMLDivElement>>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import React from "react";
|
|
13
|
+
import { Spin } from "../Spin";
|
|
14
|
+
export var Footer = React.forwardRef(function (props, ref) {
|
|
15
|
+
var loading = props.loading, ended = props.ended, loadingMessage = props.loadingMessage, endMessage = props.endMessage, style = props.style, measure = props.measure;
|
|
16
|
+
var measureRef = React.useRef(measure);
|
|
17
|
+
measureRef.current = measure;
|
|
18
|
+
React.useEffect(function () {
|
|
19
|
+
measureRef.current();
|
|
20
|
+
}, [loading, loadingMessage, endMessage, ended]);
|
|
21
|
+
return (React.createElement("div", { style: __assign({}, style), ref: ref, className: "g-flat-list-footer" },
|
|
22
|
+
loading && (React.createElement("div", null,
|
|
23
|
+
React.createElement(Spin, { spinning: true, size: "small" }),
|
|
24
|
+
React.createElement("div", null, loadingMessage !== null && loadingMessage !== void 0 ? loadingMessage : "loading..."))),
|
|
25
|
+
ended && !loading && (endMessage !== null && endMessage !== void 0 ? endMessage : "All data loaded")));
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=Footer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Footer.js","sourceRoot":"","sources":["../../../src/core/VirtualizedFlatList/Footer.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,IAAI,EAAC,MAAM,SAAS,CAAC;AAQ7B,MAAM,CAAC,IAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAwB,UAAC,KAAK,EAAE,GAAG;IAC9D,IAAA,OAAO,GAAuD,KAAK,QAA5D,EAAE,KAAK,GAAgD,KAAK,MAArD,EAAE,cAAc,GAAgC,KAAK,eAArC,EAAE,UAAU,GAAoB,KAAK,WAAzB,EAAE,KAAK,GAAa,KAAK,MAAlB,EAAE,OAAO,GAAI,KAAK,QAAT,CAAU;IAC3E,IAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;IAE7B,KAAK,CAAC,SAAS,CAAC;QACZ,UAAU,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;IAEjD,OAAO,CACH,6BAAK,KAAK,eAAM,KAAK,GAAG,GAAG,EAAE,GAAG,EAAE,SAAS,EAAC,oBAAoB;QAC3D,OAAO,IAAI,CACR;YACI,oBAAC,IAAI,IAAC,QAAQ,QAAC,IAAI,EAAC,OAAO,GAAG;YAC9B,iCAAM,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,YAAY,CAAO,CACzC,CACT;QACA,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,iBAAiB,CAAC,CACrD,CACT,CAAC;AACN,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
import React from "react";
|
|
13
|
+
import { CellMeasurer } from "./CellMeasurer";
|
|
14
|
+
import { Footer } from "./Footer";
|
|
15
|
+
var ItemRendererWrapper = React.forwardRef(function (props, ref) {
|
|
16
|
+
var style = props.style, data = props.data, index = props.index, measure = props.measure, Item = props.itemRenderer;
|
|
17
|
+
var measureRef = React.useRef(measure);
|
|
18
|
+
measureRef.current = measure;
|
|
19
|
+
React.useEffect(function () {
|
|
20
|
+
measureRef.current();
|
|
21
|
+
}, [data]);
|
|
22
|
+
return (React.createElement("div", { style: style, ref: ref, className: "g-flat-list-item-wrapper" },
|
|
23
|
+
React.createElement(Item, { data: data, index: index, measure: measure })));
|
|
24
|
+
});
|
|
25
|
+
export var ListItem = function (props) {
|
|
26
|
+
var data = props.data, index = props.index, style = props.style;
|
|
27
|
+
var cache = data.cache, parent = data.parent, rawData = data.data, itemRenderer = data.itemRenderer, gap = data.gap;
|
|
28
|
+
var padding = React.useMemo(function () {
|
|
29
|
+
return gap ? { paddingLeft: gap.left, paddingRight: gap.right, paddingBottom: gap.bottom, paddingTop: gap.top } : {};
|
|
30
|
+
}, [gap]);
|
|
31
|
+
return (React.createElement(CellMeasurer, { cache: cache, rowIndex: index, parent: parent }, function (_a) {
|
|
32
|
+
var registerChild = _a.registerChild, measure = _a.measure;
|
|
33
|
+
var data = rawData[index];
|
|
34
|
+
if (index === rawData.length - 1) {
|
|
35
|
+
var _b = data, loading = _b.loading, loadingMessage = _b.loadingMessage, endMessage = _b.endMessage, ended = _b.ended;
|
|
36
|
+
return React.createElement(Footer, { ref: registerChild, loading: loading, ended: ended, loadingMessage: loadingMessage, endMessage: endMessage, style: style, measure: measure });
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
return (React.createElement(ItemRendererWrapper, { ref: registerChild, style: __assign(__assign({}, style), padding), data: rawData[index], index: index, itemRenderer: itemRenderer, measure: measure }));
|
|
40
|
+
}
|
|
41
|
+
}));
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=ListItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ListItem.js","sourceRoot":"","sources":["../../../src/core/VirtualizedFlatList/ListItem.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Spin } from "../Spin";
|
|
3
|
+
export var Loading = function (props) {
|
|
4
|
+
var loading = props.loading, message = props.message;
|
|
5
|
+
return (React.createElement("div", { className: "g-flat-list-loading" },
|
|
6
|
+
React.createElement("div", null,
|
|
7
|
+
React.createElement(Spin, { spinning: loading, size: "small" }), message !== null && message !== void 0 ? message : "Release to refresh")));
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=Loading.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Loading.js","sourceRoot":"","sources":["../../../src/core/VirtualizedFlatList/Loading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,IAAI,EAAC,MAAM,SAAS,CAAC;AAO7B,MAAM,CAAC,IAAM,OAAO,GAAG,UAAC,KAAY;IACzB,IAAA,OAAO,GAAa,KAAK,QAAlB,EAAE,OAAO,GAAI,KAAK,QAAT,CAAU;IAEjC,OAAO,CACH,6BAAK,SAAS,EAAC,qBAAqB;QAChC;YACI,oBAAC,IAAI,IAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAC,OAAO,GAAG,EACvC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,oBAAoB,CAC9B,CACJ,CACT,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { ItemRenderer } from "./type";
|
|
3
|
+
import "./index.less";
|
|
4
|
+
export interface Props<T> {
|
|
5
|
+
data: T[];
|
|
6
|
+
renderItem: ItemRenderer<T>;
|
|
7
|
+
loading?: boolean;
|
|
8
|
+
className?: string;
|
|
9
|
+
style?: React.CSSProperties;
|
|
10
|
+
onPullUpLoading?: () => void;
|
|
11
|
+
onPullDownRefresh?: () => void;
|
|
12
|
+
autoLoad?: boolean | number;
|
|
13
|
+
emptyPlaceholder?: string | React.ReactElement;
|
|
14
|
+
contentStyle?: React.CSSProperties;
|
|
15
|
+
gap?: {
|
|
16
|
+
top?: number;
|
|
17
|
+
bottom?: number;
|
|
18
|
+
left?: number;
|
|
19
|
+
right?: number;
|
|
20
|
+
};
|
|
21
|
+
bounceEffect?: boolean;
|
|
22
|
+
pullUpLoadingMessage?: string;
|
|
23
|
+
endOfListMessage?: string;
|
|
24
|
+
pullDownRefreshMessage?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* VirtualizedFlatList currently only work with item without and size related animation and transition since it break the layout. This will be improve in the future
|
|
28
|
+
*/
|
|
29
|
+
export declare function VirtualizedFlatList<T>(props: Props<T>): JSX.Element;
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __read = (this && this.__read) || function (o, n) {
|
|
13
|
+
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
14
|
+
if (!m) return o;
|
|
15
|
+
var i = m.call(o), r, ar = [], e;
|
|
16
|
+
try {
|
|
17
|
+
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
18
|
+
}
|
|
19
|
+
catch (error) { e = { error: error }; }
|
|
20
|
+
finally {
|
|
21
|
+
try {
|
|
22
|
+
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
23
|
+
}
|
|
24
|
+
finally { if (e) throw e.error; }
|
|
25
|
+
}
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
29
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
30
|
+
if (ar || !(i in from)) {
|
|
31
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
32
|
+
ar[i] = from[i];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
36
|
+
};
|
|
37
|
+
import React from "react";
|
|
38
|
+
import { VariableSizeList } from "react-window";
|
|
39
|
+
import AutoSizer from "react-virtualized-auto-sizer";
|
|
40
|
+
import { Direction, useSwipe } from "../../hooks/useSwipe";
|
|
41
|
+
import { useTransform } from "../../hooks/useTransform";
|
|
42
|
+
import { useLoadingWithDelay } from "./useLoadingWithDelay";
|
|
43
|
+
import { ListItem } from "./ListItem";
|
|
44
|
+
import { Loading } from "./Loading";
|
|
45
|
+
import { CellMeasurerCache } from "./CellMeasurerCache";
|
|
46
|
+
import "./index.less";
|
|
47
|
+
var LOADING_THRESHOLD = 50;
|
|
48
|
+
/**
|
|
49
|
+
* VirtualizedFlatList currently only work with item without and size related animation and transition since it break the layout. This will be improve in the future
|
|
50
|
+
*/
|
|
51
|
+
export function VirtualizedFlatList(props) {
|
|
52
|
+
var data = props.data, renderItem = props.renderItem, _a = props.loading, loading = _a === void 0 ? false : _a, className = props.className, style = props.style, onPullDownRefresh = props.onPullDownRefresh, onPullUpLoading = props.onPullUpLoading, emptyPlaceholder = props.emptyPlaceholder, contentStyle = props.contentStyle, gap = props.gap, _b = props.autoLoad, autoLoad = _b === void 0 ? true : _b, _c = props.bounceEffect, bounceEffect = _c === void 0 ? true : _c, pullUpLoadingMessage = props.pullUpLoadingMessage, endOfListMessage = props.endOfListMessage, pullDownRefreshMessage = props.pullDownRefreshMessage;
|
|
53
|
+
var _d = __read(React.useState(null), 2), outBounded = _d[0], setOutBounded = _d[1];
|
|
54
|
+
var _e = __read(React.useState(null), 2), loadingType = _e[0], setLoadingType = _e[1];
|
|
55
|
+
var listRef = React.useRef(null);
|
|
56
|
+
var outerRef = React.useRef(null);
|
|
57
|
+
var innerContainerRef = React.useRef(null);
|
|
58
|
+
var startOffsetRef = React.useRef(0);
|
|
59
|
+
var loadingTypeRef = React.useRef(null);
|
|
60
|
+
loadingTypeRef.current = loadingType;
|
|
61
|
+
var transit = useTransform(innerContainerRef);
|
|
62
|
+
var loadingWithDelay = useLoadingWithDelay(loading, 300);
|
|
63
|
+
var cache = React.useMemo(function () { return new CellMeasurerCache({ defaultHeight: 100 }); }, []);
|
|
64
|
+
var isScrollTop = function () {
|
|
65
|
+
var _a;
|
|
66
|
+
return ((_a = outerRef.current) === null || _a === void 0 ? void 0 : _a.scrollTop) === 0;
|
|
67
|
+
};
|
|
68
|
+
var isScrollBottom = function () {
|
|
69
|
+
var element = outerRef.current;
|
|
70
|
+
if (element) {
|
|
71
|
+
var scrollHeight = element.scrollHeight, scrollTop = element.scrollTop, clientHeight = element.clientHeight;
|
|
72
|
+
return Math.ceil(scrollTop) + clientHeight >= scrollHeight;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
var clearSwipe = React.useCallback(function () {
|
|
79
|
+
startOffsetRef.current = 0;
|
|
80
|
+
setOutBounded(null);
|
|
81
|
+
}, []);
|
|
82
|
+
// Limited the offset in a range, it prevent over swipe the list
|
|
83
|
+
var getOutOfBoundOffset = function (y) {
|
|
84
|
+
var offset = y - startOffsetRef.current;
|
|
85
|
+
if (outBounded === "upper") {
|
|
86
|
+
return offset < 0 ? null : offset;
|
|
87
|
+
}
|
|
88
|
+
else if (outBounded === "lower") {
|
|
89
|
+
return offset > 0 ? null : offset;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
var onAutoLoad = function (props) {
|
|
96
|
+
if (autoLoad) {
|
|
97
|
+
var overscanStopIndex = props.overscanStopIndex;
|
|
98
|
+
if (overscanStopIndex > data.length - 2 - (typeof autoLoad === "number" ? autoLoad : 3) && !loading && onPullUpLoading) {
|
|
99
|
+
setLoadingType("loading");
|
|
100
|
+
onPullUpLoading();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
var newData = __spreadArray(__spreadArray([], __read(data), false), [
|
|
105
|
+
{ loading: loadingWithDelay && loadingType === "loading", ended: !onPullUpLoading, endMessage: endOfListMessage, loadingMessage: pullUpLoadingMessage },
|
|
106
|
+
], false);
|
|
107
|
+
var listDataItem = { data: newData, cache: cache, parent: listRef, itemRenderer: renderItem, gap: gap };
|
|
108
|
+
var handlers = useSwipe({
|
|
109
|
+
onStart: function (_a) {
|
|
110
|
+
var _b = __read(_a.delta, 2), y = _b[1], direction = _a.direction;
|
|
111
|
+
startOffsetRef.current = y;
|
|
112
|
+
setOutBounded(direction === Direction.DOWN ? "upper" : "lower");
|
|
113
|
+
},
|
|
114
|
+
onMove: function (_a) {
|
|
115
|
+
var _b = __read(_a.delta, 2), y = _b[1], cancel = _a.cancel;
|
|
116
|
+
var offset = getOutOfBoundOffset(y);
|
|
117
|
+
if (!offset) {
|
|
118
|
+
// if
|
|
119
|
+
cancel();
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
transit.to({
|
|
123
|
+
y: offset,
|
|
124
|
+
immediate: true,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
onEnd: function (state) {
|
|
129
|
+
if (loadingWithDelay) {
|
|
130
|
+
if (outBounded === "upper") {
|
|
131
|
+
transit.to({
|
|
132
|
+
y: LOADING_THRESHOLD,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
transit.clear();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
if (outBounded && Math.abs(startOffsetRef.current - state.delta[1]) >= LOADING_THRESHOLD) {
|
|
141
|
+
outBounded === "upper" ? onPullDownRefresh === null || onPullDownRefresh === void 0 ? void 0 : onPullDownRefresh() : onPullUpLoading === null || onPullUpLoading === void 0 ? void 0 : onPullUpLoading();
|
|
142
|
+
setLoadingType(outBounded === "upper" ? "refresh" : "loading");
|
|
143
|
+
}
|
|
144
|
+
transit.clear();
|
|
145
|
+
}
|
|
146
|
+
clearSwipe();
|
|
147
|
+
},
|
|
148
|
+
onCancel: function () {
|
|
149
|
+
transit.clear();
|
|
150
|
+
clearSwipe();
|
|
151
|
+
},
|
|
152
|
+
}, {
|
|
153
|
+
threshold: function (_a) {
|
|
154
|
+
var direction = _a.direction;
|
|
155
|
+
return (direction === Direction.DOWN && isScrollTop()) || (direction === Direction.UP && isScrollBottom());
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
React.useEffect(function () {
|
|
159
|
+
var _a;
|
|
160
|
+
(_a = listRef.current) === null || _a === void 0 ? void 0 : _a.resetAfterIndex(0);
|
|
161
|
+
}, [data]);
|
|
162
|
+
React.useEffect(function () {
|
|
163
|
+
if (loadingWithDelay) {
|
|
164
|
+
if (loadingTypeRef.current === "refresh") {
|
|
165
|
+
transit.to({
|
|
166
|
+
y: LOADING_THRESHOLD,
|
|
167
|
+
immediate: false,
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
transit.clear();
|
|
173
|
+
setLoadingType(null);
|
|
174
|
+
}
|
|
175
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- transit
|
|
176
|
+
}, [loadingWithDelay]);
|
|
177
|
+
return (React.createElement("div", __assign({ className: "g-flat-list-wrapper ".concat(className !== null && className !== void 0 ? className : ""), style: style }, (bounceEffect ? handlers : {})),
|
|
178
|
+
React.createElement("div", { className: "inner-container".concat(outBounded ? " out-bounded" : ""), ref: innerContainerRef, style: contentStyle },
|
|
179
|
+
React.createElement(Loading, { loading: loadingWithDelay && loadingType === "refresh", message: pullDownRefreshMessage }),
|
|
180
|
+
data.length !== 0 ? (React.createElement(AutoSizer, null, function (size) { return (React.createElement(VariableSizeList, { height: size.height, width: size.width, itemCount: listDataItem.data.length, itemSize: cache.itemSize.bind(cache), ref: listRef, outerRef: outerRef, itemData: listDataItem, onItemsRendered: onAutoLoad, onScroll: clearSwipe }, ListItem)); })) : (emptyPlaceholder))));
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/VirtualizedFlatList/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
.g-flat-list-wrapper {
|
|
2
|
+
flex: 1;
|
|
3
|
+
overflow: hidden;
|
|
4
|
+
position: relative;
|
|
5
|
+
display: flex;
|
|
6
|
+
flex-flow: column;
|
|
7
|
+
will-change: contents;
|
|
8
|
+
|
|
9
|
+
.inner-container {
|
|
10
|
+
flex: 1;
|
|
11
|
+
transition: all 300ms cubic-bezier(0, 0.61, 0.28, 1.22);
|
|
12
|
+
|
|
13
|
+
&.out-bounded {
|
|
14
|
+
> div:nth-child(2) > div:nth-child(1) {
|
|
15
|
+
overflow: hidden !important;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.g-flat-list-loading {
|
|
21
|
+
width: 100%;
|
|
22
|
+
padding: 8px;
|
|
23
|
+
display: flex;
|
|
24
|
+
justify-content: center;
|
|
25
|
+
align-items: center;
|
|
26
|
+
position: fixed;
|
|
27
|
+
left: 0;
|
|
28
|
+
min-height: 50px;
|
|
29
|
+
will-change: transform;
|
|
30
|
+
transform: translateY(-100%);
|
|
31
|
+
z-index: 2;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.g-flat-list-footer {
|
|
35
|
+
width: 100%;
|
|
36
|
+
display: flex;
|
|
37
|
+
flex-flow: row nowrap;
|
|
38
|
+
justify-content: center;
|
|
39
|
+
align-items: center;
|
|
40
|
+
padding: 5px;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.g-flat-list-loading,
|
|
44
|
+
.g-flat-list-footer {
|
|
45
|
+
> div {
|
|
46
|
+
position: relative;
|
|
47
|
+
|
|
48
|
+
.ant-spin {
|
|
49
|
+
position: absolute;
|
|
50
|
+
left: 0;
|
|
51
|
+
transform: translateX(-150%);
|
|
52
|
+
|
|
53
|
+
.anticon.ant-spin-dot {
|
|
54
|
+
font-size: 14px;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { VariableSizeList } from "react-window";
|
|
3
|
+
import type { CellMeasurerCache } from "./CellMeasurerCache";
|
|
4
|
+
export declare type Measure = () => void;
|
|
5
|
+
export interface VirtualizedFlatListItemProps<T> {
|
|
6
|
+
data: T;
|
|
7
|
+
index: number;
|
|
8
|
+
measure: Measure;
|
|
9
|
+
}
|
|
10
|
+
export declare type ItemRenderer<T> = React.ComponentType<VirtualizedFlatListItemProps<T>>;
|
|
11
|
+
export interface ListItemGap {
|
|
12
|
+
top?: number;
|
|
13
|
+
bottom?: number;
|
|
14
|
+
left?: number;
|
|
15
|
+
right?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface FooterData {
|
|
18
|
+
loading: boolean;
|
|
19
|
+
ended: boolean;
|
|
20
|
+
loadingMessage?: string;
|
|
21
|
+
endMessage?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface ListItemData<T> {
|
|
24
|
+
data: (T | FooterData)[];
|
|
25
|
+
cache: CellMeasurerCache;
|
|
26
|
+
parent: React.RefObject<VariableSizeList>;
|
|
27
|
+
itemRenderer: ItemRenderer<T>;
|
|
28
|
+
gap?: ListItemGap;
|
|
29
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../../src/core/VirtualizedFlatList/type.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useLoadingWithDelay: (loading: boolean, delay: number) => Readonly<boolean>;
|
|
@@ -0,0 +1,51 @@
|
|
|
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
|
+
export var useLoadingWithDelay = function (loading, delay) {
|
|
19
|
+
var _a = __read(React.useState(loading), 2), loadingWithDelay = _a[0], setLoadingWithDelay = _a[1];
|
|
20
|
+
var startTimeRef = React.useRef(null);
|
|
21
|
+
var setLoadingRef = React.useRef(function () { });
|
|
22
|
+
var setLoading = React.useCallback(function (value) {
|
|
23
|
+
if (value) {
|
|
24
|
+
setLoadingWithDelay(true);
|
|
25
|
+
startTimeRef.current = Date.now();
|
|
26
|
+
setTimeout(function () { return (startTimeRef.current = null); }, delay);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
if (startTimeRef.current) {
|
|
30
|
+
setTimeout(function () { return setLoadingWithDelay(false); }, Math.abs(delay - (Date.now() - startTimeRef.current)));
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
setLoadingWithDelay(value);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}, [delay]);
|
|
37
|
+
setLoadingRef.current = setLoading;
|
|
38
|
+
React.useEffect(function () {
|
|
39
|
+
setLoadingRef.current(loading);
|
|
40
|
+
}, [loading]);
|
|
41
|
+
React.useEffect(function () {
|
|
42
|
+
if (loadingWithDelay) {
|
|
43
|
+
startTimeRef.current = Date.now();
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
startTimeRef.current = null;
|
|
47
|
+
}
|
|
48
|
+
}, [loadingWithDelay]);
|
|
49
|
+
return loadingWithDelay;
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=useLoadingWithDelay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLoadingWithDelay.js","sourceRoot":"","sources":["../../../src/core/VirtualizedFlatList/useLoadingWithDelay.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,IAAM,mBAAmB,GAAG,UAAC,OAAgB,EAAE,KAAa;IACzD,IAAA,KAAA,OAA0C,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAA,EAAhE,gBAAgB,QAAA,EAAE,mBAAmB,QAA2B,CAAC;IACxE,IAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAgB,IAAI,CAAC,CAAC;IACvD,IAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAA2B,cAAO,CAAC,CAAC,CAAC;IAEvE,IAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAChC,UAAC,KAAc;QACX,IAAI,KAAK,EAAE;YACP,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAC1B,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAClC,UAAU,CAAC,cAAM,OAAA,CAAC,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,EAA7B,CAA6B,EAAE,KAAK,CAAC,CAAC;SAC1D;aAAM;YACH,IAAI,YAAY,CAAC,OAAO,EAAE;gBACtB,UAAU,CAAC,cAAM,OAAA,mBAAmB,CAAC,KAAK,CAAC,EAA1B,CAA0B,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aACvG;iBAAM;gBACH,mBAAmB,CAAC,KAAK,CAAC,CAAC;aAC9B;SACJ;IACL,CAAC,EACD,CAAC,KAAK,CAAC,CACV,CAAC;IAEF,aAAa,CAAC,OAAO,GAAG,UAAU,CAAC;IAEnC,KAAK,CAAC,SAAS,CAAC;QACZ,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,KAAK,CAAC,SAAS,CAAC;QACZ,IAAI,gBAAgB,EAAE;YAClB,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;SACrC;aAAM;YACH,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC;SAC/B;IACL,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB,OAAO,gBAAgB,CAAC;AAC5B,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { SwipeHookConfig, SwipeHookHandlers, SwipeHookResult } from "./type";
|
|
2
|
+
export declare class Controller {
|
|
3
|
+
private startTime;
|
|
4
|
+
private startTouch;
|
|
5
|
+
private started;
|
|
6
|
+
private handlers;
|
|
7
|
+
private config;
|
|
8
|
+
constructor();
|
|
9
|
+
private onTouchStart;
|
|
10
|
+
private onTouchMove;
|
|
11
|
+
private onTouchEnd;
|
|
12
|
+
private onTouchCancel;
|
|
13
|
+
private testThreshold;
|
|
14
|
+
private cancel;
|
|
15
|
+
private computeEvent;
|
|
16
|
+
private matchTouches;
|
|
17
|
+
private reset;
|
|
18
|
+
update(handlers: SwipeHookHandlers, config?: SwipeHookConfig): void;
|
|
19
|
+
createHandlers(): SwipeHookResult;
|
|
20
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { SwipeUtil } from "../../util/SwipeUtil";
|
|
2
|
+
var SWIPE_START_THRESHOLD = 10;
|
|
3
|
+
var Controller = /** @class */ (function () {
|
|
4
|
+
function Controller() {
|
|
5
|
+
this.startTime = 0;
|
|
6
|
+
this.startTouch = null;
|
|
7
|
+
this.started = false;
|
|
8
|
+
this.handlers = {};
|
|
9
|
+
this.config = {};
|
|
10
|
+
}
|
|
11
|
+
Controller.prototype.onTouchStart = function (e) {
|
|
12
|
+
if (e.changedTouches[0] && !this.startTouch) {
|
|
13
|
+
this.startTouch = e.changedTouches[0];
|
|
14
|
+
this.startTime = Date.now();
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
Controller.prototype.onTouchMove = function (e) {
|
|
18
|
+
var _a, _b, _c, _d;
|
|
19
|
+
var matchedTouches = this.matchTouches(e);
|
|
20
|
+
if (!matchedTouches) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
var state = this.computeEvent(matchedTouches.start, matchedTouches.changed, e);
|
|
24
|
+
if (!this.started && this.testThreshold(state)) {
|
|
25
|
+
this.started = true;
|
|
26
|
+
(_b = (_a = this.handlers).onStart) === null || _b === void 0 ? void 0 : _b.call(_a, state);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
else if (this.started) {
|
|
30
|
+
(_d = (_c = this.handlers).onMove) === null || _d === void 0 ? void 0 : _d.call(_c, state);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
Controller.prototype.onTouchEnd = function (e) {
|
|
34
|
+
var _a, _b;
|
|
35
|
+
if (!this.started) {
|
|
36
|
+
this.reset();
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
var matchedTouches = this.matchTouches(e);
|
|
40
|
+
if (!matchedTouches) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
var state = this.computeEvent(matchedTouches.start, matchedTouches.changed, e);
|
|
44
|
+
(_b = (_a = this.handlers).onEnd) === null || _b === void 0 ? void 0 : _b.call(_a, state);
|
|
45
|
+
this.reset();
|
|
46
|
+
};
|
|
47
|
+
Controller.prototype.onTouchCancel = function (e) {
|
|
48
|
+
var _a, _b;
|
|
49
|
+
if (!this.started) {
|
|
50
|
+
this.reset();
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
var matchedTouches = this.matchTouches(e);
|
|
54
|
+
if (!matchedTouches) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
var state = this.computeEvent(matchedTouches.start, matchedTouches.changed, e);
|
|
58
|
+
(_b = (_a = this.handlers).onCancel) === null || _b === void 0 ? void 0 : _b.call(_a, state);
|
|
59
|
+
this.reset();
|
|
60
|
+
};
|
|
61
|
+
Controller.prototype.testThreshold = function (state) {
|
|
62
|
+
var _a, _b, _c;
|
|
63
|
+
return state.displacement > SWIPE_START_THRESHOLD && ((_c = (_b = (_a = this.config).threshold) === null || _b === void 0 ? void 0 : _b.call(_a, state)) !== null && _c !== void 0 ? _c : true);
|
|
64
|
+
};
|
|
65
|
+
Controller.prototype.cancel = function (event) {
|
|
66
|
+
if (this.startTouch) {
|
|
67
|
+
this.onTouchCancel(event);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
Controller.prototype.computeEvent = function (start, changed, event) {
|
|
71
|
+
var _this = this;
|
|
72
|
+
var s = [start.clientX, start.clientY];
|
|
73
|
+
var e = [changed.clientX, changed.clientY];
|
|
74
|
+
var delta = [e[0] - s[0], e[1] - s[1]];
|
|
75
|
+
var timeElapsed = Date.now() - this.startTime;
|
|
76
|
+
return {
|
|
77
|
+
clientX: changed.clientX,
|
|
78
|
+
clientY: changed.clientY,
|
|
79
|
+
startTouch: start,
|
|
80
|
+
delta: delta,
|
|
81
|
+
direction: SwipeUtil.getDirection(s, e),
|
|
82
|
+
displacement: SwipeUtil.getDisplacement(s, e),
|
|
83
|
+
// TODO/Alvis, need to improve velocity calculation
|
|
84
|
+
velocity: [Math.abs(delta[0]) / timeElapsed, Math.abs(delta[1]) / timeElapsed],
|
|
85
|
+
syntheticEvent: event,
|
|
86
|
+
cancel: (function () { return _this.cancel(event); }).bind(this),
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
Controller.prototype.matchTouches = function (e) {
|
|
90
|
+
var _this = this;
|
|
91
|
+
if (!this.startTouch) {
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
var touch = Array.from(e.changedTouches).find(function (_) { return _.identifier === _this.startTouch.identifier; });
|
|
95
|
+
if (!touch) {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
return {
|
|
100
|
+
start: this.startTouch,
|
|
101
|
+
changed: touch,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
Controller.prototype.reset = function () {
|
|
106
|
+
this.startTime = 0;
|
|
107
|
+
this.startTouch = null;
|
|
108
|
+
this.started = false;
|
|
109
|
+
};
|
|
110
|
+
Controller.prototype.update = function (handlers, config) {
|
|
111
|
+
if (config === void 0) { config = {}; }
|
|
112
|
+
this.handlers = handlers;
|
|
113
|
+
this.config = config;
|
|
114
|
+
};
|
|
115
|
+
Controller.prototype.createHandlers = function () {
|
|
116
|
+
return {
|
|
117
|
+
onTouchStart: this.onTouchStart.bind(this),
|
|
118
|
+
onTouchMove: this.onTouchMove.bind(this),
|
|
119
|
+
onTouchEnd: this.onTouchEnd.bind(this),
|
|
120
|
+
onTouchCancel: this.onTouchCancel.bind(this),
|
|
121
|
+
};
|
|
122
|
+
};
|
|
123
|
+
return Controller;
|
|
124
|
+
}());
|
|
125
|
+
export { Controller };
|
|
126
|
+
//# sourceMappingURL=controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../src/hooks/useSwipe/controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Controller } from "./controller";
|
|
3
|
+
export var useSwipe = function (handlers, config) {
|
|
4
|
+
var controller = React.useMemo(function () { return new Controller(); }, []);
|
|
5
|
+
controller.update(handlers, config);
|
|
6
|
+
return controller.createHandlers.apply(controller);
|
|
7
|
+
};
|
|
8
|
+
export * from "./type";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/useSwipe/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAGxC,MAAM,CAAC,IAAM,QAAQ,GAAG,UAAC,QAA2B,EAAE,MAAwB;IAC1E,IAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,cAAM,OAAA,IAAI,UAAU,EAAE,EAAhB,CAAgB,EAAE,EAAE,CAAC,CAAC;IAC7D,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpC,OAAO,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,cAAc,QAAQ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
export declare type TouchHandlers = Pick<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "onTouchStart" | "onTouchMove" | "onTouchEndCapture" | "onTouchCancelCapture">;
|
|
3
|
+
export interface SwipeHookResult {
|
|
4
|
+
onTouchMove: React.TouchEventHandler;
|
|
5
|
+
onTouchStart: React.TouchEventHandler;
|
|
6
|
+
onTouchEnd: React.TouchEventHandler;
|
|
7
|
+
onTouchCancel: React.TouchEventHandler;
|
|
8
|
+
}
|
|
9
|
+
export interface SwipeState {
|
|
10
|
+
syntheticEvent: React.TouchEvent;
|
|
11
|
+
startTouch: React.Touch;
|
|
12
|
+
clientX: number;
|
|
13
|
+
clientY: number;
|
|
14
|
+
displacement: number;
|
|
15
|
+
delta: Vector2;
|
|
16
|
+
velocity: Vector2;
|
|
17
|
+
direction: Direction;
|
|
18
|
+
cancel: () => void;
|
|
19
|
+
}
|
|
20
|
+
declare type SwipeHookHandler = (event: SwipeState) => void;
|
|
21
|
+
export interface SwipeHookHandlers {
|
|
22
|
+
onStart?: SwipeHookHandler;
|
|
23
|
+
onEnd?: SwipeHookHandler;
|
|
24
|
+
onMove?: SwipeHookHandler;
|
|
25
|
+
onCancel?: SwipeHookHandler;
|
|
26
|
+
}
|
|
27
|
+
export interface SwipeHookConfig {
|
|
28
|
+
threshold?: (state: SwipeState) => boolean;
|
|
29
|
+
preventDefault?: boolean;
|
|
30
|
+
}
|
|
31
|
+
export declare enum Direction {
|
|
32
|
+
UP = "UP",
|
|
33
|
+
DOWN = "DOWN",
|
|
34
|
+
LEFT = "LEFT",
|
|
35
|
+
RIGHT = "RIGHT"
|
|
36
|
+
}
|
|
37
|
+
export declare type Vector2 = [number, number];
|
|
38
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../../src/hooks/useSwipe/type.ts"],"names":[],"mappings":"AAqCA,MAAM,CAAN,IAAY,SAKX;AALD,WAAY,SAAS;IACjB,sBAAS,CAAA;IACT,0BAAa,CAAA;IACb,0BAAa,CAAA;IACb,4BAAe,CAAA;AACnB,CAAC,EALW,SAAS,KAAT,SAAS,QAKpB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface TransitionOption {
|
|
3
|
+
property?: string;
|
|
4
|
+
duration?: number;
|
|
5
|
+
delay?: number;
|
|
6
|
+
timingFunction?: string;
|
|
7
|
+
}
|
|
8
|
+
interface Option extends TransitionOption {
|
|
9
|
+
x?: number;
|
|
10
|
+
y?: number;
|
|
11
|
+
z?: number;
|
|
12
|
+
immediate?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare const useTransform: (ref: React.RefObject<HTMLElement>, option?: Option | undefined) => {
|
|
15
|
+
to: (option: Option) => void;
|
|
16
|
+
clear: () => void;
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export var useTransform = function (ref, option) {
|
|
3
|
+
var optionRef = React.useRef(option);
|
|
4
|
+
optionRef.current = option;
|
|
5
|
+
var clearTransition = React.useCallback(function (el) {
|
|
6
|
+
el.style.transitionDuration = "";
|
|
7
|
+
el.style.transitionProperty = "";
|
|
8
|
+
el.style.transitionTimingFunction = "";
|
|
9
|
+
el.style.transitionDuration = "";
|
|
10
|
+
}, []);
|
|
11
|
+
var setTransition = React.useCallback(function (el) {
|
|
12
|
+
if (optionRef.current) {
|
|
13
|
+
var _a = optionRef.current, delay = _a.delay, duration = _a.duration, property = _a.property, timingFunction = _a.timingFunction;
|
|
14
|
+
delay && (el.style.transitionDelay = delay + "ms");
|
|
15
|
+
duration && (el.style.transitionDuration = duration + "ms");
|
|
16
|
+
property && (el.style.transitionProperty = property);
|
|
17
|
+
timingFunction && (el.style.transitionTimingFunction = timingFunction);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
clearTransition(el);
|
|
21
|
+
}
|
|
22
|
+
}, [clearTransition]);
|
|
23
|
+
var to = React.useCallback(function (option) {
|
|
24
|
+
if (ref.current) {
|
|
25
|
+
var el_1 = ref.current;
|
|
26
|
+
requestAnimationFrame(function () {
|
|
27
|
+
var _a, _b, _c;
|
|
28
|
+
el_1.style.transform = "translate3d(".concat((_a = option.x) !== null && _a !== void 0 ? _a : 0, "px, ").concat((_b = option.y) !== null && _b !== void 0 ? _b : 0, "px, ").concat((_c = option.z) !== null && _c !== void 0 ? _c : 0, "px) ");
|
|
29
|
+
option.immediate ? clearTransition(el_1) : setTransition(el_1);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}, [ref, setTransition, clearTransition]);
|
|
33
|
+
var clear = React.useCallback(function () {
|
|
34
|
+
if (ref.current) {
|
|
35
|
+
var el_2 = ref.current;
|
|
36
|
+
requestAnimationFrame(function () {
|
|
37
|
+
el_2.style.transform = "";
|
|
38
|
+
setTransition(el_2);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}, [ref, setTransition]);
|
|
42
|
+
React.useEffect(function () {
|
|
43
|
+
if (optionRef.current) {
|
|
44
|
+
to(optionRef.current);
|
|
45
|
+
}
|
|
46
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- only run on mount
|
|
47
|
+
}, []);
|
|
48
|
+
return { to: to, clear: clear };
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=useTransform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTransform.js","sourceRoot":"","sources":["../../src/hooks/useTransform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAmB1B,MAAM,CAAC,IAAM,YAAY,GAAG,UAAC,GAAiC,EAAE,MAAe;IAC3E,IAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,SAAS,CAAC,OAAO,GAAG,MAAM,CAAC;IAE3B,IAAM,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC,UAAC,EAAe;QACtD,EAAE,CAAC,KAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC;QACjC,EAAE,CAAC,KAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC;QACjC,EAAE,CAAC,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC;QACvC,EAAE,CAAC,KAAK,CAAC,kBAAkB,GAAG,EAAE,CAAC;IACrC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,IAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CACnC,UAAC,EAAe;QACZ,IAAI,SAAS,CAAC,OAAO,EAAE;YACb,IAAA,KAA8C,SAAS,CAAC,OAAO,EAA9D,KAAK,WAAA,EAAE,QAAQ,cAAA,EAAE,QAAQ,cAAA,EAAE,cAAc,oBAAqB,CAAC;YACtE,KAAK,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;YACnD,QAAQ,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,GAAG,QAAQ,GAAG,IAAI,CAAC,CAAC;YAC5D,QAAQ,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,GAAG,QAAQ,CAAC,CAAC;YACrD,cAAc,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,wBAAwB,GAAG,cAAc,CAAC,CAAC;SAC1E;aAAM;YACH,eAAe,CAAC,EAAE,CAAC,CAAC;SACvB;IACL,CAAC,EACD,CAAC,eAAe,CAAC,CACpB,CAAC;IAEF,IAAM,EAAE,GAAG,KAAK,CAAC,WAAW,CACxB,UAAC,MAAc;QACX,IAAI,GAAG,CAAC,OAAO,EAAE;YACb,IAAM,IAAE,GAAG,GAAG,CAAC,OAAO,CAAC;YACvB,qBAAqB,CAAC;;gBAClB,IAAE,CAAC,KAAK,CAAC,SAAS,GAAG,sBAAe,MAAA,MAAM,CAAC,CAAC,mCAAI,CAAC,iBAAO,MAAA,MAAM,CAAC,CAAC,mCAAI,CAAC,iBAAO,MAAA,MAAM,CAAC,CAAC,mCAAI,CAAC,SAAM,CAAC;gBAChG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,IAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAE,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;SACN;IACL,CAAC,EACD,CAAC,GAAG,EAAE,aAAa,EAAE,eAAe,CAAC,CACxC,CAAC;IAEF,IAAM,KAAK,GAAG,KAAK,CAAC,WAAW,CAAC;QAC5B,IAAI,GAAG,CAAC,OAAO,EAAE;YACb,IAAM,IAAE,GAAG,GAAG,CAAC,OAAO,CAAC;YACvB,qBAAqB,CAAC;gBAClB,IAAE,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC;gBACxB,aAAa,CAAC,IAAE,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;SACN;IACL,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;IAEzB,KAAK,CAAC,SAAS,CAAC;QACZ,IAAI,SAAS,CAAC,OAAO,EAAE;YACnB,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SACzB;QACD,4EAA4E;IAChF,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAC,EAAE,IAAA,EAAE,KAAK,OAAA,EAAC,CAAC;AACvB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pinnacle0/web-ui",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2-beta0",
|
|
4
4
|
"author": "Pinnacle",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"sideEffects": [
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
"run-script": "ts-node --project config/tsconfig.script.json",
|
|
20
20
|
"build": "yarn run-script script/build.ts",
|
|
21
21
|
"start": "yarn run-script script/start.ts",
|
|
22
|
+
"start:mobile": "yarn run-script script/start-mobile.ts",
|
|
22
23
|
"format": "yarn run-script script/format.ts",
|
|
23
24
|
"test": "jest --config config/jest.config.js"
|
|
24
25
|
},
|
|
@@ -27,7 +28,10 @@
|
|
|
27
28
|
"antd": "4.20.1",
|
|
28
29
|
"braft-editor": "2.3.9",
|
|
29
30
|
"moment": "2.29.3",
|
|
30
|
-
"react-virtual": "2.10.4"
|
|
31
|
+
"react-virtual": "2.10.4",
|
|
32
|
+
"react-virtualized": "^9.22.3",
|
|
33
|
+
"react-virtualized-auto-sizer": "^1.0.6",
|
|
34
|
+
"react-window": "^1.8.6"
|
|
31
35
|
},
|
|
32
36
|
"peerDependencies": {
|
|
33
37
|
"@babel/runtime": ">=7.12.1",
|
|
@@ -36,8 +40,8 @@
|
|
|
36
40
|
"react-router-dom": ">=5.2.0"
|
|
37
41
|
},
|
|
38
42
|
"devDependencies": {
|
|
39
|
-
"@babel/core": "7.17.
|
|
40
|
-
"@babel/runtime": "7.17.
|
|
43
|
+
"@babel/core": "7.17.9",
|
|
44
|
+
"@babel/runtime": "7.17.9",
|
|
41
45
|
"@testing-library/dom": "8.13.0",
|
|
42
46
|
"@testing-library/jest-dom": "5.16.4",
|
|
43
47
|
"@testing-library/react": "13.1.1",
|
|
@@ -47,6 +51,8 @@
|
|
|
47
51
|
"@types/react": "18.0.8",
|
|
48
52
|
"@types/react-dom": "17.0.14",
|
|
49
53
|
"@types/react-router-dom": "5.3.2",
|
|
54
|
+
"@types/react-virtualized-auto-sizer": "^1.0.1",
|
|
55
|
+
"@types/react-window": "1.8.5",
|
|
50
56
|
"less": "4.1.2",
|
|
51
57
|
"react": "18.1.0",
|
|
52
58
|
"react-dom": "18.1.0",
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Direction } from "../hooks/useSwipe";
|
|
2
|
+
declare function getDirection(start: [number, number], end: [number, number]): Direction;
|
|
3
|
+
declare function getDisplacement(start: [number, number], end: [number, number]): number;
|
|
4
|
+
export declare const SwipeUtil: Readonly<{
|
|
5
|
+
getDirection: typeof getDirection;
|
|
6
|
+
getDisplacement: typeof getDisplacement;
|
|
7
|
+
}>;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Direction } from "../hooks/useSwipe";
|
|
2
|
+
function getDirection(start, end) {
|
|
3
|
+
var vector = [end[0] - start[0], start[1] - end[1]];
|
|
4
|
+
var degree = (Math.atan2(vector[1], vector[0]) * 180) / Math.PI;
|
|
5
|
+
degree = degree < 0 ? degree + 360 : degree;
|
|
6
|
+
if ((degree >= 315 && degree < 360) || (degree >= 0 && degree < 45)) {
|
|
7
|
+
return Direction.RIGHT;
|
|
8
|
+
}
|
|
9
|
+
else if (degree >= 45 && degree < 135) {
|
|
10
|
+
return Direction.UP;
|
|
11
|
+
}
|
|
12
|
+
else if (degree >= 135 && degree < 225) {
|
|
13
|
+
return Direction.LEFT;
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
return Direction.DOWN;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function getDisplacement(start, end) {
|
|
20
|
+
return Math.sqrt(Math.pow(start[0] - end[0], 2) + Math.pow(start[1] - end[1], 2));
|
|
21
|
+
}
|
|
22
|
+
export var SwipeUtil = Object.freeze({
|
|
23
|
+
getDirection: getDirection,
|
|
24
|
+
getDisplacement: getDisplacement,
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=SwipeUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SwipeUtil.js","sourceRoot":"","sources":["../../src/util/SwipeUtil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAE5C,SAAS,YAAY,CAAC,KAAuB,EAAE,GAAqB;IAChE,IAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAChE,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IAE5C,IAAI,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE;QACjE,OAAO,SAAS,CAAC,KAAK,CAAC;KAC1B;SAAM,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,GAAG,GAAG,EAAE;QACrC,OAAO,SAAS,CAAC,EAAE,CAAC;KACvB;SAAM,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE;QACtC,OAAO,SAAS,CAAC,IAAI,CAAC;KACzB;SAAM;QACH,OAAO,SAAS,CAAC,IAAI,CAAC;KACzB;AACL,CAAC;AAED,SAAS,eAAe,CAAC,KAAuB,EAAE,GAAqB;IACnE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACtF,CAAC;AACD,MAAM,CAAC,IAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;IACnC,YAAY,cAAA;IACZ,eAAe,iBAAA;CAClB,CAAC,CAAC"}
|