@selfcommunity/react-core 0.1.18 → 0.1.19-alpha.0

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 (68) hide show
  1. package/lib/cjs/components/provider/SCRoutingProvider/index.d.ts.map +1 -1
  2. package/lib/cjs/constants/Cache.d.ts +26 -0
  3. package/lib/cjs/constants/Cache.d.ts.map +1 -0
  4. package/lib/cjs/constants/Cache.js +38 -0
  5. package/lib/cjs/constants/Cache.js.map +1 -0
  6. package/lib/cjs/hooks/useSCFetchCategory.d.ts +3 -1
  7. package/lib/cjs/hooks/useSCFetchCategory.d.ts.map +1 -1
  8. package/lib/cjs/hooks/useSCFetchCategory.js +19 -6
  9. package/lib/cjs/hooks/useSCFetchCategory.js.map +1 -1
  10. package/lib/cjs/hooks/useSCFetchCommentObject.d.ts +4 -1
  11. package/lib/cjs/hooks/useSCFetchCommentObject.d.ts.map +1 -1
  12. package/lib/cjs/hooks/useSCFetchCommentObject.js +20 -6
  13. package/lib/cjs/hooks/useSCFetchCommentObject.js.map +1 -1
  14. package/lib/cjs/hooks/useSCFetchCommentObjects.d.ts +2 -0
  15. package/lib/cjs/hooks/useSCFetchCommentObjects.d.ts.map +1 -1
  16. package/lib/cjs/hooks/useSCFetchCommentObjects.js +48 -4
  17. package/lib/cjs/hooks/useSCFetchCommentObjects.js.map +1 -1
  18. package/lib/cjs/hooks/useSCFetchContributors.d.ts +51 -0
  19. package/lib/cjs/hooks/useSCFetchContributors.d.ts.map +1 -0
  20. package/lib/cjs/hooks/useSCFetchContributors.js +237 -0
  21. package/lib/cjs/hooks/useSCFetchContributors.js.map +1 -0
  22. package/lib/cjs/hooks/useSCFetchFeed.d.ts +50 -0
  23. package/lib/cjs/hooks/useSCFetchFeed.d.ts.map +1 -0
  24. package/lib/cjs/hooks/useSCFetchFeed.js +234 -0
  25. package/lib/cjs/hooks/useSCFetchFeed.js.map +1 -0
  26. package/lib/cjs/hooks/useSCFetchFeedObject.d.ts +4 -1
  27. package/lib/cjs/hooks/useSCFetchFeedObject.d.ts.map +1 -1
  28. package/lib/cjs/hooks/useSCFetchFeedObject.js +21 -9
  29. package/lib/cjs/hooks/useSCFetchFeedObject.js.map +1 -1
  30. package/lib/cjs/index.d.ts +4 -1
  31. package/lib/cjs/index.d.ts.map +1 -1
  32. package/lib/cjs/index.js +7 -1
  33. package/lib/cjs/index.js.map +1 -1
  34. package/lib/esm/components/provider/SCRoutingProvider/index.d.ts.map +1 -1
  35. package/lib/esm/constants/Cache.d.ts +26 -0
  36. package/lib/esm/constants/Cache.d.ts.map +1 -0
  37. package/lib/esm/constants/Cache.js +26 -0
  38. package/lib/esm/constants/Cache.js.map +1 -0
  39. package/lib/esm/hooks/useSCFetchCategory.d.ts +3 -1
  40. package/lib/esm/hooks/useSCFetchCategory.d.ts.map +1 -1
  41. package/lib/esm/hooks/useSCFetchCategory.js +20 -7
  42. package/lib/esm/hooks/useSCFetchCategory.js.map +1 -1
  43. package/lib/esm/hooks/useSCFetchCommentObject.d.ts +4 -1
  44. package/lib/esm/hooks/useSCFetchCommentObject.d.ts.map +1 -1
  45. package/lib/esm/hooks/useSCFetchCommentObject.js +21 -7
  46. package/lib/esm/hooks/useSCFetchCommentObject.js.map +1 -1
  47. package/lib/esm/hooks/useSCFetchCommentObjects.d.ts +2 -0
  48. package/lib/esm/hooks/useSCFetchCommentObjects.d.ts.map +1 -1
  49. package/lib/esm/hooks/useSCFetchCommentObjects.js +50 -6
  50. package/lib/esm/hooks/useSCFetchCommentObjects.js.map +1 -1
  51. package/lib/esm/hooks/useSCFetchContributors.d.ts +51 -0
  52. package/lib/esm/hooks/useSCFetchContributors.d.ts.map +1 -0
  53. package/lib/esm/hooks/useSCFetchContributors.js +230 -0
  54. package/lib/esm/hooks/useSCFetchContributors.js.map +1 -0
  55. package/lib/esm/hooks/useSCFetchFeed.d.ts +50 -0
  56. package/lib/esm/hooks/useSCFetchFeed.d.ts.map +1 -0
  57. package/lib/esm/hooks/useSCFetchFeed.js +230 -0
  58. package/lib/esm/hooks/useSCFetchFeed.js.map +1 -0
  59. package/lib/esm/hooks/useSCFetchFeedObject.d.ts +4 -1
  60. package/lib/esm/hooks/useSCFetchFeedObject.d.ts.map +1 -1
  61. package/lib/esm/hooks/useSCFetchFeedObject.js +22 -10
  62. package/lib/esm/hooks/useSCFetchFeedObject.js.map +1 -1
  63. package/lib/esm/index.d.ts +4 -1
  64. package/lib/esm/index.d.ts.map +1 -1
  65. package/lib/esm/index.js +4 -1
  66. package/lib/esm/index.js.map +1 -1
  67. package/lib/umd/react-core.js +1 -1
  68. package/package.json +6 -6
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.contributorsObjectActionTypes = void 0;
7
+ const react_1 = require("react");
8
+ const Errors_1 = require("../constants/Errors");
9
+ const api_services_1 = require("@selfcommunity/api-services");
10
+ const utils_1 = require("@selfcommunity/utils");
11
+ const useSCFetchFeedObject_1 = __importDefault(require("./useSCFetchFeedObject"));
12
+ const Cache_1 = require("../constants/Cache");
13
+ /**
14
+ * @hidden
15
+ * We have complex state logic that involves multiple sub-values,
16
+ * so useReducer is preferable to useState.
17
+ * Define all possible auth action types label
18
+ * Use this to export actions and dispatch an action
19
+ */
20
+ exports.contributorsObjectActionTypes = {
21
+ LOADING_NEXT: '_loading_next',
22
+ LOADING_PREVIOUS: '_loading_previous',
23
+ DATA_NEXT_LOADED: '_data_next_loaded',
24
+ DATA_PREVIOUS_LOADED: '_data_previous_loaded',
25
+ DATA_RELOAD: '_data_reload',
26
+ DATA_RELOADED: '_data_reloaded',
27
+ };
28
+ /**
29
+ * contributorsReducer:
30
+ * - manage the state of contributors object
31
+ * - update the state base on action type
32
+ * @param state
33
+ * @param action
34
+ */
35
+ function contributorsReducer(state, action) {
36
+ switch (action.type) {
37
+ case exports.contributorsObjectActionTypes.LOADING_NEXT:
38
+ return Object.assign(Object.assign({}, state), { isLoadingNext: true, isLoadingPrevious: false });
39
+ case exports.contributorsObjectActionTypes.LOADING_PREVIOUS:
40
+ return Object.assign(Object.assign({}, state), { isLoadingNext: false, isLoadingPrevious: true });
41
+ case exports.contributorsObjectActionTypes.DATA_NEXT_LOADED:
42
+ return Object.assign(Object.assign(Object.assign(Object.assign({}, state), { page: action.payload.currentPage, contributors: action.payload.contributors, isLoadingNext: false, componentLoaded: true, next: action.payload.next }), (action.payload.previous ? { previous: action.payload.previous } : {})), (action.payload.total ? { total: action.payload.total } : {}));
43
+ case exports.contributorsObjectActionTypes.DATA_PREVIOUS_LOADED:
44
+ return Object.assign(Object.assign({}, state), { page: action.payload.currentPage, contributors: action.payload.contributors, isLoadingPrevious: false, previous: action.payload.previous });
45
+ case exports.contributorsObjectActionTypes.DATA_RELOAD:
46
+ return Object.assign(Object.assign({}, state), { next: action.payload.next, contributors: [], total: 0, previous: null, reload: true });
47
+ case exports.contributorsObjectActionTypes.DATA_RELOADED:
48
+ return Object.assign(Object.assign({}, state), { componentLoaded: false, reload: false });
49
+ default:
50
+ throw new Error(`Unhandled type: ${action.type}`);
51
+ }
52
+ }
53
+ /**
54
+ * Define initial state
55
+ * @param data
56
+ */
57
+ function stateInitializer(data) {
58
+ const __contributorsObjectCacheKey = data.obj ? (0, Cache_1.getContributorsCacheKey)(data.obj.id, data.obj.type, data.next) : null;
59
+ let _initState = {
60
+ componentLoaded: false,
61
+ contributors: [],
62
+ total: 0,
63
+ next: data.next,
64
+ previous: null,
65
+ isLoadingNext: false,
66
+ isLoadingPrevious: false,
67
+ page: data.offset / data.pageSize + 1,
68
+ reload: false,
69
+ };
70
+ if (__contributorsObjectCacheKey && utils_1.LRUCache.hasKey(__contributorsObjectCacheKey) && data.cacheStrategy !== utils_1.CacheStrategies.NETWORK_ONLY) {
71
+ const _cachedData = utils_1.LRUCache.get(__contributorsObjectCacheKey);
72
+ return Object.assign(Object.assign({}, _initState), { total: _cachedData.count, next: _cachedData.next, previous: _cachedData.previous, contributors: _cachedData.results });
73
+ }
74
+ return _initState;
75
+ }
76
+ /**
77
+ :::info
78
+ This custom hooks is used to fetch paginated contributors.
79
+ :::
80
+ * @param id
81
+ * @param feedObject
82
+ * @param feedObjectType
83
+ * @param offset
84
+ * @param pageSize
85
+ */
86
+ function useSCFetchContributors(props) {
87
+ // PROPS
88
+ const { id, feedObject, feedObjectType, offset = 0, pageSize = 5, onChangePage, cacheStrategy = utils_1.CacheStrategies.CACHE_FIRST } = props;
89
+ // FeedObject
90
+ const { obj, setObj } = (0, useSCFetchFeedObject_1.default)({ id, feedObject, feedObjectType });
91
+ const objId = obj ? obj.id : null;
92
+ /**
93
+ * Get next url
94
+ */
95
+ const getNextUrl = () => {
96
+ const _offset = offset ? `&offset=${offset}` : '';
97
+ const _objectId = obj ? obj.id : id;
98
+ const _typeObject = obj ? obj.type : feedObjectType;
99
+ return `${api_services_1.Endpoints.FeedObjectContributorsList.url({ type: _typeObject, id: _objectId })}?limit=${pageSize}${_offset}`;
100
+ };
101
+ // STATE
102
+ const [state, dispatch] = (0, react_1.useReducer)(contributorsReducer, {}, () => stateInitializer({ obj, offset, pageSize, next: getNextUrl(), cacheStrategy }));
103
+ /**
104
+ * Calculate current page
105
+ */
106
+ const getCurrentPage = (url) => {
107
+ const urlSearchParams = new URLSearchParams(url);
108
+ const params = Object.fromEntries(urlSearchParams.entries());
109
+ const currentOffset = params.offset ? parseInt(params.offset) : 0;
110
+ return currentOffset / pageSize + 1;
111
+ };
112
+ /**
113
+ * Get Comments (with cache)
114
+ */
115
+ const revalidate = (url, forward) => {
116
+ return performFetchComments(url, false).then((res) => {
117
+ let _contributors;
118
+ let currentPage = getCurrentPage(state.next);
119
+ if (forward) {
120
+ let start = state.contributors.slice(0, state.contributors.length - res.results.length);
121
+ _contributors = start.concat(res.results);
122
+ }
123
+ else {
124
+ let start = state.contributors.slice(res.results.length, state.contributors.length);
125
+ _contributors = res.results.concat(start);
126
+ }
127
+ dispatch({
128
+ type: forward ? exports.contributorsObjectActionTypes.DATA_NEXT_LOADED : exports.contributorsObjectActionTypes.DATA_PREVIOUS_LOADED,
129
+ payload: Object.assign(Object.assign({ page: currentPage, contributors: _contributors }, (forward ? { next: res.next } : { previous: res.previous })), { total: res.count }),
130
+ });
131
+ });
132
+ };
133
+ /**
134
+ * Get Comments
135
+ */
136
+ const performFetchComments = (url, seekCache = true) => {
137
+ const _contributorsCacheKey = (0, Cache_1.getContributorsCacheKey)(obj.id, obj.type, url);
138
+ if (seekCache && utils_1.LRUCache.hasKey(_contributorsCacheKey) && cacheStrategy !== utils_1.CacheStrategies.NETWORK_ONLY) {
139
+ return Promise.resolve(utils_1.LRUCache.get(_contributorsCacheKey));
140
+ }
141
+ return api_services_1.http
142
+ .request({
143
+ url,
144
+ method: api_services_1.Endpoints.Comments.method,
145
+ })
146
+ .then((res) => {
147
+ if (res.status >= 300) {
148
+ return Promise.reject(res);
149
+ }
150
+ utils_1.LRUCache.set(_contributorsCacheKey, res.data);
151
+ return Promise.resolve(res.data);
152
+ });
153
+ };
154
+ /**
155
+ * Fetch previous contributors
156
+ */
157
+ function getPreviousPage() {
158
+ if (obj && state.previous && !state.isLoadingPrevious) {
159
+ dispatch({ type: exports.contributorsObjectActionTypes.LOADING_PREVIOUS });
160
+ performFetchComments(state.previous)
161
+ .then((res) => {
162
+ let currentPage = getCurrentPage(state.previous);
163
+ dispatch({
164
+ type: exports.contributorsObjectActionTypes.DATA_PREVIOUS_LOADED,
165
+ payload: {
166
+ page: currentPage,
167
+ contributors: [...res.results, ...state.contributors],
168
+ previous: res.previous,
169
+ },
170
+ });
171
+ onChangePage && onChangePage(currentPage);
172
+ })
173
+ .catch((error) => {
174
+ utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, error);
175
+ })
176
+ .then(() => {
177
+ if (cacheStrategy === utils_1.CacheStrategies.STALE_WHILE_REVALIDATE) {
178
+ revalidate(state.next, false);
179
+ }
180
+ });
181
+ }
182
+ }
183
+ /**
184
+ * Fetch next contributors
185
+ */
186
+ function getNextPage() {
187
+ if (obj && state.next && !state.isLoadingNext) {
188
+ dispatch({ type: exports.contributorsObjectActionTypes.LOADING_NEXT });
189
+ performFetchComments(state.next)
190
+ .then((res) => {
191
+ let currentPage = getCurrentPage(state.next);
192
+ dispatch({
193
+ type: exports.contributorsObjectActionTypes.DATA_NEXT_LOADED,
194
+ payload: Object.assign({ page: currentPage, contributors: [...state.contributors, ...res.results], next: res.next, total: res.count, componentLoaded: true }, (offset && state.contributors.length === 0 ? { previous: res.previous } : {})),
195
+ });
196
+ onChangePage && onChangePage(currentPage);
197
+ })
198
+ .catch((error) => {
199
+ utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, error);
200
+ })
201
+ .then(() => {
202
+ if (cacheStrategy === utils_1.CacheStrategies.STALE_WHILE_REVALIDATE) {
203
+ revalidate(state.next, true);
204
+ }
205
+ });
206
+ }
207
+ }
208
+ /**
209
+ * Reset contributors status on change pageSize, offset
210
+ */
211
+ (0, react_1.useEffect)(() => {
212
+ if (state.componentLoaded && Boolean(obj) && !state.reload) {
213
+ dispatch({
214
+ type: exports.contributorsObjectActionTypes.DATA_RELOAD,
215
+ payload: {
216
+ next: getNextUrl(),
217
+ },
218
+ });
219
+ }
220
+ }, [objId, pageSize, offset]);
221
+ /**
222
+ * Reload fetch contributors
223
+ */
224
+ (0, react_1.useEffect)(() => {
225
+ if (state.componentLoaded && state.reload && !state.isLoadingNext && !state.isLoadingPrevious) {
226
+ dispatch({
227
+ type: exports.contributorsObjectActionTypes.DATA_RELOADED,
228
+ });
229
+ getNextPage();
230
+ }
231
+ }, [state.reload]);
232
+ return Object.assign(Object.assign({ feedObject: obj, setFeedObject: setObj }, state), { pageSize,
233
+ getNextPage,
234
+ getPreviousPage });
235
+ }
236
+ exports.default = useSCFetchContributors;
237
+ //# sourceMappingURL=useSCFetchContributors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSCFetchContributors.js","sourceRoot":"","sources":["../../../src/hooks/useSCFetchContributors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { SCFeedUnitType } from '@selfcommunity/types';
2
+ import { EndpointType } from '@selfcommunity/api-services';
3
+ import { CacheStrategies } from '@selfcommunity/utils';
4
+ /**
5
+ * Interface SCPaginatedFeedType
6
+ */
7
+ export interface SCPaginatedFeedType {
8
+ componentLoaded: boolean;
9
+ feedData: SCFeedUnitType[];
10
+ total: number;
11
+ next: string;
12
+ previous: string;
13
+ isLoadingNext: boolean;
14
+ isLoadingPrevious: boolean;
15
+ page: number;
16
+ reload: boolean;
17
+ }
18
+ /**
19
+ * @hidden
20
+ * We have complex state logic that involves multiple sub-values,
21
+ * so useReducer is preferable to useState.
22
+ * Define all possible auth action types label
23
+ * Use this to export actions and dispatch an action
24
+ */
25
+ export declare const feedDataActionTypes: {
26
+ LOADING_NEXT: string;
27
+ LOADING_PREVIOUS: string;
28
+ DATA_NEXT_LOADED: string;
29
+ DATA_PREVIOUS_LOADED: string;
30
+ DATA_RELOAD: string;
31
+ DATA_RELOADED: string;
32
+ };
33
+ /**
34
+ :::info
35
+ This custom hooks is used to fetch paginated feedData.
36
+ :::
37
+ * @param endpoint
38
+ * @param offset
39
+ * @param pageSize
40
+ * @param onChangePage
41
+ * @param cacheStrategy
42
+ */
43
+ export default function useSCFetchFeed(props: {
44
+ id: string;
45
+ endpoint: EndpointType;
46
+ endpointQueryParams?: Record<string, string | number>;
47
+ onChangePage?: (page: any) => any;
48
+ cacheStrategy?: CacheStrategies;
49
+ }): any;
50
+ //# sourceMappingURL=useSCFetchFeed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSCFetchFeed.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSCFetchFeed.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAY,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AACxF,OAAO,EAAC,eAAe,EAAmB,MAAM,sBAAsB,CAAC;AAIvE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB;;;;;;;CAO/B,CAAC;AAiFF;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,KAAK,EAAE;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,YAAY,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IACtD,YAAY,CAAC,EAAE,CAAC,IAAI,KAAA,KAAK,GAAG,CAAC;IAC7B,aAAa,CAAC,EAAE,eAAe,CAAC;CACjC,OAmLA"}
@@ -0,0 +1,234 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.feedDataActionTypes = void 0;
4
+ const react_1 = require("react");
5
+ const Errors_1 = require("../constants/Errors");
6
+ const api_services_1 = require("@selfcommunity/api-services");
7
+ const utils_1 = require("@selfcommunity/utils");
8
+ const Cache_1 = require("../constants/Cache");
9
+ const utils_2 = require("@selfcommunity/utils");
10
+ /**
11
+ * @hidden
12
+ * We have complex state logic that involves multiple sub-values,
13
+ * so useReducer is preferable to useState.
14
+ * Define all possible auth action types label
15
+ * Use this to export actions and dispatch an action
16
+ */
17
+ exports.feedDataActionTypes = {
18
+ LOADING_NEXT: '_loading_next',
19
+ LOADING_PREVIOUS: '_loading_previous',
20
+ DATA_NEXT_LOADED: '_data_next_loaded',
21
+ DATA_PREVIOUS_LOADED: '_data_previous_loaded',
22
+ DATA_RELOAD: '_data_reload',
23
+ DATA_RELOADED: '_data_reloaded',
24
+ };
25
+ /**
26
+ * feedDataReducer:
27
+ * - manage the state of feedData object
28
+ * - update the state base on action type
29
+ * @param state
30
+ * @param action
31
+ */
32
+ function feedDataReducer(state, action) {
33
+ switch (action.type) {
34
+ case exports.feedDataActionTypes.LOADING_NEXT:
35
+ return Object.assign(Object.assign({}, state), { isLoadingNext: true, isLoadingPrevious: false });
36
+ case exports.feedDataActionTypes.LOADING_PREVIOUS:
37
+ return Object.assign(Object.assign({}, state), { isLoadingNext: false, isLoadingPrevious: true });
38
+ case exports.feedDataActionTypes.DATA_NEXT_LOADED:
39
+ return Object.assign(Object.assign(Object.assign(Object.assign({}, state), { page: action.payload.currentPage, feedData: action.payload.feedData, isLoadingNext: false, componentLoaded: true, next: action.payload.next }), (action.payload.previous ? { previous: action.payload.previous } : {})), (action.payload.total ? { total: action.payload.total } : {}));
40
+ case exports.feedDataActionTypes.DATA_PREVIOUS_LOADED:
41
+ return Object.assign(Object.assign({}, state), { page: action.payload.currentPage, feedData: action.payload.feedData, isLoadingPrevious: false, previous: action.payload.previous });
42
+ case exports.feedDataActionTypes.DATA_RELOAD:
43
+ return Object.assign(Object.assign({}, state), { next: action.payload.next, feedData: [], total: 0, previous: null, reload: true });
44
+ case exports.feedDataActionTypes.DATA_RELOADED:
45
+ return Object.assign(Object.assign({}, state), { componentLoaded: false, reload: false });
46
+ default:
47
+ throw new Error(`Unhandled type: ${action.type}`);
48
+ }
49
+ }
50
+ /**
51
+ * Define initial state
52
+ * @param data
53
+ */
54
+ function stateInitializer(data) {
55
+ const __feedDataCacheKey = (0, Cache_1.getFeedCacheKey)(data.id, data.next);
56
+ let _initState = {
57
+ componentLoaded: false,
58
+ feedData: [],
59
+ total: 0,
60
+ next: data.next,
61
+ previous: null,
62
+ isLoadingNext: false,
63
+ isLoadingPrevious: false,
64
+ page: data.queryParams.offset / data.queryParams.limit + 1,
65
+ reload: false,
66
+ };
67
+ if (__feedDataCacheKey && utils_1.LRUCache.hasKey(__feedDataCacheKey) && data.cacheStrategy !== utils_1.CacheStrategies.NETWORK_ONLY) {
68
+ const _cachedData = utils_1.LRUCache.get(__feedDataCacheKey);
69
+ return Object.assign(Object.assign({}, _initState), { componentLoaded: true, total: _cachedData.count, next: _cachedData.next, previous: _cachedData.previous, feedData: _cachedData.results });
70
+ }
71
+ return _initState;
72
+ }
73
+ /**
74
+ :::info
75
+ This custom hooks is used to fetch paginated feedData.
76
+ :::
77
+ * @param endpoint
78
+ * @param offset
79
+ * @param pageSize
80
+ * @param onChangePage
81
+ * @param cacheStrategy
82
+ */
83
+ function useSCFetchFeed(props) {
84
+ // PROPS
85
+ const { id, endpoint, endpointQueryParams = { limit: 10, offset: 0 }, onChangePage, cacheStrategy = utils_1.CacheStrategies.CACHE_FIRST } = props;
86
+ const queryParams = (0, react_1.useMemo)(() => Object.assign({ limit: 10, offset: 0 }, endpointQueryParams), [endpointQueryParams]);
87
+ /**
88
+ * Get next url
89
+ */
90
+ const getInitialNextUrl = () => {
91
+ const _initialEndpoint = (0, utils_2.appendURLSearchParams)(endpoint.url({}), Object.keys(queryParams).map((k) => ({ [k]: queryParams[k] })));
92
+ return _initialEndpoint;
93
+ };
94
+ // STATE
95
+ const [state, dispatch] = (0, react_1.useReducer)(feedDataReducer, {}, () => stateInitializer({ id, endpoint, queryParams, next: getInitialNextUrl(), cacheStrategy }));
96
+ /**
97
+ * Calculate current page
98
+ */
99
+ const getCurrentPage = (url) => {
100
+ const urlSearchParams = new URLSearchParams(url);
101
+ const params = Object.fromEntries(urlSearchParams.entries());
102
+ const currentOffset = params.offset ? parseInt(params.offset) : 0;
103
+ return currentOffset / queryParams.limit + 1;
104
+ };
105
+ /**
106
+ * Get Comments (with cache)
107
+ */
108
+ const revalidate = (url, forward) => {
109
+ return performFetchComments(url, false).then((res) => {
110
+ let _feedData;
111
+ let currentPage = getCurrentPage(state.next);
112
+ if (forward) {
113
+ let start = state.feedData.slice(0, state.feedData.length - res.results.length);
114
+ _feedData = start.concat(res.results);
115
+ }
116
+ else {
117
+ let start = state.feedData.slice(res.results.length, state.feedData.length);
118
+ _feedData = res.results.concat(start);
119
+ }
120
+ dispatch({
121
+ type: forward ? exports.feedDataActionTypes.DATA_NEXT_LOADED : exports.feedDataActionTypes.DATA_PREVIOUS_LOADED,
122
+ payload: Object.assign(Object.assign({ page: currentPage, feedData: _feedData }, (forward ? { next: res.next } : { previous: res.previous })), { total: res.count }),
123
+ });
124
+ });
125
+ };
126
+ /**
127
+ * Get Comments
128
+ */
129
+ const performFetchComments = (url, seekCache = true) => {
130
+ const __feedDataCacheKey = (0, Cache_1.getFeedCacheKey)(id, state.next);
131
+ if (seekCache && utils_1.LRUCache.hasKey(__feedDataCacheKey) && cacheStrategy !== utils_1.CacheStrategies.NETWORK_ONLY) {
132
+ return Promise.resolve(utils_1.LRUCache.get(__feedDataCacheKey));
133
+ }
134
+ return api_services_1.http
135
+ .request({
136
+ url,
137
+ method: api_services_1.Endpoints.Comments.method,
138
+ })
139
+ .then((res) => {
140
+ if (res.status >= 300) {
141
+ return Promise.reject(res);
142
+ }
143
+ utils_1.LRUCache.set(__feedDataCacheKey, res.data);
144
+ return Promise.resolve(res.data);
145
+ });
146
+ };
147
+ /**
148
+ * Fetch previous feedData
149
+ */
150
+ function getPreviousPage() {
151
+ if (endpoint && state.previous && !state.isLoadingPrevious) {
152
+ dispatch({ type: exports.feedDataActionTypes.LOADING_PREVIOUS });
153
+ performFetchComments(state.previous)
154
+ .then((res) => {
155
+ let currentPage = getCurrentPage(state.previous);
156
+ dispatch({
157
+ type: exports.feedDataActionTypes.DATA_PREVIOUS_LOADED,
158
+ payload: {
159
+ page: currentPage,
160
+ feedData: [...res.results, ...state.feedData],
161
+ previous: res.previous,
162
+ },
163
+ });
164
+ onChangePage && onChangePage(currentPage);
165
+ })
166
+ .catch((error) => {
167
+ utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, error);
168
+ })
169
+ .then(() => {
170
+ if (cacheStrategy === utils_1.CacheStrategies.STALE_WHILE_REVALIDATE) {
171
+ revalidate(state.next, false);
172
+ }
173
+ });
174
+ }
175
+ }
176
+ /**
177
+ * Fetch next feedData
178
+ */
179
+ function getNextPage() {
180
+ if (endpoint && state.next && !state.isLoadingNext) {
181
+ dispatch({ type: exports.feedDataActionTypes.LOADING_NEXT });
182
+ performFetchComments(state.next)
183
+ .then((res) => {
184
+ let currentPage = getCurrentPage(state.next);
185
+ dispatch({
186
+ type: exports.feedDataActionTypes.DATA_NEXT_LOADED,
187
+ payload: Object.assign({ page: currentPage, feedData: [...state.feedData, ...res.results], next: res.next, total: res.count, componentLoaded: true }, (queryParams.offset && state.feedData.length === 0 ? { previous: res.previous } : {})),
188
+ });
189
+ onChangePage && onChangePage(currentPage);
190
+ })
191
+ .catch((error) => {
192
+ utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, error);
193
+ })
194
+ .then(() => {
195
+ if (cacheStrategy === utils_1.CacheStrategies.STALE_WHILE_REVALIDATE) {
196
+ revalidate(state.next, true);
197
+ }
198
+ });
199
+ }
200
+ }
201
+ function reload() {
202
+ dispatch({
203
+ type: exports.feedDataActionTypes.DATA_RELOAD,
204
+ payload: {
205
+ next: getInitialNextUrl(),
206
+ },
207
+ });
208
+ }
209
+ /**
210
+ * Reset feedData status on change pageSize, offset
211
+ */
212
+ (0, react_1.useEffect)(() => {
213
+ if (state.componentLoaded && Boolean(endpoint) && !state.reload) {
214
+ reload();
215
+ }
216
+ }, [endpoint, queryParams.offset, queryParams.limit]);
217
+ /**
218
+ * Reload fetch feedData
219
+ */
220
+ (0, react_1.useEffect)(() => {
221
+ if (state.componentLoaded && state.reload && !state.isLoadingNext && !state.isLoadingPrevious) {
222
+ dispatch({
223
+ type: exports.feedDataActionTypes.DATA_RELOADED,
224
+ });
225
+ getNextPage();
226
+ }
227
+ }, [state.reload]);
228
+ return Object.assign(Object.assign({}, state), { queryParams,
229
+ getNextPage,
230
+ getPreviousPage,
231
+ reload });
232
+ }
233
+ exports.default = useSCFetchFeed;
234
+ //# sourceMappingURL=useSCFetchFeed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSCFetchFeed.js","sourceRoot":"","sources":["../../../src/hooks/useSCFetchFeed.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  /// <reference types="react" />
2
2
  import { SCFeedDiscussionType, SCFeedObjectType, SCFeedObjectTypologyType, SCFeedPostType } from '@selfcommunity/types';
