shelflife-react-hooks 1.0.18 → 1.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/index.cjs.js +23 -0
  2. package/dist/index.cjs.js.map +1 -1
  3. package/dist/index.d.cts +2 -0
  4. package/dist/index.d.ts +2 -0
  5. package/dist/index.esm.js +23 -0
  6. package/dist/index.esm.js.map +1 -1
  7. package/package.json +36 -36
  8. package/src/context/AuthContext.tsx +161 -161
  9. package/src/context/InviteContext.tsx +74 -74
  10. package/src/context/ProductContext.tsx +131 -121
  11. package/src/context/RunningLowContext.tsx +100 -100
  12. package/src/context/ShoppingListContext.tsx +76 -76
  13. package/src/context/StorageContext.tsx +105 -105
  14. package/src/context/StorageItemContext.tsx +157 -157
  15. package/src/context/StorageMemberContext.tsx +84 -84
  16. package/src/context/UserContext.tsx +109 -109
  17. package/src/context/__tests__/contexts.test.tsx +370 -370
  18. package/src/context/api/authApi.ts +155 -155
  19. package/src/context/api/inviteApi.ts +65 -65
  20. package/src/context/api/productApi.ts +223 -201
  21. package/src/context/api/requestState.ts +24 -24
  22. package/src/context/api/runningLowApi.ts +141 -141
  23. package/src/context/api/shoppingListApi.ts +161 -159
  24. package/src/context/api/storageApi.ts +166 -166
  25. package/src/context/api/storageItemApi.ts +260 -260
  26. package/src/context/api/storageMemberApi.ts +84 -84
  27. package/src/context/api/userApi.ts +161 -161
  28. package/src/context/http.ts +22 -22
  29. package/src/index.ts +21 -21
  30. package/src/type/PaginatedResponse.ts +8 -8
  31. package/src/type/auth.ts +79 -79
  32. package/src/type/base.ts +21 -21
  33. package/src/type/item.ts +12 -12
  34. package/src/type/member.ts +6 -6
  35. package/src/type/models.ts +56 -56
  36. package/src/type/product.ts +11 -11
  37. package/src/type/requests.ts +60 -60
  38. package/src/type/runninglow.ts +13 -13
  39. package/src/type/shoppingList.ts +13 -13
  40. package/src/type/storage.ts +7 -7
  41. package/src/type/user.ts +11 -11
  42. package/tsconfig.json +46 -46
  43. package/tsup.config.ts +10 -10
  44. package/vitest.config.ts +8 -8
