@selfcommunity/react-core 0.1.18-alpha.0 → 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 @@
1
+ {"version":3,"file":"useSCFetchContributors.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSCFetchContributors.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,UAAU,EAAE,gBAAgB,EAAE,wBAAwB,EAAC,MAAM,sBAAsB,CAAC;AAE5F,OAAO,EAAC,eAAe,EAAmB,MAAM,sBAAsB,CAAC;AAIvE;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,UAAU,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,6BAA6B;;;;;;;CAOzC,CAAC;AA8EF;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,KAAK,EAAE;IACpD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,cAAc,EAAE,wBAAwB,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,CAAC,IAAI,KAAA,KAAK,GAAG,CAAC;IAC7B,aAAa,CAAC,EAAE,eAAe,CAAC;CACjC,OAgLA"}
@@ -0,0 +1,230 @@
1
+ import { useEffect, useReducer } from 'react';
2
+ import { SCOPE_SC_CORE } from '../constants/Errors';
3
+ import { Endpoints, http } from '@selfcommunity/api-services';
4
+ import { CacheStrategies, Logger, LRUCache } from '@selfcommunity/utils';
5
+ import useSCFetchFeedObject from './useSCFetchFeedObject';
6
+ import { getContributorsCacheKey } from '../constants/Cache';
7
+ /**
8
+ * @hidden
9
+ * We have complex state logic that involves multiple sub-values,
10
+ * so useReducer is preferable to useState.
11
+ * Define all possible auth action types label
12
+ * Use this to export actions and dispatch an action
13
+ */
14
+ export const contributorsObjectActionTypes = {
15
+ LOADING_NEXT: '_loading_next',
16
+ LOADING_PREVIOUS: '_loading_previous',
17
+ DATA_NEXT_LOADED: '_data_next_loaded',
18
+ DATA_PREVIOUS_LOADED: '_data_previous_loaded',
19
+ DATA_RELOAD: '_data_reload',
20
+ DATA_RELOADED: '_data_reloaded',
21
+ };
22
+ /**
23
+ * contributorsReducer:
24
+ * - manage the state of contributors object
25
+ * - update the state base on action type
26
+ * @param state
27
+ * @param action
28
+ */
29
+ function contributorsReducer(state, action) {
30
+ switch (action.type) {
31
+ case contributorsObjectActionTypes.LOADING_NEXT:
32
+ return Object.assign(Object.assign({}, state), { isLoadingNext: true, isLoadingPrevious: false });
33
+ case contributorsObjectActionTypes.LOADING_PREVIOUS:
34
+ return Object.assign(Object.assign({}, state), { isLoadingNext: false, isLoadingPrevious: true });
35
+ case contributorsObjectActionTypes.DATA_NEXT_LOADED:
36
+ 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 } : {}));
37
+ case contributorsObjectActionTypes.DATA_PREVIOUS_LOADED:
38
+ return Object.assign(Object.assign({}, state), { page: action.payload.currentPage, contributors: action.payload.contributors, isLoadingPrevious: false, previous: action.payload.previous });
39
+ case contributorsObjectActionTypes.DATA_RELOAD:
40
+ return Object.assign(Object.assign({}, state), { next: action.payload.next, contributors: [], total: 0, previous: null, reload: true });
41
+ case contributorsObjectActionTypes.DATA_RELOADED:
42
+ return Object.assign(Object.assign({}, state), { componentLoaded: false, reload: false });
43
+ default:
44
+ throw new Error(`Unhandled type: ${action.type}`);
45
+ }
46
+ }
47
+ /**
48
+ * Define initial state
49
+ * @param data
50
+ */
51
+ function stateInitializer(data) {
52
+ const __contributorsObjectCacheKey = data.obj ? getContributorsCacheKey(data.obj.id, data.obj.type, data.next) : null;
53
+ let _initState = {
54
+ componentLoaded: false,
55
+ contributors: [],
56
+ total: 0,
57
+ next: data.next,
58
+ previous: null,
59
+ isLoadingNext: false,
60
+ isLoadingPrevious: false,
61
+ page: data.offset / data.pageSize + 1,
62
+ reload: false,
63
+ };
64
+ if (__contributorsObjectCacheKey && LRUCache.hasKey(__contributorsObjectCacheKey) && data.cacheStrategy !== CacheStrategies.NETWORK_ONLY) {
65
+ const _cachedData = LRUCache.get(__contributorsObjectCacheKey);
66
+ return Object.assign(Object.assign({}, _initState), { total: _cachedData.count, next: _cachedData.next, previous: _cachedData.previous, contributors: _cachedData.results });
67
+ }
68
+ return _initState;
69
+ }
70
+ /**
71
+ :::info
72
+ This custom hooks is used to fetch paginated contributors.
73
+ :::
74
+ * @param id
75
+ * @param feedObject
76
+ * @param feedObjectType
77
+ * @param offset
78
+ * @param pageSize
79
+ */
80
+ export default function useSCFetchContributors(props) {
81
+ // PROPS
82
+ const { id, feedObject, feedObjectType, offset = 0, pageSize = 5, onChangePage, cacheStrategy = CacheStrategies.CACHE_FIRST } = props;
83
+ // FeedObject
84
+ const { obj, setObj } = useSCFetchFeedObject({ id, feedObject, feedObjectType });
85
+ const objId = obj ? obj.id : null;
86
+ /**
87
+ * Get next url
88
+ */
89
+ const getNextUrl = () => {
90
+ const _offset = offset ? `&offset=${offset}` : '';
91
+ const _objectId = obj ? obj.id : id;
92
+ const _typeObject = obj ? obj.type : feedObjectType;
93
+ return `${Endpoints.FeedObjectContributorsList.url({ type: _typeObject, id: _objectId })}?limit=${pageSize}${_offset}`;
94
+ };
95
+ // STATE
96
+ const [state, dispatch] = useReducer(contributorsReducer, {}, () => stateInitializer({ obj, offset, pageSize, next: getNextUrl(), cacheStrategy }));
97
+ /**
98
+ * Calculate current page
99
+ */
100
+ const getCurrentPage = (url) => {
101
+ const urlSearchParams = new URLSearchParams(url);
102
+ const params = Object.fromEntries(urlSearchParams.entries());
103
+ const currentOffset = params.offset ? parseInt(params.offset) : 0;
104
+ return currentOffset / pageSize + 1;
105
+ };
106
+ /**
107
+ * Get Comments (with cache)
108
+ */
109
+ const revalidate = (url, forward) => {
110
+ return performFetchComments(url, false).then((res) => {
111
+ let _contributors;
112
+ let currentPage = getCurrentPage(state.next);
113
+ if (forward) {
114
+ let start = state.contributors.slice(0, state.contributors.length - res.results.length);
115
+ _contributors = start.concat(res.results);
116
+ }
117
+ else {
118
+ let start = state.contributors.slice(res.results.length, state.contributors.length);
119
+ _contributors = res.results.concat(start);
120
+ }
121
+ dispatch({
122
+ type: forward ? contributorsObjectActionTypes.DATA_NEXT_LOADED : contributorsObjectActionTypes.DATA_PREVIOUS_LOADED,
123
+ payload: Object.assign(Object.assign({ page: currentPage, contributors: _contributors }, (forward ? { next: res.next } : { previous: res.previous })), { total: res.count }),
124
+ });
125
+ });
126
+ };
127
+ /**
128
+ * Get Comments
129
+ */
130
+ const performFetchComments = (url, seekCache = true) => {
131
+ const _contributorsCacheKey = getContributorsCacheKey(obj.id, obj.type, url);
132
+ if (seekCache && LRUCache.hasKey(_contributorsCacheKey) && cacheStrategy !== CacheStrategies.NETWORK_ONLY) {
133
+ return Promise.resolve(LRUCache.get(_contributorsCacheKey));
134
+ }
135
+ return http
136
+ .request({
137
+ url,
138
+ method: Endpoints.Comments.method,
139
+ })
140
+ .then((res) => {
141
+ if (res.status >= 300) {
142
+ return Promise.reject(res);
143
+ }
144
+ LRUCache.set(_contributorsCacheKey, res.data);
145
+ return Promise.resolve(res.data);
146
+ });
147
+ };
148
+ /**
149
+ * Fetch previous contributors
150
+ */
151
+ function getPreviousPage() {
152
+ if (obj && state.previous && !state.isLoadingPrevious) {
153
+ dispatch({ type: contributorsObjectActionTypes.LOADING_PREVIOUS });
154
+ performFetchComments(state.previous)
155
+ .then((res) => {
156
+ let currentPage = getCurrentPage(state.previous);
157
+ dispatch({
158
+ type: contributorsObjectActionTypes.DATA_PREVIOUS_LOADED,
159
+ payload: {
160
+ page: currentPage,
161
+ contributors: [...res.results, ...state.contributors],
162
+ previous: res.previous,
163
+ },
164
+ });
165
+ onChangePage && onChangePage(currentPage);
166
+ })
167
+ .catch((error) => {
168
+ Logger.error(SCOPE_SC_CORE, error);
169
+ })
170
+ .then(() => {
171
+ if (cacheStrategy === CacheStrategies.STALE_WHILE_REVALIDATE) {
172
+ revalidate(state.next, false);
173
+ }
174
+ });
175
+ }
176
+ }
177
+ /**
178
+ * Fetch next contributors
179
+ */
180
+ function getNextPage() {
181
+ if (obj && state.next && !state.isLoadingNext) {
182
+ dispatch({ type: contributorsObjectActionTypes.LOADING_NEXT });
183
+ performFetchComments(state.next)
184
+ .then((res) => {
185
+ let currentPage = getCurrentPage(state.next);
186
+ dispatch({
187
+ type: contributorsObjectActionTypes.DATA_NEXT_LOADED,
188
+ 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 } : {})),
189
+ });
190
+ onChangePage && onChangePage(currentPage);
191
+ })
192
+ .catch((error) => {
193
+ Logger.error(SCOPE_SC_CORE, error);
194
+ })
195
+ .then(() => {
196
+ if (cacheStrategy === CacheStrategies.STALE_WHILE_REVALIDATE) {
197
+ revalidate(state.next, true);
198
+ }
199
+ });
200
+ }
201
+ }
202
+ /**
203
+ * Reset contributors status on change pageSize, offset
204
+ */
205
+ useEffect(() => {
206
+ if (state.componentLoaded && Boolean(obj) && !state.reload) {
207
+ dispatch({
208
+ type: contributorsObjectActionTypes.DATA_RELOAD,
209
+ payload: {
210
+ next: getNextUrl(),
211
+ },
212
+ });
213
+ }
214
+ }, [objId, pageSize, offset]);
215
+ /**
216
+ * Reload fetch contributors
217
+ */
218
+ useEffect(() => {
219
+ if (state.componentLoaded && state.reload && !state.isLoadingNext && !state.isLoadingPrevious) {
220
+ dispatch({
221
+ type: contributorsObjectActionTypes.DATA_RELOADED,
222
+ });
223
+ getNextPage();
224
+ }
225
+ }, [state.reload]);
226
+ return Object.assign(Object.assign({ feedObject: obj, setFeedObject: setObj }, state), { pageSize,
227
+ getNextPage,
228
+ getPreviousPage });
229
+ }
230
+ //# sourceMappingURL=useSCFetchContributors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSCFetchContributors.js","sourceRoot":"","sources":["../../../src/hooks/useSCFetchContributors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,UAAU,EAAC,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAC,SAAS,EAAE,IAAI,EAAe,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AACvE,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAC,uBAAuB,EAAC,MAAM,oBAAoB,CAAC;AAiB3D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,YAAY,EAAE,eAAe;IAC7B,gBAAgB,EAAE,mBAAmB;IACrC,gBAAgB,EAAE,mBAAmB;IACrC,oBAAoB,EAAE,uBAAuB;IAC7C,WAAW,EAAE,cAAc;IAC3B,aAAa,EAAE,gBAAgB;CAChC,CAAC;AAEF;;;;;;GAMG;AACH,SAAS,mBAAmB,CAAC,KAAK,EAAE,MAAM;IACxC,QAAQ,MAAM,CAAC,IAAI,EAAE;QACnB,KAAK,6BAA6B,CAAC,YAAY;YAC7C,uCAAW,KAAK,KAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,IAAE;QACnE,KAAK,6BAA6B,CAAC,gBAAgB;YACjD,uCAAW,KAAK,KAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,IAAE;QACnE,KAAK,6BAA6B,CAAC,gBAAgB;YACjD,mEACK,KAAK,KACR,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,EAChC,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,EACzC,aAAa,EAAE,KAAK,EACpB,eAAe,EAAE,IAAI,EACrB,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,KACtB,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GACpE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAC9D;QACJ,KAAK,6BAA6B,CAAC,oBAAoB;YACrD,uCACK,KAAK,KACR,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,EAChC,YAAY,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY,EACzC,iBAAiB,EAAE,KAAK,EACxB,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,IACjC;QACJ,KAAK,6BAA6B,CAAC,WAAW;YAC5C,uCACK,KAAK,KACR,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EACzB,YAAY,EAAE,EAAE,EAChB,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,IAAI,EACd,MAAM,EAAE,IAAI,IACZ;QACJ,KAAK,6BAA6B,CAAC,aAAa;YAC9C,uCACK,KAAK,KACR,eAAe,EAAE,KAAK,EACtB,MAAM,EAAE,KAAK,IACb;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;KACrD;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,IAAI;IAC5B,MAAM,4BAA4B,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtH,IAAI,UAAU,GAAG;QACf,eAAe,EAAE,KAAK;QACtB,YAAY,EAAE,EAAE;QAChB,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,KAAK;QACpB,iBAAiB,EAAE,KAAK;QACxB,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC;QACrC,MAAM,EAAE,KAAK;KACd,CAAC;IACF,IAAI,4BAA4B,IAAI,QAAQ,CAAC,MAAM,CAAC,4BAA4B,CAAC,IAAI,IAAI,CAAC,aAAa,KAAK,eAAe,CAAC,YAAY,EAAE;QACxI,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC/D,uCAAW,UAAU,GAAK,EAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,OAAO,EAAC,EAAE;KAClJ;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,KAQ9C;IACC,QAAQ;IACR,MAAM,EAAC,EAAE,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,YAAY,EAAE,aAAa,GAAG,eAAe,CAAC,WAAW,EAAC,GAAG,KAAK,CAAC;IAEpI,aAAa;IACb,MAAM,EAAC,GAAG,EAAE,MAAM,EAAC,GAAG,oBAAoB,CAAC,EAAC,EAAE,EAAE,UAAU,EAAE,cAAc,EAAC,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAElC;;OAEG;IACH,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClD,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpC,MAAM,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC;QACpD,OAAO,GAAG,SAAS,CAAC,0BAA0B,CAAC,GAAG,CAAC,EAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,SAAS,EAAC,CAAC,UAAU,QAAQ,GAAG,OAAO,EAAE,CAAC;IACvH,CAAC,CAAC;IAEF,QAAQ;IACR,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,mBAAmB,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,EAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,aAAa,EAAC,CAAC,CAAC,CAAC;IAElJ;;OAEG;IACH,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,EAAE;QAC7B,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,MAAM,aAAa,GAAW,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,OAAO,aAAa,GAAG,QAAQ,GAAG,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF;;OAEG;IACH,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QAClC,OAAO,oBAAoB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACnD,IAAI,aAAa,CAAC;YAClB,IAAI,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,OAAO,EAAE;gBACX,IAAI,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACxF,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;aAC3C;iBAAM;gBACL,IAAI,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBACpF,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aAC3C;YACD,QAAQ,CAAC;gBACP,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC,gBAAgB,CAAC,CAAC,CAAC,6BAA6B,CAAC,oBAAoB;gBACnH,OAAO,gCACL,IAAI,EAAE,WAAW,EACjB,YAAY,EAAE,aAAa,IACxB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAC,CAAC,KAC1D,KAAK,EAAE,GAAG,CAAC,KAAK,GACjB;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF;;OAEG;IACH,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,EAAE,EAAE;QACrD,MAAM,qBAAqB,GAAG,uBAAuB,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7E,IAAI,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,aAAa,KAAK,eAAe,CAAC,YAAY,EAAE;YACzG,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;SAC7D;QACD,OAAO,IAAI;aACR,OAAO,CAAC;YACP,GAAG;YACH,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM;SAClC,CAAC;aACD,IAAI,CAAC,CAAC,GAAsB,EAAE,EAAE;YAC/B,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE;gBACrB,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aAC5B;YACD,QAAQ,CAAC,GAAG,CAAC,qBAAqB,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF;;OAEG;IACH,SAAS,eAAe;QACtB,IAAI,GAAG,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;YACrD,QAAQ,CAAC,EAAC,IAAI,EAAE,6BAA6B,CAAC,gBAAgB,EAAC,CAAC,CAAC;YACjE,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC;iBACjC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBACZ,IAAI,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACjD,QAAQ,CAAC;oBACP,IAAI,EAAE,6BAA6B,CAAC,oBAAoB;oBACxD,OAAO,EAAE;wBACP,IAAI,EAAE,WAAW;wBACjB,YAAY,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,YAAY,CAAC;wBACrD,QAAQ,EAAE,GAAG,CAAC,QAAQ;qBACvB;iBACF,CAAC,CAAC;gBACH,YAAY,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;YAC5C,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YACrC,CAAC,CAAC;iBACD,IAAI,CAAC,GAAG,EAAE;gBACT,IAAI,aAAa,KAAK,eAAe,CAAC,sBAAsB,EAAE;oBAC5D,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;iBAC/B;YACH,CAAC,CAAC,CAAC;SACN;IACH,CAAC;IAED;;OAEG;IACH,SAAS,WAAW;QAClB,IAAI,GAAG,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;YAC7C,QAAQ,CAAC,EAAC,IAAI,EAAE,6BAA6B,CAAC,YAAY,EAAC,CAAC,CAAC;YAC7D,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC;iBAC7B,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBACZ,IAAI,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7C,QAAQ,CAAC;oBACP,IAAI,EAAE,6BAA6B,CAAC,gBAAgB;oBACpD,OAAO,kBACL,IAAI,EAAE,WAAW,EACjB,YAAY,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,EACrD,IAAI,EAAE,GAAG,CAAC,IAAI,EACd,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,eAAe,EAAE,IAAI,IAClB,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAC/E;iBACF,CAAC,CAAC;gBACH,YAAY,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;YAC5C,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YACrC,CAAC,CAAC;iBACD,IAAI,CAAC,GAAG,EAAE;gBACT,IAAI,aAAa,KAAK,eAAe,CAAC,sBAAsB,EAAE;oBAC5D,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBAC9B;YACH,CAAC,CAAC,CAAC;SACN;IACH,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,CAAC,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAC1D,QAAQ,CAAC;gBACP,IAAI,EAAE,6BAA6B,CAAC,WAAW;gBAC/C,OAAO,EAAE;oBACP,IAAI,EAAE,UAAU,EAAE;iBACnB;aACF,CAAC,CAAC;SACJ;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAE9B;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;YAC7F,QAAQ,CAAC;gBACP,IAAI,EAAE,6BAA6B,CAAC,aAAa;aAClD,CAAC,CAAC;YACH,WAAW,EAAE,CAAC;SACf;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnB,qCACE,UAAU,EAAE,GAAG,EACf,aAAa,EAAE,MAAM,IAClB,KAAK,KACR,QAAQ;QACR,WAAW;QACX,eAAe,IACf;AACJ,CAAC"}
@@ -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,230 @@
1
+ import { useEffect, useMemo, useReducer } from 'react';
2
+ import { SCOPE_SC_CORE } from '../constants/Errors';
3
+ import { Endpoints, http } from '@selfcommunity/api-services';
4
+ import { CacheStrategies, Logger, LRUCache } from '@selfcommunity/utils';
5
+ import { getFeedCacheKey } from '../constants/Cache';
6
+ import { appendURLSearchParams } from '@selfcommunity/utils';
7
+ /**
8
+ * @hidden
9
+ * We have complex state logic that involves multiple sub-values,
10
+ * so useReducer is preferable to useState.
11
+ * Define all possible auth action types label
12
+ * Use this to export actions and dispatch an action
13
+ */
14
+ export const feedDataActionTypes = {
15
+ LOADING_NEXT: '_loading_next',
16
+ LOADING_PREVIOUS: '_loading_previous',
17
+ DATA_NEXT_LOADED: '_data_next_loaded',
18
+ DATA_PREVIOUS_LOADED: '_data_previous_loaded',
19
+ DATA_RELOAD: '_data_reload',
20
+ DATA_RELOADED: '_data_reloaded',
21
+ };
22
+ /**
23
+ * feedDataReducer:
24
+ * - manage the state of feedData object
25
+ * - update the state base on action type
26
+ * @param state
27
+ * @param action
28
+ */
29
+ function feedDataReducer(state, action) {
30
+ switch (action.type) {
31
+ case feedDataActionTypes.LOADING_NEXT:
32
+ return Object.assign(Object.assign({}, state), { isLoadingNext: true, isLoadingPrevious: false });
33
+ case feedDataActionTypes.LOADING_PREVIOUS:
34
+ return Object.assign(Object.assign({}, state), { isLoadingNext: false, isLoadingPrevious: true });
35
+ case feedDataActionTypes.DATA_NEXT_LOADED:
36
+ 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 } : {}));
37
+ case feedDataActionTypes.DATA_PREVIOUS_LOADED:
38
+ return Object.assign(Object.assign({}, state), { page: action.payload.currentPage, feedData: action.payload.feedData, isLoadingPrevious: false, previous: action.payload.previous });
39
+ case feedDataActionTypes.DATA_RELOAD:
40
+ return Object.assign(Object.assign({}, state), { next: action.payload.next, feedData: [], total: 0, previous: null, reload: true });
41
+ case feedDataActionTypes.DATA_RELOADED:
42
+ return Object.assign(Object.assign({}, state), { componentLoaded: false, reload: false });
43
+ default:
44
+ throw new Error(`Unhandled type: ${action.type}`);
45
+ }
46
+ }
47
+ /**
48
+ * Define initial state
49
+ * @param data
50
+ */
51
+ function stateInitializer(data) {
52
+ const __feedDataCacheKey = getFeedCacheKey(data.id, data.next);
53
+ let _initState = {
54
+ componentLoaded: false,
55
+ feedData: [],
56
+ total: 0,
57
+ next: data.next,
58
+ previous: null,
59
+ isLoadingNext: false,
60
+ isLoadingPrevious: false,
61
+ page: data.queryParams.offset / data.queryParams.limit + 1,
62
+ reload: false,
63
+ };
64
+ if (__feedDataCacheKey && LRUCache.hasKey(__feedDataCacheKey) && data.cacheStrategy !== CacheStrategies.NETWORK_ONLY) {
65
+ const _cachedData = LRUCache.get(__feedDataCacheKey);
66
+ return Object.assign(Object.assign({}, _initState), { componentLoaded: true, total: _cachedData.count, next: _cachedData.next, previous: _cachedData.previous, feedData: _cachedData.results });
67
+ }
68
+ return _initState;
69
+ }
70
+ /**
71
+ :::info
72
+ This custom hooks is used to fetch paginated feedData.
73
+ :::
74
+ * @param endpoint
75
+ * @param offset
76
+ * @param pageSize
77
+ * @param onChangePage
78
+ * @param cacheStrategy
79
+ */
80
+ export default function useSCFetchFeed(props) {
81
+ // PROPS
82
+ const { id, endpoint, endpointQueryParams = { limit: 10, offset: 0 }, onChangePage, cacheStrategy = CacheStrategies.CACHE_FIRST } = props;
83
+ const queryParams = useMemo(() => Object.assign({ limit: 10, offset: 0 }, endpointQueryParams), [endpointQueryParams]);
84
+ /**
85
+ * Get next url
86
+ */
87
+ const getInitialNextUrl = () => {
88
+ const _initialEndpoint = appendURLSearchParams(endpoint.url({}), Object.keys(queryParams).map((k) => ({ [k]: queryParams[k] })));
89
+ return _initialEndpoint;
90
+ };
91
+ // STATE
92
+ const [state, dispatch] = useReducer(feedDataReducer, {}, () => stateInitializer({ id, endpoint, queryParams, next: getInitialNextUrl(), cacheStrategy }));
93
+ /**
94
+ * Calculate current page
95
+ */
96
+ const getCurrentPage = (url) => {
97
+ const urlSearchParams = new URLSearchParams(url);
98
+ const params = Object.fromEntries(urlSearchParams.entries());
99
+ const currentOffset = params.offset ? parseInt(params.offset) : 0;
100
+ return currentOffset / queryParams.limit + 1;
101
+ };
102
+ /**
103
+ * Get Comments (with cache)
104
+ */
105
+ const revalidate = (url, forward) => {
106
+ return performFetchComments(url, false).then((res) => {
107
+ let _feedData;
108
+ let currentPage = getCurrentPage(state.next);
109
+ if (forward) {
110
+ let start = state.feedData.slice(0, state.feedData.length - res.results.length);
111
+ _feedData = start.concat(res.results);
112
+ }
113
+ else {
114
+ let start = state.feedData.slice(res.results.length, state.feedData.length);
115
+ _feedData = res.results.concat(start);
116
+ }
117
+ dispatch({
118
+ type: forward ? feedDataActionTypes.DATA_NEXT_LOADED : feedDataActionTypes.DATA_PREVIOUS_LOADED,
119
+ payload: Object.assign(Object.assign({ page: currentPage, feedData: _feedData }, (forward ? { next: res.next } : { previous: res.previous })), { total: res.count }),
120
+ });
121
+ });
122
+ };
123
+ /**
124
+ * Get Comments
125
+ */
126
+ const performFetchComments = (url, seekCache = true) => {
127
+ const __feedDataCacheKey = getFeedCacheKey(id, state.next);
128
+ if (seekCache && LRUCache.hasKey(__feedDataCacheKey) && cacheStrategy !== CacheStrategies.NETWORK_ONLY) {
129
+ return Promise.resolve(LRUCache.get(__feedDataCacheKey));
130
+ }
131
+ return http
132
+ .request({
133
+ url,
134
+ method: Endpoints.Comments.method,
135
+ })
136
+ .then((res) => {
137
+ if (res.status >= 300) {
138
+ return Promise.reject(res);
139
+ }
140
+ LRUCache.set(__feedDataCacheKey, res.data);
141
+ return Promise.resolve(res.data);
142
+ });
143
+ };
144
+ /**
145
+ * Fetch previous feedData
146
+ */
147
+ function getPreviousPage() {
148
+ if (endpoint && state.previous && !state.isLoadingPrevious) {
149
+ dispatch({ type: feedDataActionTypes.LOADING_PREVIOUS });
150
+ performFetchComments(state.previous)
151
+ .then((res) => {
152
+ let currentPage = getCurrentPage(state.previous);
153
+ dispatch({
154
+ type: feedDataActionTypes.DATA_PREVIOUS_LOADED,
155
+ payload: {
156
+ page: currentPage,
157
+ feedData: [...res.results, ...state.feedData],
158
+ previous: res.previous,
159
+ },
160
+ });
161
+ onChangePage && onChangePage(currentPage);
162
+ })
163
+ .catch((error) => {
164
+ Logger.error(SCOPE_SC_CORE, error);
165
+ })
166
+ .then(() => {
167
+ if (cacheStrategy === CacheStrategies.STALE_WHILE_REVALIDATE) {
168
+ revalidate(state.next, false);
169
+ }
170
+ });
171
+ }
172
+ }
173
+ /**
174
+ * Fetch next feedData
175
+ */
176
+ function getNextPage() {
177
+ if (endpoint && state.next && !state.isLoadingNext) {
178
+ dispatch({ type: feedDataActionTypes.LOADING_NEXT });
179
+ performFetchComments(state.next)
180
+ .then((res) => {
181
+ let currentPage = getCurrentPage(state.next);
182
+ dispatch({
183
+ type: feedDataActionTypes.DATA_NEXT_LOADED,
184
+ 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 } : {})),
185
+ });
186
+ onChangePage && onChangePage(currentPage);
187
+ })
188
+ .catch((error) => {
189
+ Logger.error(SCOPE_SC_CORE, error);
190
+ })
191
+ .then(() => {
192
+ if (cacheStrategy === CacheStrategies.STALE_WHILE_REVALIDATE) {
193
+ revalidate(state.next, true);
194
+ }
195
+ });
196
+ }
197
+ }
198
+ function reload() {
199
+ dispatch({
200
+ type: feedDataActionTypes.DATA_RELOAD,
201
+ payload: {
202
+ next: getInitialNextUrl(),
203
+ },
204
+ });
205
+ }
206
+ /**
207
+ * Reset feedData status on change pageSize, offset
208
+ */
209
+ useEffect(() => {
210
+ if (state.componentLoaded && Boolean(endpoint) && !state.reload) {
211
+ reload();
212
+ }
213
+ }, [endpoint, queryParams.offset, queryParams.limit]);
214
+ /**
215
+ * Reload fetch feedData
216
+ */
217
+ useEffect(() => {
218
+ if (state.componentLoaded && state.reload && !state.isLoadingNext && !state.isLoadingPrevious) {
219
+ dispatch({
220
+ type: feedDataActionTypes.DATA_RELOADED,
221
+ });
222
+ getNextPage();
223
+ }
224
+ }, [state.reload]);
225
+ return Object.assign(Object.assign({}, state), { queryParams,
226
+ getNextPage,
227
+ getPreviousPage,
228
+ reload });
229
+ }
230
+ //# sourceMappingURL=useSCFetchFeed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSCFetchFeed.js","sourceRoot":"","sources":["../../../src/hooks/useSCFetchFeed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAC,MAAM,OAAO,CAAC;AACrD,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAC,SAAS,EAAgB,IAAI,EAAe,MAAM,6BAA6B,CAAC;AACxF,OAAO,EAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAC,eAAe,EAAC,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAC,qBAAqB,EAAC,MAAM,sBAAsB,CAAC;AAiB3D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,YAAY,EAAE,eAAe;IAC7B,gBAAgB,EAAE,mBAAmB;IACrC,gBAAgB,EAAE,mBAAmB;IACrC,oBAAoB,EAAE,uBAAuB;IAC7C,WAAW,EAAE,cAAc;IAC3B,aAAa,EAAE,gBAAgB;CAChC,CAAC;AAEF;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,KAAK,EAAE,MAAM;IACpC,QAAQ,MAAM,CAAC,IAAI,EAAE;QACnB,KAAK,mBAAmB,CAAC,YAAY;YACnC,uCAAW,KAAK,KAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,IAAE;QACnE,KAAK,mBAAmB,CAAC,gBAAgB;YACvC,uCAAW,KAAK,KAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,IAAE;QACnE,KAAK,mBAAmB,CAAC,gBAAgB;YACvC,mEACK,KAAK,KACR,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,EAChC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EACjC,aAAa,EAAE,KAAK,EACpB,eAAe,EAAE,IAAI,EACrB,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,KACtB,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GACpE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAC9D;QACJ,KAAK,mBAAmB,CAAC,oBAAoB;YAC3C,uCACK,KAAK,KACR,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,WAAW,EAChC,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EACjC,iBAAiB,EAAE,KAAK,EACxB,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,IACjC;QACJ,KAAK,mBAAmB,CAAC,WAAW;YAClC,uCACK,KAAK,KACR,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EACzB,QAAQ,EAAE,EAAE,EACZ,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,IAAI,EACd,MAAM,EAAE,IAAI,IACZ;QACJ,KAAK,mBAAmB,CAAC,aAAa;YACpC,uCACK,KAAK,KACR,eAAe,EAAE,KAAK,EACtB,MAAM,EAAE,KAAK,IACb;QACJ;YACE,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;KACrD;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CAAC,IAAI;IAC5B,MAAM,kBAAkB,GAAG,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,IAAI,UAAU,GAAG;QACf,eAAe,EAAE,KAAK;QACtB,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,CAAC;QACR,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,KAAK;QACpB,iBAAiB,EAAE,KAAK;QACxB,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC;QAC1D,MAAM,EAAE,KAAK;KACd,CAAC;IACF,IAAI,kBAAkB,IAAI,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,IAAI,CAAC,aAAa,KAAK,eAAe,CAAC,YAAY,EAAE;QACpH,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACrD,uCACK,UAAU,GACV,EAAC,eAAe,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,OAAO,EAAC,EAC3I;KACH;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,KAMtC;IACC,QAAQ;IACR,MAAM,EAAC,EAAE,EAAE,QAAQ,EAAE,mBAAmB,GAAG,EAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAC,EAAE,YAAY,EAAE,aAAa,GAAG,eAAe,CAAC,WAAW,EAAC,GAAG,KAAK,CAAC;IACtI,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAC,EAAE,mBAAmB,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAErH;;OAEG;IACH,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,MAAM,gBAAgB,GAAG,qBAAqB,CAC5C,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAChB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAC7D,CAAC;QACF,OAAO,gBAAgB,CAAC;IAC1B,CAAC,CAAC;IAEF,QAAQ;IACR,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,eAAe,EAAE,EAAE,EAAE,GAAG,EAAE,CAC7D,gBAAgB,CAAC,EAAC,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,aAAa,EAAC,CAAC,CACxF,CAAC;IAEF;;OAEG;IACH,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,EAAE;QAC7B,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,MAAM,aAAa,GAAW,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,OAAO,aAAa,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF;;OAEG;IACH,MAAM,UAAU,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QAClC,OAAO,oBAAoB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACnD,IAAI,SAAS,CAAC;YACd,IAAI,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,OAAO,EAAE;gBACX,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAChF,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;aACvC;iBAAM;gBACL,IAAI,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;gBAC5E,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACvC;YACD,QAAQ,CAAC;gBACP,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,CAAC,mBAAmB,CAAC,oBAAoB;gBAC/F,OAAO,gCACL,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,SAAS,IAChB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAC,IAAI,EAAE,GAAG,CAAC,IAAI,EAAC,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAC,CAAC,KAC1D,KAAK,EAAE,GAAG,CAAC,KAAK,GACjB;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF;;OAEG;IACH,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,EAAE,EAAE;QACrD,MAAM,kBAAkB,GAAG,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3D,IAAI,SAAS,IAAI,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,aAAa,KAAK,eAAe,CAAC,YAAY,EAAE;YACtG,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;SAC1D;QACD,OAAO,IAAI;aACR,OAAO,CAAC;YACP,GAAG;YACH,MAAM,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM;SAClC,CAAC;aACD,IAAI,CAAC,CAAC,GAAsB,EAAE,EAAE;YAC/B,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE;gBACrB,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aAC5B;YACD,QAAQ,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF;;OAEG;IACH,SAAS,eAAe;QACtB,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;YAC1D,QAAQ,CAAC,EAAC,IAAI,EAAE,mBAAmB,CAAC,gBAAgB,EAAC,CAAC,CAAC;YACvD,oBAAoB,CAAC,KAAK,CAAC,QAAQ,CAAC;iBACjC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBACZ,IAAI,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACjD,QAAQ,CAAC;oBACP,IAAI,EAAE,mBAAmB,CAAC,oBAAoB;oBAC9C,OAAO,EAAE;wBACP,IAAI,EAAE,WAAW;wBACjB,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;wBAC7C,QAAQ,EAAE,GAAG,CAAC,QAAQ;qBACvB;iBACF,CAAC,CAAC;gBACH,YAAY,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;YAC5C,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YACrC,CAAC,CAAC;iBACD,IAAI,CAAC,GAAG,EAAE;gBACT,IAAI,aAAa,KAAK,eAAe,CAAC,sBAAsB,EAAE;oBAC5D,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;iBAC/B;YACH,CAAC,CAAC,CAAC;SACN;IACH,CAAC;IAED;;OAEG;IACH,SAAS,WAAW;QAClB,IAAI,QAAQ,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;YAClD,QAAQ,CAAC,EAAC,IAAI,EAAE,mBAAmB,CAAC,YAAY,EAAC,CAAC,CAAC;YACnD,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC;iBAC7B,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBACZ,IAAI,WAAW,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7C,QAAQ,CAAC;oBACP,IAAI,EAAE,mBAAmB,CAAC,gBAAgB;oBAC1C,OAAO,kBACL,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,EAC7C,IAAI,EAAE,GAAG,CAAC,IAAI,EACd,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,eAAe,EAAE,IAAI,IAClB,CAAC,WAAW,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CACvF;iBACF,CAAC,CAAC;gBACH,YAAY,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC;YAC5C,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YACrC,CAAC,CAAC;iBACD,IAAI,CAAC,GAAG,EAAE;gBACT,IAAI,aAAa,KAAK,eAAe,CAAC,sBAAsB,EAAE;oBAC5D,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;iBAC9B;YACH,CAAC,CAAC,CAAC;SACN;IACH,CAAC;IAED,SAAS,MAAM;QACb,QAAQ,CAAC;YACP,IAAI,EAAE,mBAAmB,CAAC,WAAW;YACrC,OAAO,EAAE;gBACP,IAAI,EAAE,iBAAiB,EAAE;aAC1B;SACF,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,CAAC,eAAe,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAC/D,MAAM,EAAE,CAAC;SACV;IACH,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAEtD;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;YAC7F,QAAQ,CAAC;gBACP,IAAI,EAAE,mBAAmB,CAAC,aAAa;aACxC,CAAC,CAAC;YACH,WAAW,EAAE,CAAC;SACf;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnB,uCACK,KAAK,KACR,WAAW;QACX,WAAW;QACX,eAAe;QACf,MAAM,IACN;AACJ,CAAC"}
@@ -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"}
@@ -1,9 +1,11 @@
1
- import { useEffect, useState } from 'react';
1
+ import { useEffect, useMemo, useState } from 'react';
2
2
  import { http, Endpoints } from '@selfcommunity/api-services';
