shelflife-react-hooks 1.0.7 → 1.0.9
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/dist/index.cjs.js +186 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.cts +71 -43
- package/dist/index.d.ts +71 -43
- package/dist/index.esm.js +182 -1
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
- package/src/context/ShoppingListContext.tsx +64 -0
- package/src/context/ToPurchaseContext.tsx +43 -0
- package/src/context/api/shoppingListApi.ts +111 -0
- package/src/context/api/toPurchaseApi.ts +30 -0
- package/src/index.ts +3 -1
- package/src/type/models.ts +13 -0
- package/src/type/requests.ts +9 -0
package/dist/index.d.cts
CHANGED
|
@@ -54,6 +54,17 @@ type RunningLowNotification = {
|
|
|
54
54
|
runningLowAt: number;
|
|
55
55
|
amount: number;
|
|
56
56
|
};
|
|
57
|
+
type ShoppingListItem = {
|
|
58
|
+
id: number;
|
|
59
|
+
storage: Storage;
|
|
60
|
+
product: Product;
|
|
61
|
+
amountToBuy: number;
|
|
62
|
+
};
|
|
63
|
+
type ToPurchaseItem = {
|
|
64
|
+
productId: number;
|
|
65
|
+
productName: string;
|
|
66
|
+
amountToBuy: number;
|
|
67
|
+
};
|
|
57
68
|
|
|
58
69
|
type LoginRequest = {
|
|
59
70
|
email: string;
|
|
@@ -91,6 +102,7 @@ type LogoutErrorResponse = {
|
|
|
91
102
|
type LogoutResponse = EmptyResponse | LogoutErrorResponse;
|
|
92
103
|
type ChangePasswordErrorResponse = {
|
|
93
104
|
oldPassword?: string;
|
|
105
|
+
newPassword?: string;
|
|
94
106
|
newPasswordRepeat?: string;
|
|
95
107
|
};
|
|
96
108
|
type ChangePasswordResponse = EmptyResponse | ChangePasswordErrorResponse;
|
|
@@ -101,23 +113,20 @@ type TokenStorage = {
|
|
|
101
113
|
removeItem: (key: string) => Promise<void> | void;
|
|
102
114
|
};
|
|
103
115
|
|
|
104
|
-
type
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
};
|
|
110
|
-
type ProductUploadIconResponse = EmptyResponse | ProductUploadIconError;
|
|
111
|
-
type ProductCreateResponse = Product | FieldErrorMap | EmptyResponse;
|
|
112
|
-
type ProductUpdateResponse = Product | FieldErrorMap | EmptyResponse;
|
|
113
|
-
type ProductDeleteResponse = EmptyResponse;
|
|
116
|
+
type ProductCreateError = {
|
|
117
|
+
name?: string;
|
|
118
|
+
category?: string;
|
|
119
|
+
barcode?: string;
|
|
120
|
+
expirationDaysDelta?: number;
|
|
121
|
+
};
|
|
114
122
|
|
|
115
|
-
type
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
type
|
|
120
|
-
|
|
123
|
+
type CreateRunningLowSettingError = {
|
|
124
|
+
productId?: string;
|
|
125
|
+
runningLow?: string;
|
|
126
|
+
};
|
|
127
|
+
type EditRunningLowSettingError = {
|
|
128
|
+
runningLow?: string;
|
|
129
|
+
};
|
|
121
130
|
|
|
122
131
|
type CreateProductRequest = {
|
|
123
132
|
name: string;
|
|
@@ -145,6 +154,13 @@ type AddItemRequest = {
|
|
|
145
154
|
type EditItemRequest = {
|
|
146
155
|
expiresAt?: string;
|
|
147
156
|
};
|
|
157
|
+
type CreateShoppingItemRequest = {
|
|
158
|
+
productId: number;
|
|
159
|
+
amountToBuy: number;
|
|
160
|
+
};
|
|
161
|
+
type EditShoppingItemRequest = {
|
|
162
|
+
amountToBuy: number;
|
|
163
|
+
};
|
|
148
164
|
type CreateStorageRequest = {
|
|
149
165
|
name: string;
|
|
150
166
|
};
|
|
@@ -160,33 +176,14 @@ type ChangeUserDataRequest = {
|
|
|
160
176
|
isAdmin?: boolean;
|
|
161
177
|
};
|
|
162
178
|
|
|
163
|
-
type
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
type StorageChangeNameResponse = Storage | FieldErrorMap | EmptyResponse;
|
|
167
|
-
type StorageDeleteResponse = EmptyResponse;
|
|
168
|
-
type StorageItemListResponse = StorageItem[];
|
|
169
|
-
type StorageItemResponse = StorageItem | EmptyResponse;
|
|
170
|
-
type StorageItemAddResponse = StorageItem | FieldErrorMap | EmptyResponse;
|
|
171
|
-
type StorageItemEditResponse = StorageItem | FieldErrorMap | EmptyResponse;
|
|
172
|
-
type StorageItemDeleteResponse = EmptyResponse;
|
|
173
|
-
type StorageExpiredItemsResponse = StorageItem[];
|
|
174
|
-
type StorageAboutToExpireItemsResponse = StorageItem[];
|
|
175
|
-
type StorageRunningLowResponse = RunningLowNotification[];
|
|
176
|
-
type StorageMemberListResponse = StorageMember[];
|
|
177
|
-
type StorageMemberResponse = StorageMember | EmptyResponse;
|
|
178
|
-
type StorageMemberInviteResponse = StorageMember | FieldErrorMap | EmptyResponse;
|
|
179
|
-
type StorageMemberDeleteResponse = EmptyResponse | FieldErrorMap;
|
|
180
|
-
type InviteListResponse = StorageMember[];
|
|
181
|
-
type InviteAcceptResponse = EmptyResponse;
|
|
182
|
-
type InviteDeclineResponse = EmptyResponse;
|
|
179
|
+
type CreateStorageError = {
|
|
180
|
+
name?: string;
|
|
181
|
+
};
|
|
183
182
|
|
|
184
|
-
type
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
type UserDeleteResponse = EmptyResponse;
|
|
189
|
-
type UserUpdateResponse = User | FieldErrorMap | EmptyResponse;
|
|
183
|
+
type UpdateUserError = {
|
|
184
|
+
username?: string;
|
|
185
|
+
email?: string;
|
|
186
|
+
};
|
|
190
187
|
|
|
191
188
|
type AuthContextValue = {
|
|
192
189
|
token: string | null;
|
|
@@ -354,4 +351,35 @@ type UserProviderProps = {
|
|
|
354
351
|
declare const UserProvider: ({ baseUrl, children }: UserProviderProps) => react_jsx_runtime.JSX.Element;
|
|
355
352
|
declare const useUsers: () => UserContextValue;
|
|
356
353
|
|
|
357
|
-
|
|
354
|
+
type ShoppingListContextValue = {
|
|
355
|
+
items: ShoppingListItem[];
|
|
356
|
+
isLoading: boolean;
|
|
357
|
+
isError: boolean;
|
|
358
|
+
error: Error | null;
|
|
359
|
+
fetchItems: (storageId: number) => Promise<ShoppingListItem[]>;
|
|
360
|
+
createItem: (storageId: number, dto: CreateShoppingItemRequest) => Promise<ShoppingListItem>;
|
|
361
|
+
editItem: (storageId: number, itemId: number, dto: EditShoppingItemRequest) => Promise<ShoppingListItem>;
|
|
362
|
+
deleteItem: (storageId: number, itemId: number) => Promise<void>;
|
|
363
|
+
};
|
|
364
|
+
type ShoppingListProviderProps = {
|
|
365
|
+
baseUrl: string;
|
|
366
|
+
children: React.ReactNode;
|
|
367
|
+
};
|
|
368
|
+
declare const ShoppingListProvider: ({ baseUrl, children }: ShoppingListProviderProps) => react_jsx_runtime.JSX.Element;
|
|
369
|
+
declare const useShoppingList: () => ShoppingListContextValue;
|
|
370
|
+
|
|
371
|
+
type ToPurchaseContextValue = {
|
|
372
|
+
items: ToPurchaseItem[];
|
|
373
|
+
isLoading: boolean;
|
|
374
|
+
isError: boolean;
|
|
375
|
+
error: Error | null;
|
|
376
|
+
fetchAggregated: () => Promise<ToPurchaseItem[]>;
|
|
377
|
+
};
|
|
378
|
+
type ToPurchaseProviderProps = {
|
|
379
|
+
baseUrl: string;
|
|
380
|
+
children: React.ReactNode;
|
|
381
|
+
};
|
|
382
|
+
declare const ToPurchaseProvider: ({ baseUrl, children }: ToPurchaseProviderProps) => react_jsx_runtime.JSX.Element;
|
|
383
|
+
declare const useToPurchase: () => ToPurchaseContextValue;
|
|
384
|
+
|
|
385
|
+
export { type AddItemRequest, type AuthContextValue, AuthProvider, type BaseErrorResponse, type ChangePasswordErrorResponse, type ChangePasswordRequest, type ChangePasswordResponse, type ChangeStorageNameRequest, type ChangeUserDataRequest, type CreateProductRequest, type CreateRunningLowSettingError, type CreateSettingRequest, type CreateShoppingItemRequest, type CreateStorageError, type CreateStorageRequest, type EditItemRequest, type EditRunningLowSettingError, type EditSettingRequest, type EditShoppingItemRequest, type EmptyResponse, type ErrorResponse, type FieldErrorMap, type GetMeResponse, type ImageResponse, type InviteMemberRequest, InviteProvider, type LoginErrorResponse, type LoginRequest, type LoginResponse, type LoginSuccessResponse, type LogoutErrorResponse, type LogoutResponse, type Product, type ProductCreateError, ProductProvider, type RunningLowNotification, RunningLowProvider, type RunningLowSetting, type ShoppingListItem, ShoppingListProvider, type SignupError, type SignupRequest, type SignupResponse, type Storage, type StorageItem, StorageItemProvider, type StorageMember, StorageMemberProvider, StorageProvider, type ToPurchaseItem, ToPurchaseProvider, type TokenStorage, type UpdateProductRequest, type UpdateUserError, type User, UserProvider, buildAuthHeaders, normalizeBaseUrl, readArrayBuffer, readJson, useAuth, useInvites, useProducts, useRunningLow, useShoppingList, useStorageItems, useStorageMembers, useStorages, useToPurchase, useUsers };
|
package/dist/index.d.ts
CHANGED
|
@@ -54,6 +54,17 @@ type RunningLowNotification = {
|
|
|
54
54
|
runningLowAt: number;
|
|
55
55
|
amount: number;
|
|
56
56
|
};
|
|
57
|
+
type ShoppingListItem = {
|
|
58
|
+
id: number;
|
|
59
|
+
storage: Storage;
|
|
60
|
+
product: Product;
|
|
61
|
+
amountToBuy: number;
|
|
62
|
+
};
|
|
63
|
+
type ToPurchaseItem = {
|
|
64
|
+
productId: number;
|
|
65
|
+
productName: string;
|
|
66
|
+
amountToBuy: number;
|
|
67
|
+
};
|
|
57
68
|
|
|
58
69
|
type LoginRequest = {
|
|
59
70
|
email: string;
|
|
@@ -91,6 +102,7 @@ type LogoutErrorResponse = {
|
|
|
91
102
|
type LogoutResponse = EmptyResponse | LogoutErrorResponse;
|
|
92
103
|
type ChangePasswordErrorResponse = {
|
|
93
104
|
oldPassword?: string;
|
|
105
|
+
newPassword?: string;
|
|
94
106
|
newPasswordRepeat?: string;
|
|
95
107
|
};
|
|
96
108
|
type ChangePasswordResponse = EmptyResponse | ChangePasswordErrorResponse;
|
|
@@ -101,23 +113,20 @@ type TokenStorage = {
|
|
|
101
113
|
removeItem: (key: string) => Promise<void> | void;
|
|
102
114
|
};
|
|
103
115
|
|
|
104
|
-
type
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
};
|
|
110
|
-
type ProductUploadIconResponse = EmptyResponse | ProductUploadIconError;
|
|
111
|
-
type ProductCreateResponse = Product | FieldErrorMap | EmptyResponse;
|
|
112
|
-
type ProductUpdateResponse = Product | FieldErrorMap | EmptyResponse;
|
|
113
|
-
type ProductDeleteResponse = EmptyResponse;
|
|
116
|
+
type ProductCreateError = {
|
|
117
|
+
name?: string;
|
|
118
|
+
category?: string;
|
|
119
|
+
barcode?: string;
|
|
120
|
+
expirationDaysDelta?: number;
|
|
121
|
+
};
|
|
114
122
|
|
|
115
|
-
type
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
type
|
|
120
|
-
|
|
123
|
+
type CreateRunningLowSettingError = {
|
|
124
|
+
productId?: string;
|
|
125
|
+
runningLow?: string;
|
|
126
|
+
};
|
|
127
|
+
type EditRunningLowSettingError = {
|
|
128
|
+
runningLow?: string;
|
|
129
|
+
};
|
|
121
130
|
|
|
122
131
|
type CreateProductRequest = {
|
|
123
132
|
name: string;
|
|
@@ -145,6 +154,13 @@ type AddItemRequest = {
|
|
|
145
154
|
type EditItemRequest = {
|
|
146
155
|
expiresAt?: string;
|
|
147
156
|
};
|
|
157
|
+
type CreateShoppingItemRequest = {
|
|
158
|
+
productId: number;
|
|
159
|
+
amountToBuy: number;
|
|
160
|
+
};
|
|
161
|
+
type EditShoppingItemRequest = {
|
|
162
|
+
amountToBuy: number;
|
|
163
|
+
};
|
|
148
164
|
type CreateStorageRequest = {
|
|
149
165
|
name: string;
|
|
150
166
|
};
|
|
@@ -160,33 +176,14 @@ type ChangeUserDataRequest = {
|
|
|
160
176
|
isAdmin?: boolean;
|
|
161
177
|
};
|
|
162
178
|
|
|
163
|
-
type
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
type StorageChangeNameResponse = Storage | FieldErrorMap | EmptyResponse;
|
|
167
|
-
type StorageDeleteResponse = EmptyResponse;
|
|
168
|
-
type StorageItemListResponse = StorageItem[];
|
|
169
|
-
type StorageItemResponse = StorageItem | EmptyResponse;
|
|
170
|
-
type StorageItemAddResponse = StorageItem | FieldErrorMap | EmptyResponse;
|
|
171
|
-
type StorageItemEditResponse = StorageItem | FieldErrorMap | EmptyResponse;
|
|
172
|
-
type StorageItemDeleteResponse = EmptyResponse;
|
|
173
|
-
type StorageExpiredItemsResponse = StorageItem[];
|
|
174
|
-
type StorageAboutToExpireItemsResponse = StorageItem[];
|
|
175
|
-
type StorageRunningLowResponse = RunningLowNotification[];
|
|
176
|
-
type StorageMemberListResponse = StorageMember[];
|
|
177
|
-
type StorageMemberResponse = StorageMember | EmptyResponse;
|
|
178
|
-
type StorageMemberInviteResponse = StorageMember | FieldErrorMap | EmptyResponse;
|
|
179
|
-
type StorageMemberDeleteResponse = EmptyResponse | FieldErrorMap;
|
|
180
|
-
type InviteListResponse = StorageMember[];
|
|
181
|
-
type InviteAcceptResponse = EmptyResponse;
|
|
182
|
-
type InviteDeclineResponse = EmptyResponse;
|
|
179
|
+
type CreateStorageError = {
|
|
180
|
+
name?: string;
|
|
181
|
+
};
|
|
183
182
|
|
|
184
|
-
type
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
type UserDeleteResponse = EmptyResponse;
|
|
189
|
-
type UserUpdateResponse = User | FieldErrorMap | EmptyResponse;
|
|
183
|
+
type UpdateUserError = {
|
|
184
|
+
username?: string;
|
|
185
|
+
email?: string;
|
|
186
|
+
};
|
|
190
187
|
|
|
191
188
|
type AuthContextValue = {
|
|
192
189
|
token: string | null;
|
|
@@ -354,4 +351,35 @@ type UserProviderProps = {
|
|
|
354
351
|
declare const UserProvider: ({ baseUrl, children }: UserProviderProps) => react_jsx_runtime.JSX.Element;
|
|
355
352
|
declare const useUsers: () => UserContextValue;
|
|
356
353
|
|
|
357
|
-
|
|
354
|
+
type ShoppingListContextValue = {
|
|
355
|
+
items: ShoppingListItem[];
|
|
356
|
+
isLoading: boolean;
|
|
357
|
+
isError: boolean;
|
|
358
|
+
error: Error | null;
|
|
359
|
+
fetchItems: (storageId: number) => Promise<ShoppingListItem[]>;
|
|
360
|
+
createItem: (storageId: number, dto: CreateShoppingItemRequest) => Promise<ShoppingListItem>;
|
|
361
|
+
editItem: (storageId: number, itemId: number, dto: EditShoppingItemRequest) => Promise<ShoppingListItem>;
|
|
362
|
+
deleteItem: (storageId: number, itemId: number) => Promise<void>;
|
|
363
|
+
};
|
|
364
|
+
type ShoppingListProviderProps = {
|
|
365
|
+
baseUrl: string;
|
|
366
|
+
children: React.ReactNode;
|
|
367
|
+
};
|
|
368
|
+
declare const ShoppingListProvider: ({ baseUrl, children }: ShoppingListProviderProps) => react_jsx_runtime.JSX.Element;
|
|
369
|
+
declare const useShoppingList: () => ShoppingListContextValue;
|
|
370
|
+
|
|
371
|
+
type ToPurchaseContextValue = {
|
|
372
|
+
items: ToPurchaseItem[];
|
|
373
|
+
isLoading: boolean;
|
|
374
|
+
isError: boolean;
|
|
375
|
+
error: Error | null;
|
|
376
|
+
fetchAggregated: () => Promise<ToPurchaseItem[]>;
|
|
377
|
+
};
|
|
378
|
+
type ToPurchaseProviderProps = {
|
|
379
|
+
baseUrl: string;
|
|
380
|
+
children: React.ReactNode;
|
|
381
|
+
};
|
|
382
|
+
declare const ToPurchaseProvider: ({ baseUrl, children }: ToPurchaseProviderProps) => react_jsx_runtime.JSX.Element;
|
|
383
|
+
declare const useToPurchase: () => ToPurchaseContextValue;
|
|
384
|
+
|
|
385
|
+
export { type AddItemRequest, type AuthContextValue, AuthProvider, type BaseErrorResponse, type ChangePasswordErrorResponse, type ChangePasswordRequest, type ChangePasswordResponse, type ChangeStorageNameRequest, type ChangeUserDataRequest, type CreateProductRequest, type CreateRunningLowSettingError, type CreateSettingRequest, type CreateShoppingItemRequest, type CreateStorageError, type CreateStorageRequest, type EditItemRequest, type EditRunningLowSettingError, type EditSettingRequest, type EditShoppingItemRequest, type EmptyResponse, type ErrorResponse, type FieldErrorMap, type GetMeResponse, type ImageResponse, type InviteMemberRequest, InviteProvider, type LoginErrorResponse, type LoginRequest, type LoginResponse, type LoginSuccessResponse, type LogoutErrorResponse, type LogoutResponse, type Product, type ProductCreateError, ProductProvider, type RunningLowNotification, RunningLowProvider, type RunningLowSetting, type ShoppingListItem, ShoppingListProvider, type SignupError, type SignupRequest, type SignupResponse, type Storage, type StorageItem, StorageItemProvider, type StorageMember, StorageMemberProvider, StorageProvider, type ToPurchaseItem, ToPurchaseProvider, type TokenStorage, type UpdateProductRequest, type UpdateUserError, type User, UserProvider, buildAuthHeaders, normalizeBaseUrl, readArrayBuffer, readJson, useAuth, useInvites, useProducts, useRunningLow, useShoppingList, useStorageItems, useStorageMembers, useStorages, useToPurchase, useUsers };
|
package/dist/index.esm.js
CHANGED
|
@@ -108,7 +108,7 @@ var changePasswordRequest = async (config, dto) => runWithRequestState(config, a
|
|
|
108
108
|
});
|
|
109
109
|
if (!response.ok) {
|
|
110
110
|
const error = await readJson(response);
|
|
111
|
-
if (error?.oldPassword || error?.newPasswordRepeat)
|
|
111
|
+
if (error?.oldPassword || error?.newPassword || error?.newPasswordRepeat)
|
|
112
112
|
throw error;
|
|
113
113
|
throw new Error("Change password failed");
|
|
114
114
|
}
|
|
@@ -207,6 +207,9 @@ var updateUserRequest = async (config, id, dto) => runWithRequestState(config, a
|
|
|
207
207
|
body: JSON.stringify(dto)
|
|
208
208
|
});
|
|
209
209
|
if (!response.ok) {
|
|
210
|
+
const update = await readJson(response);
|
|
211
|
+
if (update?.email || update?.username)
|
|
212
|
+
throw update;
|
|
210
213
|
throw new Error("Failed to update user");
|
|
211
214
|
}
|
|
212
215
|
const payload = await readJson(response);
|
|
@@ -523,6 +526,9 @@ var createProductRequest = async (config, dto) => runWithRequestState(config, as
|
|
|
523
526
|
body: JSON.stringify(dto)
|
|
524
527
|
});
|
|
525
528
|
if (!response.ok) {
|
|
529
|
+
const err = await readJson(response);
|
|
530
|
+
if (err?.name || err?.barcode || err?.category || err?.expirationDaysDelta)
|
|
531
|
+
throw err;
|
|
526
532
|
throw new Error("Failed to create product");
|
|
527
533
|
}
|
|
528
534
|
const payload = await readJson(response);
|
|
@@ -544,6 +550,9 @@ var updateProductRequest = async (config, id, dto) => runWithRequestState(config
|
|
|
544
550
|
body: JSON.stringify(dto)
|
|
545
551
|
});
|
|
546
552
|
if (!response.ok) {
|
|
553
|
+
const err = await readJson(response);
|
|
554
|
+
if (err?.name || err?.barcode || err?.category || err?.expirationDaysDelta)
|
|
555
|
+
throw err;
|
|
547
556
|
throw new Error("Failed to update product");
|
|
548
557
|
}
|
|
549
558
|
const payload = await readJson(response);
|
|
@@ -716,6 +725,9 @@ var createSettingRequest = async (config, storageId, dto) => runWithRequestState
|
|
|
716
725
|
}
|
|
717
726
|
);
|
|
718
727
|
if (!response.ok) {
|
|
728
|
+
const err = await readJson(response);
|
|
729
|
+
if (err?.productId || err?.runningLow)
|
|
730
|
+
throw err;
|
|
719
731
|
throw new Error("Failed to create running low setting");
|
|
720
732
|
}
|
|
721
733
|
const payload = await readJson(response);
|
|
@@ -739,6 +751,9 @@ var editSettingRequest = async (config, storageId, id, dto) => runWithRequestSta
|
|
|
739
751
|
}
|
|
740
752
|
);
|
|
741
753
|
if (!response.ok) {
|
|
754
|
+
const err = await readJson(response);
|
|
755
|
+
if (err?.runningLow)
|
|
756
|
+
throw err;
|
|
742
757
|
throw new Error("Failed to edit running low setting");
|
|
743
758
|
}
|
|
744
759
|
const payload = await readJson(response);
|
|
@@ -893,6 +908,9 @@ var createStorageRequest = async (config, dto) => runWithRequestState(config, as
|
|
|
893
908
|
body: JSON.stringify(dto)
|
|
894
909
|
});
|
|
895
910
|
if (!response.ok) {
|
|
911
|
+
const payload2 = await readJson(response);
|
|
912
|
+
if (payload2?.name)
|
|
913
|
+
throw payload2;
|
|
896
914
|
throw new Error("Failed to create storage");
|
|
897
915
|
}
|
|
898
916
|
const payload = await readJson(response);
|
|
@@ -914,6 +932,9 @@ var changeStorageNameRequest = async (config, id, dto) => runWithRequestState(co
|
|
|
914
932
|
body: JSON.stringify(dto)
|
|
915
933
|
});
|
|
916
934
|
if (!response.ok) {
|
|
935
|
+
const payload2 = await readJson(response);
|
|
936
|
+
if (payload2?.name)
|
|
937
|
+
throw payload2;
|
|
917
938
|
throw new Error("Failed to update storage");
|
|
918
939
|
}
|
|
919
940
|
const payload = await readJson(response);
|
|
@@ -1045,6 +1066,9 @@ var addItemRequest = async (config, storageId, dto) => runWithRequestState(confi
|
|
|
1045
1066
|
body: JSON.stringify(dto)
|
|
1046
1067
|
});
|
|
1047
1068
|
if (!response.ok) {
|
|
1069
|
+
const err = await readJson(response);
|
|
1070
|
+
if (err?.productId || err?.expiresAt)
|
|
1071
|
+
throw err;
|
|
1048
1072
|
throw new Error("Failed to add storage item");
|
|
1049
1073
|
}
|
|
1050
1074
|
const payload = await readJson(response);
|
|
@@ -1065,6 +1089,9 @@ var editItemRequest = async (config, storageId, itemId, dto) => runWithRequestSt
|
|
|
1065
1089
|
body: JSON.stringify(dto)
|
|
1066
1090
|
});
|
|
1067
1091
|
if (!response.ok) {
|
|
1092
|
+
const err = await readJson(response);
|
|
1093
|
+
if (err?.expiresAt)
|
|
1094
|
+
throw err;
|
|
1068
1095
|
throw new Error("Failed to edit storage item");
|
|
1069
1096
|
}
|
|
1070
1097
|
const payload = await readJson(response);
|
|
@@ -1256,6 +1283,9 @@ var inviteMemberRequest = async (config, storageId, dto) => runWithRequestState(
|
|
|
1256
1283
|
body: JSON.stringify(dto)
|
|
1257
1284
|
});
|
|
1258
1285
|
if (!response.ok) {
|
|
1286
|
+
const err = await readJson(response);
|
|
1287
|
+
if (err?.email)
|
|
1288
|
+
throw err;
|
|
1259
1289
|
throw new Error("Failed to invite member");
|
|
1260
1290
|
}
|
|
1261
1291
|
const payload = await readJson(response);
|
|
@@ -1397,14 +1427,163 @@ var useUsers = () => {
|
|
|
1397
1427
|
}
|
|
1398
1428
|
return context;
|
|
1399
1429
|
};
|
|
1430
|
+
|
|
1431
|
+
// src/context/ShoppingListContext.tsx
|
|
1432
|
+
import { createContext as createContext9, useCallback as useCallback9, useContext as useContext9, useMemo as useMemo9, useState as useState9 } from "react";
|
|
1433
|
+
|
|
1434
|
+
// src/context/api/shoppingListApi.ts
|
|
1435
|
+
var updateById6 = (items, updated) => {
|
|
1436
|
+
const index = items.findIndex((i) => i.id === updated.id);
|
|
1437
|
+
if (index === -1) return [updated, ...items];
|
|
1438
|
+
const next = [...items];
|
|
1439
|
+
next[index] = updated;
|
|
1440
|
+
return next;
|
|
1441
|
+
};
|
|
1442
|
+
var fetchShoppingListRequest = async (config, storageId) => runWithRequestState(config, async () => {
|
|
1443
|
+
const normalizedBaseUrl = normalizeBaseUrl(config.baseUrl);
|
|
1444
|
+
const response = await fetch(`${normalizedBaseUrl}/api/storages/${storageId}/shoppinglist`, {
|
|
1445
|
+
headers: buildAuthHeaders(config.token)
|
|
1446
|
+
});
|
|
1447
|
+
if (!response.ok) {
|
|
1448
|
+
throw new Error("Failed to fetch shopping list items");
|
|
1449
|
+
}
|
|
1450
|
+
const payload = await readJson(response);
|
|
1451
|
+
if (payload) {
|
|
1452
|
+
config.setItems(payload);
|
|
1453
|
+
return payload;
|
|
1454
|
+
}
|
|
1455
|
+
return [];
|
|
1456
|
+
});
|
|
1457
|
+
var createShoppingItemRequest = async (config, storageId, dto) => runWithRequestState(config, async () => {
|
|
1458
|
+
const normalizedBaseUrl = normalizeBaseUrl(config.baseUrl);
|
|
1459
|
+
const response = await fetch(`${normalizedBaseUrl}/api/storages/${storageId}/shoppinglist`, {
|
|
1460
|
+
method: "POST",
|
|
1461
|
+
headers: {
|
|
1462
|
+
...buildAuthHeaders(config.token),
|
|
1463
|
+
"Content-Type": "application/json"
|
|
1464
|
+
},
|
|
1465
|
+
body: JSON.stringify(dto)
|
|
1466
|
+
});
|
|
1467
|
+
if (!response.ok) {
|
|
1468
|
+
throw new Error("Failed to create shopping list item");
|
|
1469
|
+
}
|
|
1470
|
+
const payload = await readJson(response);
|
|
1471
|
+
if (!payload) throw new Error("Create shopping item response missing data");
|
|
1472
|
+
config.setItems((previous) => [payload, ...previous]);
|
|
1473
|
+
return payload;
|
|
1474
|
+
});
|
|
1475
|
+
var editShoppingItemRequest = async (config, storageId, itemId, dto) => runWithRequestState(config, async () => {
|
|
1476
|
+
const normalizedBaseUrl = normalizeBaseUrl(config.baseUrl);
|
|
1477
|
+
const response = await fetch(`${normalizedBaseUrl}/api/storages/${storageId}/shoppinglist/${itemId}`, {
|
|
1478
|
+
method: "PUT",
|
|
1479
|
+
headers: {
|
|
1480
|
+
...buildAuthHeaders(config.token),
|
|
1481
|
+
"Content-Type": "application/json"
|
|
1482
|
+
},
|
|
1483
|
+
body: JSON.stringify(dto)
|
|
1484
|
+
});
|
|
1485
|
+
if (!response.ok) {
|
|
1486
|
+
throw new Error("Failed to edit shopping list item");
|
|
1487
|
+
}
|
|
1488
|
+
const payload = await readJson(response);
|
|
1489
|
+
if (!payload) throw new Error("Edit shopping item response missing data");
|
|
1490
|
+
config.setItems((previous) => updateById6(previous, payload));
|
|
1491
|
+
return payload;
|
|
1492
|
+
});
|
|
1493
|
+
var deleteShoppingItemRequest = async (config, storageId, itemId) => runWithRequestState(config, async () => {
|
|
1494
|
+
const normalizedBaseUrl = normalizeBaseUrl(config.baseUrl);
|
|
1495
|
+
const response = await fetch(`${normalizedBaseUrl}/api/storages/${storageId}/shoppinglist/${itemId}`, {
|
|
1496
|
+
method: "DELETE",
|
|
1497
|
+
headers: buildAuthHeaders(config.token)
|
|
1498
|
+
});
|
|
1499
|
+
if (!response.ok) {
|
|
1500
|
+
throw new Error("Failed to delete shopping list item");
|
|
1501
|
+
}
|
|
1502
|
+
config.setItems((previous) => previous.filter((i) => i.id !== itemId));
|
|
1503
|
+
});
|
|
1504
|
+
|
|
1505
|
+
// src/context/ShoppingListContext.tsx
|
|
1506
|
+
import { jsx as jsx9 } from "react/jsx-runtime";
|
|
1507
|
+
var ShoppingListContext = createContext9(void 0);
|
|
1508
|
+
var ShoppingListProvider = ({ baseUrl, children }) => {
|
|
1509
|
+
const { token } = useAuth();
|
|
1510
|
+
const [items, setItems] = useState9([]);
|
|
1511
|
+
const [isLoading, setIsLoading] = useState9(false);
|
|
1512
|
+
const [isError, setIsError] = useState9(false);
|
|
1513
|
+
const [error, setError] = useState9(null);
|
|
1514
|
+
const apiConfig = { baseUrl, token, setItems, setIsLoading, setIsError, setError };
|
|
1515
|
+
const fetchItems = useCallback9(async (storageId) => {
|
|
1516
|
+
return fetchShoppingListRequest(apiConfig, storageId);
|
|
1517
|
+
}, [apiConfig]);
|
|
1518
|
+
const createItem = useCallback9(async (storageId, dto) => {
|
|
1519
|
+
return createShoppingItemRequest(apiConfig, storageId, dto);
|
|
1520
|
+
}, [apiConfig]);
|
|
1521
|
+
const editItem = useCallback9(async (storageId, itemId, dto) => {
|
|
1522
|
+
return editShoppingItemRequest(apiConfig, storageId, itemId, dto);
|
|
1523
|
+
}, [apiConfig]);
|
|
1524
|
+
const deleteItem = useCallback9(async (storageId, itemId) => {
|
|
1525
|
+
return deleteShoppingItemRequest(apiConfig, storageId, itemId);
|
|
1526
|
+
}, [apiConfig]);
|
|
1527
|
+
const value = useMemo9(() => ({ items, isLoading, isError, error, fetchItems, createItem, editItem, deleteItem }), [items, isLoading, isError, error, fetchItems, createItem, editItem, deleteItem]);
|
|
1528
|
+
return /* @__PURE__ */ jsx9(ShoppingListContext.Provider, { value, children });
|
|
1529
|
+
};
|
|
1530
|
+
var useShoppingList = () => {
|
|
1531
|
+
const context = useContext9(ShoppingListContext);
|
|
1532
|
+
if (!context) throw new Error("useShoppingList must be used within a ShoppingListProvider");
|
|
1533
|
+
return context;
|
|
1534
|
+
};
|
|
1535
|
+
|
|
1536
|
+
// src/context/ToPurchaseContext.tsx
|
|
1537
|
+
import { createContext as createContext10, useCallback as useCallback10, useContext as useContext10, useMemo as useMemo10, useState as useState10 } from "react";
|
|
1538
|
+
|
|
1539
|
+
// src/context/api/toPurchaseApi.ts
|
|
1540
|
+
var fetchAggregatedShoppingRequest = async (config) => runWithRequestState(config, async () => {
|
|
1541
|
+
const normalizedBaseUrl = normalizeBaseUrl(config.baseUrl);
|
|
1542
|
+
const response = await fetch(`${normalizedBaseUrl}/api/tobuy/shopping`, {
|
|
1543
|
+
headers: buildAuthHeaders(config.token)
|
|
1544
|
+
});
|
|
1545
|
+
if (!response.ok) {
|
|
1546
|
+
throw new Error("Failed to fetch aggregated shopping list");
|
|
1547
|
+
}
|
|
1548
|
+
const payload = await readJson(response);
|
|
1549
|
+
if (payload) {
|
|
1550
|
+
config.setToPurchase(payload);
|
|
1551
|
+
return payload;
|
|
1552
|
+
}
|
|
1553
|
+
return [];
|
|
1554
|
+
});
|
|
1555
|
+
|
|
1556
|
+
// src/context/ToPurchaseContext.tsx
|
|
1557
|
+
import { jsx as jsx10 } from "react/jsx-runtime";
|
|
1558
|
+
var ToPurchaseContext = createContext10(void 0);
|
|
1559
|
+
var ToPurchaseProvider = ({ baseUrl, children }) => {
|
|
1560
|
+
const { token } = useAuth();
|
|
1561
|
+
const [items, setItems] = useState10([]);
|
|
1562
|
+
const [isLoading, setIsLoading] = useState10(false);
|
|
1563
|
+
const [isError, setIsError] = useState10(false);
|
|
1564
|
+
const [error, setError] = useState10(null);
|
|
1565
|
+
const apiConfig = { baseUrl, token, setToPurchase: setItems, setIsLoading, setIsError, setError };
|
|
1566
|
+
const fetchAggregated = useCallback10(async () => {
|
|
1567
|
+
return fetchAggregatedShoppingRequest(apiConfig);
|
|
1568
|
+
}, [apiConfig]);
|
|
1569
|
+
const value = useMemo10(() => ({ items, isLoading, isError, error, fetchAggregated }), [items, isLoading, isError, error, fetchAggregated]);
|
|
1570
|
+
return /* @__PURE__ */ jsx10(ToPurchaseContext.Provider, { value, children });
|
|
1571
|
+
};
|
|
1572
|
+
var useToPurchase = () => {
|
|
1573
|
+
const context = useContext10(ToPurchaseContext);
|
|
1574
|
+
if (!context) throw new Error("useToPurchase must be used within a ToPurchaseProvider");
|
|
1575
|
+
return context;
|
|
1576
|
+
};
|
|
1400
1577
|
export {
|
|
1401
1578
|
AuthProvider,
|
|
1402
1579
|
InviteProvider,
|
|
1403
1580
|
ProductProvider,
|
|
1404
1581
|
RunningLowProvider,
|
|
1582
|
+
ShoppingListProvider,
|
|
1405
1583
|
StorageItemProvider,
|
|
1406
1584
|
StorageMemberProvider,
|
|
1407
1585
|
StorageProvider,
|
|
1586
|
+
ToPurchaseProvider,
|
|
1408
1587
|
UserProvider,
|
|
1409
1588
|
buildAuthHeaders,
|
|
1410
1589
|
normalizeBaseUrl,
|
|
@@ -1414,9 +1593,11 @@ export {
|
|
|
1414
1593
|
useInvites,
|
|
1415
1594
|
useProducts,
|
|
1416
1595
|
useRunningLow,
|
|
1596
|
+
useShoppingList,
|
|
1417
1597
|
useStorageItems,
|
|
1418
1598
|
useStorageMembers,
|
|
1419
1599
|
useStorages,
|
|
1600
|
+
useToPurchase,
|
|
1420
1601
|
useUsers
|
|
1421
1602
|
};
|
|
1422
1603
|
//# sourceMappingURL=index.esm.js.map
|