@@ -1,84 +1,84 @@
1
- import React, {
2
- createContext,
3
- useCallback,
4
- useContext,
5
- useMemo,
6
- useState
7
- } from 'react';
8
-
9
- import type { StorageMember } from '../type/models.js';
10
- import type { InviteMemberRequest } from '../type/requests.js';
11
- import { useAuth } from './AuthContext.js';
12
- import {
13
- fetchMembersRequest,
14
- inviteMemberRequest,
15
- removeMemberRequest
16
- } from './api/storageMemberApi.js';
17
-
18
- type StorageMemberContextValue = {
19
- members: StorageMember[];
20
- isLoading: boolean;
21
- isError: boolean;
22
- error: Error | null;
23
- fetchMembers: (storageId: number) => Promise<StorageMember[]>;
24
- inviteMember: (storageId: number, dto: InviteMemberRequest) => Promise<StorageMember>;
25
- removeMember: (storageId: number, userId: number) => Promise<void>;
26
- };
27
-
28
- type StorageMemberProviderProps = {
29
- baseUrl: string;
30
- children: React.ReactNode;
31
- };
32
-
33
- const StorageMemberContext = createContext<StorageMemberContextValue | undefined>(undefined);
34
-
35
- export const StorageMemberProvider = ({ baseUrl, children }: StorageMemberProviderProps) => {
36
- const { token } = useAuth();
37
- const [members, setMembers] = useState<StorageMember[]>([]);
38
- const [isLoading, setIsLoading] = useState(false);
39
- const [isError, setIsError] = useState(false);
40
- const [error, setError] = useState<Error | null>(null);
41
-
42
- const apiConfig = useMemo(() => ({
43
- baseUrl,
44
- token,
45
- setMembers,
46
- setIsLoading,
47
- setIsError,
48
- setError
49
- }), [baseUrl, token]);
50
-
51
- const fetchMembers = useCallback(
52
- (storageId: number) => fetchMembersRequest(apiConfig, storageId),
53
- [apiConfig]
54
- );
55
- const inviteMember = useCallback(
56
- (storageId: number, dto: InviteMemberRequest) => inviteMemberRequest(apiConfig, storageId, dto),
57
- [apiConfig]
58
- );
59
- const removeMember = useCallback(
60
- (storageId: number, userId: number) => removeMemberRequest(apiConfig, storageId, userId),
61
- [apiConfig]
62
- );
63
-
64
- const value = useMemo<StorageMemberContextValue>(() => ({
65
- members,
66
- isLoading,
67
- isError,
68
- error,
69
- fetchMembers,
70
- inviteMember,
71
- removeMember
72
- }), [error, fetchMembers, inviteMember, isError, isLoading, members, removeMember]);
73
-
74
- return <StorageMemberContext.Provider value={value}>{children}</StorageMemberContext.Provider>;
75
- };
76
-
77
- export const useStorageMembers = (): StorageMemberContextValue => {
78
- const context = useContext(StorageMemberContext);
79
- if (!context) {
80
- throw new Error('useStorageMembers must be used within a StorageMemberProvider');
81
- }
82
-
83
- return context;
84
- };
1
+ import React, {
2
+ createContext,
3
+ useCallback,
4
+ useContext,
5
+ useMemo,
6
+ useState
7
+ } from 'react';
8
+
9
+ import type { StorageMember } from '../type/models.js';
10
+ import type { InviteMemberRequest } from '../type/requests.js';
11
+ import { useAuth } from './AuthContext.js';
12
+ import {
13
+ fetchMembersRequest,
14
+ inviteMemberRequest,
15
+ removeMemberRequest
16
+ } from './api/storageMemberApi.js';
17
+
18
+ type StorageMemberContextValue = {
19
+ members: StorageMember[];
20
+ isLoading: boolean;
21
+ isError: boolean;
22
+ error: Error | null;
23
+ fetchMembers: (storageId: number) => Promise<StorageMember[]>;
24
+ inviteMember: (storageId: number, dto: InviteMemberRequest) => Promise<StorageMember>;
25
+ removeMember: (storageId: number, userId: number) => Promise<void>;
26
+ };
27
+
28
+ type StorageMemberProviderProps = {
29
+ baseUrl: string;
30
+ children: React.ReactNode;
31
+ };
32
+
33
+ const StorageMemberContext = createContext<StorageMemberContextValue | undefined>(undefined);
34
+
35
+ export const StorageMemberProvider = ({ baseUrl, children }: StorageMemberProviderProps) => {
36
+ const { token } = useAuth();
37
+ const [members, setMembers] = useState<StorageMember[]>([]);
38
+ const [isLoading, setIsLoading] = useState(false);
39
+ const [isError, setIsError] = useState(false);
40
+ const [error, setError] = useState<Error | null>(null);
41
+
42
+ const apiConfig = useMemo(() => ({
43
+ baseUrl,
44
+ token,
45
+ setMembers,
46
+ setIsLoading,
47
+ setIsError,
48
+ setError
49
+ }), [baseUrl, token]);
50
+
51
+ const fetchMembers = useCallback(
52
+ (storageId: number) => fetchMembersRequest(apiConfig, storageId),
53
+ [apiConfig]
54
+ );
55
+ const inviteMember = useCallback(
56
+ (storageId: number, dto: InviteMemberRequest) => inviteMemberRequest(apiConfig, storageId, dto),
57
+ [apiConfig]
58
+ );
59
+ const removeMember = useCallback(
60
+ (storageId: number, userId: number) => removeMemberRequest(apiConfig, storageId, userId),
61
+ [apiConfig]
62
+ );
63
+
64
+ const value = useMemo<StorageMemberContextValue>(() => ({
65
+ members,
66
+ isLoading,
67
+ isError,
68
+ error,
69
+ fetchMembers,
70
+ inviteMember,
71
+ removeMember
72
+ }), [error, fetchMembers, inviteMember, isError, isLoading, members, removeMember]);
73
+
74
+ return <StorageMemberContext.Provider value={value}>{children}</StorageMemberContext.Provider>;
75
+ };
76
+
77
+ export const useStorageMembers = (): StorageMemberContextValue => {
78
+ const context = useContext(StorageMemberContext);
79
+ if (!context) {
80
+ throw new Error('useStorageMembers must be used within a StorageMemberProvider');
81
+ }
82
+
83
+ return context;
84
+ };
@@ -1,109 +1,109 @@
1
- import React, {
2
- createContext,
3
- useCallback,
4
- useContext,
5
- useMemo,
6
- useState
7
- } from 'react';
8
-
9
- import type { User } from '../type/models.js';
10
- import type { ChangeUserDataRequest } from '../type/requests.js';
11
- import { useAuth } from './AuthContext.js';
12
- import {
13
- deleteUserRequest,
14
- fetchUserRequest,
15
- fetchUsersRequest,
16
- getUserPfpRequest,
17
- updateUserRequest,
18
- uploadUserPfpRequest
19
- } from './api/userApi.js';
20
-
21
- type UserContextValue = {
22
- users: User[];
23
- user: User | null;
24
- isLoading: boolean;
25
- isError: boolean;
26
- error: Error | null;
27
- fetchUsers: () => Promise<User[]>;
28
- fetchUser: (id: number) => Promise<User | null>;
29
- updateUser: (id: number, dto: ChangeUserDataRequest) => Promise<User>;
30
- deleteUser: (id: number) => Promise<void>;
31
- getUserPfp: (id: number) => Promise<Blob>;
32
- uploadUserPfp: (id: number, file: Blob) => Promise<void>;
33
- };
34
-
35
- type UserProviderProps = {
36
- baseUrl: string;
37
- children: React.ReactNode;
38
- };
39
-
40
- const UserContext = createContext<UserContextValue | undefined>(undefined);
41
-
42
- export const UserProvider = ({ baseUrl, children }: UserProviderProps) => {
43
- const { token } = useAuth();
44
- const [users, setUsers] = useState<User[]>([]);
45
- const [user, setUser] = useState<User | null>(null);
46
- const [isLoading, setIsLoading] = useState(false);
47
- const [isError, setIsError] = useState(false);
48
- const [error, setError] = useState<Error | null>(null);
49
-
50
- const apiConfig = useMemo(() => ({
51
- baseUrl,
52
- token,
53
- setUsers,
54
- setUser,
55
- setIsLoading,
56
- setIsError,
57
- setError
58
- }), [baseUrl, token]);
59
-
60
- const fetchUsers = useCallback(() => fetchUsersRequest(apiConfig), [apiConfig]);
61
- const fetchUser = useCallback((id: number) => fetchUserRequest(apiConfig, id), [apiConfig]);
62
- const updateUser = useCallback(
63
- (id: number, dto: ChangeUserDataRequest) => updateUserRequest(apiConfig, id, dto),
64
- [apiConfig]
65
- );
66
- const deleteUser = useCallback((id: number) => deleteUserRequest(apiConfig, id), [apiConfig]);
67
- const getUserPfp = useCallback((id: number) => getUserPfpRequest(apiConfig, id), [apiConfig]);
68
- const uploadUserPfp = useCallback(
69
- (id: number, file: Blob) => uploadUserPfpRequest(apiConfig, id, file),
70
- [apiConfig]
71
- );
72
-
73
- const value = useMemo<UserContextValue>(() => ({
74
- users,
75
- user,
76
- isLoading,
77
- isError,
78
- error,
79
- fetchUsers,
80
- fetchUser,
81
- updateUser,
82
- deleteUser,
83
- getUserPfp,
84
- uploadUserPfp
85
- }), [
86
- deleteUser,
87
- error,
88
- fetchUser,
89
- fetchUsers,
90
- getUserPfp,
91
- isError,
92
- isLoading,
93
- updateUser,
94
- uploadUserPfp,
95
- user,
96
- users
97
- ]);
98
-
99
- return <UserContext.Provider value={value}>{children}</UserContext.Provider>;
100
- };
101
-
102
- export const useUsers = (): UserContextValue => {
103
- const context = useContext(UserContext);
104
- if (!context) {
105
- throw new Error('useUsers must be used within a UserProvider');
106
- }
107
-
108
- return context;
109
- };
1
+ import React, {
2
+ createContext,
3
+ useCallback,
4
+ useContext,
5
+ useMemo,
6
+ useState
7
+ } from 'react';
8
+
9
+ import type { User } from '../type/models.js';
10
+ import type { ChangeUserDataRequest } from '../type/requests.js';
11
+ import { useAuth } from './AuthContext.js';
12
+ import {
13
+ deleteUserRequest,
14
+ fetchUserRequest,
15
+ fetchUsersRequest,
16
+ getUserPfpRequest,
17
+ updateUserRequest,
18
+ uploadUserPfpRequest
19
+ } from './api/userApi.js';
20
+
21
+ type UserContextValue = {
22
+ users: User[];
23
+ user: User | null;
24
+ isLoading: boolean;
25
+ isError: boolean;
26
+ error: Error | null;
27
+ fetchUsers: () => Promise<User[]>;
28
+ fetchUser: (id: number) => Promise<User | null>;
29
+ updateUser: (id: number, dto: ChangeUserDataRequest) => Promise<User>;
30
+ deleteUser: (id: number) => Promise<void>;
31
+ getUserPfp: (id: number) => Promise<Blob>;
32
+ uploadUserPfp: (id: number, file: Blob) => Promise<void>;
33
+ };
34
+
35
+ type UserProviderProps = {
36
+ baseUrl: string;
37
+ children: React.ReactNode;
38
+ };
39
+
40
+ const UserContext = createContext<UserContextValue | undefined>(undefined);
41
+
42
+ export const UserProvider = ({ baseUrl, children }: UserProviderProps) => {
43
+ const { token } = useAuth();
44
+ const [users, setUsers] = useState<User[]>([]);
45
+ const [user, setUser] = useState<User | null>(null);
46
+ const [isLoading, setIsLoading] = useState(false);
47
+ const [isError, setIsError] = useState(false);
48
+ const [error, setError] = useState<Error | null>(null);
49
+
50
+ const apiConfig = useMemo(() => ({
51
+ baseUrl,
52
+ token,
53
+ setUsers,
54
+ setUser,
55
+ setIsLoading,
56
+ setIsError,
57
+ setError
58
+ }), [baseUrl, token]);
59
+
60
+ const fetchUsers = useCallback(() => fetchUsersRequest(apiConfig), [apiConfig]);
61
+ const fetchUser = useCallback((id: number) => fetchUserRequest(apiConfig, id), [apiConfig]);
62
+ const updateUser = useCallback(
63
+ (id: number, dto: ChangeUserDataRequest) => updateUserRequest(apiConfig, id, dto),
64
+ [apiConfig]
65
+ );
66
+ const deleteUser = useCallback((id: number) => deleteUserRequest(apiConfig, id), [apiConfig]);
67
+ const getUserPfp = useCallback((id: number) => getUserPfpRequest(apiConfig, id), [apiConfig]);
68
+ const uploadUserPfp = useCallback(
69
+ (id: number, file: Blob) => uploadUserPfpRequest(apiConfig, id, file),
70
+ [apiConfig]
71
+ );
72
+
73
+ const value = useMemo<UserContextValue>(() => ({
74
+ users,
75
+ user,
76
+ isLoading,
77
+ isError,
78
+ error,
79
+ fetchUsers,
80
+ fetchUser,
81
+ updateUser,
82
+ deleteUser,
83
+ getUserPfp,
84
+ uploadUserPfp
85
+ }), [
86
+ deleteUser,
87
+ error,
88
+ fetchUser,
89
+ fetchUsers,
90
+ getUserPfp,
91
+ isError,
92
+ isLoading,
93
+ updateUser,
94
+ uploadUserPfp,
95
+ user,
96
+ users
97
+ ]);
98
+
99
+ return <UserContext.Provider value={value}>{children}</UserContext.Provider>;
100
+ };
101
+
102
+ export const useUsers = (): UserContextValue => {
103
+ const context = useContext(UserContext);
104
+ if (!context) {
105
+ throw new Error('useUsers must be used within a UserProvider');
106
+ }
107
+
108
+ return context;
109
+ };