@selfcommunity/react-core 0.4.0-alpha.52 → 0.4.0-alpha.54
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 +130 -85
- 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 +130 -85
- 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,55 @@ 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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
42
|
+
const notificationSubscriber = (msg, dataMsg) => {
|
|
43
|
+
if (dataMsg.data.connection !== undefined) {
|
|
44
|
+
let _upd;
|
|
45
|
+
switch (SCNotificationMapping[dataMsg.data.activity_type]) {
|
|
46
|
+
case SCNotificationTypologyType.CONNECTION_REQUEST:
|
|
47
|
+
_upd = { user: 'request_user', state: SCConnectionStatus.CONNECTION_REQUEST_RECEIVED };
|
|
48
|
+
break;
|
|
49
|
+
case SCNotificationTypologyType.CONNECTION_CANCEL_REQUEST:
|
|
50
|
+
_upd = { user: 'cancel_request_user', state: null };
|
|
51
|
+
break;
|
|
52
|
+
case SCNotificationTypologyType.CONNECTION_ACCEPT:
|
|
53
|
+
_upd = { user: 'accept_user', state: SCConnectionStatus.CONNECTED };
|
|
54
|
+
break;
|
|
55
|
+
case SCNotificationTypologyType.CONNECTION_REMOVE:
|
|
56
|
+
_upd = { user: 'remove_user', state: null };
|
|
57
|
+
break;
|
|
60
58
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
k: k === data.data.connection_id ? STATUS_DISCONNECTED : v,
|
|
64
|
-
}));
|
|
65
|
-
}
|
|
66
|
-
setData(_data);
|
|
59
|
+
updateCache([dataMsg.data[_upd.user].id]);
|
|
60
|
+
setData((prev) => getDataUpdated(prev, dataMsg.data[_upd.user].id, _upd.state));
|
|
67
61
|
}
|
|
68
62
|
};
|
|
69
63
|
/**
|
|
70
64
|
* Subscribe to notification types user_follow, user_unfollow
|
|
71
65
|
*/
|
|
72
|
-
|
|
66
|
+
useDeepCompareEffectNoCheck(() => {
|
|
73
67
|
notificationConnAcceptSubscription.current = PubSub.subscribe(`${SCNotificationTopicType.INTERACTION}.${SCNotificationTypologyType.CONNECTION_ACCEPT}`, notificationSubscriber);
|
|
74
68
|
notificationConnRequestSubscription.current = PubSub.subscribe(`${SCNotificationTopicType.INTERACTION}.${SCNotificationTypologyType.CONNECTION_REQUEST}`, notificationSubscriber);
|
|
69
|
+
notificationConnRequestCancelSubscription.current = PubSub.subscribe(`${SCNotificationTopicType.INTERACTION}.${SCNotificationTypologyType.CONNECTION_CANCEL_REQUEST}`, notificationSubscriber);
|
|
75
70
|
notificationConnRemoveSubscription.current = PubSub.subscribe(`${SCNotificationTopicType.INTERACTION}.${SCNotificationTypologyType.CONNECTION_REMOVE}`, notificationSubscriber);
|
|
76
71
|
return () => {
|
|
77
72
|
PubSub.unsubscribe(notificationConnAcceptSubscription.current);
|
|
78
73
|
PubSub.unsubscribe(notificationConnRequestSubscription.current);
|
|
74
|
+
PubSub.unsubscribe(notificationConnRequestCancelSubscription.current);
|
|
79
75
|
PubSub.unsubscribe(notificationConnRemoveSubscription.current);
|
|
80
76
|
};
|
|
81
|
-
}, []);
|
|
77
|
+
}, [data]);
|
|
82
78
|
/**
|
|
83
79
|
* Memoized refresh all connections
|
|
84
80
|
* It makes a single request to the server and retrieves
|
|
@@ -87,7 +83,7 @@ export default function useSCConnectionsManager(user) {
|
|
|
87
83
|
*/
|
|
88
84
|
const refresh = useMemo(() => () => {
|
|
89
85
|
emptyCache();
|
|
90
|
-
if (
|
|
86
|
+
if (authUserId && cache.length > 0) {
|
|
91
87
|
// Only if user is authenticated
|
|
92
88
|
http
|
|
93
89
|
.request({
|
|
@@ -100,9 +96,7 @@ export default function useSCConnectionsManager(user) {
|
|
|
100
96
|
return Promise.reject(res);
|
|
101
97
|
}
|
|
102
98
|
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 })));
|
|
99
|
+
setData(Object.keys(res.data.connection_statuses).map((k) => ({ [k]: res.data.connection_statuses[k] })));
|
|
106
100
|
return Promise.resolve(res.data);
|
|
107
101
|
})
|
|
108
102
|
.catch((e) => {
|
|
@@ -110,64 +104,61 @@ export default function useSCConnectionsManager(user) {
|
|
|
110
104
|
Logger.error(SCOPE_SC_CORE, e);
|
|
111
105
|
});
|
|
112
106
|
}
|
|
113
|
-
}, [data,
|
|
107
|
+
}, [data, authUserId, cache]);
|
|
114
108
|
/**
|
|
115
109
|
* Memoized Request connection
|
|
116
110
|
*/
|
|
117
|
-
const
|
|
118
|
-
setLoading(
|
|
119
|
-
if (getCurrentStatus(user) === STATUS_CONNECTION_REQUEST_RECEIVED) {
|
|
120
|
-
return acceptConnection(user);
|
|
121
|
-
}
|
|
111
|
+
const handleRequest = useMemo(() => (user, endpoint) => {
|
|
112
|
+
setLoading(user.id);
|
|
122
113
|
return http
|
|
123
114
|
.request({
|
|
124
|
-
url:
|
|
125
|
-
method:
|
|
115
|
+
url: endpoint.url({ id: user.id }),
|
|
116
|
+
method: endpoint.method,
|
|
126
117
|
})
|
|
127
118
|
.then((res) => {
|
|
128
119
|
if (res.status >= 300) {
|
|
129
120
|
return Promise.reject(res);
|
|
130
121
|
}
|
|
131
122
|
updateCache([user.id]);
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
}));
|
|
135
|
-
setData(_data);
|
|
136
|
-
setLoading((prev) => prev.filter((u) => u !== user.id));
|
|
123
|
+
setData((prev) => getDataUpdated(prev, user.id, res.data.connection_status));
|
|
124
|
+
setUnLoading(user.id);
|
|
137
125
|
return Promise.resolve(res.data);
|
|
126
|
+
})
|
|
127
|
+
.catch((error) => {
|
|
128
|
+
Logger.error(SCOPE_SC_CORE, error);
|
|
129
|
+
return checkUserConnectionStatus(user);
|
|
138
130
|
});
|
|
139
131
|
}, [data, loading, cache]);
|
|
132
|
+
/**
|
|
133
|
+
* Memoized Request connection
|
|
134
|
+
*/
|
|
135
|
+
const requestConnection = useMemo(() => (user) => {
|
|
136
|
+
return handleRequest(user, Endpoints.UserRequestConnection);
|
|
137
|
+
}, [handleRequest]);
|
|
138
|
+
/**
|
|
139
|
+
* Memoized cancel request connection
|
|
140
|
+
*/
|
|
141
|
+
const cancelRequestConnection = useMemo(() => (user) => {
|
|
142
|
+
return handleRequest(user, Endpoints.UserCancelRequestConnection);
|
|
143
|
+
}, [handleRequest]);
|
|
144
|
+
/**
|
|
145
|
+
* Memoized Remove connection
|
|
146
|
+
*/
|
|
147
|
+
const removeConnection = useMemo(() => (user) => {
|
|
148
|
+
return handleRequest(user, Endpoints.UserRemoveConnection);
|
|
149
|
+
}, [handleRequest]);
|
|
140
150
|
/**
|
|
141
151
|
* Memoized Accept Request connection
|
|
142
152
|
*/
|
|
143
153
|
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]);
|
|
154
|
+
return handleRequest(user, Endpoints.UserAcceptRequestConnection);
|
|
155
|
+
}, [handleRequest]);
|
|
165
156
|
/**
|
|
166
|
-
* Return current user status if
|
|
157
|
+
* Return current user status if exists,
|
|
167
158
|
* otherwise return null
|
|
168
159
|
*/
|
|
169
|
-
const
|
|
170
|
-
const d = data.filter((
|
|
160
|
+
const getCurrentUserCacheStatus = useMemo(() => (user) => {
|
|
161
|
+
const d = data.filter((k) => parseInt(Object.keys(k)[0]) === user.id);
|
|
171
162
|
return d.length ? d[0][user.id] : null;
|
|
172
163
|
}, [data]);
|
|
173
164
|
/**
|
|
@@ -177,39 +168,93 @@ export default function useSCConnectionsManager(user) {
|
|
|
177
168
|
* @param user
|
|
178
169
|
*/
|
|
179
170
|
const checkUserConnectionStatus = (user) => {
|
|
180
|
-
setLoading(
|
|
181
|
-
http
|
|
171
|
+
setLoading(user.id);
|
|
172
|
+
return http
|
|
182
173
|
.request({
|
|
183
|
-
url: Endpoints.
|
|
184
|
-
method: Endpoints.
|
|
174
|
+
url: Endpoints.UserCheckConnectionStatus.url({ id: user.id }),
|
|
175
|
+
method: Endpoints.UserCheckConnectionStatus.method,
|
|
185
176
|
})
|
|
186
177
|
.then((res) => {
|
|
187
178
|
if (res.status >= 300) {
|
|
188
179
|
return Promise.reject(res);
|
|
189
180
|
}
|
|
181
|
+
setData((prev) => getDataUpdated(prev, user.id, res.data.connection_status));
|
|
190
182
|
updateCache([user.id]);
|
|
191
|
-
|
|
192
|
-
setLoading((prev) => prev.filter((u) => u !== user.id));
|
|
183
|
+
setUnLoading(user.id);
|
|
193
184
|
return Promise.resolve(res.data);
|
|
194
185
|
});
|
|
195
186
|
};
|
|
187
|
+
/**
|
|
188
|
+
* Get updated data
|
|
189
|
+
* @param data
|
|
190
|
+
* @param userId
|
|
191
|
+
* @param connectionStatus
|
|
192
|
+
*/
|
|
193
|
+
const getDataUpdated = (data, userId, connectionStatus) => {
|
|
194
|
+
const _index = data.findIndex((k) => parseInt(Object.keys(k)[0]) === userId);
|
|
195
|
+
let _data;
|
|
196
|
+
if (_index < 0) {
|
|
197
|
+
_data = [...data, ...[{ [userId]: connectionStatus }]];
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
_data = data.map((k) => {
|
|
201
|
+
if (parseInt(Object.keys(k)[0]) === userId) {
|
|
202
|
+
return { [Object.keys(k)[0]]: connectionStatus };
|
|
203
|
+
}
|
|
204
|
+
return { [Object.keys(k)[0]]: data[Object.keys(k)[0]] };
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
return _data;
|
|
208
|
+
};
|
|
209
|
+
/**
|
|
210
|
+
* Bypass remote check if the user is followed
|
|
211
|
+
*/
|
|
212
|
+
const getConnectionStatus = useMemo(() => (user) => {
|
|
213
|
+
updateCache([user.id]);
|
|
214
|
+
setData((prev) => getDataUpdated(prev, user.id, user.connection_status));
|
|
215
|
+
return user.connection_status;
|
|
216
|
+
}, [data, cache]);
|
|
196
217
|
/**
|
|
197
218
|
* Memoized status
|
|
198
219
|
* If user is already in cache -> check data user statuses,
|
|
199
220
|
* otherwise, check if auth user is connected with user
|
|
200
221
|
*/
|
|
201
|
-
const status =
|
|
222
|
+
const status = (user) => {
|
|
202
223
|
if (cache.includes(user.id)) {
|
|
203
|
-
return
|
|
224
|
+
return getCurrentUserCacheStatus(user);
|
|
204
225
|
}
|
|
205
|
-
if (
|
|
206
|
-
|
|
226
|
+
if (authUserId) {
|
|
227
|
+
if ('connection_status' in user) {
|
|
228
|
+
return getConnectionStatus(user);
|
|
229
|
+
}
|
|
230
|
+
if (!isLoading(user)) {
|
|
231
|
+
checkUserConnectionStatus(user);
|
|
232
|
+
}
|
|
207
233
|
}
|
|
208
234
|
return null;
|
|
209
|
-
}
|
|
235
|
+
};
|
|
236
|
+
/**
|
|
237
|
+
* Empty cache on logout
|
|
238
|
+
*/
|
|
239
|
+
useEffect(() => {
|
|
240
|
+
if (!authUserId) {
|
|
241
|
+
emptyCache();
|
|
242
|
+
}
|
|
243
|
+
}, [authUserId]);
|
|
210
244
|
if (connectionsDisabled || !user) {
|
|
211
245
|
return { connections: data, loading, isLoading };
|
|
212
246
|
}
|
|
213
|
-
return {
|
|
247
|
+
return {
|
|
248
|
+
connections: data,
|
|
249
|
+
loading,
|
|
250
|
+
isLoading,
|
|
251
|
+
status,
|
|
252
|
+
requestConnection,
|
|
253
|
+
cancelRequestConnection,
|
|
254
|
+
acceptConnection,
|
|
255
|
+
removeConnection,
|
|
256
|
+
refresh,
|
|
257
|
+
emptyCache,
|
|
258
|
+
};
|
|
214
259
|
}
|
|
215
260
|
//# 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":"AAAA,OAAO,EAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAC,MAAM,OAAO,CAAC;AACjD,OAAO,EAAC,IAAI,EAAE,SAAS,EAA6B,MAAM,6BAA6B,CAAC;AAExF,OAAO,EAAC,uBAAuB,EAAE,0BAA0B,EAAa,MAAM,sBAAsB,CAAC;AACrG,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAC,gBAAgB,EAAC,MAAM,8CAA8C,CAAC;AAC9E,OAAO,EAAC,6BAA6B,EAAC,MAAM,0BAA0B,CAAC;AACvE,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,MAAM,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAC,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAC,2BAA2B,EAAC,MAAM,yBAAyB,CAAC;AAEpE;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,IAAiB;IAC/D,MAAM,EAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAC,GAAG,mBAAmB,EAAE,CAAC;IAC5H,MAAM,oBAAoB,GAA6B,gBAAgB,EAAE,CAAC;IAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACzC,MAAM,mBAAmB,GACvB,6BAA6B,IAAI,oBAAoB,CAAC,WAAW,IAAI,oBAAoB,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC,KAAK,CAAC;IAC7I,MAAM,kCAAkC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,mCAAmC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,kCAAkC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,yCAAyC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAE/D;;;;OAIG;IACH,MAAM,sBAAsB,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QAC9C,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE;YACzC,IAAI,IAAmC,CAAC;YACxC,QAAQ,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;gBACzD,KAAK,0BAA0B,CAAC,kBAAkB;oBAChD,IAAI,GAAG,EAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,kBAAkB,CAAC,2BAA2B,EAAC,CAAC;oBACrF,MAAM;gBACR,KAAK,0BAA0B,CAAC,yBAAyB;oBACvD,IAAI,GAAG,EAAC,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC;oBAClD,MAAM;gBACR,KAAK,0BAA0B,CAAC,iBAAiB;oBAC/C,IAAI,GAAG,EAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,kBAAkB,CAAC,SAAS,EAAC,CAAC;oBAClE,MAAM;gBACR,KAAK,0BAA0B,CAAC,iBAAiB;oBAC/C,IAAI,GAAG,EAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC;oBAC1C,MAAM;aACT;YACD,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1C,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SACjF;IACH,CAAC,CAAC;IAEF;;OAEG;IACH,2BAA2B,CAAC,GAAG,EAAE;QAC/B,kCAAkC,CAAC,OAAO,GAAG,MAAM,CAAC,SAAS,CAC3D,GAAG,uBAAuB,CAAC,WAAW,IAAI,0BAA0B,CAAC,iBAAiB,EAAE,EACxF,sBAAsB,CACvB,CAAC;QACF,mCAAmC,CAAC,OAAO,GAAG,MAAM,CAAC,SAAS,CAC5D,GAAG,uBAAuB,CAAC,WAAW,IAAI,0BAA0B,CAAC,kBAAkB,EAAE,EACzF,sBAAsB,CACvB,CAAC;QACF,yCAAyC,CAAC,OAAO,GAAG,MAAM,CAAC,SAAS,CAClE,GAAG,uBAAuB,CAAC,WAAW,IAAI,0BAA0B,CAAC,yBAAyB,EAAE,EAChG,sBAAsB,CACvB,CAAC;QACF,kCAAkC,CAAC,OAAO,GAAG,MAAM,CAAC,SAAS,CAC3D,GAAG,uBAAuB,CAAC,WAAW,IAAI,0BAA0B,CAAC,iBAAiB,EAAE,EACxF,sBAAsB,CACvB,CAAC;QACF,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,WAAW,CAAC,kCAAkC,CAAC,OAAO,CAAC,CAAC;YAC/D,MAAM,CAAC,WAAW,CAAC,mCAAmC,CAAC,OAAO,CAAC,CAAC;YAChE,MAAM,CAAC,WAAW,CAAC,yCAAyC,CAAC,OAAO,CAAC,CAAC;YACtE,MAAM,CAAC,WAAW,CAAC,kCAAkC,CAAC,OAAO,CAAC,CAAC;QACjE,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX;;;;;OAKG;IACH,MAAM,OAAO,GAAG,OAAO,CACrB,GAAG,EAAE,CAAC,GAAS,EAAE;QACf,UAAU,EAAE,CAAC;QACb,IAAI,UAAU,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAClC,gCAAgC;YAChC,IAAI;iBACD,OAAO,CAAC;gBACP,GAAG,EAAE,SAAS,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7C,MAAM,EAAE,SAAS,CAAC,sBAAsB,CAAC,MAAM;gBAC/C,IAAI,EAAE,EAAC,KAAK,EAAE,KAAK,EAAC;aACrB,CAAC;iBACD,IAAI,CAAC,CAAC,GAAsB,EAAE,EAAE;gBAC/B,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE;oBACrB,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;iBAC5B;gBACD,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBACjF,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC;gBACxG,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnC,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;gBACX,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,gEAAgE,CAAC,CAAC;gBAC9F,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC;SACN;IACH,CAAC,EACD,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAC1B,CAAC;IAEF;;OAEG;IACH,MAAM,aAAa,GAAG,OAAO,CAC3B,GAAG,EAAE,CACH,CAAC,IAAgB,EAAE,QAAsB,EAAgB,EAAE;QACzD,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,OAAO,IAAI;aACR,OAAO,CAAC;YACP,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAC,CAAC;YAChC,MAAM,EAAE,QAAQ,CAAC,MAAM;SACxB,CAAC;aACD,IAAI,CAAC,CAAC,GAA8C,EAAE,EAAE;YACvD,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,EAAE;gBACrB,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aAC5B;YACD,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACvB,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC7E,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACf,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YACnC,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC,EACH,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CACvB,CAAC;IAEF;;OAEG;IACH,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE,CACH,CAAC,IAAgB,EAAgB,EAAE;QACjC,OAAO,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,qBAAqB,CAAC,CAAC;IAC9D,CAAC,EACH,CAAC,aAAa,CAAC,CAChB,CAAC;IAEF;;OAEG;IACH,MAAM,uBAAuB,GAAG,OAAO,CACrC,GAAG,EAAE,CACH,CAAC,IAAgB,EAAgB,EAAE;QACjC,OAAO,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,2BAA2B,CAAC,CAAC;IACpE,CAAC,EACH,CAAC,aAAa,CAAC,CAChB,CAAC;IAEF;;OAEG;IACH,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CACH,CAAC,IAAgB,EAAgB,EAAE;QACjC,OAAO,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,oBAAoB,CAAC,CAAC;IAC7D,CAAC,EACH,CAAC,aAAa,CAAC,CAChB,CAAC;IAEF;;OAEG;IACH,MAAM,gBAAgB,GAAG,OAAO,CAC9B,GAAG,EAAE,CACH,CAAC,IAAgB,EAAgB,EAAE;QACjC,OAAO,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,2BAA2B,CAAC,CAAC;IACpE,CAAC,EACH,CAAC,aAAa,CAAC,CAChB,CAAC;IAEF;;;OAGG;IACH,MAAM,yBAAyB,GAAG,OAAO,CACvC,GAAG,EAAE,CACH,CAAC,IAAgB,EAAU,EAAE;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC;QACtE,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzC,CAAC,EACH,CAAC,IAAI,CAAC,CACP,CAAC;IAEF;;;;;OAKG;IACH,MAAM,yBAAyB,GAAG,CAAC,IAAgB,EAAgB,EAAE;QACnE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,OAAO,IAAI;aACR,OAAO,CAAC;YACP,GAAG,EAAE,SAAS,CAAC,yBAAyB,CAAC,GAAG,CAAC,EAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAC,CAAC;YAC3D,MAAM,EAAE,SAAS,CAAC,yBAAyB,CAAC,MAAM;SACnD,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,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC7E,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YACvB,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF;;;;;OAKG;IACH,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,EAAE;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;QAC7E,IAAI,KAAK,CAAC;QACV,IAAI,MAAM,GAAG,CAAC,EAAE;YACd,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAC,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAC,CAAC,CAAC,CAAC;SACtD;aAAM;YACL,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACrB,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;oBAC1C,OAAO,EAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAC,CAAC;iBAChD;gBACD,OAAO,EAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC;YACxD,CAAC,CAAC,CAAC;SACJ;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF;;OAEG;IACH,MAAM,mBAAmB,GAAG,OAAO,CACjC,GAAG,EAAE,CAAC,CAAC,IAAgB,EAAE,EAAE;QACzB,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACvB,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC,EACD,CAAC,IAAI,EAAE,KAAK,CAAC,CACd,CAAC;IAEF;;;;OAIG;IACH,MAAM,MAAM,GAAG,CAAC,IAAgB,EAAU,EAAE;QAC1C,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAC3B,OAAO,yBAAyB,CAAC,IAAI,CAAC,CAAC;SACxC;QACD,IAAI,UAAU,EAAE;YACd,IAAI,mBAAmB,IAAI,IAAI,EAAE;gBAC/B,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;aAClC;YACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBACpB,yBAAyB,CAAC,IAAI,CAAC,CAAC;aACjC;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,UAAU,EAAE;YACf,UAAU,EAAE,CAAC;SACd;IACH,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,IAAI,mBAAmB,IAAI,CAAC,IAAI,EAAE;QAChC,OAAO,EAAC,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAC,CAAC;KAChD;IACD,OAAO;QACL,WAAW,EAAE,IAAI;QACjB,OAAO;QACP,SAAS;QACT,MAAM;QACN,iBAAiB;QACjB,uBAAuB;QACvB,gBAAgB;QAChB,gBAAgB;QAChB,OAAO;QACP,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -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
|
}
|