@selfcommunity/react-core 0.4.0-alpha.52 → 0.4.0-alpha.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/hooks/useSCCachingManager.d.ts +5 -4
- package/lib/cjs/hooks/useSCCachingManager.d.ts.map +1 -1
- package/lib/cjs/hooks/useSCCachingManager.js +21 -5
- package/lib/cjs/hooks/useSCCachingManager.js.map +1 -1
- package/lib/cjs/hooks/useSCConnectionsManager.d.ts +8 -4
- package/lib/cjs/hooks/useSCConnectionsManager.d.ts.map +1 -1
- package/lib/cjs/hooks/useSCConnectionsManager.js +117 -82
- package/lib/cjs/hooks/useSCConnectionsManager.js.map +1 -1
- package/lib/cjs/hooks/useSCFollowedCategoriesManager.d.ts +4 -4
- package/lib/cjs/hooks/useSCFollowedCategoriesManager.d.ts.map +1 -1
- package/lib/cjs/hooks/useSCFollowedCategoriesManager.js +14 -6
- package/lib/cjs/hooks/useSCFollowedCategoriesManager.js.map +1 -1
- package/lib/cjs/hooks/useSCFollowedManager.d.ts +4 -4
- package/lib/cjs/hooks/useSCFollowedManager.d.ts.map +1 -1
- package/lib/cjs/hooks/useSCFollowedManager.js +28 -18
- package/lib/cjs/hooks/useSCFollowedManager.js.map +1 -1
- package/lib/cjs/hooks/useSCFollowersManager.d.ts +4 -4
- package/lib/cjs/hooks/useSCFollowersManager.js +4 -4
- package/lib/cjs/hooks/useSCFollowersManager.js.map +1 -1
- package/lib/cjs/hooks/useSCSubscribedIncubatorsManager.d.ts +4 -4
- package/lib/cjs/hooks/useSCSubscribedIncubatorsManager.d.ts.map +1 -1
- package/lib/cjs/hooks/useSCSubscribedIncubatorsManager.js +14 -6
- package/lib/cjs/hooks/useSCSubscribedIncubatorsManager.js.map +1 -1
- package/lib/cjs/types/context.d.ts +8 -0
- package/lib/cjs/types/context.d.ts.map +1 -1
- package/lib/esm/hooks/useSCCachingManager.d.ts +5 -4
- package/lib/esm/hooks/useSCCachingManager.d.ts.map +1 -1
- package/lib/esm/hooks/useSCCachingManager.js +21 -5
- package/lib/esm/hooks/useSCCachingManager.js.map +1 -1
- package/lib/esm/hooks/useSCConnectionsManager.d.ts +8 -4
- package/lib/esm/hooks/useSCConnectionsManager.d.ts.map +1 -1
- package/lib/esm/hooks/useSCConnectionsManager.js +117 -82
- package/lib/esm/hooks/useSCConnectionsManager.js.map +1 -1
- package/lib/esm/hooks/useSCFollowedCategoriesManager.d.ts +4 -4
- package/lib/esm/hooks/useSCFollowedCategoriesManager.d.ts.map +1 -1
- package/lib/esm/hooks/useSCFollowedCategoriesManager.js +15 -7
- package/lib/esm/hooks/useSCFollowedCategoriesManager.js.map +1 -1
- package/lib/esm/hooks/useSCFollowedManager.d.ts +4 -4
- package/lib/esm/hooks/useSCFollowedManager.d.ts.map +1 -1
- package/lib/esm/hooks/useSCFollowedManager.js +29 -19
- package/lib/esm/hooks/useSCFollowedManager.js.map +1 -1
- package/lib/esm/hooks/useSCFollowersManager.d.ts +4 -4
- package/lib/esm/hooks/useSCFollowersManager.js +4 -4
- package/lib/esm/hooks/useSCFollowersManager.js.map +1 -1
- package/lib/esm/hooks/useSCSubscribedIncubatorsManager.d.ts +4 -4
- package/lib/esm/hooks/useSCSubscribedIncubatorsManager.d.ts.map +1 -1
- package/lib/esm/hooks/useSCSubscribedIncubatorsManager.js +15 -7
- package/lib/esm/hooks/useSCSubscribedIncubatorsManager.js.map +1 -1
- package/lib/esm/types/context.d.ts +8 -0
- package/lib/esm/types/context.d.ts.map +1 -1
- package/lib/umd/react-core.js +1 -1
- package/package.json +5 -5
|
@@ -8,15 +8,8 @@ import { CONFIGURATIONS_FOLLOW_ENABLED } from '../constants/Preferences';
|
|
|
8
8
|
import useSCCachingManager from './useSCCachingManager';
|
|
9
9
|
import PubSub from 'pubsub-js';
|
|
10
10
|
import { SCNotificationMapping } from '../constants/Notification';
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
* Check if the user status is 'connected', 'sent_connection_request'
|
|
14
|
-
* 'received_connection_request', to update the cache and data
|
|
15
|
-
*/
|
|
16
|
-
const STATUS_CONNECTED = 'connected';
|
|
17
|
-
const STATUS_DISCONNECTED = 'disconnected';
|
|
18
|
-
const STATUS_CONNECTION_REQUEST_SENT = 'sent_connection_request';
|
|
19
|
-
const STATUS_CONNECTION_REQUEST_RECEIVED = 'received_connection_request';
|
|
11
|
+
import { SCConnectionStatus } from '@selfcommunity/types';
|
|
12
|
+
import { useDeepCompareEffectNoCheck } from 'use-deep-compare-effect';
|
|
20
13
|
/**
|
|
21
14
|
:::info
|
|
22
15
|
This custom hook is used to manage to manage friends.
|
|
@@ -33,52 +26,62 @@ const STATUS_CONNECTION_REQUEST_RECEIVED = 'received_connection_request';
|
|
|
33
26
|
:::
|
|
34
27
|
*/
|
|
35
28
|
export default function useSCConnectionsManager(user) {
|
|
36
|
-
const { cache, updateCache, emptyCache, data, setData, loading, setLoading, isLoading } = useSCCachingManager();
|
|
29
|
+
const { cache, updateCache, emptyCache, data, setData, loading, setLoading, setUnLoading, isLoading } = useSCCachingManager();
|
|
37
30
|
const scPreferencesContext = useSCPreferences();
|
|
31
|
+
const authUserId = user ? user.id : null;
|
|
38
32
|
const connectionsDisabled = CONFIGURATIONS_FOLLOW_ENABLED in scPreferencesContext.preferences && scPreferencesContext.preferences[CONFIGURATIONS_FOLLOW_ENABLED].value;
|
|
39
33
|
const notificationConnAcceptSubscription = useRef(null);
|
|
40
34
|
const notificationConnRequestSubscription = useRef(null);
|
|
41
35
|
const notificationConnRemoveSubscription = useRef(null);
|
|
36
|
+
const notificationConnRequestCancelSubscription = useRef(null);
|
|
42
37
|
/**
|
|
43
|
-
* Notification subscriber
|
|
38
|
+
* Notification subscriber handler
|
|
44
39
|
* @param msg
|
|
45
40
|
* @param data
|
|
46
41
|
*/
|
|
47
|
-
const notificationSubscriber = (msg,
|
|
48
|
-
if (data.connection
|
|
49
|
-
updateCache([data.data.connection.id]);
|
|
42
|
+
const notificationSubscriber = (msg, dataMsg) => {
|
|
43
|
+
if (dataMsg.data.connection !== undefined) {
|
|
50
44
|
let _data = [];
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
45
|
+
let _upd;
|
|
46
|
+
switch (SCNotificationMapping[dataMsg.data.activity_type]) {
|
|
47
|
+
case SCNotificationTypologyType.CONNECTION_REQUEST:
|
|
48
|
+
_upd = { user: 'request_user', state: SCConnectionStatus.CONNECTION_REQUEST_RECEIVED };
|
|
49
|
+
break;
|
|
50
|
+
case SCNotificationTypologyType.CONNECTION_CANCEL_REQUEST:
|
|
51
|
+
_upd = { user: 'cancel_request_user', state: null };
|
|
52
|
+
break;
|
|
53
|
+
case SCNotificationTypologyType.CONNECTION_ACCEPT:
|
|
54
|
+
_upd = { user: 'accept_user', state: SCConnectionStatus.CONNECTED };
|
|
55
|
+
break;
|
|
56
|
+
case SCNotificationTypologyType.CONNECTION_REMOVE:
|
|
57
|
+
_upd = { user: 'remove_user', state: null };
|
|
58
|
+
break;
|
|
60
59
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
60
|
+
updateCache([dataMsg.data[_upd.user].id]);
|
|
61
|
+
_data = data.map((k) => {
|
|
62
|
+
if (parseInt(Object.keys(k)[0]) === dataMsg.data[_upd.user].id) {
|
|
63
|
+
return { [Object.keys(k)[0]]: _upd.state };
|
|
64
|
+
}
|
|
65
|
+
return { [Object.keys(k)[0]]: data[Object.keys(k)[0]] };
|
|
66
|
+
});
|
|
67
|
+
setData([..._data]);
|
|
67
68
|
}
|
|
68
69
|
};
|
|
69
70
|
/**
|
|
70
71
|
* Subscribe to notification types user_follow, user_unfollow
|
|
71
72
|
*/
|
|
72
|
-
|
|
73
|
+
useDeepCompareEffectNoCheck(() => {
|
|
73
74
|
notificationConnAcceptSubscription.current = PubSub.subscribe(`${SCNotificationTopicType.INTERACTION}.${SCNotificationTypologyType.CONNECTION_ACCEPT}`, notificationSubscriber);
|
|
74
75
|
notificationConnRequestSubscription.current = PubSub.subscribe(`${SCNotificationTopicType.INTERACTION}.${SCNotificationTypologyType.CONNECTION_REQUEST}`, notificationSubscriber);
|
|
76
|
+
notificationConnRequestCancelSubscription.current = PubSub.subscribe(`${SCNotificationTopicType.INTERACTION}.${SCNotificationTypologyType.CONNECTION_CANCEL_REQUEST}`, notificationSubscriber);
|
|
75
77
|
notificationConnRemoveSubscription.current = PubSub.subscribe(`${SCNotificationTopicType.INTERACTION}.${SCNotificationTypologyType.CONNECTION_REMOVE}`, notificationSubscriber);
|
|
76
78
|
return () => {
|
|
77
79
|
PubSub.unsubscribe(notificationConnAcceptSubscription.current);
|
|
78
80
|
PubSub.unsubscribe(notificationConnRequestSubscription.current);
|
|
81
|
+
PubSub.unsubscribe(notificationConnRequestCancelSubscription.current);
|
|
79
82
|
PubSub.unsubscribe(notificationConnRemoveSubscription.current);
|
|
80
83
|
};
|
|
81
|
-
}, []);
|
|
84
|
+
}, [data]);
|
|
82
85
|
/**
|
|
83
86
|
* Memoized refresh all connections
|
|
84
87
|
* It makes a single request to the server and retrieves
|
|
@@ -87,7 +90,7 @@ export default function useSCConnectionsManager(user) {
|
|
|
87
90
|
*/
|
|
88
91
|
const refresh = useMemo(() => () => {
|
|
89
92
|
emptyCache();
|
|
90
|
-
if (
|
|
93
|
+
if (authUserId && cache.length > 0) {
|
|
91
94
|
// Only if user is authenticated
|
|
92
95
|
http
|
|
93
96
|
.request({
|
|
@@ -100,9 +103,7 @@ export default function useSCConnectionsManager(user) {
|
|
|
100
103
|
return Promise.reject(res);
|
|
101
104
|
}
|
|
102
105
|
updateCache(Object.keys(res.data.connection_statuses).map((id) => parseInt(id)));
|
|
103
|
-
setData(Object.
|
|
104
|
-
.filter(([k, v]) => v !== null)
|
|
105
|
-
.map(([k, v]) => ({ [parseInt(k)]: v })));
|
|
106
|
+
setData(Object.keys(res.data.connection_statuses).map((k) => ({ [k]: res.data.connection_statuses[k] })));
|
|
106
107
|
return Promise.resolve(res.data);
|
|
107
108
|
})
|
|
108
109
|
.catch((e) => {
|
|
@@ -110,64 +111,62 @@ export default function useSCConnectionsManager(user) {
|
|
|
110
111
|
Logger.error(SCOPE_SC_CORE, e);
|
|
111
112
|
});
|
|
112
113
|
}
|
|
113
|
-
}, [data,
|
|
114
|
+
}, [data, authUserId, cache]);
|
|
114
115
|
/**
|
|
115
116
|
* Memoized Request connection
|
|
116
117
|
*/
|
|
117
|
-
const
|
|
118
|
-
setLoading(
|
|
119
|
-
if (getCurrentStatus(user) === STATUS_CONNECTION_REQUEST_RECEIVED) {
|
|
120
|
-
return acceptConnection(user);
|
|
121
|
-
}
|
|
118
|
+
const handleRequest = useMemo(() => (user, endpoint) => {
|
|
119
|
+
setLoading(user.id);
|
|
122
120
|
return http
|
|
123
121
|
.request({
|
|
124
|
-
url:
|
|
125
|
-
method:
|
|
122
|
+
url: endpoint.url({ id: user.id }),
|
|
123
|
+
method: endpoint.method,
|
|
126
124
|
})
|
|
127
125
|
.then((res) => {
|
|
128
126
|
if (res.status >= 300) {
|
|
129
127
|
return Promise.reject(res);
|
|
130
128
|
}
|
|
131
129
|
updateCache([user.id]);
|
|
132
|
-
const _data = data.map((
|
|
133
|
-
|
|
134
|
-
|
|
130
|
+
const _data = data.map((k) => {
|
|
131
|
+
if (parseInt(Object.keys(k)[0]) === user.id) {
|
|
132
|
+
return { [Object.keys(k)[0]]: res.data.connection_status };
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
135
|
setData(_data);
|
|
136
|
-
|
|
136
|
+
setUnLoading(user.id);
|
|
137
137
|
return Promise.resolve(res.data);
|
|
138
138
|
});
|
|
139
139
|
}, [data, loading, cache]);
|
|
140
|
+
/**
|
|
141
|
+
* Memoized Request connection
|
|
142
|
+
*/
|
|
143
|
+
const requestConnection = useMemo(() => (user) => {
|
|
144
|
+
return handleRequest(user, Endpoints.UserRequestConnection);
|
|
145
|
+
}, [handleRequest]);
|
|
146
|
+
/**
|
|
147
|
+
* Memoized cancel request connection
|
|
148
|
+
*/
|
|
149
|
+
const cancelRequestConnection = useMemo(() => (user) => {
|
|
150
|
+
return handleRequest(user, Endpoints.UserCancelRequestConnection);
|
|
151
|
+
}, [handleRequest]);
|
|
152
|
+
/**
|
|
153
|
+
* Memoized Remove connection
|
|
154
|
+
*/
|
|
155
|
+
const removeConnection = useMemo(() => (user) => {
|
|
156
|
+
return handleRequest(user, Endpoints.UserRemoveConnection);
|
|
157
|
+
}, [handleRequest]);
|
|
140
158
|
/**
|
|
141
159
|
* Memoized Accept Request connection
|
|
142
160
|
*/
|
|
143
161
|
const acceptConnection = useMemo(() => (user) => {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
return http
|
|
147
|
-
.request({
|
|
148
|
-
url: Endpoints.UserAcceptRequestConnection.url({ id: user.id }),
|
|
149
|
-
method: Endpoints.UserAcceptRequestConnection.method,
|
|
150
|
-
})
|
|
151
|
-
.then((res) => {
|
|
152
|
-
if (res.status >= 300) {
|
|
153
|
-
return Promise.reject(res);
|
|
154
|
-
}
|
|
155
|
-
updateCache([user.id]);
|
|
156
|
-
const _data = data.map(([k, v]) => ({
|
|
157
|
-
k: k === user.id ? STATUS_CONNECTED : v,
|
|
158
|
-
}));
|
|
159
|
-
setData(_data);
|
|
160
|
-
setLoading((prev) => prev.filter((u) => u !== user.id));
|
|
161
|
-
return Promise.resolve(res.data);
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
}, [data, loading, cache]);
|
|
162
|
+
return handleRequest(user, Endpoints.UserAcceptRequestConnection);
|
|
163
|
+
}, [handleRequest]);
|
|
165
164
|
/**
|
|
166
|
-
* Return current user status if
|
|
165
|
+
* Return current user status if exists,
|
|
167
166
|
* otherwise return null
|
|
168
167
|
*/
|
|
169
|
-
const
|
|
170
|
-
const d = data.filter((
|
|
168
|
+
const getCurrentUserCacheStatus = useMemo(() => (user) => {
|
|
169
|
+
const d = data.filter((k) => parseInt(Object.keys(k)[0]) === user.id);
|
|
171
170
|
return d.length ? d[0][user.id] : null;
|
|
172
171
|
}, [data]);
|
|
173
172
|
/**
|
|
@@ -177,39 +176,75 @@ export default function useSCConnectionsManager(user) {
|
|
|
177
176
|
* @param user
|
|
178
177
|
*/
|
|
179
178
|
const checkUserConnectionStatus = (user) => {
|
|
180
|
-
setLoading(
|
|
179
|
+
setLoading(user.id);
|
|
181
180
|
http
|
|
182
181
|
.request({
|
|
183
|
-
url: Endpoints.
|
|
184
|
-
method: Endpoints.
|
|
182
|
+
url: Endpoints.UserCheckConnectionStatus.url({ id: user.id }),
|
|
183
|
+
method: Endpoints.UserCheckConnectionStatus.method,
|
|
185
184
|
})
|
|
186
185
|
.then((res) => {
|
|
187
186
|
if (res.status >= 300) {
|
|
188
187
|
return Promise.reject(res);
|
|
189
188
|
}
|
|
189
|
+
const e = { [user.id]: res.data.connection_status };
|
|
190
|
+
setData((prev) => [...prev, ...[e]]);
|
|
190
191
|
updateCache([user.id]);
|
|
191
|
-
|
|
192
|
-
setLoading((prev) => prev.filter((u) => u !== user.id));
|
|
192
|
+
setUnLoading(user.id);
|
|
193
193
|
return Promise.resolve(res.data);
|
|
194
194
|
});
|
|
195
195
|
};
|
|
196
|
+
/**
|
|
197
|
+
* Bypass remote check if the user is followed
|
|
198
|
+
*/
|
|
199
|
+
const getConnectionStatus = useMemo(() => (user) => {
|
|
200
|
+
updateCache([user.id]);
|
|
201
|
+
setData((prev) => [...prev, ...[{ [user.id]: user.connection_status }]]);
|
|
202
|
+
return user.connection_status;
|
|
203
|
+
}, [data, cache]);
|
|
196
204
|
/**
|
|
197
205
|
* Memoized status
|
|
198
206
|
* If user is already in cache -> check data user statuses,
|
|
199
207
|
* otherwise, check if auth user is connected with user
|
|
200
208
|
*/
|
|
201
|
-
const status =
|
|
209
|
+
const status = (user) => {
|
|
202
210
|
if (cache.includes(user.id)) {
|
|
203
|
-
|
|
211
|
+
const _d = data.filter((k) => parseInt(Object.keys(k)[0]) === user.id);
|
|
212
|
+
if (_d.length) {
|
|
213
|
+
return _d[0][user.id];
|
|
214
|
+
}
|
|
204
215
|
}
|
|
205
|
-
if (
|
|
206
|
-
|
|
216
|
+
if (authUserId) {
|
|
217
|
+
if ('connection_status' in user) {
|
|
218
|
+
return getConnectionStatus(user);
|
|
219
|
+
}
|
|
220
|
+
if (!isLoading(user)) {
|
|
221
|
+
checkUserConnectionStatus(user);
|
|
222
|
+
}
|
|
207
223
|
}
|
|
208
224
|
return null;
|
|
209
|
-
}
|
|
225
|
+
};
|
|
226
|
+
/**
|
|
227
|
+
* Empty cache on logout
|
|
228
|
+
*/
|
|
229
|
+
useEffect(() => {
|
|
230
|
+
if (!authUserId) {
|
|
231
|
+
emptyCache();
|
|
232
|
+
}
|
|
233
|
+
}, [authUserId]);
|
|
210
234
|
if (connectionsDisabled || !user) {
|
|
211
235
|
return { connections: data, loading, isLoading };
|
|
212
236
|
}
|
|
213
|
-
return {
|
|
237
|
+
return {
|
|
238
|
+
connections: data,
|
|
239
|
+
loading,
|
|
240
|
+
isLoading,
|
|
241
|
+
status,
|
|
242
|
+
requestConnection,
|
|
243
|
+
cancelRequestConnection,
|
|
244
|
+
acceptConnection,
|
|
245
|
+
removeConnection,
|
|
246
|
+
refresh,
|
|
247
|
+
emptyCache,
|
|
248
|
+
};
|
|
214
249
|
}
|
|
215
250
|
//# sourceMappingURL=useSCConnectionsManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSCConnectionsManager.js","sourceRoot":"","sources":["../../../src/hooks/useSCConnectionsManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAC,MAAM,OAAO,CAAC;AACjD,OAAO,EAAC,IAAI,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"useSCConnectionsManager.js","sourceRoot":"","sources":["../../../src/hooks/useSCConnectionsManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,8 +15,8 @@ import { SCCategoryType, SCUserType } from '@selfcommunity/types';
|
|
|
15
15
|
*/
|
|
16
16
|
export default function useSCFollowedCategoriesManager(user?: SCUserType, updateUser?: (info: any) => void): {
|
|
17
17
|
categories: any[];
|
|
18
|
-
loading:
|
|
19
|
-
isLoading: (
|
|
18
|
+
loading: any[];
|
|
19
|
+
isLoading: (v: number | {
|
|
20
20
|
id: number;
|
|
21
21
|
}) => boolean;
|
|
22
22
|
follow?: undefined;
|
|
@@ -25,8 +25,8 @@ export default function useSCFollowedCategoriesManager(user?: SCUserType, update
|
|
|
25
25
|
emptyCache?: undefined;
|
|
26
26
|
} | {
|
|
27
27
|
categories: any[];
|
|
28
|
-
loading:
|
|
29
|
-
isLoading: (
|
|
28
|
+
loading: any[];
|
|
29
|
+
isLoading: (v: number | {
|
|
30
30
|
id: number;
|
|
31
31
|
}) => boolean;
|
|
32
32
|
follow: (category: SCCategoryType) => Promise<any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSCFollowedCategoriesManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSCFollowedCategoriesManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,cAAc,EAAE,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAKhE;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,OAAO,UAAU,8BAA8B,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,KAAA,KAAK,IAAI;;;;;;;;;;;;;;;;uBA4CpF,cAAc,KAAG,QAAQ,GAAG,CAAC;2BAkE7B,cAAc,KAAG,OAAO;mBAnG3B,IAAI;;
|
|
1
|
+
{"version":3,"file":"useSCFollowedCategoriesManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSCFollowedCategoriesManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,cAAc,EAAE,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAKhE;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,OAAO,UAAU,8BAA8B,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC,IAAI,KAAA,KAAK,IAAI;;;;;;;;;;;;;;;;uBA4CpF,cAAc,KAAG,QAAQ,GAAG,CAAC;2BAkE7B,cAAc,KAAG,OAAO;mBAnG3B,IAAI;;EAkIjB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useMemo } from
|
|
1
|
+
import { useEffect, useMemo } from "react";
|
|
2
2
|
import { http, Endpoints } from '@selfcommunity/api-services';
|
|
3
3
|
import useSCCachingManager from './useSCCachingManager';
|
|
4
4
|
import { SCOPE_SC_CORE } from '../constants/Errors';
|
|
@@ -18,7 +18,7 @@ import { Logger } from '@selfcommunity/utils';
|
|
|
18
18
|
:::
|
|
19
19
|
*/
|
|
20
20
|
export default function useSCFollowedCategoriesManager(user, updateUser) {
|
|
21
|
-
const { cache, updateCache, emptyCache, data, setData, loading, setLoading, isLoading } = useSCCachingManager();
|
|
21
|
+
const { cache, updateCache, emptyCache, data, setData, loading, setLoading, setUnLoading, isLoading } = useSCCachingManager();
|
|
22
22
|
const authUserId = user ? user.id : null;
|
|
23
23
|
/**
|
|
24
24
|
* Memoized refresh all categories
|
|
@@ -55,7 +55,7 @@ export default function useSCFollowedCategoriesManager(user, updateUser) {
|
|
|
55
55
|
* Toggle action
|
|
56
56
|
*/
|
|
57
57
|
const follow = useMemo(() => (category) => {
|
|
58
|
-
setLoading(
|
|
58
|
+
setLoading(category.id);
|
|
59
59
|
return http
|
|
60
60
|
.request({
|
|
61
61
|
url: Endpoints.FollowCategory.url({ id: category.id }),
|
|
@@ -68,7 +68,7 @@ export default function useSCFollowedCategoriesManager(user, updateUser) {
|
|
|
68
68
|
updateCache([category.id]);
|
|
69
69
|
const isFollowed = data.includes(category.id);
|
|
70
70
|
setData((prev) => (isFollowed ? prev.filter((id) => id !== category.id) : [...[category.id], ...prev]));
|
|
71
|
-
|
|
71
|
+
setUnLoading(category.id);
|
|
72
72
|
updateUser({ categories_counter: isFollowed ? data.length - 1 : data.length + 1 });
|
|
73
73
|
return Promise.resolve(res.data);
|
|
74
74
|
});
|
|
@@ -80,7 +80,7 @@ export default function useSCFollowedCategoriesManager(user, updateUser) {
|
|
|
80
80
|
* @param category
|
|
81
81
|
*/
|
|
82
82
|
const checkIsCategoryFollowed = (category) => {
|
|
83
|
-
setLoading(
|
|
83
|
+
setLoading(category.id);
|
|
84
84
|
http
|
|
85
85
|
.request({
|
|
86
86
|
url: Endpoints.CheckCategoryIsFollowed.url({ id: category.id }),
|
|
@@ -92,7 +92,7 @@ export default function useSCFollowedCategoriesManager(user, updateUser) {
|
|
|
92
92
|
}
|
|
93
93
|
updateCache([category.id]);
|
|
94
94
|
setData((prev) => (res.data.is_followed ? [...[category.id], ...prev] : prev.filter((id) => id !== category.id)));
|
|
95
|
-
|
|
95
|
+
setUnLoading(category.id);
|
|
96
96
|
return Promise.resolve(res.data);
|
|
97
97
|
});
|
|
98
98
|
};
|
|
@@ -119,12 +119,20 @@ export default function useSCFollowedCategoriesManager(user, updateUser) {
|
|
|
119
119
|
if ('followed' in category) {
|
|
120
120
|
return getFollowStatus(category);
|
|
121
121
|
}
|
|
122
|
-
if (!
|
|
122
|
+
if (!isLoading(category)) {
|
|
123
123
|
checkIsCategoryFollowed(category);
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
return false;
|
|
127
127
|
}, [data, loading, cache, authUserId]);
|
|
128
|
+
/**
|
|
129
|
+
* Empty cache on logout
|
|
130
|
+
*/
|
|
131
|
+
useEffect(() => {
|
|
132
|
+
if (!authUserId) {
|
|
133
|
+
emptyCache();
|
|
134
|
+
}
|
|
135
|
+
}, [authUserId]);
|
|
128
136
|
if (!user) {
|
|
129
137
|
return { categories: data, loading, isLoading };
|
|
130
138
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSCFollowedCategoriesManager.js","sourceRoot":"","sources":["../../../src/hooks/useSCFollowedCategoriesManager.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"useSCFollowedCategoriesManager.js","sourceRoot":"","sources":["../../../src/hooks/useSCFollowedCategoriesManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,8 +15,8 @@ import { SCUserType } from '@selfcommunity/types';
|
|
|
15
15
|
*/
|
|
16
16
|
export default function useSCFollowedManager(user?: SCUserType): {
|
|
17
17
|
followed: any[];
|
|
18
|
-
loading:
|
|
19
|
-
isLoading: (
|
|
18
|
+
loading: any[];
|
|
19
|
+
isLoading: (v: number | {
|
|
20
20
|
id: number;
|
|
21
21
|
}) => boolean;
|
|
22
22
|
follow?: undefined;
|
|
@@ -25,8 +25,8 @@ export default function useSCFollowedManager(user?: SCUserType): {
|
|
|
25
25
|
emptyCache?: undefined;
|
|
26
26
|
} | {
|
|
27
27
|
followed: any[];
|
|
28
|
-
loading:
|
|
29
|
-
isLoading: (
|
|
28
|
+
loading: any[];
|
|
29
|
+
isLoading: (v: number | {
|
|
30
30
|
id: number;
|
|
31
31
|
}) => boolean;
|
|
32
32
|
follow: (user: SCUserType) => Promise<any>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSCFollowedManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSCFollowedManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAchD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,IAAI,CAAC,EAAE,UAAU;;;;;;;;;;;;;;;;mBAmDjD,UAAU,KAAG,QAAQ,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"useSCFollowedManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSCFollowedManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAchD;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,IAAI,CAAC,EAAE,UAAU;;;;;;;;;;;;;;;;mBAmDjD,UAAU,KAAG,QAAQ,GAAG,CAAC;uBAiEpB,UAAU,KAAG,OAAO;mBAtGxB,IAAI;;EAmIjB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useMemo } from 'react';
|
|
1
|
+
import { useEffect, useMemo } 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';
|
|
@@ -26,7 +26,7 @@ const STATUS_FOLLOWED = 'followed';
|
|
|
26
26
|
:::
|
|
27
27
|
*/
|
|
28
28
|
export default function useSCFollowedManager(user) {
|
|
29
|
-
const { cache, updateCache, emptyCache, data, setData, loading, setLoading, isLoading } = useSCCachingManager();
|
|
29
|
+
const { cache, updateCache, emptyCache, data, setData, loading, setLoading, setUnLoading, isLoading } = useSCCachingManager();
|
|
30
30
|
const scPreferencesContext = useSCPreferences();
|
|
31
31
|
const authUserId = user ? user.id : null;
|
|
32
32
|
const followEnabled = CONFIGURATIONS_FOLLOW_ENABLED in scPreferencesContext.preferences && scPreferencesContext.preferences[CONFIGURATIONS_FOLLOW_ENABLED].value;
|
|
@@ -52,8 +52,8 @@ export default function useSCFollowedManager(user) {
|
|
|
52
52
|
}
|
|
53
53
|
updateCache(Object.keys(res.data.connection_statuses).map((id) => parseInt(id)));
|
|
54
54
|
setData(Object.entries(res.data.connection_statuses)
|
|
55
|
-
.filter(([
|
|
56
|
-
.map(([k
|
|
55
|
+
.filter(([, v]) => v === STATUS_FOLLOWED)
|
|
56
|
+
.map(([k]) => parseInt(k)));
|
|
57
57
|
return Promise.resolve(res.data);
|
|
58
58
|
})
|
|
59
59
|
.catch((e) => {
|
|
@@ -67,7 +67,7 @@ export default function useSCFollowedManager(user) {
|
|
|
67
67
|
* Toggle action
|
|
68
68
|
*/
|
|
69
69
|
const follow = useMemo(() => (user) => {
|
|
70
|
-
setLoading(
|
|
70
|
+
setLoading(user.id);
|
|
71
71
|
return http
|
|
72
72
|
.request({
|
|
73
73
|
url: Endpoints.FollowUser.url({ id: user.id }),
|
|
@@ -80,7 +80,7 @@ export default function useSCFollowedManager(user) {
|
|
|
80
80
|
updateCache([user.id]);
|
|
81
81
|
const isFollowed = data.includes(user.id);
|
|
82
82
|
setData((prev) => (isFollowed ? prev.filter((id) => id !== user.id) : [...[user.id], ...prev]));
|
|
83
|
-
|
|
83
|
+
setUnLoading(user.id);
|
|
84
84
|
return Promise.resolve(res.data);
|
|
85
85
|
});
|
|
86
86
|
}, [data, loading, cache]);
|
|
@@ -91,7 +91,7 @@ export default function useSCFollowedManager(user) {
|
|
|
91
91
|
* @param user
|
|
92
92
|
*/
|
|
93
93
|
const checkIsUserFollowed = (user) => {
|
|
94
|
-
setLoading(
|
|
94
|
+
setLoading(user.id);
|
|
95
95
|
http
|
|
96
96
|
.request({
|
|
97
97
|
url: Endpoints.CheckUserFollowed.url({ id: user.id }),
|
|
@@ -103,7 +103,7 @@ export default function useSCFollowedManager(user) {
|
|
|
103
103
|
}
|
|
104
104
|
updateCache([user.id]);
|
|
105
105
|
setData((prev) => (res.data.is_followed ? [...prev, ...[user.id]] : prev.filter((id) => id !== user.id)));
|
|
106
|
-
|
|
106
|
+
setUnLoading(user.id);
|
|
107
107
|
return Promise.resolve(res.data);
|
|
108
108
|
});
|
|
109
109
|
};
|
|
@@ -121,20 +121,30 @@ export default function useSCFollowedManager(user) {
|
|
|
121
121
|
* If user is already in cache -> check if the user is in followed,
|
|
122
122
|
* otherwise, check if auth user follow the user
|
|
123
123
|
*/
|
|
124
|
-
const isFollowed = useMemo(() =>
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if (authUserId) {
|
|
129
|
-
if ('connection_status' in user) {
|
|
130
|
-
return getConnectionStatus(user);
|
|
124
|
+
const isFollowed = useMemo(() => {
|
|
125
|
+
return (user) => {
|
|
126
|
+
if (cache.includes(user.id)) {
|
|
127
|
+
return Boolean(data.includes(user.id));
|
|
131
128
|
}
|
|
132
|
-
if (
|
|
133
|
-
|
|
129
|
+
if (authUserId) {
|
|
130
|
+
if ('connection_status' in user) {
|
|
131
|
+
return getConnectionStatus(user);
|
|
132
|
+
}
|
|
133
|
+
if (!isLoading(user)) {
|
|
134
|
+
checkIsUserFollowed(user);
|
|
135
|
+
}
|
|
134
136
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
+
return false;
|
|
138
|
+
};
|
|
137
139
|
}, [data, loading, cache, authUserId]);
|
|
140
|
+
/**
|
|
141
|
+
* Empty cache on logout
|
|
142
|
+
*/
|
|
143
|
+
useEffect(() => {
|
|
144
|
+
if (!authUserId) {
|
|
145
|
+
emptyCache();
|
|
146
|
+
}
|
|
147
|
+
}, [authUserId]);
|
|
138
148
|
if (!followEnabled || !user) {
|
|
139
149
|
return { followed: data, loading, isLoading };
|
|
140
150
|
}
|