3
3
  import { Logger } from '@selfcommunity/utils';
4
4
  import { SCOPE_SC_CORE } from '../constants/Errors';
5
5
  import { SCFeedObjectTypologyType } from '@selfcommunity/types';
6
6
  import { useDeepCompareEffectNoCheck } from 'use-deep-compare-effect';
7
+ import { LRUCache, CacheStrategies } from '@selfcommunity/utils';
8
+ import { getFeedObjectCacheKey } from '../constants/Cache';
7
9
  /**
8
10
  :::info
9
11
  This custom hook is used to fetch a feed object.
@@ -12,17 +14,22 @@ import { useDeepCompareEffectNoCheck } from 'use-deep-compare-effect';
12
14
  * @param object.id
13
15
  * @param object.feedObject
14
16
  * @param object.feedObjectType
17
+ * @param cacheStrategy
15
18
  */
16
- export default function useSCFetchFeedObject({ id = null, feedObject = null, feedObjectType = SCFeedObjectTypologyType.POST || SCFeedObjectTypologyType.DISCUSSION || SCFeedObjectTypologyType.STATUS, }) {
17
- const [obj, setObj] = useState(feedObject);
19
+ export default function useSCFetchFeedObject({ id = null, feedObject = null, feedObjectType = SCFeedObjectTypologyType.POST || SCFeedObjectTypologyType.DISCUSSION || SCFeedObjectTypologyType.STATUS, cacheStrategy = CacheStrategies.CACHE_FIRST, }) {
20
+ const __feedObjectId = feedObject ? feedObject.id : id;
21
+ const __feedObjectType = feedObject ? feedObject.type : feedObjectType;
22
+ // CACHE
23
+ const __feedObjectCacheKey = getFeedObjectCacheKey(__feedObjectId, __feedObjectType);
24
+ const [obj, setObj] = useState(cacheStrategy !== CacheStrategies.NETWORK_ONLY ? LRUCache.get(__feedObjectCacheKey, feedObject) : null);
18
25
  const [error, setError] = useState(null);
19
26
  /**
20
27
  * Memoized fetchFeedObject
21
28
  */
22
- const fetchFeedObject = () => {
29
+ const fetchFeedObject = useMemo(() => () => {
23
30
  return http
24
31
  .request({
25
- url: Endpoints.FeedObject.url({ type: feedObjectType, id: id }),
32
+ url: Endpoints.FeedObject.url({ type: __feedObjectType, id: __feedObjectId }),
26
33
  method: Endpoints.FeedObject.method,
27
34
  })
28
35
  .then((res) => {
@@ -31,25 +38,30 @@ export default function useSCFetchFeedObject({ id = null, feedObject = null, fee
31
38
  }
32
39
  return Promise.resolve(res.data);
33
40
  });
34
- };
41
+ }, [__feedObjectId, __feedObjectType]);
35
42
  /**
36
- * If id and feedObjectType resolve feddObject
43
+ * If id and feedObjectType resolve feedObject
37
44
  */
38
45
  useEffect(() => {
39
- if (id && feedObjectType) {
46
+ if (__feedObjectId && __feedObjectType && (!obj || cacheStrategy === CacheStrategies.STALE_WHILE_REVALIDATE)) {
40
47
  fetchFeedObject()
41
48
  .then((obj) => {
42
49
  setObj(obj);
50
+ LRUCache.set(__feedObjectCacheKey, obj);
43
51
  })
44
52
  .catch((err) => {
53
+ LRUCache.delete(__feedObjectCacheKey);
45
54
  setError(`FeedObject with id ${id} not found`);
46
55
  Logger.error(SCOPE_SC_CORE, `FeedObject with id ${id} not found`);
47
56
  Logger.error(SCOPE_SC_CORE, err.message);
48
57
  });
49
58
  }
50
- }, [id, feedObjectType]);
59
+ }, [__feedObjectId, __feedObjectType]);
51
60
  useDeepCompareEffectNoCheck(() => {
52
- setObj(feedObject);
61
+ if (feedObject) {
62
+ setObj(feedObject);
63
+ LRUCache.set(__feedObjectCacheKey, obj);
64
+ }
53
65
  }, [feedObject]);
54
66
  return { obj, setObj, error };
55
67
  }