napp-wallet-post-feed-test 1.0.47
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/README.md +157 -0
- package/dist/0ae4e6254fc19607c79e.woff2 +0 -0
- package/dist/1f38a564cd9eae27ebc3.woff2 +0 -0
- package/dist/432.napp.bundle.js +1 -0
- package/dist/661bd6b7245d5205d3e1.woff2 +0 -0
- package/dist/Post.browser.js +24 -0
- package/dist/Post.js +606 -0
- package/dist/components/CodeSplitting.js +88 -0
- package/dist/components/Deeplink/Deeplink.js +813 -0
- package/dist/components/EditPostModal.js +916 -0
- package/dist/components/ErrorBoundary.js +74 -0
- package/dist/components/ExpandedTest/ExpandableText.js +38 -0
- package/dist/components/FilterDropdown.js +71 -0
- package/dist/components/ImagePreloader.js +1194 -0
- package/dist/components/Loader.js +42 -0
- package/dist/components/LoadingSkeletons.js +978 -0
- package/dist/components/MediaRenderer.js +759 -0
- package/dist/components/MemoryManager.js +302 -0
- package/dist/components/PostCard.js +446 -0
- package/dist/components/PostViews.js +247 -0
- package/dist/components/Postfeed.js +251 -0
- package/dist/components/Svgloader.js +231 -0
- package/dist/components/UploadPostModal.js +1352 -0
- package/dist/components/VideoPlayer.js +1304 -0
- package/dist/components/ViewPostModal/MediaPreloadManager.js +379 -0
- package/dist/components/ViewPostModal/README.md +164 -0
- package/dist/components/ViewPostModal/ShareModal.js +96 -0
- package/dist/components/ViewPostModal/VirtualPost.js +248 -0
- package/dist/components/ViewPostModal/useBodyScrollLock.js +42 -0
- package/dist/components/ViewPostModal/useDeviceDetection.js +38 -0
- package/dist/components/ViewPostModal/useFullscreenManager.js +43 -0
- package/dist/components/ViewPostModal/useNavigationManager.js +185 -0
- package/dist/components/ViewPostModal/usePostDataManager.js +143 -0
- package/dist/components/ViewPostModal/usePreloadManager.js +97 -0
- package/dist/components/ViewPostModal/useShareManager.js +76 -0
- package/dist/components/ViewPostModal.js +552 -0
- package/dist/components/VirtualPostFeed.js +475 -0
- package/dist/components/hooks/useFeedVisibility.js +72 -0
- package/dist/components/hooks/useIntersectionObserver.js +54 -0
- package/dist/components/hooks/usePerformanceMonitor.js +159 -0
- package/dist/components/hooks/usePostApi.js +381 -0
- package/dist/components/hooks/usePostState.js +116 -0
- package/dist/components/useImagePreloading.js +231 -0
- package/dist/e7461d69dbbff1310a5c.woff2 +0 -0
- package/dist/helper/Helper.js +504 -0
- package/dist/index.browser.js +5 -0
- package/dist/index.js +3 -0
- package/dist/napp.bundle.js +2 -0
- package/dist/napp.bundle.js.LICENSE.txt +733 -0
- package/dist/style/post.css +5751 -0
- package/dist/style/post.css.map +1 -0
- package/dist/style/post.purged.css +3236 -0
- package/dist/style/post.scss +5910 -0
- package/dist/utils/bootstrap.js +4 -0
- package/dist/utils/ffmpegLoader.js +40 -0
- package/package.json +70 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
3
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
4
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
5
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
6
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
7
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
8
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
9
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
10
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
11
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
12
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
13
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
14
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
15
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
16
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
17
|
+
import useEffect from "react";
|
|
18
|
+
import useRef from "react";
|
|
19
|
+
import useCallback from "react";
|
|
20
|
+
import useState from "react";
|
|
21
|
+
export var usePerformanceMonitor = function usePerformanceMonitor(componentName) {
|
|
22
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
23
|
+
var _options$enableMemory = options.enableMemoryMonitoring,
|
|
24
|
+
enableMemoryMonitoring = _options$enableMemory === void 0 ? true : _options$enableMemory,
|
|
25
|
+
_options$enableRender = options.enableRenderTracking,
|
|
26
|
+
enableRenderTracking = _options$enableRender === void 0 ? true : _options$enableRender,
|
|
27
|
+
_options$enableScroll = options.enableScrollTracking,
|
|
28
|
+
enableScrollTracking = _options$enableScroll === void 0 ? true : _options$enableScroll,
|
|
29
|
+
_options$memoryThresh = options.memoryThreshold,
|
|
30
|
+
memoryThreshold = _options$memoryThresh === void 0 ? 100 : _options$memoryThresh,
|
|
31
|
+
_options$renderThresh = options.renderThreshold,
|
|
32
|
+
renderThreshold = _options$renderThresh === void 0 ? 16 : _options$renderThresh,
|
|
33
|
+
_options$scrollThresh = options.scrollThreshold,
|
|
34
|
+
scrollThreshold = _options$scrollThresh === void 0 ? 8 : _options$scrollThresh;
|
|
35
|
+
var _useState = useState({
|
|
36
|
+
renderCount: 0,
|
|
37
|
+
averageRenderTime: 0,
|
|
38
|
+
memoryUsage: 0,
|
|
39
|
+
scrollPerformance: 0,
|
|
40
|
+
warnings: []
|
|
41
|
+
}),
|
|
42
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
43
|
+
performanceMetrics = _useState2[0],
|
|
44
|
+
setPerformanceMetrics = _useState2[1];
|
|
45
|
+
var renderStartTime = useRef(0);
|
|
46
|
+
var renderCount = useRef(0);
|
|
47
|
+
var renderTimes = useRef([]);
|
|
48
|
+
var lastScrollTime = useRef(0);
|
|
49
|
+
|
|
50
|
+
// Track render performance
|
|
51
|
+
var trackRender = useCallback(function () {
|
|
52
|
+
if (!enableRenderTracking) return;
|
|
53
|
+
var now = performance.now();
|
|
54
|
+
if (renderStartTime.current > 0) {
|
|
55
|
+
var renderTime = now - renderStartTime.current;
|
|
56
|
+
renderTimes.current.push(renderTime);
|
|
57
|
+
|
|
58
|
+
// Keep only last 10 render times
|
|
59
|
+
if (renderTimes.current.length > 10) {
|
|
60
|
+
renderTimes.current.shift();
|
|
61
|
+
}
|
|
62
|
+
var averageRenderTime = renderTimes.current.reduce(function (a, b) {
|
|
63
|
+
return a + b;
|
|
64
|
+
}, 0) / renderTimes.current.length;
|
|
65
|
+
setPerformanceMetrics(function (prev) {
|
|
66
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
67
|
+
renderCount: renderCount.current,
|
|
68
|
+
averageRenderTime: averageRenderTime,
|
|
69
|
+
warnings: [].concat(_toConsumableArray(prev.warnings), _toConsumableArray(renderTime > renderThreshold ? ["Slow render: ".concat(renderTime.toFixed(2), "ms")] : [])).slice(-5) // Keep only last 5 warnings
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// Log slow renders in development
|
|
74
|
+
if (process.env.NODE_ENV === 'development' && renderTime > renderThreshold) {
|
|
75
|
+
// Slow render detected
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
renderStartTime.current = now;
|
|
79
|
+
renderCount.current++;
|
|
80
|
+
}, [componentName, enableRenderTracking, renderThreshold]);
|
|
81
|
+
|
|
82
|
+
// Track memory usage
|
|
83
|
+
var trackMemory = useCallback(function () {
|
|
84
|
+
if (!enableMemoryMonitoring || !('memory' in performance)) return;
|
|
85
|
+
try {
|
|
86
|
+
var memoryInfo = performance.memory;
|
|
87
|
+
var usedMB = memoryInfo.usedJSHeapSize / 1024 / 1024;
|
|
88
|
+
setPerformanceMetrics(function (prev) {
|
|
89
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
90
|
+
memoryUsage: usedMB,
|
|
91
|
+
warnings: [].concat(_toConsumableArray(prev.warnings), _toConsumableArray(usedMB > memoryThreshold ? ["High memory usage: ".concat(usedMB.toFixed(2), "MB")] : [])).slice(-5)
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
if (process.env.NODE_ENV === 'development' && usedMB > memoryThreshold) {
|
|
95
|
+
// High memory usage detected
|
|
96
|
+
}
|
|
97
|
+
} catch (error) {
|
|
98
|
+
// Silent error handling
|
|
99
|
+
}
|
|
100
|
+
}, [componentName, enableMemoryMonitoring, memoryThreshold]);
|
|
101
|
+
|
|
102
|
+
// Track scroll performance
|
|
103
|
+
var trackScroll = useCallback(function () {
|
|
104
|
+
if (!enableScrollTracking) return;
|
|
105
|
+
var now = performance.now();
|
|
106
|
+
var timeSinceLastScroll = now - lastScrollTime.current;
|
|
107
|
+
if (timeSinceLastScroll < scrollThreshold) {
|
|
108
|
+
setPerformanceMetrics(function (prev) {
|
|
109
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
110
|
+
scrollPerformance: timeSinceLastScroll,
|
|
111
|
+
warnings: [].concat(_toConsumableArray(prev.warnings), ["Slow scroll: ".concat(timeSinceLastScroll.toFixed(2), "ms")]).slice(-5)
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
lastScrollTime.current = now;
|
|
116
|
+
}, [enableScrollTracking, scrollThreshold]);
|
|
117
|
+
|
|
118
|
+
// Set up performance monitoring
|
|
119
|
+
useEffect(function () {
|
|
120
|
+
trackRender();
|
|
121
|
+
var memoryInterval = enableMemoryMonitoring ? setInterval(trackMemory, 5000) : null;
|
|
122
|
+
var scrollHandler = enableScrollTracking ? function () {
|
|
123
|
+
return requestAnimationFrame(trackScroll);
|
|
124
|
+
} : null;
|
|
125
|
+
if (scrollHandler) {
|
|
126
|
+
window.addEventListener('scroll', scrollHandler, {
|
|
127
|
+
passive: true
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
return function () {
|
|
131
|
+
if (memoryInterval) clearInterval(memoryInterval);
|
|
132
|
+
if (scrollHandler) {
|
|
133
|
+
window.removeEventListener('scroll', scrollHandler);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
}, [trackRender, trackMemory, trackScroll, enableMemoryMonitoring, enableScrollTracking]);
|
|
137
|
+
|
|
138
|
+
// Performance optimization suggestions
|
|
139
|
+
var getOptimizationSuggestions = useCallback(function () {
|
|
140
|
+
var suggestions = [];
|
|
141
|
+
if (performanceMetrics.averageRenderTime > renderThreshold) {
|
|
142
|
+
suggestions.push('Consider using React.memo or useMemo for expensive components');
|
|
143
|
+
}
|
|
144
|
+
if (performanceMetrics.memoryUsage > memoryThreshold) {
|
|
145
|
+
suggestions.push('Consider implementing virtual scrolling or pagination');
|
|
146
|
+
}
|
|
147
|
+
if (performanceMetrics.scrollPerformance > scrollThreshold) {
|
|
148
|
+
suggestions.push('Consider debouncing scroll events or using passive listeners');
|
|
149
|
+
}
|
|
150
|
+
return suggestions;
|
|
151
|
+
}, [performanceMetrics, renderThreshold, memoryThreshold, scrollThreshold]);
|
|
152
|
+
return {
|
|
153
|
+
performanceMetrics: performanceMetrics,
|
|
154
|
+
getOptimizationSuggestions: getOptimizationSuggestions,
|
|
155
|
+
trackRender: trackRender,
|
|
156
|
+
trackMemory: trackMemory,
|
|
157
|
+
trackScroll: trackScroll
|
|
158
|
+
};
|
|
159
|
+
};
|
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
2
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
3
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
4
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
5
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i.return) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
6
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o("next", 0), o("throw", 1), o("return", 2); } }, _regeneratorDefine2(e, r, n, t); }
|
|
7
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
8
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
9
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
10
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
11
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
12
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
13
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
14
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
|
|
15
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
16
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
17
|
+
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
|
|
18
|
+
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
|
|
19
|
+
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
|
|
20
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
21
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
22
|
+
import useState from "react";
|
|
23
|
+
import useCallback from "react";
|
|
24
|
+
import useRef from "react";
|
|
25
|
+
import useEffect from "react";
|
|
26
|
+
import { newwalletpostapi } from "../../helper/Helper";
|
|
27
|
+
|
|
28
|
+
// Simple in-memory cache
|
|
29
|
+
var apiCache = new Map();
|
|
30
|
+
var CACHE_DURATION = 5 * 60 * 1000; // 5 minutes
|
|
31
|
+
var ApiCache = /*#__PURE__*/function () {
|
|
32
|
+
function ApiCache() {
|
|
33
|
+
_classCallCheck(this, ApiCache);
|
|
34
|
+
this.cache = new Map();
|
|
35
|
+
this.pendingRequests = new Map();
|
|
36
|
+
}
|
|
37
|
+
return _createClass(ApiCache, [{
|
|
38
|
+
key: "getKey",
|
|
39
|
+
value: function getKey(pageNum, filter) {
|
|
40
|
+
return "".concat(pageNum, "-").concat(filter);
|
|
41
|
+
}
|
|
42
|
+
}, {
|
|
43
|
+
key: "get",
|
|
44
|
+
value: function get(key) {
|
|
45
|
+
var cached = this.cache.get(key);
|
|
46
|
+
if (cached && Date.now() - cached.timestamp < CACHE_DURATION) {
|
|
47
|
+
return cached.data;
|
|
48
|
+
}
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}, {
|
|
52
|
+
key: "set",
|
|
53
|
+
value: function set(key, data) {
|
|
54
|
+
this.cache.set(key, {
|
|
55
|
+
data: data,
|
|
56
|
+
timestamp: Date.now()
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}, {
|
|
60
|
+
key: "hasPending",
|
|
61
|
+
value: function hasPending(key) {
|
|
62
|
+
return this.pendingRequests.has(key);
|
|
63
|
+
}
|
|
64
|
+
}, {
|
|
65
|
+
key: "setPending",
|
|
66
|
+
value: function setPending(key, promise) {
|
|
67
|
+
this.pendingRequests.set(key, promise);
|
|
68
|
+
}
|
|
69
|
+
}, {
|
|
70
|
+
key: "clearPending",
|
|
71
|
+
value: function clearPending(key) {
|
|
72
|
+
this.pendingRequests.delete(key);
|
|
73
|
+
}
|
|
74
|
+
}, {
|
|
75
|
+
key: "clear",
|
|
76
|
+
value: function clear() {
|
|
77
|
+
this.cache.clear();
|
|
78
|
+
this.pendingRequests.clear();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Cleanup expired entries
|
|
82
|
+
}, {
|
|
83
|
+
key: "cleanup",
|
|
84
|
+
value: function cleanup() {
|
|
85
|
+
var now = Date.now();
|
|
86
|
+
var _iterator = _createForOfIteratorHelper(this.cache.entries()),
|
|
87
|
+
_step;
|
|
88
|
+
try {
|
|
89
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
90
|
+
var _step$value = _slicedToArray(_step.value, 2),
|
|
91
|
+
key = _step$value[0],
|
|
92
|
+
value = _step$value[1];
|
|
93
|
+
if (now - value.timestamp > CACHE_DURATION) {
|
|
94
|
+
this.cache.delete(key);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
} catch (err) {
|
|
98
|
+
_iterator.e(err);
|
|
99
|
+
} finally {
|
|
100
|
+
_iterator.f();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}]);
|
|
104
|
+
}();
|
|
105
|
+
var apiCacheInstance = new ApiCache();
|
|
106
|
+
export var usePostApi = function usePostApi() {
|
|
107
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
108
|
+
var _options$enableCache = options.enableCache,
|
|
109
|
+
enableCache = _options$enableCache === void 0 ? true : _options$enableCache,
|
|
110
|
+
_options$maxRetries = options.maxRetries,
|
|
111
|
+
maxRetries = _options$maxRetries === void 0 ? 2 : _options$maxRetries,
|
|
112
|
+
_options$retryDelay = options.retryDelay,
|
|
113
|
+
retryDelay = _options$retryDelay === void 0 ? 1000 : _options$retryDelay,
|
|
114
|
+
_options$cacheDuratio = options.cacheDuration,
|
|
115
|
+
cacheDuration = _options$cacheDuratio === void 0 ? CACHE_DURATION : _options$cacheDuratio,
|
|
116
|
+
onError = options.onError,
|
|
117
|
+
onSuccess = options.onSuccess;
|
|
118
|
+
var _useState = useState(false),
|
|
119
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
120
|
+
loading = _useState2[0],
|
|
121
|
+
setLoading = _useState2[1];
|
|
122
|
+
var _useState3 = useState(null),
|
|
123
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
124
|
+
error = _useState4[0],
|
|
125
|
+
setError = _useState4[1];
|
|
126
|
+
var _useState5 = useState([]),
|
|
127
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
128
|
+
data = _useState6[0],
|
|
129
|
+
setData = _useState6[1];
|
|
130
|
+
var _useState7 = useState(true),
|
|
131
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
132
|
+
hasMoreData = _useState8[0],
|
|
133
|
+
setHasMoreData = _useState8[1];
|
|
134
|
+
var _useState9 = useState(1),
|
|
135
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
136
|
+
pageNum = _useState0[0],
|
|
137
|
+
setPageNum = _useState0[1];
|
|
138
|
+
var abortControllerRef = useRef(null);
|
|
139
|
+
var retryCountRef = useRef(0);
|
|
140
|
+
|
|
141
|
+
// Cleanup cache periodically
|
|
142
|
+
useEffect(function () {
|
|
143
|
+
var cleanupInterval = setInterval(function () {
|
|
144
|
+
apiCacheInstance.cleanup();
|
|
145
|
+
}, 60000); // Cleanup every minute
|
|
146
|
+
|
|
147
|
+
return function () {
|
|
148
|
+
return clearInterval(cleanupInterval);
|
|
149
|
+
};
|
|
150
|
+
}, []);
|
|
151
|
+
var fetchPosts = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
|
|
152
|
+
var page,
|
|
153
|
+
filter,
|
|
154
|
+
forceRefresh,
|
|
155
|
+
cacheKey,
|
|
156
|
+
cachedData,
|
|
157
|
+
result,
|
|
158
|
+
_executeRequest,
|
|
159
|
+
requestPromise,
|
|
160
|
+
_args2 = arguments,
|
|
161
|
+
_t2;
|
|
162
|
+
return _regenerator().w(function (_context2) {
|
|
163
|
+
while (1) switch (_context2.n) {
|
|
164
|
+
case 0:
|
|
165
|
+
page = _args2.length > 0 && _args2[0] !== undefined ? _args2[0] : 1;
|
|
166
|
+
filter = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : 'wallet';
|
|
167
|
+
forceRefresh = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : false;
|
|
168
|
+
cacheKey = apiCacheInstance.getKey(page, filter); // Check cache first
|
|
169
|
+
if (!(enableCache && !forceRefresh)) {
|
|
170
|
+
_context2.n = 1;
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
cachedData = apiCacheInstance.get(cacheKey);
|
|
174
|
+
if (!cachedData) {
|
|
175
|
+
_context2.n = 1;
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
setData(cachedData);
|
|
179
|
+
setHasMoreData(cachedData.length > 0);
|
|
180
|
+
setError(null);
|
|
181
|
+
onSuccess === null || onSuccess === void 0 || onSuccess(cachedData);
|
|
182
|
+
return _context2.a(2, cachedData);
|
|
183
|
+
case 1:
|
|
184
|
+
if (!apiCacheInstance.hasPending(cacheKey)) {
|
|
185
|
+
_context2.n = 5;
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
_context2.p = 2;
|
|
189
|
+
_context2.n = 3;
|
|
190
|
+
return apiCacheInstance.pendingRequests.get(cacheKey);
|
|
191
|
+
case 3:
|
|
192
|
+
result = _context2.v;
|
|
193
|
+
return _context2.a(2, result);
|
|
194
|
+
case 4:
|
|
195
|
+
_context2.p = 4;
|
|
196
|
+
_t2 = _context2.v;
|
|
197
|
+
throw _t2;
|
|
198
|
+
case 5:
|
|
199
|
+
// Create abort controller for this request
|
|
200
|
+
if (abortControllerRef.current) {
|
|
201
|
+
abortControllerRef.current.abort();
|
|
202
|
+
}
|
|
203
|
+
abortControllerRef.current = new AbortController();
|
|
204
|
+
setLoading(true);
|
|
205
|
+
setError(null);
|
|
206
|
+
_executeRequest = /*#__PURE__*/function () {
|
|
207
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
208
|
+
var retryAttempt,
|
|
209
|
+
_abortControllerRef$c,
|
|
210
|
+
response,
|
|
211
|
+
posts,
|
|
212
|
+
_abortControllerRef$c2,
|
|
213
|
+
delay,
|
|
214
|
+
_args = arguments,
|
|
215
|
+
_t;
|
|
216
|
+
return _regenerator().w(function (_context) {
|
|
217
|
+
while (1) switch (_context.n) {
|
|
218
|
+
case 0:
|
|
219
|
+
retryAttempt = _args.length > 0 && _args[0] !== undefined ? _args[0] : 0;
|
|
220
|
+
_context.p = 1;
|
|
221
|
+
_context.n = 2;
|
|
222
|
+
return newwalletpostapi(page, filter);
|
|
223
|
+
case 2:
|
|
224
|
+
response = _context.v;
|
|
225
|
+
if (!((_abortControllerRef$c = abortControllerRef.current) !== null && _abortControllerRef$c !== void 0 && _abortControllerRef$c.signal.aborted)) {
|
|
226
|
+
_context.n = 3;
|
|
227
|
+
break;
|
|
228
|
+
}
|
|
229
|
+
throw new Error('Request aborted');
|
|
230
|
+
case 3:
|
|
231
|
+
posts = response.dataPayload || []; // Cache the result
|
|
232
|
+
if (enableCache) {
|
|
233
|
+
apiCacheInstance.set(cacheKey, posts);
|
|
234
|
+
}
|
|
235
|
+
setData(posts);
|
|
236
|
+
setHasMoreData(posts.length > 0);
|
|
237
|
+
setError(null);
|
|
238
|
+
retryCountRef.current = 0;
|
|
239
|
+
onSuccess === null || onSuccess === void 0 || onSuccess(posts);
|
|
240
|
+
return _context.a(2, posts);
|
|
241
|
+
case 4:
|
|
242
|
+
_context.p = 4;
|
|
243
|
+
_t = _context.v;
|
|
244
|
+
if (!((_abortControllerRef$c2 = abortControllerRef.current) !== null && _abortControllerRef$c2 !== void 0 && _abortControllerRef$c2.signal.aborted)) {
|
|
245
|
+
_context.n = 5;
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
throw new Error('Request aborted');
|
|
249
|
+
case 5:
|
|
250
|
+
if (!(retryAttempt < maxRetries)) {
|
|
251
|
+
_context.n = 7;
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
retryCountRef.current = retryAttempt + 1;
|
|
255
|
+
|
|
256
|
+
// Exponential backoff
|
|
257
|
+
delay = retryDelay * Math.pow(2, retryAttempt);
|
|
258
|
+
_context.n = 6;
|
|
259
|
+
return new Promise(function (resolve) {
|
|
260
|
+
return setTimeout(resolve, delay);
|
|
261
|
+
});
|
|
262
|
+
case 6:
|
|
263
|
+
return _context.a(2, _executeRequest(retryAttempt + 1));
|
|
264
|
+
case 7:
|
|
265
|
+
// Max retries reached
|
|
266
|
+
setError(_t);
|
|
267
|
+
setLoading(false);
|
|
268
|
+
onError === null || onError === void 0 || onError(_t);
|
|
269
|
+
throw _t;
|
|
270
|
+
case 8:
|
|
271
|
+
_context.p = 8;
|
|
272
|
+
apiCacheInstance.clearPending(cacheKey);
|
|
273
|
+
setLoading(false);
|
|
274
|
+
return _context.f(8);
|
|
275
|
+
case 9:
|
|
276
|
+
return _context.a(2);
|
|
277
|
+
}
|
|
278
|
+
}, _callee, null, [[1, 4, 8, 9]]);
|
|
279
|
+
}));
|
|
280
|
+
return function executeRequest() {
|
|
281
|
+
return _ref2.apply(this, arguments);
|
|
282
|
+
};
|
|
283
|
+
}(); // Store pending request
|
|
284
|
+
requestPromise = _executeRequest();
|
|
285
|
+
apiCacheInstance.setPending(cacheKey, requestPromise);
|
|
286
|
+
return _context2.a(2, requestPromise);
|
|
287
|
+
}
|
|
288
|
+
}, _callee2, null, [[2, 4]]);
|
|
289
|
+
})), [enableCache, maxRetries, retryDelay, onError, onSuccess]);
|
|
290
|
+
var loadMore = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
|
|
291
|
+
var nextPage, newPosts, _t3;
|
|
292
|
+
return _regenerator().w(function (_context3) {
|
|
293
|
+
while (1) switch (_context3.n) {
|
|
294
|
+
case 0:
|
|
295
|
+
if (!(loading || !hasMoreData)) {
|
|
296
|
+
_context3.n = 1;
|
|
297
|
+
break;
|
|
298
|
+
}
|
|
299
|
+
return _context3.a(2);
|
|
300
|
+
case 1:
|
|
301
|
+
nextPage = pageNum + 1;
|
|
302
|
+
setPageNum(nextPage);
|
|
303
|
+
_context3.p = 2;
|
|
304
|
+
_context3.n = 3;
|
|
305
|
+
return fetchPosts(nextPage, 'wallet');
|
|
306
|
+
case 3:
|
|
307
|
+
newPosts = _context3.v;
|
|
308
|
+
// Merge with existing data
|
|
309
|
+
setData(function (prevData) {
|
|
310
|
+
var existingGuids = new Set(prevData.map(function (post) {
|
|
311
|
+
return post.originalRSMGUID;
|
|
312
|
+
}));
|
|
313
|
+
var uniqueNewPosts = newPosts.filter(function (post) {
|
|
314
|
+
return !existingGuids.has(post.originalRSMGUID);
|
|
315
|
+
});
|
|
316
|
+
return [].concat(_toConsumableArray(prevData), _toConsumableArray(uniqueNewPosts));
|
|
317
|
+
});
|
|
318
|
+
_context3.n = 5;
|
|
319
|
+
break;
|
|
320
|
+
case 4:
|
|
321
|
+
_context3.p = 4;
|
|
322
|
+
_t3 = _context3.v;
|
|
323
|
+
case 5:
|
|
324
|
+
return _context3.a(2);
|
|
325
|
+
}
|
|
326
|
+
}, _callee3, null, [[2, 4]]);
|
|
327
|
+
})), [loading, hasMoreData, pageNum, fetchPosts]);
|
|
328
|
+
var refresh = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
|
|
329
|
+
var _t4;
|
|
330
|
+
return _regenerator().w(function (_context4) {
|
|
331
|
+
while (1) switch (_context4.n) {
|
|
332
|
+
case 0:
|
|
333
|
+
setPageNum(1);
|
|
334
|
+
setData([]);
|
|
335
|
+
setHasMoreData(true);
|
|
336
|
+
setError(null);
|
|
337
|
+
_context4.p = 1;
|
|
338
|
+
_context4.n = 2;
|
|
339
|
+
return fetchPosts(1, 'wallet', true);
|
|
340
|
+
case 2:
|
|
341
|
+
_context4.n = 4;
|
|
342
|
+
break;
|
|
343
|
+
case 3:
|
|
344
|
+
_context4.p = 3;
|
|
345
|
+
_t4 = _context4.v;
|
|
346
|
+
case 4:
|
|
347
|
+
return _context4.a(2);
|
|
348
|
+
}
|
|
349
|
+
}, _callee4, null, [[1, 3]]);
|
|
350
|
+
})), [fetchPosts]);
|
|
351
|
+
var clearCache = useCallback(function () {
|
|
352
|
+
apiCacheInstance.clear();
|
|
353
|
+
}, []);
|
|
354
|
+
|
|
355
|
+
// Cleanup on unmount
|
|
356
|
+
useEffect(function () {
|
|
357
|
+
return function () {
|
|
358
|
+
if (abortControllerRef.current) {
|
|
359
|
+
abortControllerRef.current.abort();
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
}, []);
|
|
363
|
+
return {
|
|
364
|
+
// State
|
|
365
|
+
loading: loading,
|
|
366
|
+
error: error,
|
|
367
|
+
data: data,
|
|
368
|
+
hasMoreData: hasMoreData,
|
|
369
|
+
pageNum: pageNum,
|
|
370
|
+
retryCount: retryCountRef.current,
|
|
371
|
+
// Actions
|
|
372
|
+
fetchPosts: fetchPosts,
|
|
373
|
+
loadMore: loadMore,
|
|
374
|
+
refresh: refresh,
|
|
375
|
+
clearCache: clearCache,
|
|
376
|
+
setPageNum: setPageNum,
|
|
377
|
+
// Cache info
|
|
378
|
+
cacheSize: apiCacheInstance.cache.size,
|
|
379
|
+
pendingRequests: apiCacheInstance.pendingRequests.size
|
|
380
|
+
};
|
|
381
|
+
};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
5
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
6
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
7
|
+
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
|
|
8
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
9
|
+
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
|
|
10
|
+
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
|
|
11
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
12
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
13
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
14
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
15
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
16
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
17
|
+
import useState from "react";
|
|
18
|
+
import useCallback from "react";
|
|
19
|
+
import useMemo from "react";
|
|
20
|
+
export var usePostState = function usePostState() {
|
|
21
|
+
var initialData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
22
|
+
var _useState = useState(initialData),
|
|
23
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
24
|
+
posts = _useState2[0],
|
|
25
|
+
setPosts = _useState2[1];
|
|
26
|
+
var _useState3 = useState(1),
|
|
27
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
28
|
+
pageNum = _useState4[0],
|
|
29
|
+
setPageNum = _useState4[1];
|
|
30
|
+
var _useState5 = useState(false),
|
|
31
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
32
|
+
loading = _useState6[0],
|
|
33
|
+
setLoading = _useState6[1];
|
|
34
|
+
var _useState7 = useState(true),
|
|
35
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
36
|
+
initialLoading = _useState8[0],
|
|
37
|
+
setInitialLoading = _useState8[1];
|
|
38
|
+
var _useState9 = useState(true),
|
|
39
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
40
|
+
hasMoreData = _useState0[0],
|
|
41
|
+
setHasMoreData = _useState0[1];
|
|
42
|
+
var _useState1 = useState(null),
|
|
43
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
44
|
+
error = _useState10[0],
|
|
45
|
+
setError = _useState10[1];
|
|
46
|
+
|
|
47
|
+
// Optimized post operations
|
|
48
|
+
var addPosts = useCallback(function (newPosts) {
|
|
49
|
+
var isNewPage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
50
|
+
setPosts(function (prevPosts) {
|
|
51
|
+
if (isNewPage) {
|
|
52
|
+
// For new pages, append and deduplicate
|
|
53
|
+
var existingGuids = new Set(prevPosts.map(function (post) {
|
|
54
|
+
return post.originalRSMGUID;
|
|
55
|
+
}));
|
|
56
|
+
var uniqueNewPosts = newPosts.filter(function (post) {
|
|
57
|
+
return !existingGuids.has(post.originalRSMGUID);
|
|
58
|
+
});
|
|
59
|
+
return [].concat(_toConsumableArray(prevPosts), _toConsumableArray(uniqueNewPosts));
|
|
60
|
+
}
|
|
61
|
+
// For refresh, replace all
|
|
62
|
+
return newPosts;
|
|
63
|
+
});
|
|
64
|
+
}, []);
|
|
65
|
+
var updatePost = useCallback(function (postId, updates) {
|
|
66
|
+
setPosts(function (prevPosts) {
|
|
67
|
+
return prevPosts.map(function (post) {
|
|
68
|
+
return post.rsmguid === postId ? _objectSpread(_objectSpread({}, post), updates) : post;
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
}, []);
|
|
72
|
+
var removePost = useCallback(function (postId) {
|
|
73
|
+
setPosts(function (prevPosts) {
|
|
74
|
+
return prevPosts.filter(function (post) {
|
|
75
|
+
return post.rsmguid !== postId;
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}, []);
|
|
79
|
+
var refreshPosts = useCallback(function () {
|
|
80
|
+
setPosts([]);
|
|
81
|
+
setPageNum(1);
|
|
82
|
+
setHasMoreData(true);
|
|
83
|
+
setError(null);
|
|
84
|
+
}, []);
|
|
85
|
+
|
|
86
|
+
// Memoized computed values
|
|
87
|
+
var postCount = useMemo(function () {
|
|
88
|
+
return posts.length;
|
|
89
|
+
}, [posts.length]);
|
|
90
|
+
var hasPosts = useMemo(function () {
|
|
91
|
+
return posts.length > 0;
|
|
92
|
+
}, [posts.length]);
|
|
93
|
+
return {
|
|
94
|
+
// State
|
|
95
|
+
posts: posts,
|
|
96
|
+
pageNum: pageNum,
|
|
97
|
+
loading: loading,
|
|
98
|
+
initialLoading: initialLoading,
|
|
99
|
+
hasMoreData: hasMoreData,
|
|
100
|
+
error: error,
|
|
101
|
+
postCount: postCount,
|
|
102
|
+
hasPosts: hasPosts,
|
|
103
|
+
// Setters
|
|
104
|
+
setPosts: setPosts,
|
|
105
|
+
setPageNum: setPageNum,
|
|
106
|
+
setLoading: setLoading,
|
|
107
|
+
setInitialLoading: setInitialLoading,
|
|
108
|
+
setHasMoreData: setHasMoreData,
|
|
109
|
+
setError: setError,
|
|
110
|
+
// Operations
|
|
111
|
+
addPosts: addPosts,
|
|
112
|
+
updatePost: updatePost,
|
|
113
|
+
removePost: removePost,
|
|
114
|
+
refreshPosts: refreshPosts
|
|
115
|
+
};
|
|
116
|
+
};
|