@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
|
@@ -10,10 +10,11 @@ export default function useSCCachingManager(): {
|
|
|
10
10
|
emptyCache: () => void;
|
|
11
11
|
data: any[];
|
|
12
12
|
setData: import("react").Dispatch<import("react").SetStateAction<any[]>>;
|
|
13
|
-
loading:
|
|
14
|
-
setLoading:
|
|
15
|
-
|
|
13
|
+
loading: any[];
|
|
14
|
+
setLoading: (id: number) => void;
|
|
15
|
+
setUnLoading: (id: number) => void;
|
|
16
|
+
isLoading: (v: {
|
|
16
17
|
id: number;
|
|
17
|
-
}) => boolean;
|
|
18
|
+
} | number) => boolean;
|
|
18
19
|
};
|
|
19
20
|
//# sourceMappingURL=useSCCachingManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSCCachingManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSCCachingManager.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,mBAAmB;;
|
|
1
|
+
{"version":3,"file":"useSCCachingManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSCCachingManager.ts"],"names":[],"mappings":";AAEA;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,mBAAmB;;uBAgB/B,MAAM,EAAE,KAAG,IAAI;sBAgBb,IAAI;;;;qBA0BP,MAAM,KAAG,IAAI;uBASb,MAAM,KAAG,IAAI;mBApBd;QAAC,EAAE,EAAE,MAAM,CAAA;KAAC,GAAG,MAAM,KAAG,OAAO;EA4BxC"}
|
|
@@ -7,8 +7,12 @@ const react_1 = require("react");
|
|
|
7
7
|
:::
|
|
8
8
|
*/
|
|
9
9
|
function useSCCachingManager() {
|
|
10
|
+
// Elements(id) already loaded
|
|
10
11
|
const cache = (0, react_1.useRef)([]);
|
|
11
|
-
|
|
12
|
+
// Elements(id) current in loading
|
|
13
|
+
const loadingCache = (0, react_1.useRef)([]);
|
|
14
|
+
// Trigger state changes
|
|
15
|
+
const [loading, setDataLoading] = (0, react_1.useState)([]);
|
|
12
16
|
const [data, setData] = (0, react_1.useState)([]);
|
|
13
17
|
/**
|
|
14
18
|
* Update cache
|
|
@@ -28,6 +32,7 @@ function useSCCachingManager() {
|
|
|
28
32
|
*/
|
|
29
33
|
const emptyCache = (0, react_1.useMemo)(() => () => {
|
|
30
34
|
cache.current = [];
|
|
35
|
+
loadingCache.current = [];
|
|
31
36
|
}, [cache]);
|
|
32
37
|
/**
|
|
33
38
|
* Category is checking
|
|
@@ -35,10 +40,21 @@ function useSCCachingManager() {
|
|
|
35
40
|
* the follow status of the obj
|
|
36
41
|
* @param category
|
|
37
42
|
*/
|
|
38
|
-
const isLoading = (0, react_1.useMemo)(() => (
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
43
|
+
const isLoading = (0, react_1.useMemo)(() => (v) => {
|
|
44
|
+
if (typeof v === 'number') {
|
|
45
|
+
return loadingCache.current.includes(v);
|
|
46
|
+
}
|
|
47
|
+
return loadingCache.current.includes(v.id);
|
|
48
|
+
}, [loading, loadingCache]);
|
|
49
|
+
const setLoading = (0, react_1.useMemo)(() => (id) => {
|
|
50
|
+
loadingCache.current = loadingCache.current.includes(id) ? loadingCache.current : [...loadingCache.current, ...[id]];
|
|
51
|
+
setDataLoading((prev) => (prev.includes(id) ? prev : [...prev, ...[id]]));
|
|
52
|
+
}, [loadingCache, loading]);
|
|
53
|
+
const setUnLoading = (0, react_1.useMemo)(() => (id) => {
|
|
54
|
+
loadingCache.current = loadingCache.current.filter((u) => u !== id);
|
|
55
|
+
setDataLoading((prev) => prev.filter((u) => u !== id));
|
|
56
|
+
}, [loadingCache, loading]);
|
|
57
|
+
return { cache: cache.current, updateCache, emptyCache, data, setData, loading, setLoading, setUnLoading, isLoading };
|
|
42
58
|
}
|
|
43
59
|
exports.default = useSCCachingManager;
|
|
44
60
|
//# sourceMappingURL=useSCCachingManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSCCachingManager.js","sourceRoot":"","sources":["../../../src/hooks/useSCCachingManager.ts"],"names":[],"mappings":";;AAAA,iCAAgD;AAEhD;;;;GAIG;AACH,SAAwB,mBAAmB;IACzC,MAAM,KAAK,GAAG,IAAA,cAAM,EAAW,EAAE,CAAC,CAAC;IACnC,MAAM,CAAC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"useSCCachingManager.js","sourceRoot":"","sources":["../../../src/hooks/useSCCachingManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,24 +16,28 @@ import { SCUserType } from '@selfcommunity/types';
|
|
|
16
16
|
*/
|
|
17
17
|
export default function useSCConnectionsManager(user?: SCUserType): {
|
|
18
18
|
connections: any[];
|
|
19
|
-
loading:
|
|
20
|
-
isLoading: (
|
|
19
|
+
loading: any[];
|
|
20
|
+
isLoading: (v: number | {
|
|
21
21
|
id: number;
|
|
22
22
|
}) => boolean;
|
|
23
23
|
status?: undefined;
|
|
24
24
|
requestConnection?: undefined;
|
|
25
|
+
cancelRequestConnection?: undefined;
|
|
25
26
|
acceptConnection?: undefined;
|
|
27
|
+
removeConnection?: undefined;
|
|
26
28
|
refresh?: undefined;
|
|
27
29
|
emptyCache?: undefined;
|
|
28
30
|
} | {
|
|
29
31
|
connections: any[];
|
|
30
|
-
loading:
|
|
31
|
-
isLoading: (
|
|
32
|
+
loading: any[];
|
|
33
|
+
isLoading: (v: number | {
|
|
32
34
|
id: number;
|
|
33
35
|
}) => boolean;
|
|
34
36
|
status: (user: SCUserType) => string;
|
|
35
37
|
requestConnection: (user: SCUserType) => Promise<any>;
|
|
38
|
+
cancelRequestConnection: (user: SCUserType) => Promise<any>;
|
|
36
39
|
acceptConnection: (user: SCUserType) => Promise<any>;
|
|
40
|
+
removeConnection: (user: SCUserType) => Promise<any>;
|
|
37
41
|
refresh: () => void;
|
|
38
42
|
emptyCache: () => void;
|
|
39
43
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSCConnectionsManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSCConnectionsManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsD,UAAU,EAAC,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"useSCConnectionsManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/useSCConnectionsManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsD,UAAU,EAAC,MAAM,sBAAsB,CAAC;AAWrG;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,OAAO,UAAU,uBAAuB,CAAC,IAAI,CAAC,EAAE,UAAU;;;;;;;;;;;;;;;;;;;mBAyPzC,UAAU,KAAG,MAAM;8BAnH9B,UAAU,KAAG,QAAQ,GAAG,CAAC;oCAWzB,UAAU,KAAG,QAAQ,GAAG,CAAC;6BAsBzB,UAAU,KAAG,QAAQ,GAAG,CAAC;6BAXzB,UAAU,KAAG,QAAQ,GAAG,CAAC;mBAnFxB,IAAI;;EAuNjB"}
|
|
@@ -13,15 +13,8 @@ const Preferences_1 = require("../constants/Preferences");
|
|
|
13
13
|
const useSCCachingManager_1 = __importDefault(require("./useSCCachingManager"));
|
|
14
14
|
const pubsub_js_1 = __importDefault(require("pubsub-js"));
|
|
15
15
|
const Notification_1 = require("../constants/Notification");
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
* Check if the user status is 'connected', 'sent_connection_request'
|
|
19
|
-
* 'received_connection_request', to update the cache and data
|
|
20
|
-
*/
|
|
21
|
-
const STATUS_CONNECTED = 'connected';
|
|
22
|
-
const STATUS_DISCONNECTED = 'disconnected';
|
|
23
|
-
const STATUS_CONNECTION_REQUEST_SENT = 'sent_connection_request';
|
|
24
|
-
const STATUS_CONNECTION_REQUEST_RECEIVED = 'received_connection_request';
|
|
16
|
+
const types_2 = require("@selfcommunity/types");
|
|
17
|
+
const use_deep_compare_effect_1 = require("use-deep-compare-effect");
|
|
25
18
|
/**
|
|
26
19
|
:::info
|
|
27
20
|
This custom hook is used to manage to manage friends.
|
|
@@ -38,52 +31,55 @@ const STATUS_CONNECTION_REQUEST_RECEIVED = 'received_connection_request';
|
|
|
38
31
|
:::
|
|
39
32
|
*/
|
|
40
33
|
function useSCConnectionsManager(user) {
|
|
41
|
-
const { cache, updateCache, emptyCache, data, setData, loading, setLoading, isLoading } = (0, useSCCachingManager_1.default)();
|
|
34
|
+
const { cache, updateCache, emptyCache, data, setData, loading, setLoading, setUnLoading, isLoading } = (0, useSCCachingManager_1.default)();
|
|
42
35
|
const scPreferencesContext = (0, SCPreferencesProvider_1.useSCPreferences)();
|
|
36
|
+
const authUserId = user ? user.id : null;
|
|
43
37
|
const connectionsDisabled = Preferences_1.CONFIGURATIONS_FOLLOW_ENABLED in scPreferencesContext.preferences && scPreferencesContext.preferences[Preferences_1.CONFIGURATIONS_FOLLOW_ENABLED].value;
|
|
44
38
|
const notificationConnAcceptSubscription = (0, react_1.useRef)(null);
|
|
45
39
|
const notificationConnRequestSubscription = (0, react_1.useRef)(null);
|
|
46
40
|
const notificationConnRemoveSubscription = (0, react_1.useRef)(null);
|
|
41
|
+
const notificationConnRequestCancelSubscription = (0, react_1.useRef)(null);
|
|
47
42
|
/**
|
|
48
|
-
* Notification subscriber
|
|
43
|
+
* Notification subscriber handler
|
|
49
44
|
* @param msg
|
|
50
45
|
* @param data
|
|
51
46
|
*/
|
|
52
|
-
const notificationSubscriber = (msg,
|
|
53
|
-
if (data.connection
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
47
|
+
const notificationSubscriber = (msg, dataMsg) => {
|
|
48
|
+
if (dataMsg.data.connection !== undefined) {
|
|
49
|
+
let _upd;
|
|
50
|
+
switch (Notification_1.SCNotificationMapping[dataMsg.data.activity_type]) {
|
|
51
|
+
case types_1.SCNotificationTypologyType.CONNECTION_REQUEST:
|
|
52
|
+
_upd = { user: 'request_user', state: types_2.SCConnectionStatus.CONNECTION_REQUEST_RECEIVED };
|
|
53
|
+
break;
|
|
54
|
+
case types_1.SCNotificationTypologyType.CONNECTION_CANCEL_REQUEST:
|
|
55
|
+
_upd = { user: 'cancel_request_user', state: null };
|
|
56
|
+
break;
|
|
57
|
+
case types_1.SCNotificationTypologyType.CONNECTION_ACCEPT:
|
|
58
|
+
_upd = { user: 'accept_user', state: types_2.SCConnectionStatus.CONNECTED };
|
|
59
|
+
break;
|
|
60
|
+
case types_1.SCNotificationTypologyType.CONNECTION_REMOVE:
|
|
61
|
+
_upd = { user: 'remove_user', state: null };
|
|
62
|
+
break;
|
|
65
63
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
k: k === data.data.connection_id ? STATUS_DISCONNECTED : v,
|
|
69
|
-
}));
|
|
70
|
-
}
|
|
71
|
-
setData(_data);
|
|
64
|
+
updateCache([dataMsg.data[_upd.user].id]);
|
|
65
|
+
setData((prev) => getDataUpdated(prev, dataMsg.data[_upd.user].id, _upd.state));
|
|
72
66
|
}
|
|
73
67
|
};
|
|
74
68
|
/**
|
|
75
69
|
* Subscribe to notification types user_follow, user_unfollow
|
|
76
70
|
*/
|
|
77
|
-
(0,
|
|
71
|
+
(0, use_deep_compare_effect_1.useDeepCompareEffectNoCheck)(() => {
|
|
78
72
|
notificationConnAcceptSubscription.current = pubsub_js_1.default.subscribe(`${types_1.SCNotificationTopicType.INTERACTION}.${types_1.SCNotificationTypologyType.CONNECTION_ACCEPT}`, notificationSubscriber);
|
|
79
73
|
notificationConnRequestSubscription.current = pubsub_js_1.default.subscribe(`${types_1.SCNotificationTopicType.INTERACTION}.${types_1.SCNotificationTypologyType.CONNECTION_REQUEST}`, notificationSubscriber);
|
|
74
|
+
notificationConnRequestCancelSubscription.current = pubsub_js_1.default.subscribe(`${types_1.SCNotificationTopicType.INTERACTION}.${types_1.SCNotificationTypologyType.CONNECTION_CANCEL_REQUEST}`, notificationSubscriber);
|
|
80
75
|
notificationConnRemoveSubscription.current = pubsub_js_1.default.subscribe(`${types_1.SCNotificationTopicType.INTERACTION}.${types_1.SCNotificationTypologyType.CONNECTION_REMOVE}`, notificationSubscriber);
|
|
81
76
|
return () => {
|
|
82
77
|
pubsub_js_1.default.unsubscribe(notificationConnAcceptSubscription.current);
|
|
83
78
|
pubsub_js_1.default.unsubscribe(notificationConnRequestSubscription.current);
|
|
79
|
+
pubsub_js_1.default.unsubscribe(notificationConnRequestCancelSubscription.current);
|
|
84
80
|
pubsub_js_1.default.unsubscribe(notificationConnRemoveSubscription.current);
|
|
85
81
|
};
|
|
86
|
-
}, []);
|
|
82
|
+
}, [data]);
|
|
87
83
|
/**
|
|
88
84
|
* Memoized refresh all connections
|
|
89
85
|
* It makes a single request to the server and retrieves
|
|
@@ -92,7 +88,7 @@ function useSCConnectionsManager(user) {
|
|
|
92
88
|
*/
|
|
93
89
|
const refresh = (0, react_1.useMemo)(() => () => {
|
|
94
90
|
emptyCache();
|
|
95
|
-
if (
|
|
91
|
+
if (authUserId && cache.length > 0) {
|
|
96
92
|
// Only if user is authenticated
|
|
97
93
|
api_services_1.http
|
|
98
94
|
.request({
|
|
@@ -105,9 +101,7 @@ function useSCConnectionsManager(user) {
|
|
|
105
101
|
return Promise.reject(res);
|
|
106
102
|
}
|
|
107
103
|
updateCache(Object.keys(res.data.connection_statuses).map((id) => parseInt(id)));
|
|
108
|
-
setData(Object.
|
|
109
|
-
.filter(([k, v]) => v !== null)
|
|
110
|
-
.map(([k, v]) => ({ [parseInt(k)]: v })));
|
|
104
|
+
setData(Object.keys(res.data.connection_statuses).map((k) => ({ [k]: res.data.connection_statuses[k] })));
|
|
111
105
|
return Promise.resolve(res.data);
|
|
112
106
|
})
|
|
113
107
|
.catch((e) => {
|
|
@@ -115,64 +109,61 @@ function useSCConnectionsManager(user) {
|
|
|
115
109
|
utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, e);
|
|
116
110
|
});
|
|
117
111
|
}
|
|
118
|
-
}, [data,
|
|
112
|
+
}, [data, authUserId, cache]);
|
|
119
113
|
/**
|
|
120
114
|
* Memoized Request connection
|
|
121
115
|
*/
|
|
122
|
-
const
|
|
123
|
-
setLoading(
|
|
124
|
-
if (getCurrentStatus(user) === STATUS_CONNECTION_REQUEST_RECEIVED) {
|
|
125
|
-
return acceptConnection(user);
|
|
126
|
-
}
|
|
116
|
+
const handleRequest = (0, react_1.useMemo)(() => (user, endpoint) => {
|
|
117
|
+
setLoading(user.id);
|
|
127
118
|
return api_services_1.http
|
|
128
119
|
.request({
|
|
129
|
-
url:
|
|
130
|
-
method:
|
|
120
|
+
url: endpoint.url({ id: user.id }),
|
|
121
|
+
method: endpoint.method,
|
|
131
122
|
})
|
|
132
123
|
.then((res) => {
|
|
133
124
|
if (res.status >= 300) {
|
|
134
125
|
return Promise.reject(res);
|
|
135
126
|
}
|
|
136
127
|
updateCache([user.id]);
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
}));
|
|
140
|
-
setData(_data);
|
|
141
|
-
setLoading((prev) => prev.filter((u) => u !== user.id));
|
|
128
|
+
setData((prev) => getDataUpdated(prev, user.id, res.data.connection_status));
|
|
129
|
+
setUnLoading(user.id);
|
|
142
130
|
return Promise.resolve(res.data);
|
|
131
|
+
})
|
|
132
|
+
.catch((error) => {
|
|
133
|
+
utils_1.Logger.error(Errors_1.SCOPE_SC_CORE, error);
|
|
134
|
+
return checkUserConnectionStatus(user);
|
|
143
135
|
});
|
|
144
136
|
}, [data, loading, cache]);
|
|
137
|
+
/**
|
|
138
|
+
* Memoized Request connection
|
|
139
|
+
*/
|
|
140
|
+
const requestConnection = (0, react_1.useMemo)(() => (user) => {
|
|
141
|
+
return handleRequest(user, api_services_1.Endpoints.UserRequestConnection);
|
|
142
|
+
}, [handleRequest]);
|
|
143
|
+
/**
|
|
144
|
+
* Memoized cancel request connection
|
|
145
|
+
*/
|
|
146
|
+
const cancelRequestConnection = (0, react_1.useMemo)(() => (user) => {
|
|
147
|
+
return handleRequest(user, api_services_1.Endpoints.UserCancelRequestConnection);
|
|
148
|
+
}, [handleRequest]);
|
|
149
|
+
/**
|
|
150
|
+
* Memoized Remove connection
|
|
151
|
+
*/
|
|
152
|
+
const removeConnection = (0, react_1.useMemo)(() => (user) => {
|
|
153
|
+
return handleRequest(user, api_services_1.Endpoints.UserRemoveConnection);
|
|
154
|
+
}, [handleRequest]);
|
|
145
155
|
/**
|
|
146
156
|
* Memoized Accept Request connection
|
|
147
157
|
*/
|
|
148
158
|
const acceptConnection = (0, react_1.useMemo)(() => (user) => {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
return api_services_1.http
|
|
152
|
-
.request({
|
|
153
|
-
url: api_services_1.Endpoints.UserAcceptRequestConnection.url({ id: user.id }),
|
|
154
|
-
method: api_services_1.Endpoints.UserAcceptRequestConnection.method,
|
|
155
|
-
})
|
|
156
|
-
.then((res) => {
|
|
157
|
-
if (res.status >= 300) {
|
|
158
|
-
return Promise.reject(res);
|
|
159
|
-
}
|
|
160
|
-
updateCache([user.id]);
|
|
161
|
-
const _data = data.map(([k, v]) => ({
|
|
162
|
-
k: k === user.id ? STATUS_CONNECTED : v,
|
|
163
|
-
}));
|
|
164
|
-
setData(_data);
|
|
165
|
-
setLoading((prev) => prev.filter((u) => u !== user.id));
|
|
166
|
-
return Promise.resolve(res.data);
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
}, [data, loading, cache]);
|
|
159
|
+
return handleRequest(user, api_services_1.Endpoints.UserAcceptRequestConnection);
|
|
160
|
+
}, [handleRequest]);
|
|
170
161
|
/**
|
|
171
|
-
* Return current user status if
|
|
162
|
+
* Return current user status if exists,
|
|
172
163
|
* otherwise return null
|
|
173
164
|
*/
|
|
174
|
-
const
|
|
175
|
-
const d = data.filter((
|
|
165
|
+
const getCurrentUserCacheStatus = (0, react_1.useMemo)(() => (user) => {
|
|
166
|
+
const d = data.filter((k) => parseInt(Object.keys(k)[0]) === user.id);
|
|
176
167
|
return d.length ? d[0][user.id] : null;
|
|
177
168
|
}, [data]);
|
|
178
169
|
/**
|
|
@@ -182,40 +173,94 @@ function useSCConnectionsManager(user) {
|
|
|
182
173
|
* @param user
|
|
183
174
|
*/
|
|
184
175
|
const checkUserConnectionStatus = (user) => {
|
|
185
|
-
setLoading(
|
|
186
|
-
api_services_1.http
|
|
176
|
+
setLoading(user.id);
|
|
177
|
+
return api_services_1.http
|
|
187
178
|
.request({
|
|
188
|
-
url: api_services_1.Endpoints.
|
|
189
|
-
method: api_services_1.Endpoints.
|
|
179
|
+
url: api_services_1.Endpoints.UserCheckConnectionStatus.url({ id: user.id }),
|
|
180
|
+
method: api_services_1.Endpoints.UserCheckConnectionStatus.method,
|
|
190
181
|
})
|
|
191
182
|
.then((res) => {
|
|
192
183
|
if (res.status >= 300) {
|
|
193
184
|
return Promise.reject(res);
|
|
194
185
|
}
|
|
186
|
+
setData((prev) => getDataUpdated(prev, user.id, res.data.connection_status));
|
|
195
187
|
updateCache([user.id]);
|
|
196
|
-
|
|
197
|
-
setLoading((prev) => prev.filter((u) => u !== user.id));
|
|
188
|
+
setUnLoading(user.id);
|
|
198
189
|
return Promise.resolve(res.data);
|
|
199
190
|
});
|
|
200
191
|
};
|
|
192
|
+
/**
|
|
193
|
+
* Get updated data
|
|
194
|
+
* @param data
|
|
195
|
+
* @param userId
|
|
196
|
+
* @param connectionStatus
|
|
197
|
+
*/
|
|
198
|
+
const getDataUpdated = (data, userId, connectionStatus) => {
|
|
199
|
+
const _index = data.findIndex((k) => parseInt(Object.keys(k)[0]) === userId);
|
|
200
|
+
let _data;
|
|
201
|
+
if (_index < 0) {
|
|
202
|
+
_data = [...data, ...[{ [userId]: connectionStatus }]];
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
_data = data.map((k) => {
|
|
206
|
+
if (parseInt(Object.keys(k)[0]) === userId) {
|
|
207
|
+
return { [Object.keys(k)[0]]: connectionStatus };
|
|
208
|
+
}
|
|
209
|
+
return { [Object.keys(k)[0]]: data[Object.keys(k)[0]] };
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
return _data;
|
|
213
|
+
};
|
|
214
|
+
/**
|
|
215
|
+
* Bypass remote check if the user is followed
|
|
216
|
+
*/
|
|
217
|
+
const getConnectionStatus = (0, react_1.useMemo)(() => (user) => {
|
|
218
|
+
updateCache([user.id]);
|
|
219
|
+
setData((prev) => getDataUpdated(prev, user.id, user.connection_status));
|
|
220
|
+
return user.connection_status;
|
|
221
|
+
}, [data, cache]);
|
|
201
222
|
/**
|
|
202
223
|
* Memoized status
|
|
203
224
|
* If user is already in cache -> check data user statuses,
|
|
204
225
|
* otherwise, check if auth user is connected with user
|
|
205
226
|
*/
|
|
206
|
-
const status = (
|
|
227
|
+
const status = (user) => {
|
|
207
228
|
if (cache.includes(user.id)) {
|
|
208
|
-
return
|
|
229
|
+
return getCurrentUserCacheStatus(user);
|
|
209
230
|
}
|
|
210
|
-
if (
|
|
211
|
-
|
|
231
|
+
if (authUserId) {
|
|
232
|
+
if ('connection_status' in user) {
|
|
233
|
+
return getConnectionStatus(user);
|
|
234
|
+
}
|
|
235
|
+
if (!isLoading(user)) {
|
|
236
|
+
checkUserConnectionStatus(user);
|
|
237
|
+
}
|
|
212
238
|
}
|
|
213
239
|
return null;
|
|
214
|
-
}
|
|
240
|
+
};
|
|
241
|
+
/**
|
|
242
|
+
* Empty cache on logout
|
|
243
|
+
*/
|
|
244
|
+
(0, react_1.useEffect)(() => {
|
|
245
|
+
if (!authUserId) {
|
|
246
|
+
emptyCache();
|
|
247
|
+
}
|
|
248
|
+
}, [authUserId]);
|
|
215
249
|
if (connectionsDisabled || !user) {
|
|
216
250
|
return { connections: data, loading, isLoading };
|
|
217
251
|
}
|
|
218
|
-
return {
|
|
252
|
+
return {
|
|
253
|
+
connections: data,
|
|
254
|
+
loading,
|
|
255
|
+
isLoading,
|
|
256
|
+
status,
|
|
257
|
+
requestConnection,
|
|
258
|
+
cancelRequestConnection,
|
|
259
|
+
acceptConnection,
|
|
260
|
+
removeConnection,
|
|
261
|
+
refresh,
|
|
262
|
+
emptyCache,
|
|
263
|
+
};
|
|
219
264
|
}
|
|
220
265
|
exports.default = useSCConnectionsManager;
|
|
221
266
|
//# sourceMappingURL=useSCConnectionsManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSCConnectionsManager.js","sourceRoot":"","sources":["../../../src/hooks/useSCConnectionsManager.ts"],"names":[],"mappings":";;;;;AAAA,iCAAiD;AACjD,
|
|
1
|
+
{"version":3,"file":"useSCConnectionsManager.js","sourceRoot":"","sources":["../../../src/hooks/useSCConnectionsManager.ts"],"names":[],"mappings":";;;;;AAAA,iCAAiD;AACjD,8DAAwF;AAExF,gDAAqG;AACrG,gDAA4C;AAC5C,gDAAkD;AAClD,wFAA8E;AAC9E,0DAAuE;AACvE,gFAAwD;AACxD,0DAA+B;AAC/B,4DAAgE;AAChE,gDAAwD;AACxD,qEAAoE;AAEpE;;;;;;;;;;;;;;GAcG;AACH,SAAwB,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,IAAA,6BAAmB,GAAE,CAAC;IAC5H,MAAM,oBAAoB,GAA6B,IAAA,wCAAgB,GAAE,CAAC;IAC1E,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACzC,MAAM,mBAAmB,GACvB,2CAA6B,IAAI,oBAAoB,CAAC,WAAW,IAAI,oBAAoB,CAAC,WAAW,CAAC,2CAA6B,CAAC,CAAC,KAAK,CAAC;IAC7I,MAAM,kCAAkC,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;IACxD,MAAM,mCAAmC,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;IACzD,MAAM,kCAAkC,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;IACxD,MAAM,yCAAyC,GAAG,IAAA,cAAM,EAAC,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,oCAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;gBACzD,KAAK,kCAA0B,CAAC,kBAAkB;oBAChD,IAAI,GAAG,EAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,0BAAkB,CAAC,2BAA2B,EAAC,CAAC;oBACrF,MAAM;gBACR,KAAK,kCAA0B,CAAC,yBAAyB;oBACvD,IAAI,GAAG,EAAC,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,IAAI,EAAC,CAAC;oBAClD,MAAM;gBACR,KAAK,kCAA0B,CAAC,iBAAiB;oBAC/C,IAAI,GAAG,EAAC,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,0BAAkB,CAAC,SAAS,EAAC,CAAC;oBAClE,MAAM;gBACR,KAAK,kCAA0B,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,IAAA,qDAA2B,EAAC,GAAG,EAAE;QAC/B,kCAAkC,CAAC,OAAO,GAAG,mBAAM,CAAC,SAAS,CAC3D,GAAG,+BAAuB,CAAC,WAAW,IAAI,kCAA0B,CAAC,iBAAiB,EAAE,EACxF,sBAAsB,CACvB,CAAC;QACF,mCAAmC,CAAC,OAAO,GAAG,mBAAM,CAAC,SAAS,CAC5D,GAAG,+BAAuB,CAAC,WAAW,IAAI,kCAA0B,CAAC,kBAAkB,EAAE,EACzF,sBAAsB,CACvB,CAAC;QACF,yCAAyC,CAAC,OAAO,GAAG,mBAAM,CAAC,SAAS,CAClE,GAAG,+BAAuB,CAAC,WAAW,IAAI,kCAA0B,CAAC,yBAAyB,EAAE,EAChG,sBAAsB,CACvB,CAAC;QACF,kCAAkC,CAAC,OAAO,GAAG,mBAAM,CAAC,SAAS,CAC3D,GAAG,+BAAuB,CAAC,WAAW,IAAI,kCAA0B,CAAC,iBAAiB,EAAE,EACxF,sBAAsB,CACvB,CAAC;QACF,OAAO,GAAG,EAAE;YACV,mBAAM,CAAC,WAAW,CAAC,kCAAkC,CAAC,OAAO,CAAC,CAAC;YAC/D,mBAAM,CAAC,WAAW,CAAC,mCAAmC,CAAC,OAAO,CAAC,CAAC;YAChE,mBAAM,CAAC,WAAW,CAAC,yCAAyC,CAAC,OAAO,CAAC,CAAC;YACtE,mBAAM,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,IAAA,eAAO,EACrB,GAAG,EAAE,CAAC,GAAS,EAAE;QACf,UAAU,EAAE,CAAC;QACb,IAAI,UAAU,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAClC,gCAAgC;YAChC,mBAAI;iBACD,OAAO,CAAC;gBACP,GAAG,EAAE,wBAAS,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7C,MAAM,EAAE,wBAAS,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,cAAM,CAAC,KAAK,CAAC,sBAAa,EAAE,gEAAgE,CAAC,CAAC;gBAC9F,cAAM,CAAC,KAAK,CAAC,sBAAa,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,IAAA,eAAO,EAC3B,GAAG,EAAE,CACH,CAAC,IAAgB,EAAE,QAAsB,EAAgB,EAAE;QACzD,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpB,OAAO,mBAAI;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,cAAM,CAAC,KAAK,CAAC,sBAAa,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,IAAA,eAAO,EAC/B,GAAG,EAAE,CACH,CAAC,IAAgB,EAAgB,EAAE;QACjC,OAAO,aAAa,CAAC,IAAI,EAAE,wBAAS,CAAC,qBAAqB,CAAC,CAAC;IAC9D,CAAC,EACH,CAAC,aAAa,CAAC,CAChB,CAAC;IAEF;;OAEG;IACH,MAAM,uBAAuB,GAAG,IAAA,eAAO,EACrC,GAAG,EAAE,CACH,CAAC,IAAgB,EAAgB,EAAE;QACjC,OAAO,aAAa,CAAC,IAAI,EAAE,wBAAS,CAAC,2BAA2B,CAAC,CAAC;IACpE,CAAC,EACH,CAAC,aAAa,CAAC,CAChB,CAAC;IAEF;;OAEG;IACH,MAAM,gBAAgB,GAAG,IAAA,eAAO,EAC9B,GAAG,EAAE,CACH,CAAC,IAAgB,EAAgB,EAAE;QACjC,OAAO,aAAa,CAAC,IAAI,EAAE,wBAAS,CAAC,oBAAoB,CAAC,CAAC;IAC7D,CAAC,EACH,CAAC,aAAa,CAAC,CAChB,CAAC;IAEF;;OAEG;IACH,MAAM,gBAAgB,GAAG,IAAA,eAAO,EAC9B,GAAG,EAAE,CACH,CAAC,IAAgB,EAAgB,EAAE;QACjC,OAAO,aAAa,CAAC,IAAI,EAAE,wBAAS,CAAC,2BAA2B,CAAC,CAAC;IACpE,CAAC,EACH,CAAC,aAAa,CAAC,CAChB,CAAC;IAEF;;;OAGG;IACH,MAAM,yBAAyB,GAAG,IAAA,eAAO,EACvC,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,mBAAI;aACR,OAAO,CAAC;YACP,GAAG,EAAE,wBAAS,CAAC,yBAAyB,CAAC,GAAG,CAAC,EAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAC,CAAC;YAC3D,MAAM,EAAE,wBAAS,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,IAAA,eAAO,EACjC,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,IAAA,iBAAS,EAAC,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;AAhSD,0CAgSC"}
|
|
@@ -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"}
|
|
@@ -23,7 +23,7 @@ const utils_1 = require("@selfcommunity/utils");
|
|
|
23
23
|
:::
|
|
24
24
|
*/
|
|
25
25
|
function useSCFollowedCategoriesManager(user, updateUser) {
|
|
26
|
-
const { cache, updateCache, emptyCache, data, setData, loading, setLoading, isLoading } = (0, useSCCachingManager_1.default)();
|
|
26
|
+
const { cache, updateCache, emptyCache, data, setData, loading, setLoading, setUnLoading, isLoading } = (0, useSCCachingManager_1.default)();
|
|
27
27
|
const authUserId = user ? user.id : null;
|
|
28
28
|
/**
|
|
29
29
|
* Memoized refresh all categories
|
|
@@ -60,7 +60,7 @@ function useSCFollowedCategoriesManager(user, updateUser) {
|
|
|
60
60
|
* Toggle action
|
|
61
61
|
*/
|
|
62
62
|
const follow = (0, react_1.useMemo)(() => (category) => {
|
|
63
|
-
setLoading(
|
|
63
|
+
setLoading(category.id);
|
|
64
64
|
return api_services_1.http
|
|
65
65
|
.request({
|
|
66
66
|
url: api_services_1.Endpoints.FollowCategory.url({ id: category.id }),
|
|
@@ -73,7 +73,7 @@ function useSCFollowedCategoriesManager(user, updateUser) {
|
|
|
73
73
|
updateCache([category.id]);
|
|
74
74
|
const isFollowed = data.includes(category.id);
|
|
75
75
|
setData((prev) => (isFollowed ? prev.filter((id) => id !== category.id) : [...[category.id], ...prev]));
|
|
76
|
-
|
|
76
|
+
setUnLoading(category.id);
|
|
77
77
|
updateUser({ categories_counter: isFollowed ? data.length - 1 : data.length + 1 });
|
|
78
78
|
return Promise.resolve(res.data);
|
|
79
79
|
});
|
|
@@ -85,7 +85,7 @@ function useSCFollowedCategoriesManager(user, updateUser) {
|
|
|
85
85
|
* @param category
|
|
86
86
|
*/
|
|
87
87
|
const checkIsCategoryFollowed = (category) => {
|
|
88
|
-
setLoading(
|
|
88
|
+
setLoading(category.id);
|
|
89
89
|
api_services_1.http
|
|
90
90
|
.request({
|
|
91
91
|
url: api_services_1.Endpoints.CheckCategoryIsFollowed.url({ id: category.id }),
|
|
@@ -97,7 +97,7 @@ function useSCFollowedCategoriesManager(user, updateUser) {
|
|
|
97
97
|
}
|
|
98
98
|
updateCache([category.id]);
|
|
99
99
|
setData((prev) => (res.data.is_followed ? [...[category.id], ...prev] : prev.filter((id) => id !== category.id)));
|
|
100
|
-
|
|
100
|
+
setUnLoading(category.id);
|
|
101
101
|
return Promise.resolve(res.data);
|
|
102
102
|
});
|
|
103
103
|
};
|
|
@@ -124,12 +124,20 @@ function useSCFollowedCategoriesManager(user, updateUser) {
|
|
|
124
124
|
if ('followed' in category) {
|
|
125
125
|
return getFollowStatus(category);
|
|
126
126
|
}
|
|
127
|
-
if (!
|
|
127
|
+
if (!isLoading(category)) {
|
|
128
128
|
checkIsCategoryFollowed(category);
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
return false;
|
|
132
132
|
}, [data, loading, cache, authUserId]);
|
|
133
|
+
/**
|
|
134
|
+
* Empty cache on logout
|
|
135
|
+
*/
|
|
136
|
+
(0, react_1.useEffect)(() => {
|
|
137
|
+
if (!authUserId) {
|
|
138
|
+
emptyCache();
|
|
139
|
+
}
|
|
140
|
+
}, [authUserId]);
|
|
133
141
|
if (!user) {
|
|
134
142
|
return { categories: data, loading, isLoading };
|
|
135
143
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSCFollowedCategoriesManager.js","sourceRoot":"","sources":["../../../src/hooks/useSCFollowedCategoriesManager.ts"],"names":[],"mappings":";;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"useSCFollowedCategoriesManager.js","sourceRoot":"","sources":["../../../src/hooks/useSCFollowedCategoriesManager.ts"],"names":[],"mappings":"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"}
|