3
+ import { CacheStrategies } from '@selfcommunity/utils';
3
4
  /**
4
5
  :::info
5
6
  This custom hook is used to fetch a feed object.
@@ -8,11 +9,13 @@ import { SCFeedDiscussionType, SCFeedObjectType, SCFeedObjectTypologyType, SCFee
8
9
  * @param object.id
9
10
  * @param object.feedObject
10
11
  * @param object.feedObjectType
12
+ * @param cacheStrategy
11
13
  */
12
- export default function useSCFetchFeedObject({ id, feedObject, feedObjectType, }: {
14
+ export default function useSCFetchFeedObject({ id, feedObject, feedObjectType, cacheStrategy, }: {
13
15
  id?: number;
14
16
  feedObject?: SCFeedObjectType;
15
17
  feedObjectType?: SCFeedObjectTypologyType;
18
+ cacheStrategy?: CacheStrategies;
16
19
  }): {
17
20
  obj: SCFeedObjectType | SCFeedDiscussionType | SCFeedPostType;
18
21
  setObj: import("react").Dispatch<import("react").SetStateAction<SCFeedObjectType | SCFeedDiscussionType | SCFeedPostType>>;
@@ -1 +1 @@
1
- {"version":3,"file":"useSCFetchFeedObject.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSCFetchFeedObject.ts"],"names":[],"mappings":";AAIA,OAAO,EAAC,oBAAoB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,cAAc,EAAmB,MAAM,sBAAsB,CAAC;AAGxI;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAC3C,EAAS,EACT,UAAiB,EACjB,cAAwH,GACzH,EAAE;IACD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,cAAc,CAAC,EAAE,wBAAwB,CAAC;CAC3C;;;;EA2CA"}
1
+ {"version":3,"file":"useSCFetchFeedObject.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSCFetchFeedObject.ts"],"names":[],"mappings":";AAIA,OAAO,EAAC,oBAAoB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,cAAc,EAAmB,MAAM,sBAAsB,CAAC;AAExI,OAAO,EAAW,eAAe,EAAC,MAAM,sBAAsB,CAAC;AAG/D;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAC3C,EAAS,EACT,UAAiB,EACjB,cAAwH,EACxH,aAA2C,GAC5C,EAAE;IACD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,aAAa,CAAC,EAAE,eAAe,CAAC;CACjC;;;;EA2DA"}
@@ -6,6 +6,8 @@ const utils_1 = require("@selfcommunity/utils");
6
6
  const Errors_1 = require("../constants/Errors");
7
7
  const types_1 = require("@selfcommunity/types");
8
8
  const use_deep_compare_effect_1 = require("use-deep-compare-effect");
9
+ const utils_2 = require("@selfcommunity/utils");
10
+ const Cache_1 = require("../constants/Cache");
9
11
  /**
10
12
  :::info
11
13
  This custom hook is used to fetch a feed object.
@@ -14,17 +16,22 @@ const use_deep_compare_effect_1 = require("use-deep-compare-effect");
14
16
  * @param object.id
15
17
  * @param object.feedObject
16
18
  * @param object.feedObjectType
19
+ * @param cacheStrategy
17
20
  */
18
- function useSCFetchFeedObject({ id = null, feedObject = null, feedObjectType = types_1.SCFeedObjectTypologyType.POST || types_1.SCFeedObjectTypologyType.DISCUSSION || types_1.SCFeedObjectTypologyType.STATUS, }) {
19
- const [obj, setObj] = (0, react_1.useState)(feedObject);
21
+ function useSCFetchFeedObject({ id = null, feedObject = null, feedObjectType = types_1.SCFeedObjectTypologyType.POST || types_1.SCFeedObjectTypologyType.DISCUSSION || types_1.SCFeedObjectTypologyType.STATUS, cacheStrategy = utils_2.CacheStrategies.CACHE_FIRST, }) {
22
+ const __feedObjectId = feedObject ? feedObject.id : id;
23
+ const __feedObjectType = feedObject ? feedObject.type : feedObjectType;
24
+ // CACHE
25
+ const __feedObjectCacheKey = (0, Cache_1.getFeedObjectCacheKey)(__feedObjectId, __feedObjectType);
26
+ const [obj, setObj] = (0, react_1.useState)(cacheStrategy !== utils_2.CacheStrategies.NETWORK_ONLY ? utils_2.LRUCache.get(__feedObjectCacheKey, feedObject) : null);
20
27
  const [error, setError] = (0, react_1.useState)(null);
21
28
  /**
22
29
  * Memoized fetchFeedObject
23
30
  */
24
- const fetchFeedObject = () => {
31
+ const fetchFeedObject = (0, react_1.useMemo)(() => () => {
25
32
  return api_services_1.http
26
33
  .request({
27
- url: api_services_1.Endpoints.FeedObject.url({ type: feedObjectType, id: id }),
34
+ url: api_services_1.Endpoints.FeedObject.url({ type: __feedObjectType, id: __feedObjectId }),
28
35
  method: api_services_1.Endpoints.FeedObject.method,
29
36
  })
30
37
  .then((res) => {
@@ -33,25 +40,30 @@ function useSCFetchFeedObject({ id = null, feedObject = null, feedObjectType = t
33
40
  }
34
41
  return Promise.resolve(res.data);
35
42
  });
36
- };
43
+ }, [__feedObjectId, __feedObjectType]);
37
44
  /**
38
- * If id and feedObjectType resolve feddObject
45
+ * If id and feedObjectType resolve feedObject
39
46
  */
40
47
  (0, react_1.useEffect)(() => {
41
- if (id && feedObjectType) {
48
+ if (__feedObjectId && __feedObjectType && (!obj || cacheStrategy === utils_2.CacheStrategies.STALE_WHILE_REVALIDATE)) {
42
49
  fetchFeedObject()
43
50
  .then((obj) => {
44
51
  setObj(obj);
52
+ utils_2.LRUCache.set(__feedObjectCacheKey, obj);
45
53
  })
46
54
  .catch((err) => {
55
+ utils_2.LRUCache.delete(__feedObjectCacheKey);
47
56
  setError(`FeedObject with id ${id} not found`);
48
57
  utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, `FeedObject with id ${id} not found`);
49
58
  utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, err.message);
50
59
  });
51
60
  }
52
- }, [id, feedObjectType]);
61
+ }, [__feedObjectId, __feedObjectType]);
53
62
  (0, use_deep_compare_effect_1.useDeepCompareEffectNoCheck)(() => {
54
- setObj(feedObject);
63
+ if (feedObject) {
64
+ setObj(feedObject);
65
+ utils_2.LRUCache.set(__feedObjectCacheKey, obj);
66
+ }
55
67
  }, [feedObject]);
56
68
  return { obj, setObj, error };
57
69
  }