@brytdesigns/shopify-ajax-cart 1.0.1 → 1.0.3

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.
@@ -0,0 +1,491 @@
1
+ import { mergeProps, observable } from 'solid-js';
2
+ import { QueryClient, useQuery, useMutation } from '@tanstack/solid-query';
3
+ import { persistQueryClient } from '@tanstack/solid-query-persist-client';
4
+ import { createSyncStoragePersister } from '@tanstack/query-sync-storage-persister';
5
+ import lz from 'lz-string';
6
+ import { createAjaxCartApi } from '@brytdesigns/shopify-ajax-cart-api';
7
+
8
+ var __defProp = Object.defineProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+
14
+ // src/query/cart.ts
15
+ var cart_exports = {};
16
+ __export(cart_exports, {
17
+ KEY: () => KEY,
18
+ cancel: () => cancel,
19
+ get: () => get,
20
+ invalidate: () => invalidate,
21
+ query: () => query,
22
+ set: () => set
23
+ });
24
+ var client = new QueryClient();
25
+ persistQueryClient({
26
+ queryClient: client,
27
+ persister: createSyncStoragePersister({
28
+ storage: window.localStorage,
29
+ serialize: (data) => lz.compressToUTF16(JSON.stringify(data)),
30
+ deserialize: (data) => JSON.parse(lz.decompressFromUTF16(data)),
31
+ key: "brytdesigns-hybrid-cart"
32
+ })
33
+ });
34
+ var client_default = client;
35
+ var API = createAjaxCartApi({ debug: window?.BrytDesigns?.debug });
36
+ var api_default = API;
37
+
38
+ // src/query/cart.ts
39
+ var KEY = "cart";
40
+ var invalidate = () => client_default.invalidateQueries({ queryKey: [KEY] });
41
+ var set = (cb) => client_default.setQueryData([KEY], cb);
42
+ var cancel = async () => client_default.cancelQueries({ queryKey: [KEY] });
43
+ var get = () => client_default.getQueryData([KEY]);
44
+ var query = useQuery(
45
+ () => ({
46
+ queryKey: [KEY],
47
+ async queryFn({ signal }) {
48
+ const cart = await api_default.get({}, { signal });
49
+ if (cart?.error || !cart?.data) {
50
+ throw cart.error;
51
+ }
52
+ return cart.data;
53
+ },
54
+ initialData: window.BrytDesigns.initialCart,
55
+ staleTime: 1e3 * 60 * 5,
56
+ throwOnError: true,
57
+ reconcile: "cart"
58
+ }),
59
+ () => client_default
60
+ );
61
+
62
+ // src/mutations/addItems.ts
63
+ var addItems_exports = {};
64
+ __export(addItems_exports, {
65
+ mutation: () => mutation
66
+ });
67
+ var mutation = useMutation(
68
+ () => ({
69
+ mutationFn: async (items) => {
70
+ const response = await api_default.add({ items });
71
+ if (response?.error || !response.data) {
72
+ throw response?.error;
73
+ }
74
+ return response.data;
75
+ },
76
+ onSettled() {
77
+ cart_exports.invalidate();
78
+ }
79
+ }),
80
+ () => client_default
81
+ );
82
+
83
+ // src/mutations/removeItems.ts
84
+ var removeItems_exports = {};
85
+ __export(removeItems_exports, {
86
+ mutation: () => mutation2
87
+ });
88
+ var mutation2 = useMutation(
89
+ () => ({
90
+ mutationFn: async (items) => {
91
+ const response = await api_default.update({
92
+ updates: items.reduce(
93
+ (updates, key) => ({ ...updates, [key]: 0 }),
94
+ {}
95
+ )
96
+ });
97
+ if (response?.error || !response.data) {
98
+ throw response?.error;
99
+ }
100
+ return response.data;
101
+ },
102
+ async onMutate(items) {
103
+ await cart_exports.cancel();
104
+ const previousCart = cart_exports.get();
105
+ cart_exports.set((old) => ({
106
+ ...old,
107
+ items_count: old.items.filter((item) => items.includes(item.key)).reduce((total, item) => total + item.quantity, 0),
108
+ items: old.items.filter((item) => !items.includes(item.key))
109
+ }));
110
+ return { previousCart };
111
+ },
112
+ onError(_, __, context) {
113
+ if (context?.previousCart) cart_exports.set(() => context.previousCart);
114
+ cart_exports.invalidate();
115
+ },
116
+ onSuccess(cart) {
117
+ if (!cart) return cart_exports.invalidate();
118
+ cart_exports.set(() => cart);
119
+ }
120
+ }),
121
+ () => client_default
122
+ );
123
+
124
+ // src/mutations/updateAttributes.ts
125
+ var updateAttributes_exports = {};
126
+ __export(updateAttributes_exports, {
127
+ mutation: () => mutation3
128
+ });
129
+ var mutation3 = useMutation(
130
+ () => ({
131
+ mutationFn: async (attributes) => {
132
+ const response = await api_default.update({
133
+ attributes
134
+ });
135
+ if (response.error) {
136
+ throw response.error;
137
+ }
138
+ return response.data;
139
+ },
140
+ async onMutate(attributes) {
141
+ await cart_exports.cancel();
142
+ const previousCart = cart_exports.get();
143
+ cart_exports.set((old) => ({
144
+ ...old,
145
+ attributes: {
146
+ ...old.attributes,
147
+ ...attributes
148
+ }
149
+ }));
150
+ return { previousCart };
151
+ },
152
+ onError(_, __, context) {
153
+ if (context?.previousCart) cart_exports.set(() => context.previousCart);
154
+ cart_exports.invalidate();
155
+ },
156
+ onSuccess(cart) {
157
+ if (!cart) return cart_exports.invalidate();
158
+ cart_exports.set(() => cart);
159
+ }
160
+ }),
161
+ () => client_default
162
+ );
163
+
164
+ // src/mutations/updateDiscounts.ts
165
+ var updateDiscounts_exports = {};
166
+ __export(updateDiscounts_exports, {
167
+ mutation: () => mutation4
168
+ });
169
+ var mutation4 = useMutation(
170
+ () => ({
171
+ mutationFn: async (discounts) => {
172
+ const response = await api_default.update({
173
+ discount: discounts
174
+ });
175
+ if (response.error) {
176
+ throw response.error;
177
+ }
178
+ return response.data;
179
+ },
180
+ onError() {
181
+ cart_exports.invalidate();
182
+ },
183
+ onSuccess(cart) {
184
+ if (!cart) return cart_exports.invalidate();
185
+ cart_exports.set(() => cart);
186
+ }
187
+ }),
188
+ () => client_default
189
+ );
190
+
191
+ // src/mutations/updateItem.ts
192
+ var updateItem_exports = {};
193
+ __export(updateItem_exports, {
194
+ mutation: () => mutation5
195
+ });
196
+ var createIsItemCheck = (input) => (item, index) => {
197
+ if ("id" in input && input.id === `${item.id}`) {
198
+ return true;
199
+ }
200
+ if ("key" in input && input.key === item.key) {
201
+ return true;
202
+ }
203
+ if ("line" in input && input.line === index + 1) {
204
+ return true;
205
+ }
206
+ return false;
207
+ };
208
+ var mutation5 = useMutation(
209
+ () => ({
210
+ mutationFn: async (item) => {
211
+ const response = await api_default.change(item);
212
+ if (response?.error || !response.data) {
213
+ throw response?.error;
214
+ }
215
+ return response.data;
216
+ },
217
+ async onMutate(item) {
218
+ await cart_exports.cancel();
219
+ const previousCart = cart_exports.get();
220
+ const isItemCheck = createIsItemCheck(item);
221
+ cart_exports.set((old) => ({
222
+ ...old,
223
+ items_count: old.items.reduce((total, i, index) => {
224
+ if (isItemCheck(i, index)) {
225
+ return total + (item.quantity || i.quantity);
226
+ }
227
+ return total + i.quantity;
228
+ }, 0),
229
+ items: old.items.map((i, index) => {
230
+ if (isItemCheck(i, index)) {
231
+ return {
232
+ ...i,
233
+ quantity: item.quantity || i.quantity,
234
+ properties: {
235
+ ...item.properties,
236
+ ...i.properties
237
+ }
238
+ };
239
+ }
240
+ return i;
241
+ })
242
+ }));
243
+ return { previousCart };
244
+ },
245
+ onError(_, __, context) {
246
+ if (context?.previousCart) cart_exports.set(() => context.previousCart);
247
+ cart_exports.invalidate();
248
+ },
249
+ onSuccess(cart) {
250
+ if (!cart) return cart_exports.invalidate();
251
+ cart_exports.set(() => cart);
252
+ }
253
+ }),
254
+ () => client_default
255
+ );
256
+
257
+ // src/mutations/updateNote.ts
258
+ var updateNote_exports = {};
259
+ __export(updateNote_exports, {
260
+ mutation: () => mutation6
261
+ });
262
+ var mutation6 = useMutation(
263
+ () => ({
264
+ mutationFn: async (note) => {
265
+ const response = await api_default.update({
266
+ note
267
+ });
268
+ if (response.error) {
269
+ throw response.error;
270
+ }
271
+ return response.data;
272
+ },
273
+ async onMutate(note) {
274
+ await cart_exports.cancel();
275
+ const previousCart = cart_exports.get();
276
+ cart_exports.set((old) => ({
277
+ ...old,
278
+ note
279
+ }));
280
+ return { previousCart };
281
+ },
282
+ onError(_, __, context) {
283
+ if (context?.previousCart) cart_exports.set(() => context.previousCart);
284
+ cart_exports.invalidate();
285
+ },
286
+ onSuccess(cart) {
287
+ if (!cart) return cart_exports.invalidate();
288
+ cart_exports.set(() => cart);
289
+ }
290
+ }),
291
+ () => client_default
292
+ );
293
+
294
+ // src/mutations/clearCart.ts
295
+ var clearCart_exports = {};
296
+ __export(clearCart_exports, {
297
+ mutation: () => mutation7
298
+ });
299
+ var mutation7 = useMutation(
300
+ () => ({
301
+ mutationFn: async () => {
302
+ const response = await api_default.clear({});
303
+ if (response.error) {
304
+ throw response.error;
305
+ }
306
+ return response.data;
307
+ },
308
+ async onMutate() {
309
+ await cart_exports.cancel();
310
+ const previousCart = cart_exports.get();
311
+ cart_exports.set((old) => ({
312
+ ...old,
313
+ item_count: 0,
314
+ items: []
315
+ }));
316
+ return { previousCart };
317
+ },
318
+ onError(_, __, context) {
319
+ if (context?.previousCart) cart_exports.set(() => context.previousCart);
320
+ cart_exports.invalidate();
321
+ },
322
+ onSuccess(cart) {
323
+ if (!cart) return cart_exports.invalidate();
324
+ cart_exports.set(() => cart);
325
+ }
326
+ }),
327
+ () => client_default
328
+ );
329
+
330
+ // src/mutations/replaceItem.ts
331
+ var replaceItem_exports = {};
332
+ __export(replaceItem_exports, {
333
+ mutation: () => mutation8
334
+ });
335
+ var mutation8 = useMutation(
336
+ () => ({
337
+ mutationFn: async (item) => {
338
+ const cart = cart_exports.get();
339
+ const currentItem = cart.items.find((i) => i.key === item.key);
340
+ if (!currentItem) {
341
+ throw new Error(
342
+ `Item with provided key of ${item.key} does not exists!`
343
+ );
344
+ }
345
+ const tempValues = {
346
+ quantity: currentItem.quantity,
347
+ properties: {
348
+ ...currentItem.properties
349
+ },
350
+ selling_plan: currentItem?.selling_plan_allocation?.selling_plan.id || void 0
351
+ };
352
+ await api_default.change({
353
+ id: item.key,
354
+ quantity: 0
355
+ });
356
+ const response = await api_default.add({
357
+ items: [
358
+ {
359
+ id: item.id,
360
+ ...tempValues
361
+ }
362
+ ]
363
+ });
364
+ if (response?.error || !response.data) {
365
+ throw response?.error;
366
+ }
367
+ return response.data;
368
+ },
369
+ onSettled() {
370
+ cart_exports.invalidate();
371
+ }
372
+ }),
373
+ () => client_default
374
+ );
375
+ var uniq = (array) => Array.from(new Set(array));
376
+ var getNormalizedAttributes = () => {
377
+ const cart = cart_exports.get();
378
+ const mergedAttributes = {
379
+ ...cart.attributes
380
+ };
381
+ return mergedAttributes;
382
+ };
383
+ var getCartDiscountCodes = () => {
384
+ const cart = cart_exports.get();
385
+ const cartLevelCodes = (cart?.cart_level_discount_applications || []).filter((discount) => discount.type === "discount_code").map((discount) => discount.title);
386
+ const itemLevelCodes = (cart?.items || [])?.reduce((codes, item) => {
387
+ const itemCodes = (item?.line_level_discount_allocations || []).filter(
388
+ (allocation) => allocation.discount_application.type === "discount_code"
389
+ ).map((allocation) => allocation.discount_application.title);
390
+ return uniq([...codes, ...itemCodes]);
391
+ }, []);
392
+ return uniq([...cartLevelCodes, ...itemLevelCodes]);
393
+ };
394
+ function defaultUnwrap(cart) {
395
+ return cart;
396
+ }
397
+ function subscribe(unwrapValue = defaultUnwrap, cb) {
398
+ const observer = observable(() => unwrapValue(cart_exports.query.data));
399
+ return observer.subscribe(cb).unsubscribe;
400
+ }
401
+
402
+ // src/index.ts
403
+ var AjaxCart = mergeProps(cart_exports.query, {
404
+ addItems: addItems_exports.mutation.mutateAsync,
405
+ addItem: (input) => addItems_exports.mutation.mutateAsync([input]),
406
+ removeItems: removeItems_exports.mutation.mutateAsync,
407
+ removeItem(input) {
408
+ return removeItems_exports.mutation.mutateAsync([input]);
409
+ },
410
+ addAttributes(input) {
411
+ const mergedAttributes = getNormalizedAttributes();
412
+ return updateAttributes_exports.mutation.mutateAsync({
413
+ ...mergedAttributes,
414
+ ...input
415
+ });
416
+ },
417
+ addAttribute(input) {
418
+ const mergedAttributes = getNormalizedAttributes();
419
+ return updateAttributes_exports.mutation.mutateAsync({
420
+ ...mergedAttributes,
421
+ [input.key]: input.value
422
+ });
423
+ },
424
+ updateAttributes: updateAttributes_exports.mutation.mutateAsync,
425
+ removeAttributes(input) {
426
+ const mergedAttributes = getNormalizedAttributes();
427
+ return updateAttributes_exports.mutation.mutateAsync({
428
+ ...mergedAttributes,
429
+ ...Object.fromEntries(input.map((key) => [key, null]))
430
+ });
431
+ },
432
+ removeAttribute(key) {
433
+ const mergedAttributes = getNormalizedAttributes();
434
+ return updateAttributes_exports.mutation.mutateAsync({
435
+ ...mergedAttributes,
436
+ [key]: null
437
+ });
438
+ },
439
+ updateNote: updateNote_exports.mutation.mutateAsync,
440
+ clear: clearCart_exports.mutation.mutateAsync,
441
+ updateItem: updateItem_exports.mutation.mutateAsync,
442
+ async updateItems(input) {
443
+ const results = await Promise.allSettled(
444
+ input.map((i) => updateItem_exports.mutation.mutateAsync(i))
445
+ );
446
+ return {
447
+ rejected: results.filter((r) => r.status === "rejected"),
448
+ resolved: results.filter((r) => r.status === "fulfilled")
449
+ };
450
+ },
451
+ addDiscounts(input) {
452
+ const codes = getCartDiscountCodes();
453
+ return updateDiscounts_exports.mutation.mutateAsync(uniq([...codes, ...input]));
454
+ },
455
+ addDiscount(input) {
456
+ const codes = getCartDiscountCodes();
457
+ return updateDiscounts_exports.mutation.mutateAsync(uniq([...codes, input]));
458
+ },
459
+ removeDiscounts(input) {
460
+ const codes = getCartDiscountCodes();
461
+ return updateDiscounts_exports.mutation.mutateAsync(
462
+ codes.filter((code) => !input.includes(code))
463
+ );
464
+ },
465
+ removeDiscount(input) {
466
+ const codes = getCartDiscountCodes();
467
+ return updateDiscounts_exports.mutation.mutateAsync(
468
+ codes.filter((code) => code !== input)
469
+ );
470
+ },
471
+ replaceItem(input) {
472
+ return replaceItem_exports.mutation.mutateAsync(input);
473
+ },
474
+ async replaceItems(input) {
475
+ const results = await Promise.allSettled(
476
+ input.map((i) => replaceItem_exports.mutation.mutateAsync(i))
477
+ );
478
+ return {
479
+ rejected: results.filter((r) => r.status === "rejected"),
480
+ resolved: results.filter((r) => r.status === "fulfilled")
481
+ };
482
+ },
483
+ subscribe
484
+ });
485
+ if (!window.BrytDesigns) window.BrytDesigns = {};
486
+ window.BrytDesigns.cart = AjaxCart;
487
+ var index_default = AjaxCart;
488
+
489
+ export { index_default as default };
490
+ //# sourceMappingURL=index.js.map
491
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/query/cart.ts","../../src/client.ts","../../src/api.ts","../../src/mutations/addItems.ts","../../src/mutations/removeItems.ts","../../src/mutations/updateAttributes.ts","../../src/mutations/updateDiscounts.ts","../../src/mutations/updateItem.ts","../../src/mutations/updateNote.ts","../../src/mutations/clearCart.ts","../../src/mutations/replaceItem.ts","../../src/utils.ts","../../src/index.ts"],"names":["mutation","useMutation"],"mappings":"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","file":"index.js","sourcesContent":["import type { CartData } from \"../types\";\n\nimport { useQuery } from \"@tanstack/solid-query\";\n\nimport client from \"../client.js\";\nimport API from \"../api.js\";\n\nexport const KEY = \"cart\";\nexport const invalidate = () => client.invalidateQueries({ queryKey: [KEY] });\nexport const set = (cb: (data: CartData) => CartData) =>\n client.setQueryData([KEY], cb);\nexport const cancel = async () => client.cancelQueries({ queryKey: [KEY] });\nexport const get = () => client.getQueryData([KEY]) as CartData;\n\nexport const query = useQuery(\n () => ({\n queryKey: [KEY],\n async queryFn({ signal }) {\n const cart = await API.get({}, { signal });\n if (cart?.error || !cart?.data) {\n throw cart.error;\n }\n return cart.data;\n },\n initialData: window.BrytDesigns.initialCart,\n staleTime: 1000 * 60 * 5,\n throwOnError: true,\n reconcile: \"cart\",\n }),\n () => client,\n);\n","import { QueryClient } from \"@tanstack/solid-query\";\nimport { persistQueryClient } from \"@tanstack/solid-query-persist-client\";\nimport { createSyncStoragePersister } from \"@tanstack/query-sync-storage-persister\";\nimport lz from \"lz-string\";\n\nconst client = new QueryClient();\n\npersistQueryClient({\n queryClient: client,\n persister: createSyncStoragePersister({\n storage: window.localStorage,\n serialize: (data) => lz.compressToUTF16(JSON.stringify(data)),\n deserialize: (data) => JSON.parse(lz.decompressFromUTF16(data)),\n key: \"brytdesigns-hybrid-cart\",\n }),\n});\n\nexport default client;\n","import { createAjaxCartApi } from \"@brytdesigns/shopify-ajax-cart-api\";\n\n/**\n * @internal\n */\nconst API = createAjaxCartApi({ debug: window?.BrytDesigns?.debug });\n\nexport default API;\n","import { useMutation } from \"@tanstack/solid-query\";\n\nimport client from \"../client.js\";\nimport API from \"../api.js\";\nimport { Cart } from \"../query/index.js\";\n\nexport type Input = Parameters<typeof API.add>[0][\"items\"][number];\n\nexport const mutation = useMutation(\n () => ({\n mutationFn: async (items: Input[]) => {\n const response = await API.add({ items });\n if (response?.error || !response.data) {\n throw response?.error;\n }\n return response.data;\n },\n onSettled() {\n Cart.invalidate();\n },\n }),\n () => client,\n);\n","import { useMutation } from \"@tanstack/solid-query\";\n\nimport client from \"../client.js\";\nimport API from \"../api.js\";\nimport { Cart } from \"../query/index.js\";\n\nexport type Input = string;\n\nexport const mutation = useMutation(\n () => ({\n mutationFn: async (items: Input[]) => {\n const response = await API.update({\n updates: items.reduce(\n (updates, key) =>\n ({ ...updates, [key]: 0 }) as Record<string, number>,\n {},\n ),\n });\n if (response?.error || !response.data) {\n throw response?.error;\n }\n return response.data;\n },\n async onMutate(items) {\n await Cart.cancel();\n const previousCart = Cart.get();\n\n Cart.set((old) => ({\n ...old,\n items_count: old.items\n .filter((item) => items.includes(item.key))\n .reduce((total, item) => total + item.quantity, 0),\n items: old.items.filter((item) => !items.includes(item.key)),\n }));\n\n return { previousCart };\n },\n onError(_, __, context) {\n if (context?.previousCart) Cart.set(() => context.previousCart);\n Cart.invalidate();\n },\n onSuccess(cart) {\n if (!cart) return Cart.invalidate();\n Cart.set(() => cart);\n },\n }),\n () => client,\n);\n","import { useMutation } from \"@tanstack/solid-query\";\n\nimport client from \"../client.js\";\nimport API from \"../api.js\";\nimport { Cart } from \"../query/index.js\";\n\nexport type Input = NonNullable<Parameters<typeof API.update>[0][\"attributes\"]>;\n\nexport const mutation = useMutation(\n () => ({\n mutationFn: async (attributes: Input) => {\n const response = await API.update({\n attributes,\n });\n\n if (response.error) {\n throw response.error;\n }\n\n return response.data;\n },\n async onMutate(attributes) {\n await Cart.cancel();\n const previousCart = Cart.get();\n\n Cart.set((old) => ({\n ...old,\n attributes: {\n ...old.attributes,\n ...attributes,\n },\n }));\n\n return { previousCart };\n },\n onError(_, __, context) {\n if (context?.previousCart) Cart.set(() => context.previousCart);\n Cart.invalidate();\n },\n onSuccess(cart) {\n if (!cart) return Cart.invalidate();\n Cart.set(() => cart);\n },\n }),\n () => client,\n);\n","import { useMutation } from \"@tanstack/solid-query\";\n\nimport client from \"../client.js\";\nimport API from \"../api.js\";\nimport { Cart } from \"../query/index.js\";\n\nexport type Input = string;\n\nexport const mutation = useMutation(\n () => ({\n mutationFn: async (discounts: Input[]) => {\n const response = await API.update({\n discount: discounts,\n });\n\n if (response.error) {\n throw response.error;\n }\n\n return response.data;\n },\n onError() {\n Cart.invalidate();\n },\n onSuccess(cart) {\n if (!cart) return Cart.invalidate();\n Cart.set(() => cart);\n },\n }),\n () => client,\n);\n","import { useMutation } from \"@tanstack/solid-query\";\n\nimport client from \"../client.js\";\nimport API from \"../api.js\";\nimport { Cart } from \"../query/index.js\";\n\nexport type Input = Parameters<typeof API.change>[0];\n\ntype CartItem = NonNullable<\n Awaited<ReturnType<typeof API.get>>[\"data\"]\n>[\"items\"][number];\n\nconst createIsItemCheck = (input: Input) => (item: CartItem, index: number) => {\n if (\"id\" in input && input.id === `${item.id}`) {\n return true;\n }\n if (\"key\" in input && input.key === item.key) {\n return true;\n }\n if (\"line\" in input && input.line === index + 1) {\n return true;\n }\n return false;\n};\n\nexport const mutation = useMutation(\n () => ({\n mutationFn: async (item: Input) => {\n const response = await API.change(item);\n if (response?.error || !response.data) {\n throw response?.error;\n }\n return response.data;\n },\n async onMutate(item) {\n await Cart.cancel();\n const previousCart = Cart.get();\n const isItemCheck = createIsItemCheck(item);\n\n Cart.set((old) => ({\n ...old,\n items_count: old.items.reduce((total, i, index) => {\n if (isItemCheck(i, index)) {\n return total + (item.quantity || i.quantity);\n }\n return total + i.quantity;\n }, 0),\n items: old.items.map((i, index) => {\n if (isItemCheck(i, index)) {\n return {\n ...i,\n quantity: item.quantity || i.quantity,\n properties: {\n ...item.properties,\n ...i.properties,\n },\n };\n }\n return i;\n }),\n }));\n\n return { previousCart };\n },\n onError(_, __, context) {\n if (context?.previousCart) Cart.set(() => context.previousCart);\n Cart.invalidate();\n },\n onSuccess(cart) {\n if (!cart) return Cart.invalidate();\n Cart.set(() => cart);\n },\n }),\n () => client,\n);\n","import { useMutation } from \"@tanstack/solid-query\";\n\nimport client from \"../client.js\";\nimport API from \"../api.js\";\nimport { Cart } from \"../query/index.js\";\n\nexport type Input = string | null;\n\nexport const mutation = useMutation(\n () => ({\n mutationFn: async (note: string | null) => {\n const response = await API.update({\n note,\n });\n\n if (response.error) {\n throw response.error;\n }\n\n return response.data;\n },\n async onMutate(note) {\n await Cart.cancel();\n const previousCart = Cart.get();\n\n Cart.set((old) => ({\n ...old,\n note,\n }));\n\n return { previousCart };\n },\n onError(_, __, context) {\n if (context?.previousCart) Cart.set(() => context.previousCart);\n Cart.invalidate();\n },\n onSuccess(cart) {\n if (!cart) return Cart.invalidate();\n Cart.set(() => cart);\n },\n }),\n () => client,\n);\n","import { useMutation } from \"@tanstack/solid-query\";\n\nimport client from \"../client.js\";\nimport API from \"../api.js\";\nimport { Cart } from \"../query/index.js\";\n\nexport type Input = string | null;\n\nexport const mutation = useMutation(\n () => ({\n mutationFn: async () => {\n const response = await API.clear({});\n\n if (response.error) {\n throw response.error;\n }\n\n return response.data;\n },\n async onMutate() {\n await Cart.cancel();\n const previousCart = Cart.get();\n\n Cart.set((old) => ({\n ...old,\n item_count: 0,\n items: [],\n }));\n\n return { previousCart };\n },\n onError(_, __, context) {\n if (context?.previousCart) Cart.set(() => context.previousCart);\n Cart.invalidate();\n },\n onSuccess(cart) {\n if (!cart) return Cart.invalidate();\n Cart.set(() => cart);\n },\n }),\n () => client,\n);\n","import { useMutation } from \"@tanstack/solid-query\";\n\nimport client from \"../client.js\";\nimport API from \"../api.js\";\nimport { Cart } from \"../query/index.js\";\n\nexport type Input = {\n key: string;\n id: string | number;\n};\n\nexport const mutation = useMutation(\n () => ({\n mutationFn: async (item: Input) => {\n const cart = Cart.get();\n const currentItem = cart.items.find((i) => i.key === item.key);\n if (!currentItem) {\n throw new Error(\n `Item with provided key of ${item.key} does not exists!`,\n );\n }\n\n const tempValues = {\n quantity: currentItem.quantity,\n properties: {\n ...currentItem.properties,\n },\n selling_plan:\n currentItem?.selling_plan_allocation?.selling_plan.id || undefined,\n } as const;\n\n await API.change({\n id: item.key,\n quantity: 0,\n });\n const response = await API.add({\n items: [\n {\n id: item.id,\n ...tempValues,\n },\n ],\n });\n if (response?.error || !response.data) {\n throw response?.error;\n }\n return response.data;\n },\n onSettled() {\n Cart.invalidate();\n },\n }),\n () => client,\n);\n","import type { CartData } from \"./types\";\n\nimport { observable } from \"solid-js\";\n\nimport { Cart } from \"./query/index.js\";\n\nexport const uniq = (array: string[]): string[] => Array.from(new Set(array));\n\nexport const getNormalizedAttributes = () => {\n const cart = Cart.get();\n const mergedAttributes = {\n ...cart.attributes,\n };\n return mergedAttributes;\n};\n\nexport const getCartDiscountCodes = () => {\n const cart = Cart.get();\n const cartLevelCodes = (cart?.cart_level_discount_applications || [])\n .filter((discount) => discount.type === \"discount_code\")\n .map((discount) => discount.title);\n\n const itemLevelCodes = (cart?.items || [])?.reduce((codes, item) => {\n const itemCodes = (item?.line_level_discount_allocations || [])\n .filter(\n (allocation) =>\n allocation.discount_application.type === \"discount_code\",\n )\n .map((allocation) => allocation.discount_application.title);\n return uniq([...codes, ...itemCodes]);\n }, [] as string[]);\n\n return uniq([...cartLevelCodes, ...itemLevelCodes]);\n};\n\nfunction defaultUnwrap<T>(cart: CartData): T {\n return cart as T; // Use unknown as intermediary to satisfy TypeScript\n}\n\nexport function subscribe<T>(\n unwrapValue: (cart: CartData) => T = defaultUnwrap,\n cb: (data: T) => void,\n): () => void {\n // Assuming cartQuery and observable are defined and set correctly.\n const observer = observable(() => unwrapValue(Cart.query.data));\n return observer.subscribe(cb).unsubscribe;\n}\n","import type { CartData } from \"./types\";\n\nimport { mergeProps } from \"solid-js\";\n\nimport { Cart } from \"./query/index.js\";\nimport {\n AddItems,\n RemoveItems,\n UpdateAttributes,\n UpdateDiscounts,\n UpdateItem,\n UpdateNote,\n ClearCart,\n ReplaceItem,\n} from \"./mutations/index.js\";\nimport {\n getNormalizedAttributes,\n subscribe,\n getCartDiscountCodes,\n uniq,\n} from \"./utils.js\";\n\nconst AjaxCart = mergeProps(Cart.query, {\n addItems: AddItems.mutation.mutateAsync,\n addItem: (input: AddItems.Input) => AddItems.mutation.mutateAsync([input]),\n removeItems: RemoveItems.mutation.mutateAsync,\n removeItem(input: RemoveItems.Input) {\n return RemoveItems.mutation.mutateAsync([input]);\n },\n addAttributes(input: UpdateAttributes.Input) {\n const mergedAttributes = getNormalizedAttributes();\n return UpdateAttributes.mutation.mutateAsync({\n ...mergedAttributes,\n ...input,\n });\n },\n addAttribute(input: { key: string; value: UpdateAttributes.Input[string] }) {\n const mergedAttributes = getNormalizedAttributes();\n return UpdateAttributes.mutation.mutateAsync({\n ...mergedAttributes,\n [input.key]: input.value,\n });\n },\n updateAttributes: UpdateAttributes.mutation.mutateAsync,\n removeAttributes(input: string[]) {\n const mergedAttributes = getNormalizedAttributes();\n return UpdateAttributes.mutation.mutateAsync({\n ...mergedAttributes,\n ...Object.fromEntries(input.map((key) => [key, null])),\n });\n },\n removeAttribute(key: string) {\n const mergedAttributes = getNormalizedAttributes();\n return UpdateAttributes.mutation.mutateAsync({\n ...mergedAttributes,\n [key]: null,\n });\n },\n updateNote: UpdateNote.mutation.mutateAsync,\n clear: ClearCart.mutation.mutateAsync,\n updateItem: UpdateItem.mutation.mutateAsync,\n async updateItems(input: UpdateItem.Input[]) {\n const results = await Promise.allSettled(\n input.map((i) => UpdateItem.mutation.mutateAsync(i)),\n );\n return {\n rejected: results.filter((r) => r.status === \"rejected\"),\n resolved: results.filter((r) => r.status === \"fulfilled\"),\n };\n },\n addDiscounts(input: UpdateDiscounts.Input[]) {\n const codes = getCartDiscountCodes();\n return UpdateDiscounts.mutation.mutateAsync(uniq([...codes, ...input]));\n },\n addDiscount(input: UpdateDiscounts.Input) {\n const codes = getCartDiscountCodes();\n return UpdateDiscounts.mutation.mutateAsync(uniq([...codes, input]));\n },\n removeDiscounts(input: UpdateDiscounts.Input[]) {\n const codes = getCartDiscountCodes();\n return UpdateDiscounts.mutation.mutateAsync(\n codes.filter((code) => !input.includes(code)),\n );\n },\n removeDiscount(input: UpdateDiscounts.Input) {\n const codes = getCartDiscountCodes();\n return UpdateDiscounts.mutation.mutateAsync(\n codes.filter((code) => code !== input),\n );\n },\n replaceItem(input: ReplaceItem.Input) {\n return ReplaceItem.mutation.mutateAsync(input);\n },\n async replaceItems(input: ReplaceItem.Input[]) {\n const results = await Promise.allSettled(\n input.map((i) => ReplaceItem.mutation.mutateAsync(i)),\n );\n return {\n rejected: results.filter((r) => r.status === \"rejected\"),\n resolved: results.filter((r) => r.status === \"fulfilled\"),\n };\n },\n subscribe,\n});\n\ndeclare global {\n interface Window {\n BrytDesigns: {\n initialCart: CartData;\n cart: typeof AjaxCart;\n debug?: boolean;\n };\n }\n}\n\n//@ts-ignore\nif (!window.BrytDesigns) window.BrytDesigns = {};\nwindow.BrytDesigns.cart = AjaxCart;\n\nexport default AjaxCart;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brytdesigns/shopify-ajax-cart",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Reactive state management solution for the Ajax Cart API library",
5
5
  "main": "./dist/main/index.js",
6
6
  "module": "./dist/main/index.js",
@@ -24,7 +24,7 @@
24
24
  "@tanstack/solid-query-persist-client": "^5.76.2",
25
25
  "lz-string": "^1.5.0",
26
26
  "solid-js": "^1.9.7",
27
- "@brytdesigns/shopify-ajax-cart-api": "1.0.1"
27
+ "@brytdesigns/shopify-ajax-cart-api": "1.0.2"
28
28
  },
29
29
  "devDependencies": {
30
30
  "dts-bundle-generator": "^9.5.1",