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.
Files changed (56) hide show
  1. package/README.md +157 -0
  2. package/dist/0ae4e6254fc19607c79e.woff2 +0 -0
  3. package/dist/1f38a564cd9eae27ebc3.woff2 +0 -0
  4. package/dist/432.napp.bundle.js +1 -0
  5. package/dist/661bd6b7245d5205d3e1.woff2 +0 -0
  6. package/dist/Post.browser.js +24 -0
  7. package/dist/Post.js +606 -0
  8. package/dist/components/CodeSplitting.js +88 -0
  9. package/dist/components/Deeplink/Deeplink.js +813 -0
  10. package/dist/components/EditPostModal.js +916 -0
  11. package/dist/components/ErrorBoundary.js +74 -0
  12. package/dist/components/ExpandedTest/ExpandableText.js +38 -0
  13. package/dist/components/FilterDropdown.js +71 -0
  14. package/dist/components/ImagePreloader.js +1194 -0
  15. package/dist/components/Loader.js +42 -0
  16. package/dist/components/LoadingSkeletons.js +978 -0
  17. package/dist/components/MediaRenderer.js +759 -0
  18. package/dist/components/MemoryManager.js +302 -0
  19. package/dist/components/PostCard.js +446 -0
  20. package/dist/components/PostViews.js +247 -0
  21. package/dist/components/Postfeed.js +251 -0
  22. package/dist/components/Svgloader.js +231 -0
  23. package/dist/components/UploadPostModal.js +1352 -0
  24. package/dist/components/VideoPlayer.js +1304 -0
  25. package/dist/components/ViewPostModal/MediaPreloadManager.js +379 -0
  26. package/dist/components/ViewPostModal/README.md +164 -0
  27. package/dist/components/ViewPostModal/ShareModal.js +96 -0
  28. package/dist/components/ViewPostModal/VirtualPost.js +248 -0
  29. package/dist/components/ViewPostModal/useBodyScrollLock.js +42 -0
  30. package/dist/components/ViewPostModal/useDeviceDetection.js +38 -0
  31. package/dist/components/ViewPostModal/useFullscreenManager.js +43 -0
  32. package/dist/components/ViewPostModal/useNavigationManager.js +185 -0
  33. package/dist/components/ViewPostModal/usePostDataManager.js +143 -0
  34. package/dist/components/ViewPostModal/usePreloadManager.js +97 -0
  35. package/dist/components/ViewPostModal/useShareManager.js +76 -0
  36. package/dist/components/ViewPostModal.js +552 -0
  37. package/dist/components/VirtualPostFeed.js +475 -0
  38. package/dist/components/hooks/useFeedVisibility.js +72 -0
  39. package/dist/components/hooks/useIntersectionObserver.js +54 -0
  40. package/dist/components/hooks/usePerformanceMonitor.js +159 -0
  41. package/dist/components/hooks/usePostApi.js +381 -0
  42. package/dist/components/hooks/usePostState.js +116 -0
  43. package/dist/components/useImagePreloading.js +231 -0
  44. package/dist/e7461d69dbbff1310a5c.woff2 +0 -0
  45. package/dist/helper/Helper.js +504 -0
  46. package/dist/index.browser.js +5 -0
  47. package/dist/index.js +3 -0
  48. package/dist/napp.bundle.js +2 -0
  49. package/dist/napp.bundle.js.LICENSE.txt +733 -0
  50. package/dist/style/post.css +5751 -0
  51. package/dist/style/post.css.map +1 -0
  52. package/dist/style/post.purged.css +3236 -0
  53. package/dist/style/post.scss +5910 -0
  54. package/dist/utils/bootstrap.js +4 -0
  55. package/dist/utils/ffmpegLoader.js +40 -0
  56. 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
+ };