@oxyhq/services 5.4.8 → 5.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/core/index.js +0 -59
- package/lib/commonjs/core/index.js.map +1 -1
- package/lib/commonjs/index.js +174 -17
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/ui/components/FollowButton.js +8 -23
- package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
- package/lib/commonjs/ui/components/OxyProvider.js +49 -38
- package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
- package/lib/commonjs/ui/components/OxySignInButton.js +2 -8
- package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -1
- package/lib/commonjs/ui/hooks/index.js +15 -2
- package/lib/commonjs/ui/hooks/index.js.map +1 -1
- package/lib/commonjs/ui/hooks/useAuthFetch.js +182 -0
- package/lib/commonjs/ui/hooks/useAuthFetch.js.map +1 -0
- package/lib/commonjs/ui/hooks/useFollow.js +10 -29
- package/lib/commonjs/ui/hooks/useFollow.js.map +1 -1
- package/lib/commonjs/ui/hooks/useOxyFollow.js +190 -0
- package/lib/commonjs/ui/hooks/useOxyFollow.js.map +1 -0
- package/lib/commonjs/ui/index.js +183 -0
- package/lib/commonjs/ui/index.js.map +1 -1
- package/lib/commonjs/ui/screens/AccountCenterScreen.js +18 -14
- package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/AppInfoScreen.js +37 -19
- package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/FileManagementScreen.js +27 -9
- package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js +2 -8
- package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
- package/lib/commonjs/ui/store/index.js +51 -255
- package/lib/commonjs/ui/store/index.js.map +1 -1
- package/lib/commonjs/ui/store/setupOxyStore.js +63 -0
- package/lib/commonjs/ui/store/setupOxyStore.js.map +1 -0
- package/lib/commonjs/ui/store/slices/authSlice.js +56 -0
- package/lib/commonjs/ui/store/slices/authSlice.js.map +1 -0
- package/lib/commonjs/ui/store/slices/followSlice.js +238 -0
- package/lib/commonjs/ui/store/slices/followSlice.js.map +1 -0
- package/lib/commonjs/ui/store/slices/index.js +129 -0
- package/lib/commonjs/ui/store/slices/index.js.map +1 -0
- package/lib/commonjs/ui/store/slices/types.js +19 -0
- package/lib/commonjs/ui/store/slices/types.js.map +1 -0
- package/lib/commonjs/ui/styles/index.js +11 -0
- package/lib/commonjs/ui/styles/index.js.map +1 -1
- package/lib/commonjs/ui/styles/shadows.js +123 -0
- package/lib/commonjs/ui/styles/shadows.js.map +1 -0
- package/lib/module/core/index.js +0 -59
- package/lib/module/core/index.js.map +1 -1
- package/lib/module/index.js +14 -10
- package/lib/module/index.js.map +1 -1
- package/lib/module/ui/components/FollowButton.js +8 -23
- package/lib/module/ui/components/FollowButton.js.map +1 -1
- package/lib/module/ui/components/OxyProvider.js +49 -38
- package/lib/module/ui/components/OxyProvider.js.map +1 -1
- package/lib/module/ui/components/OxySignInButton.js +2 -8
- package/lib/module/ui/components/OxySignInButton.js.map +1 -1
- package/lib/module/ui/hooks/index.js +2 -1
- package/lib/module/ui/hooks/index.js.map +1 -1
- package/lib/module/ui/hooks/useAuthFetch.js +177 -0
- package/lib/module/ui/hooks/useAuthFetch.js.map +1 -0
- package/lib/module/ui/hooks/useFollow.js +10 -29
- package/lib/module/ui/hooks/useFollow.js.map +1 -1
- package/lib/module/ui/hooks/useOxyFollow.js +186 -0
- package/lib/module/ui/hooks/useOxyFollow.js.map +1 -0
- package/lib/module/ui/index.js +12 -2
- package/lib/module/ui/index.js.map +1 -1
- package/lib/module/ui/screens/AccountCenterScreen.js +5 -1
- package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
- package/lib/module/ui/screens/AppInfoScreen.js +37 -19
- package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
- package/lib/module/ui/screens/FileManagementScreen.js +27 -9
- package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
- package/lib/module/ui/screens/karma/KarmaRewardsScreen.js +2 -8
- package/lib/module/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
- package/lib/module/ui/store/index.js +23 -249
- package/lib/module/ui/store/index.js.map +1 -1
- package/lib/module/ui/store/setupOxyStore.js +59 -0
- package/lib/module/ui/store/setupOxyStore.js.map +1 -0
- package/lib/module/ui/store/slices/authSlice.js +48 -0
- package/lib/module/ui/store/slices/authSlice.js.map +1 -0
- package/lib/module/ui/store/slices/followSlice.js +232 -0
- package/lib/module/ui/store/slices/followSlice.js.map +1 -0
- package/lib/module/ui/store/slices/index.js +11 -0
- package/lib/module/ui/store/slices/index.js.map +1 -0
- package/lib/module/ui/store/slices/types.js +15 -0
- package/lib/module/ui/store/slices/types.js.map +1 -0
- package/lib/module/ui/styles/index.js +1 -0
- package/lib/module/ui/styles/index.js.map +1 -1
- package/lib/module/ui/styles/shadows.js +119 -0
- package/lib/module/ui/styles/shadows.js.map +1 -0
- package/lib/typescript/core/index.d.ts +0 -28
- package/lib/typescript/core/index.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +3 -5
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/ui/components/FollowButton.d.ts.map +1 -1
- package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
- package/lib/typescript/ui/components/OxySignInButton.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/index.d.ts +2 -1
- package/lib/typescript/ui/hooks/index.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/useAuthFetch.d.ts +33 -0
- package/lib/typescript/ui/hooks/useAuthFetch.d.ts.map +1 -0
- package/lib/typescript/ui/hooks/useFollow.d.ts.map +1 -1
- package/lib/typescript/ui/hooks/useOxyFollow.d.ts +81 -0
- package/lib/typescript/ui/hooks/useOxyFollow.d.ts.map +1 -0
- package/lib/typescript/ui/index.d.ts +3 -1
- package/lib/typescript/ui/index.d.ts.map +1 -1
- package/lib/typescript/ui/navigation/types.d.ts +22 -4
- package/lib/typescript/ui/navigation/types.d.ts.map +1 -1
- package/lib/typescript/ui/screens/AccountCenterScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/AppInfoScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/FileManagementScreen.d.ts.map +1 -1
- package/lib/typescript/ui/screens/karma/KarmaRewardsScreen.d.ts.map +1 -1
- package/lib/typescript/ui/store/index.d.ts +19 -58
- package/lib/typescript/ui/store/index.d.ts.map +1 -1
- package/lib/typescript/ui/store/setupOxyStore.d.ts +29 -0
- package/lib/typescript/ui/store/setupOxyStore.d.ts.map +1 -0
- package/lib/typescript/ui/store/slices/authSlice.d.ts +32 -0
- package/lib/typescript/ui/store/slices/authSlice.d.ts.map +1 -0
- package/lib/typescript/ui/store/slices/followSlice.d.ts +120 -0
- package/lib/typescript/ui/store/slices/followSlice.d.ts.map +1 -0
- package/lib/typescript/ui/store/slices/index.d.ts +9 -0
- package/lib/typescript/ui/store/slices/index.d.ts.map +1 -0
- package/lib/typescript/ui/store/slices/types.d.ts +16 -0
- package/lib/typescript/ui/store/slices/types.d.ts.map +1 -0
- package/lib/typescript/ui/styles/index.d.ts +1 -0
- package/lib/typescript/ui/styles/index.d.ts.map +1 -1
- package/lib/typescript/ui/styles/shadows.d.ts +233 -0
- package/lib/typescript/ui/styles/shadows.d.ts.map +1 -0
- package/package.json +14 -15
- package/src/__tests__/ui/hooks/useOxyFollow.test.tsx +92 -0
- package/src/__tests__/ui/store/setupOxyStore.test.ts +50 -0
- package/src/__tests__/validate-structure.js +91 -0
- package/src/__tests__/validation.js +42 -0
- package/src/core/index.ts +0 -66
- package/src/index.ts +36 -4
- package/src/ui/components/FollowButton.tsx +11 -25
- package/src/ui/components/OxyProvider.tsx +48 -33
- package/src/ui/components/OxySignInButton.tsx +2 -6
- package/src/ui/hooks/index.ts +2 -1
- package/src/ui/hooks/useAuthFetch.ts +200 -0
- package/src/ui/hooks/useFollow.ts +10 -30
- package/src/ui/hooks/useOxyFollow.ts +188 -0
- package/src/ui/index.ts +34 -2
- package/src/ui/navigation/types.ts +24 -4
- package/src/ui/screens/AccountCenterScreen.tsx +5 -7
- package/src/ui/screens/AppInfoScreen.tsx +40 -23
- package/src/ui/screens/FileManagementScreen.tsx +268 -248
- package/src/ui/screens/karma/KarmaRewardsScreen.tsx +2 -5
- package/src/ui/store/index.ts +31 -245
- package/src/ui/store/setupOxyStore.ts +58 -0
- package/src/ui/store/slices/authSlice.ts +43 -0
- package/src/ui/store/slices/followSlice.ts +207 -0
- package/src/ui/store/slices/index.ts +31 -0
- package/src/ui/store/slices/types.ts +33 -0
- package/src/ui/styles/index.ts +1 -0
- package/src/ui/styles/shadows.ts +112 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Zero Config Authenticated Fetch Hook
|
|
5
|
+
*
|
|
6
|
+
* Simple hook that provides fetch-like API with automatic authentication
|
|
7
|
+
* Leverages the existing useOxy hook and OxyProvider infrastructure
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* const authFetch = useAuthFetch();
|
|
11
|
+
* const response = await authFetch('/api/protected');
|
|
12
|
+
* const data = await authFetch.get('/api/users');
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { useCallback } from 'react';
|
|
16
|
+
import { useOxy } from '../context/OxyContext';
|
|
17
|
+
/**
|
|
18
|
+
* Hook that provides authenticated fetch functionality
|
|
19
|
+
* Uses the existing OxyServices instance from useOxy context
|
|
20
|
+
*/
|
|
21
|
+
export function useAuthFetch() {
|
|
22
|
+
const {
|
|
23
|
+
oxyServices,
|
|
24
|
+
isAuthenticated,
|
|
25
|
+
user,
|
|
26
|
+
login,
|
|
27
|
+
logout,
|
|
28
|
+
signUp
|
|
29
|
+
} = useOxy();
|
|
30
|
+
|
|
31
|
+
// Main fetch function with automatic auth headers
|
|
32
|
+
const authFetch = useCallback(async (input, init) => {
|
|
33
|
+
const url = resolveURL(input, oxyServices.getBaseURL());
|
|
34
|
+
const options = await addAuthHeaders(init, oxyServices);
|
|
35
|
+
try {
|
|
36
|
+
let response = await fetch(url, options);
|
|
37
|
+
|
|
38
|
+
// Handle token expiry and automatic refresh
|
|
39
|
+
if (response.status === 401 && oxyServices.getCurrentUserId()) {
|
|
40
|
+
// Try to refresh token and retry
|
|
41
|
+
try {
|
|
42
|
+
await oxyServices.refreshTokens();
|
|
43
|
+
const retryOptions = await addAuthHeaders(init, oxyServices);
|
|
44
|
+
response = await fetch(url, retryOptions);
|
|
45
|
+
} catch (refreshError) {
|
|
46
|
+
// Refresh failed, user needs to login again
|
|
47
|
+
console.warn('Token refresh failed, user needs to re-authenticate');
|
|
48
|
+
throw new Error('Authentication expired. Please login again.');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return response;
|
|
52
|
+
} catch (error) {
|
|
53
|
+
console.error('AuthFetch error:', error);
|
|
54
|
+
throw error;
|
|
55
|
+
}
|
|
56
|
+
}, [oxyServices]);
|
|
57
|
+
|
|
58
|
+
// JSON convenience methods
|
|
59
|
+
const get = useCallback(async (endpoint, options) => {
|
|
60
|
+
const response = await authFetch(endpoint, {
|
|
61
|
+
...options,
|
|
62
|
+
method: 'GET'
|
|
63
|
+
});
|
|
64
|
+
return handleJsonResponse(response);
|
|
65
|
+
}, [authFetch]);
|
|
66
|
+
const post = useCallback(async (endpoint, data, options) => {
|
|
67
|
+
const response = await authFetch(endpoint, {
|
|
68
|
+
...options,
|
|
69
|
+
method: 'POST',
|
|
70
|
+
headers: {
|
|
71
|
+
'Content-Type': 'application/json',
|
|
72
|
+
...options?.headers
|
|
73
|
+
},
|
|
74
|
+
body: data ? JSON.stringify(data) : undefined
|
|
75
|
+
});
|
|
76
|
+
return handleJsonResponse(response);
|
|
77
|
+
}, [authFetch]);
|
|
78
|
+
const put = useCallback(async (endpoint, data, options) => {
|
|
79
|
+
const response = await authFetch(endpoint, {
|
|
80
|
+
...options,
|
|
81
|
+
method: 'PUT',
|
|
82
|
+
headers: {
|
|
83
|
+
'Content-Type': 'application/json',
|
|
84
|
+
...options?.headers
|
|
85
|
+
},
|
|
86
|
+
body: data ? JSON.stringify(data) : undefined
|
|
87
|
+
});
|
|
88
|
+
return handleJsonResponse(response);
|
|
89
|
+
}, [authFetch]);
|
|
90
|
+
const del = useCallback(async (endpoint, options) => {
|
|
91
|
+
const response = await authFetch(endpoint, {
|
|
92
|
+
...options,
|
|
93
|
+
method: 'DELETE'
|
|
94
|
+
});
|
|
95
|
+
return handleJsonResponse(response);
|
|
96
|
+
}, [authFetch]);
|
|
97
|
+
|
|
98
|
+
// Attach convenience methods and auth state to the main function
|
|
99
|
+
const fetchWithMethods = authFetch;
|
|
100
|
+
fetchWithMethods.get = get;
|
|
101
|
+
fetchWithMethods.post = post;
|
|
102
|
+
fetchWithMethods.put = put;
|
|
103
|
+
fetchWithMethods.delete = del;
|
|
104
|
+
fetchWithMethods.isAuthenticated = isAuthenticated;
|
|
105
|
+
fetchWithMethods.user = user;
|
|
106
|
+
fetchWithMethods.login = login;
|
|
107
|
+
fetchWithMethods.logout = logout;
|
|
108
|
+
fetchWithMethods.signUp = signUp;
|
|
109
|
+
return fetchWithMethods;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Helper functions
|
|
114
|
+
*/
|
|
115
|
+
|
|
116
|
+
function resolveURL(input, baseURL) {
|
|
117
|
+
const url = input.toString();
|
|
118
|
+
|
|
119
|
+
// If it's already a full URL, return as is
|
|
120
|
+
if (url.startsWith('http://') || url.startsWith('https://')) {
|
|
121
|
+
return url;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// If it starts with /, it's relative to base URL
|
|
125
|
+
if (url.startsWith('/')) {
|
|
126
|
+
return `${baseURL}${url}`;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Otherwise, append to base URL with /
|
|
130
|
+
return `${baseURL}/${url}`;
|
|
131
|
+
}
|
|
132
|
+
async function addAuthHeaders(init, oxyServices) {
|
|
133
|
+
const headers = new Headers(init?.headers);
|
|
134
|
+
|
|
135
|
+
// Add auth header if user is authenticated
|
|
136
|
+
if (oxyServices?.getCurrentUserId() && !headers.has('Authorization')) {
|
|
137
|
+
// Try to get current access token
|
|
138
|
+
try {
|
|
139
|
+
const accessToken = oxyServices.getAccessToken?.() || oxyServices.accessToken;
|
|
140
|
+
if (accessToken) {
|
|
141
|
+
headers.set('Authorization', `Bearer ${accessToken}`);
|
|
142
|
+
}
|
|
143
|
+
} catch (error) {
|
|
144
|
+
// Ignore auth header errors
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const body = init?.body;
|
|
148
|
+
const processedBody = body && typeof body === 'object' && !(body instanceof FormData) && !(body instanceof URLSearchParams) ? JSON.stringify(body) : body;
|
|
149
|
+
return {
|
|
150
|
+
...init,
|
|
151
|
+
headers,
|
|
152
|
+
body: processedBody
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
async function handleJsonResponse(response) {
|
|
156
|
+
if (!response.ok) {
|
|
157
|
+
let errorMessage = `HTTP ${response.status}: ${response.statusText}`;
|
|
158
|
+
try {
|
|
159
|
+
const errorData = await response.json();
|
|
160
|
+
errorMessage = errorData.message || errorData.error || errorMessage;
|
|
161
|
+
} catch {
|
|
162
|
+
// Ignore JSON parsing errors
|
|
163
|
+
}
|
|
164
|
+
const error = new Error(errorMessage);
|
|
165
|
+
error.status = response.status;
|
|
166
|
+
error.response = response;
|
|
167
|
+
throw error;
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
return await response.json();
|
|
171
|
+
} catch {
|
|
172
|
+
// If response isn't JSON, return the response itself
|
|
173
|
+
return response;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
export default useAuthFetch;
|
|
177
|
+
//# sourceMappingURL=useAuthFetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useCallback","useOxy","useAuthFetch","oxyServices","isAuthenticated","user","login","logout","signUp","authFetch","input","init","url","resolveURL","getBaseURL","options","addAuthHeaders","response","fetch","status","getCurrentUserId","refreshTokens","retryOptions","refreshError","console","warn","Error","error","get","endpoint","method","handleJsonResponse","post","data","headers","body","JSON","stringify","undefined","put","del","fetchWithMethods","delete","baseURL","toString","startsWith","Headers","has","accessToken","getAccessToken","set","processedBody","FormData","URLSearchParams","ok","errorMessage","statusText","errorData","json","message"],"sourceRoot":"../../../../src","sources":["ui/hooks/useAuthFetch.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -7,47 +7,28 @@ import { useOxy } from '../context/OxyContext';
|
|
|
7
7
|
|
|
8
8
|
// Memoized selector to prevent unnecessary re-renders
|
|
9
9
|
const createFollowSelector = userId => state => ({
|
|
10
|
-
isFollowing: state.follow
|
|
11
|
-
isLoading: state.follow
|
|
12
|
-
error: state.follow
|
|
10
|
+
isFollowing: state.follow.followingUsers[userId] ?? false,
|
|
11
|
+
isLoading: state.follow.loadingUsers[userId] ?? false,
|
|
12
|
+
error: state.follow.errors[userId] ?? null
|
|
13
13
|
});
|
|
14
14
|
|
|
15
15
|
// Memoized selector for multiple users
|
|
16
16
|
const createMultipleFollowSelector = userIds => state => {
|
|
17
17
|
const followData = {};
|
|
18
18
|
const followState = state.follow;
|
|
19
|
-
|
|
20
|
-
// Defensive check for follow state
|
|
21
|
-
if (!followState) {
|
|
22
|
-
// Return default values if follow state is not initialized
|
|
23
|
-
for (const userId of userIds) {
|
|
24
|
-
followData[userId] = {
|
|
25
|
-
isFollowing: false,
|
|
26
|
-
isLoading: false,
|
|
27
|
-
error: null
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
return {
|
|
31
|
-
followData,
|
|
32
|
-
isAnyLoading: false,
|
|
33
|
-
hasAnyError: false,
|
|
34
|
-
allFollowing: false,
|
|
35
|
-
allNotFollowing: true
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
19
|
for (const userId of userIds) {
|
|
39
20
|
followData[userId] = {
|
|
40
|
-
isFollowing: followState.followingUsers
|
|
41
|
-
isLoading: followState.loadingUsers
|
|
42
|
-
error: followState.errors
|
|
21
|
+
isFollowing: followState.followingUsers[userId] ?? false,
|
|
22
|
+
isLoading: followState.loadingUsers[userId] ?? false,
|
|
23
|
+
error: followState.errors[userId] ?? null
|
|
43
24
|
};
|
|
44
25
|
}
|
|
45
26
|
return {
|
|
46
27
|
followData,
|
|
47
|
-
isAnyLoading: userIds.some(uid => followState.loadingUsers
|
|
48
|
-
hasAnyError: userIds.some(uid => followState.errors
|
|
49
|
-
allFollowing: userIds.every(uid => followState.followingUsers
|
|
50
|
-
allNotFollowing: userIds.every(uid => !followState.followingUsers
|
|
28
|
+
isAnyLoading: userIds.some(uid => followState.loadingUsers[uid]),
|
|
29
|
+
hasAnyError: userIds.some(uid => followState.errors[uid]),
|
|
30
|
+
allFollowing: userIds.every(uid => followState.followingUsers[uid]),
|
|
31
|
+
allNotFollowing: userIds.every(uid => !followState.followingUsers[uid])
|
|
51
32
|
};
|
|
52
33
|
};
|
|
53
34
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useDispatch","useSelector","useCallback","useMemo","toggleFollowUser","setFollowingStatus","clearFollowError","fetchFollowStatus","useOxy","createFollowSelector","userId","state","isFollowing","follow","followingUsers","isLoading","loadingUsers","error","errors","createMultipleFollowSelector","userIds","followData","followState","isAnyLoading","
|
|
1
|
+
{"version":3,"names":["useDispatch","useSelector","useCallback","useMemo","toggleFollowUser","setFollowingStatus","clearFollowError","fetchFollowStatus","useOxy","createFollowSelector","userId","state","isFollowing","follow","followingUsers","isLoading","loadingUsers","error","errors","createMultipleFollowSelector","userIds","followData","followState","isAnyLoading","some","uid","hasAnyError","allFollowing","every","allNotFollowing","useFollow","dispatch","oxyServices","Array","isArray","isSingleUser","singleUserSelector","multipleUserSelector","singleUserData","multipleUserData","toggleFollow","Error","result","isCurrentlyFollowing","unwrap","setFollowStatus","following","fetchStatus","console","warn","clearError","toggleFollowForUser","targetUserId","currentState","setFollowStatusForUser","fetchStatusForUser","fetchAllStatuses","promises","map","catch","Promise","all","clearErrorForUser"],"sourceRoot":"../../../../src","sources":["ui/hooks/useFollow.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useDispatch, useSelector } from 'react-redux';
|
|
4
|
+
import { useCallback, useMemo } from 'react';
|
|
5
|
+
import { toggleFollowUser, setFollowingStatus, clearFollowError, fetchFollowStatus, followSelectors } from '../store/slices/followSlice';
|
|
6
|
+
import { useOxy } from '../context/OxyContext';
|
|
7
|
+
|
|
8
|
+
// Generic type for state that includes follow slice
|
|
9
|
+
|
|
10
|
+
// Memoized selector to prevent unnecessary re-renders
|
|
11
|
+
const createFollowSelector = userId => state => ({
|
|
12
|
+
isFollowing: followSelectors.selectIsUserFollowed(state, userId),
|
|
13
|
+
isLoading: followSelectors.selectIsUserLoading(state, userId),
|
|
14
|
+
error: followSelectors.selectUserError(state, userId)
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
// Memoized selector for multiple users
|
|
18
|
+
const createMultipleFollowSelector = userIds => state => {
|
|
19
|
+
const followData = {};
|
|
20
|
+
for (const userId of userIds) {
|
|
21
|
+
followData[userId] = {
|
|
22
|
+
isFollowing: followSelectors.selectIsUserFollowed(state, userId),
|
|
23
|
+
isLoading: followSelectors.selectIsUserLoading(state, userId),
|
|
24
|
+
error: followSelectors.selectUserError(state, userId)
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const followState = state.follow;
|
|
28
|
+
return {
|
|
29
|
+
followData,
|
|
30
|
+
isAnyLoading: userIds.some(uid => followState.loadingUsers[uid]),
|
|
31
|
+
hasAnyError: userIds.some(uid => followState.errors[uid]),
|
|
32
|
+
allFollowing: userIds.every(uid => followState.followingUsers[uid]),
|
|
33
|
+
allNotFollowing: userIds.every(uid => !followState.followingUsers[uid])
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Custom hook for managing follow/unfollow functionality
|
|
39
|
+
* Works with any Redux store that includes the Oxy follow reducer
|
|
40
|
+
* Optimized to prevent unnecessary re-renders
|
|
41
|
+
* Can handle both single user and multiple users
|
|
42
|
+
*/
|
|
43
|
+
export const useOxyFollow = userId => {
|
|
44
|
+
const dispatch = useDispatch();
|
|
45
|
+
const {
|
|
46
|
+
oxyServices
|
|
47
|
+
} = useOxy();
|
|
48
|
+
|
|
49
|
+
// Memoize user IDs to prevent recreation on every render
|
|
50
|
+
const userIds = useMemo(() => {
|
|
51
|
+
return Array.isArray(userId) ? userId : userId ? [userId] : [];
|
|
52
|
+
}, [userId]);
|
|
53
|
+
const isSingleUser = typeof userId === 'string';
|
|
54
|
+
|
|
55
|
+
// Memoize selectors to prevent recreation
|
|
56
|
+
const singleUserSelector = useMemo(() => {
|
|
57
|
+
return isSingleUser && userId ? createFollowSelector(userId) : null;
|
|
58
|
+
}, [isSingleUser, userId]);
|
|
59
|
+
const multipleUserSelector = useMemo(() => {
|
|
60
|
+
return !isSingleUser ? createMultipleFollowSelector(userIds) : null;
|
|
61
|
+
}, [isSingleUser, userIds]);
|
|
62
|
+
|
|
63
|
+
// Use appropriate selector based on mode
|
|
64
|
+
const singleUserData = useSelector(singleUserSelector || (() => ({
|
|
65
|
+
isFollowing: false,
|
|
66
|
+
isLoading: false,
|
|
67
|
+
error: null
|
|
68
|
+
})));
|
|
69
|
+
const multipleUserData = useSelector(multipleUserSelector || (() => ({
|
|
70
|
+
followData: {},
|
|
71
|
+
isAnyLoading: false,
|
|
72
|
+
hasAnyError: false,
|
|
73
|
+
allFollowing: false,
|
|
74
|
+
allNotFollowing: true
|
|
75
|
+
})));
|
|
76
|
+
|
|
77
|
+
// Memoized callbacks to prevent recreation on every render
|
|
78
|
+
const toggleFollow = useCallback(async () => {
|
|
79
|
+
if (!isSingleUser || !userId) throw new Error('toggleFollow is only available for single user mode');
|
|
80
|
+
try {
|
|
81
|
+
const result = await dispatch(toggleFollowUser({
|
|
82
|
+
userId,
|
|
83
|
+
oxyServices,
|
|
84
|
+
isCurrentlyFollowing: singleUserData.isFollowing
|
|
85
|
+
})).unwrap();
|
|
86
|
+
return result;
|
|
87
|
+
} catch (error) {
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
90
|
+
}, [dispatch, userId, oxyServices, singleUserData.isFollowing, isSingleUser]);
|
|
91
|
+
const setFollowStatus = useCallback(following => {
|
|
92
|
+
if (!isSingleUser || !userId) throw new Error('setFollowStatus is only available for single user mode');
|
|
93
|
+
dispatch(setFollowingStatus({
|
|
94
|
+
userId,
|
|
95
|
+
isFollowing: following
|
|
96
|
+
}));
|
|
97
|
+
}, [dispatch, userId, isSingleUser]);
|
|
98
|
+
const fetchStatus = useCallback(async () => {
|
|
99
|
+
if (!isSingleUser || !userId) throw new Error('fetchStatus is only available for single user mode');
|
|
100
|
+
try {
|
|
101
|
+
await dispatch(fetchFollowStatus({
|
|
102
|
+
userId,
|
|
103
|
+
oxyServices
|
|
104
|
+
})).unwrap();
|
|
105
|
+
} catch (error) {
|
|
106
|
+
console.warn(`Failed to fetch follow status for user ${userId}:`, error);
|
|
107
|
+
}
|
|
108
|
+
}, [dispatch, userId, oxyServices, isSingleUser]);
|
|
109
|
+
const clearError = useCallback(() => {
|
|
110
|
+
if (!isSingleUser || !userId) throw new Error('clearError is only available for single user mode');
|
|
111
|
+
dispatch(clearFollowError(userId));
|
|
112
|
+
}, [dispatch, userId, isSingleUser]);
|
|
113
|
+
|
|
114
|
+
// Multiple user callbacks
|
|
115
|
+
const toggleFollowForUser = useCallback(async targetUserId => {
|
|
116
|
+
const currentState = multipleUserData.followData[targetUserId]?.isFollowing ?? false;
|
|
117
|
+
try {
|
|
118
|
+
const result = await dispatch(toggleFollowUser({
|
|
119
|
+
userId: targetUserId,
|
|
120
|
+
oxyServices,
|
|
121
|
+
isCurrentlyFollowing: currentState
|
|
122
|
+
})).unwrap();
|
|
123
|
+
return result;
|
|
124
|
+
} catch (error) {
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
}, [dispatch, oxyServices, multipleUserData.followData]);
|
|
128
|
+
const setFollowStatusForUser = useCallback((targetUserId, following) => {
|
|
129
|
+
dispatch(setFollowingStatus({
|
|
130
|
+
userId: targetUserId,
|
|
131
|
+
isFollowing: following
|
|
132
|
+
}));
|
|
133
|
+
}, [dispatch]);
|
|
134
|
+
const fetchStatusForUser = useCallback(async targetUserId => {
|
|
135
|
+
try {
|
|
136
|
+
await dispatch(fetchFollowStatus({
|
|
137
|
+
userId: targetUserId,
|
|
138
|
+
oxyServices
|
|
139
|
+
})).unwrap();
|
|
140
|
+
} catch (error) {
|
|
141
|
+
console.warn(`Failed to fetch follow status for user ${targetUserId}:`, error);
|
|
142
|
+
}
|
|
143
|
+
}, [dispatch, oxyServices]);
|
|
144
|
+
const fetchAllStatuses = useCallback(async () => {
|
|
145
|
+
const promises = userIds.map(uid => dispatch(fetchFollowStatus({
|
|
146
|
+
userId: uid,
|
|
147
|
+
oxyServices
|
|
148
|
+
})).unwrap().catch(error => {
|
|
149
|
+
console.warn(`Failed to fetch follow status for user ${uid}:`, error);
|
|
150
|
+
}));
|
|
151
|
+
await Promise.all(promises);
|
|
152
|
+
}, [dispatch, userIds, oxyServices]);
|
|
153
|
+
const clearErrorForUser = useCallback(targetUserId => {
|
|
154
|
+
dispatch(clearFollowError(targetUserId));
|
|
155
|
+
}, [dispatch]);
|
|
156
|
+
|
|
157
|
+
// Return appropriate interface based on mode
|
|
158
|
+
if (isSingleUser && userId) {
|
|
159
|
+
return {
|
|
160
|
+
isFollowing: singleUserData.isFollowing,
|
|
161
|
+
isLoading: singleUserData.isLoading,
|
|
162
|
+
error: singleUserData.error,
|
|
163
|
+
toggleFollow,
|
|
164
|
+
setFollowStatus,
|
|
165
|
+
fetchStatus,
|
|
166
|
+
clearError
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
followData: multipleUserData.followData,
|
|
171
|
+
toggleFollowForUser,
|
|
172
|
+
setFollowStatusForUser,
|
|
173
|
+
fetchStatusForUser,
|
|
174
|
+
fetchAllStatuses,
|
|
175
|
+
clearErrorForUser,
|
|
176
|
+
// Helper methods
|
|
177
|
+
isAnyLoading: multipleUserData.isAnyLoading,
|
|
178
|
+
hasAnyError: multipleUserData.hasAnyError,
|
|
179
|
+
allFollowing: multipleUserData.allFollowing,
|
|
180
|
+
allNotFollowing: multipleUserData.allNotFollowing
|
|
181
|
+
};
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
// Backward compatibility alias
|
|
185
|
+
export const useFollow = useOxyFollow;
|
|
186
|
+
//# sourceMappingURL=useOxyFollow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useDispatch","useSelector","useCallback","useMemo","toggleFollowUser","setFollowingStatus","clearFollowError","fetchFollowStatus","followSelectors","useOxy","createFollowSelector","userId","state","isFollowing","selectIsUserFollowed","isLoading","selectIsUserLoading","error","selectUserError","createMultipleFollowSelector","userIds","followData","followState","follow","isAnyLoading","some","uid","loadingUsers","hasAnyError","errors","allFollowing","every","followingUsers","allNotFollowing","useOxyFollow","dispatch","oxyServices","Array","isArray","isSingleUser","singleUserSelector","multipleUserSelector","singleUserData","multipleUserData","toggleFollow","Error","result","isCurrentlyFollowing","unwrap","setFollowStatus","following","fetchStatus","console","warn","clearError","toggleFollowForUser","targetUserId","currentState","setFollowStatusForUser","fetchStatusForUser","fetchAllStatuses","promises","map","catch","Promise","all","clearErrorForUser","useFollow"],"sourceRoot":"../../../../src","sources":["ui/hooks/useOxyFollow.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/ui/index.js
CHANGED
|
@@ -16,7 +16,16 @@ export { FontLoader, setupFonts } from './components/FontLoader';
|
|
|
16
16
|
export { OxyIcon } from './components/icon';
|
|
17
17
|
export { OxyContextProvider, useOxy, OxyContextState, OxyContextProviderProps } from './context/OxyContext';
|
|
18
18
|
|
|
19
|
-
// Redux store exports
|
|
19
|
+
// Redux store exports - NEW ARCHITECTURE
|
|
20
|
+
export { setupOxyStore, oxyReducers,
|
|
21
|
+
// Individual slices
|
|
22
|
+
authSlice, authActions, authSelectors, authReducer, followSlice, followActions, followSelectors, followThunks, followReducer,
|
|
23
|
+
// Action creators
|
|
24
|
+
loginStart, loginSuccess, loginFailure, logout, setFollowingStatus, clearFollowError, resetFollowState, fetchFollowStatus, toggleFollowUser,
|
|
25
|
+
// Types
|
|
26
|
+
AuthState, FollowState, initialAuthState, initialFollowState } from './store';
|
|
27
|
+
|
|
28
|
+
// Legacy store exports (deprecated)
|
|
20
29
|
export { store } from './store';
|
|
21
30
|
// Export styles
|
|
22
31
|
export { fontFamilies, fontStyles } from './styles/fonts';
|
|
@@ -25,7 +34,8 @@ export { fontFamilies, fontStyles } from './styles/fonts';
|
|
|
25
34
|
export * from './navigation/types';
|
|
26
35
|
|
|
27
36
|
// Hooks
|
|
28
|
-
export { useFollow } from './hooks';
|
|
37
|
+
export { useOxyFollow, useFollow } from './hooks';
|
|
38
|
+
export { default as useAuthFetch } from './hooks/useAuthFetch';
|
|
29
39
|
|
|
30
40
|
// Screens
|
|
31
41
|
export { default as ProfileScreen } from './screens/ProfileScreen';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["default","OxyProvider","OxySignInButton","OxyLogo","Avatar","FollowButton","FontLoader","setupFonts","OxyIcon","OxyContextProvider","useOxy","OxyContextState","OxyContextProviderProps","store","fontFamilies","fontStyles","useFollow","ProfileScreen","OxyRouter"],"sourceRoot":"../../../src","sources":["ui/index.ts"],"mappings":";;AAAA;AACA;AACA;;AAEA;AACA,SAASA,OAAO,IAAIC,WAAW,QAAQ,0BAA0B;AACjE,SAASD,OAAO,IAAIE,eAAe,QAAQ,8BAA8B;AACzE,SAASF,OAAO,IAAIG,OAAO,QAAQ,sBAAsB;AACzD,SAASH,OAAO,IAAII,MAAM,QAAQ,qBAAqB;AACvD,SAASJ,OAAO,IAAIK,YAAY,QAAQ,2BAA2B;AACnE,SAASC,UAAU,EAAEC,UAAU,QAAQ,yBAAyB;;AAEhE;AACA,SAASC,OAAO,QAAQ,mBAAmB;AAG3C,SACEC,kBAAkB,EAClBC,MAAM,EACNC,eAAe,EACfC,uBAAuB,QAClB,sBAAsB;;AAE7B;AACA,SAASC,KAAK,QAAQ,SAAS;AAG/B;AACA,SAASC,YAAY,EAAEC,UAAU,QAAQ,gBAAgB;;AAEzD;AACA,cAAc,oBAAoB;;AAElC;AACA,SAASC,SAAS,QAAQ,SAAS;;
|
|
1
|
+
{"version":3,"names":["default","OxyProvider","OxySignInButton","OxyLogo","Avatar","FollowButton","FontLoader","setupFonts","OxyIcon","OxyContextProvider","useOxy","OxyContextState","OxyContextProviderProps","setupOxyStore","oxyReducers","authSlice","authActions","authSelectors","authReducer","followSlice","followActions","followSelectors","followThunks","followReducer","loginStart","loginSuccess","loginFailure","logout","setFollowingStatus","clearFollowError","resetFollowState","fetchFollowStatus","toggleFollowUser","AuthState","FollowState","initialAuthState","initialFollowState","store","fontFamilies","fontStyles","useOxyFollow","useFollow","useAuthFetch","ProfileScreen","OxyRouter"],"sourceRoot":"../../../src","sources":["ui/index.ts"],"mappings":";;AAAA;AACA;AACA;;AAEA;AACA,SAASA,OAAO,IAAIC,WAAW,QAAQ,0BAA0B;AACjE,SAASD,OAAO,IAAIE,eAAe,QAAQ,8BAA8B;AACzE,SAASF,OAAO,IAAIG,OAAO,QAAQ,sBAAsB;AACzD,SAASH,OAAO,IAAII,MAAM,QAAQ,qBAAqB;AACvD,SAASJ,OAAO,IAAIK,YAAY,QAAQ,2BAA2B;AACnE,SAASC,UAAU,EAAEC,UAAU,QAAQ,yBAAyB;;AAEhE;AACA,SAASC,OAAO,QAAQ,mBAAmB;AAG3C,SACEC,kBAAkB,EAClBC,MAAM,EACNC,eAAe,EACfC,uBAAuB,QAClB,sBAAsB;;AAE7B;AACA,SACEC,aAAa,EACbC,WAAW;AACX;AACAC,SAAS,EACTC,WAAW,EACXC,aAAa,EACbC,WAAW,EACXC,WAAW,EACXC,aAAa,EACbC,eAAe,EACfC,YAAY,EACZC,aAAa;AACb;AACAC,UAAU,EACVC,YAAY,EACZC,YAAY,EACZC,MAAM,EACNC,kBAAkB,EAClBC,gBAAgB,EAChBC,gBAAgB,EAChBC,iBAAiB,EACjBC,gBAAgB;AAChB;AACAC,SAAS,EACTC,WAAW,EACXC,gBAAgB,EAChBC,kBAAkB,QACb,SAAS;;AAEhB;AACA,SAASC,KAAK,QAAQ,SAAS;AAG/B;AACA,SAASC,YAAY,EAAEC,UAAU,QAAQ,gBAAgB;;AAEzD;AACA,cAAc,oBAAoB;;AAElC;AACA,SAASC,YAAY,EAAEC,SAAS,QAAQ,SAAS;AACjD,SAASzC,OAAO,IAAI0C,YAAY,QAAQ,sBAAsB;;AAE9D;AACA,SAAS1C,OAAO,IAAI2C,aAAa,QAAQ,yBAAyB;;AAElE;AACA,SAAS3C,OAAO,IAAI4C,SAAS,QAAQ,wBAAwB","ignoreList":[]}
|
|
@@ -6,7 +6,11 @@ import { useOxy } from '../context/OxyContext';
|
|
|
6
6
|
import { packageInfo } from '../../constants/version';
|
|
7
7
|
import { toast } from '../../lib/sonner';
|
|
8
8
|
import { fontFamilies } from '../styles/fonts';
|
|
9
|
-
import
|
|
9
|
+
import ProfileCard from '../components/ProfileCard';
|
|
10
|
+
import Section from '../components/Section';
|
|
11
|
+
import QuickActions from '../components/QuickActions';
|
|
12
|
+
import GroupedSection from '../components/GroupedSection';
|
|
13
|
+
import GroupedItem from '../components/GroupedItem';
|
|
10
14
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
11
15
|
const AccountCenterScreen = ({
|
|
12
16
|
onClose,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","View","Text","StyleSheet","ActivityIndicator","ScrollView","Alert","Platform","useOxy","packageInfo","toast","fontFamilies","ProfileCard","Section","QuickActions","GroupedSection","GroupedItem","jsx","_jsx","jsxs","_jsxs","AccountCenterScreen","onClose","theme","navigate","user","logout","isLoading","sessions","isAuthenticated","isDarkTheme","textColor","backgroundColor","secondaryBackgroundColor","borderColor","primaryColor","dangerColor","handleLogout","error","console","confirmLogout","alert","text","style","onPress","cancelable","styles","container","children","message","color","justifyContent","size","onEditPress","activeTab","onClosePress","showCloseButton","scrollView","contentContainerStyle","scrollContainer","showsVerticalScrollIndicator","title","isFirst","actions","id","icon","iconColor","isPremium","length","items","subtitle","OS","info","isLast","showChevron","disabled","customContent","marginRight","versionContainer","versionText","version","create","flex","padding","paddingBottom","alignItems","marginTop","marginBottom","fontSize","fontFamily","phudu","textAlign"],"sourceRoot":"../../../../src","sources":["ui/screens/AccountCenterScreen.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SACIC,IAAI,EACJC,IAAI,EAEJC,UAAU,EACVC,iBAAiB,EACjBC,UAAU,EACVC,KAAK,EACLC,QAAQ,QACL,cAAc;AAErB,SAASC,MAAM,QAAQ,uBAAuB;AAC9C,SAASC,WAAW,QAAQ,yBAAyB;AACrD,SAASC,KAAK,QAAQ,kBAAkB;AAExC,SAASC,YAAY,QAAQ,iBAAiB;AAC9C,
|
|
1
|
+
{"version":3,"names":["React","View","Text","StyleSheet","ActivityIndicator","ScrollView","Alert","Platform","useOxy","packageInfo","toast","fontFamilies","ProfileCard","Section","QuickActions","GroupedSection","GroupedItem","jsx","_jsx","jsxs","_jsxs","AccountCenterScreen","onClose","theme","navigate","user","logout","isLoading","sessions","isAuthenticated","isDarkTheme","textColor","backgroundColor","secondaryBackgroundColor","borderColor","primaryColor","dangerColor","handleLogout","error","console","confirmLogout","alert","text","style","onPress","cancelable","styles","container","children","message","color","justifyContent","size","onEditPress","activeTab","onClosePress","showCloseButton","scrollView","contentContainerStyle","scrollContainer","showsVerticalScrollIndicator","title","isFirst","actions","id","icon","iconColor","isPremium","length","items","subtitle","OS","info","isLast","showChevron","disabled","customContent","marginRight","versionContainer","versionText","version","create","flex","padding","paddingBottom","alignItems","marginTop","marginBottom","fontSize","fontFamily","phudu","textAlign"],"sourceRoot":"../../../../src","sources":["ui/screens/AccountCenterScreen.tsx"],"mappings":"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","ignoreList":[]}
|