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

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 +28 -0
  3. package/lib/cjs/constants/Cache.d.ts.map +1 -0
  4. package/lib/cjs/constants/Cache.js +41 -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 +245 -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 +28 -0
  36. package/lib/esm/constants/Cache.d.ts.map +1 -0
  37. package/lib/esm/constants/Cache.js +28 -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 +241 -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;AAsFF;;;;;;;;;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,OAsLA"}
@@ -0,0 +1,245 @@
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
+ let _state;
34
+ switch (action.type) {
35
+ case exports.feedDataActionTypes.LOADING_NEXT:
36
+ _state = Object.assign(Object.assign({}, state), { isLoadingNext: true, isLoadingPrevious: false });
37
+ break;
38
+ case exports.feedDataActionTypes.LOADING_PREVIOUS:
39
+ _state = Object.assign(Object.assign({}, state), { isLoadingNext: false, isLoadingPrevious: true });
40
+ break;
41
+ case exports.feedDataActionTypes.DATA_NEXT_LOADED:
42
+ _state = 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 } : {}));
43
+ break;
44
+ case exports.feedDataActionTypes.DATA_PREVIOUS_LOADED:
45
+ _state = Object.assign(Object.assign({}, state), { page: action.payload.currentPage, feedData: action.payload.feedData, isLoadingPrevious: false, previous: action.payload.previous });
46
+ break;
47
+ case exports.feedDataActionTypes.DATA_RELOAD:
48
+ _state = Object.assign(Object.assign({}, state), { next: action.payload.next, feedData: [], total: 0, previous: null, reload: true });
49
+ break;
50
+ case exports.feedDataActionTypes.DATA_RELOADED:
51
+ _state = Object.assign(Object.assign({}, state), { componentLoaded: false, reload: false });
52
+ break;
53
+ }
54
+ utils_1.LRUCache.set((0, Cache_1.getStateFeedCacheKey)(state.id), _state);
55
+ return _state;
56
+ }
57
+ /**
58
+ * Define initial state
59
+ * @param data
60
+ */
61
+ function stateInitializer(data) {
62
+ const __feedStateCacheKey = (0, Cache_1.getStateFeedCacheKey)(data.id);
63
+ let _initState = {
64
+ id: data.id,
65
+ componentLoaded: false,
66
+ feedData: [],
67
+ total: 0,
68
+ next: data.next,
69
+ previous: null,
70
+ isLoadingNext: false,
71
+ isLoadingPrevious: false,
72
+ page: data.queryParams.offset / data.queryParams.limit + 1,
73
+ reload: false,
74
+ };
75
+ if (__feedStateCacheKey && utils_1.LRUCache.hasKey(__feedStateCacheKey) && data.cacheStrategy !== utils_1.CacheStrategies.NETWORK_ONLY) {
76
+ const _cachedStateData = utils_1.LRUCache.get(__feedStateCacheKey);
77
+ return Object.assign(Object.assign({}, _initState), _cachedStateData);
78
+ }
79
+ return _initState;
80
+ }
81
+ /**
82
+ :::info
83
+ This custom hooks is used to fetch paginated feedData.
84
+ :::
85
+ * @param endpoint
86
+ * @param offset
87
+ * @param pageSize
88
+ * @param onChangePage
89
+ * @param cacheStrategy
90
+ */
91
+ function useSCFetchFeed(props) {
92
+ // PROPS
93
+ const { id, endpoint, endpointQueryParams = { limit: 10, offset: 0 }, onChangePage, cacheStrategy = utils_1.CacheStrategies.CACHE_FIRST } = props;
94
+ const queryParams = (0, react_1.useMemo)(() => Object.assign({ limit: 10, offset: 0 }, endpointQueryParams), [endpointQueryParams]);
95
+ /**
96
+ * Get next url
97
+ */
98
+ const getInitialNextUrl = () => {
99
+ const _initialEndpoint = (0, utils_2.appendURLSearchParams)(endpoint.url({}), Object.keys(queryParams).map((k) => ({ [k]: queryParams[k] })));
100
+ return _initialEndpoint;
101
+ };
102
+ // STATE
103
+ const [state, dispatch] = (0, react_1.useReducer)(feedDataReducer, {}, () => stateInitializer({ id, endpoint, queryParams, next: getInitialNextUrl(), cacheStrategy }));
104
+ /**
105
+ * Calculate current page
106
+ */
107
+ const getCurrentPage = (url) => {
108
+ const urlSearchParams = new URLSearchParams(url);
109
+ const params = Object.fromEntries(urlSearchParams.entries());
110
+ const currentOffset = params.offset ? parseInt(params.offset) : 0;
111
+ return currentOffset / queryParams.limit + 1;
112
+ };
113
+ /**
114
+ * Get Comments (with cache)
115
+ */
116
+ const revalidate = (url, forward) => {
117
+ return performFetchComments(url, false).then((res) => {
118
+ let _feedData;
119
+ let currentPage = getCurrentPage(state.next);
120
+ if (forward) {
121
+ let start = state.feedData.slice(0, state.feedData.length - res.results.length);
122
+ _feedData = start.concat(res.results);
123
+ }
124
+ else {
125
+ let start = state.feedData.slice(res.results.length, state.feedData.length);
126
+ _feedData = res.results.concat(start);
127
+ }
128
+ dispatch({
129
+ type: forward ? exports.feedDataActionTypes.DATA_NEXT_LOADED : exports.feedDataActionTypes.DATA_PREVIOUS_LOADED,
130
+ payload: Object.assign(Object.assign({ page: currentPage, feedData: _feedData }, (forward ? { next: res.next } : { previous: res.previous })), { total: res.count }),
131
+ });
132
+ });
133
+ };
134
+ /**
135
+ * Get Comments
136
+ */
137
+ const performFetchComments = (url, seekCache = true) => {
138
+ const __feedDataCacheKey = (0, Cache_1.getFeedCacheKey)(id, state.next);
139
+ if (seekCache && utils_1.LRUCache.hasKey(__feedDataCacheKey) && cacheStrategy !== utils_1.CacheStrategies.NETWORK_ONLY) {
140
+ return Promise.resolve(utils_1.LRUCache.get(__feedDataCacheKey));
141
+ }
142
+ return api_services_1.http
143
+ .request({
144
+ url,
145
+ method: api_services_1.Endpoints.Comments.method,
146
+ })
147
+ .then((res) => {
148
+ if (res.status >= 300) {
149
+ return Promise.reject(res);
150
+ }
151
+ utils_1.LRUCache.set(__feedDataCacheKey, res.data);
152
+ return Promise.resolve(res.data);
153
+ });
154
+ };
155
+ /**
156
+ * Fetch previous feedData
157
+ */
158
+ function getPreviousPage() {
159
+ if (endpoint && state.previous && !state.isLoadingPrevious) {
160
+ dispatch({ type: exports.feedDataActionTypes.LOADING_PREVIOUS });
161
+ performFetchComments(state.previous)
162
+ .then((res) => {
163
+ let currentPage = getCurrentPage(state.previous);
164
+ dispatch({
165
+ type: exports.feedDataActionTypes.DATA_PREVIOUS_LOADED,
166
+ payload: {
167
+ page: currentPage,
168
+ feedData: [...res.results, ...state.feedData],
169
+ previous: res.previous,
170
+ },
171
+ });
172
+ onChangePage && onChangePage(currentPage);
173
+ })
174
+ .catch((error) => {
175
+ utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, error);
176
+ })
177
+ .then(() => {
178
+ if (cacheStrategy === utils_1.CacheStrategies.STALE_WHILE_REVALIDATE) {
179
+ revalidate(state.next, false);
180
+ }
181
+ });
182
+ }
183
+ }
184
+ /**
185
+ * Fetch next feedData
186
+ */
187
+ function getNextPage() {
188
+ if (endpoint && state.next && !state.isLoadingNext) {
189
+ dispatch({ type: exports.feedDataActionTypes.LOADING_NEXT });
190
+ performFetchComments(state.next)
191
+ .then((res) => {
192
+ let currentPage = getCurrentPage(state.next);
193
+ dispatch({
194
+ type: exports.feedDataActionTypes.DATA_NEXT_LOADED,
195
+ 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 } : {})),
196
+ });
197
+ onChangePage && onChangePage(currentPage);
198
+ })
199
+ .catch((error) => {
200
+ utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, error);
201
+ })
202
+ .then(() => {
203
+ if (cacheStrategy === utils_1.CacheStrategies.STALE_WHILE_REVALIDATE) {
204
+ revalidate(state.next, true);
205
+ }
206
+ });
207
+ }
208
+ }
209
+ /**
210
+ * Reload
211
+ */
212
+ function reload() {
213
+ dispatch({
214
+ type: exports.feedDataActionTypes.DATA_RELOAD,
215
+ payload: {
216
+ next: getInitialNextUrl(),
217
+ },
218
+ });
219
+ }
220
+ /**
221
+ * Reset feedData status on change pageSize, offset
222
+ */
223
+ (0, react_1.useEffect)(() => {
224
+ if (state.componentLoaded && Boolean(endpoint) && !state.reload) {
225
+ reload();
226
+ }
227
+ }, [endpoint, queryParams.offset, queryParams.limit]);
228
+ /**
229
+ * Reload fetch feedData
230
+ */
231
+ (0, react_1.useEffect)(() => {
232
+ if (state.componentLoaded && state.reload && !state.isLoadingNext && !state.isLoadingPrevious) {
233
+ dispatch({
234
+ type: exports.feedDataActionTypes.DATA_RELOADED,
235
+ });
236
+ getNextPage();
237
+ }
238
+ }, [state.reload]);
239
+ return Object.assign(Object.assign({}, state), { queryParams,
240
+ getNextPage,
241
+ getPreviousPage,
242
+ reload });
243
+ }
244
+ exports.default = useSCFetchFeed;
245
+ //# 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"}