@brytdesigns/shopify-ajax-cart-components 1.3.0 → 1.3.2
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/esm/index.js +33 -26
- package/dist/esm/index.js.map +1 -1
- package/dist/jsdelivr/components/cart-context.js +22 -0
- package/dist/jsdelivr/components/cart-context.js.map +1 -0
- package/dist/jsdelivr/components/cart-data-array-item.js +19 -0
- package/dist/jsdelivr/components/cart-data-array-item.js.map +1 -0
- package/dist/jsdelivr/components/cart-data-array.js +58 -0
- package/dist/jsdelivr/components/cart-data-array.js.map +1 -0
- package/dist/jsdelivr/components/cart-data-conditions.js +97 -0
- package/dist/jsdelivr/components/cart-data-conditions.js.map +1 -0
- package/dist/jsdelivr/components/cart-data-injection.js +89 -0
- package/dist/jsdelivr/components/cart-data-injection.js.map +1 -0
- package/dist/jsdelivr/components/cart-data-listener-status.js +35 -0
- package/dist/jsdelivr/components/cart-data-listener-status.js.map +1 -0
- package/dist/jsdelivr/components/cart-data-listener.js +163 -0
- package/dist/jsdelivr/components/cart-data-listener.js.map +1 -0
- package/dist/jsdelivr/components/cart-data.js +29 -0
- package/dist/jsdelivr/components/cart-data.js.map +1 -0
- package/dist/jsdelivr/components/cart-loading-state.js +39 -0
- package/dist/jsdelivr/components/cart-loading-state.js.map +1 -0
- package/dist/jsdelivr/components/index.js +11 -0
- package/dist/jsdelivr/components/index.js.map +1 -0
- package/dist/jsdelivr/hooks/index.js +7 -0
- package/dist/jsdelivr/hooks/index.js.map +1 -0
- package/dist/jsdelivr/hooks/useCartValue.js +23 -0
- package/dist/jsdelivr/hooks/useCartValue.js.map +1 -0
- package/dist/{main → jsdelivr}/hooks/useFormattedValue.js +5 -5
- package/dist/jsdelivr/hooks/useFormattedValue.js.map +1 -0
- package/dist/{main → jsdelivr}/hooks/useFullPropertyPath.js +3 -3
- package/dist/jsdelivr/hooks/useFullPropertyPath.js.map +1 -0
- package/dist/jsdelivr/hooks/useHybridCart.js +23 -0
- package/dist/jsdelivr/hooks/useHybridCart.js.map +1 -0
- package/dist/jsdelivr/hooks/useListenerStatus.js +33 -0
- package/dist/jsdelivr/hooks/useListenerStatus.js.map +1 -0
- package/dist/jsdelivr/index.js +72 -0
- package/dist/jsdelivr/index.js.map +1 -0
- package/dist/jsdelivr/utils/formatValue.js +22 -0
- package/dist/jsdelivr/utils/formatValue.js.map +1 -0
- package/dist/jsdelivr/utils/getTargetElement.js +13 -0
- package/dist/jsdelivr/utils/getTargetElement.js.map +1 -0
- package/dist/jsdelivr/utils/getTemplateContent.js +11 -0
- package/dist/jsdelivr/utils/getTemplateContent.js.map +1 -0
- package/dist/jsdelivr/utils/getValueFromPath.js +14 -0
- package/dist/jsdelivr/utils/getValueFromPath.js.map +1 -0
- package/dist/jsdelivr/utils/index.js +7 -0
- package/dist/jsdelivr/utils/index.js.map +1 -0
- package/dist/jsdelivr/utils/parseNestedObject.js +32 -0
- package/dist/jsdelivr/utils/parseNestedObject.js.map +1 -0
- package/dist/main/components/cart-data-array-injection.js +3 -4
- package/dist/main/components/cart-data-array-injection.js.map +1 -1
- package/dist/main/components/cart-data-array.js +2 -3
- package/dist/main/components/cart-data-array.js.map +1 -1
- package/dist/main/components/cart-data-conditions.js +2 -3
- package/dist/main/components/cart-data-conditions.js.map +1 -1
- package/dist/main/components/cart-data-injection.js +1 -3
- package/dist/main/components/cart-data-injection.js.map +1 -1
- package/dist/main/components/cart-data-listener.js +13 -14
- package/dist/main/components/cart-data-listener.js.map +1 -1
- package/dist/main/components/cart-data.js +1 -3
- package/dist/main/components/cart-data.js.map +1 -1
- package/dist/main/hooks/index.js +18 -2
- package/dist/main/hooks/index.js.map +1 -1
- package/dist/main/index.d.ts +1150 -317
- package/package.json +3 -3
- package/dist/main/hooks/useFormattedValue.js.map +0 -1
- package/dist/main/hooks/useFullPropertyPath.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createEffect, on, onCleanup } from 'solid-js';
|
|
2
2
|
import debounce from 'lodash.debounce';
|
|
3
|
-
import { provideListenerStatusContext,
|
|
3
|
+
import { provideListenerStatusContext, useCartPath, useCartValue } from '../hooks/index.js';
|
|
4
4
|
import AjaxCart from '@brytdesigns/shopify-ajax-cart';
|
|
5
5
|
import { parseNestedObject } from '../utils/index.js';
|
|
6
6
|
|
|
@@ -12,12 +12,11 @@ const Component = (props, { element }) => {
|
|
|
12
12
|
return props.status;
|
|
13
13
|
}
|
|
14
14
|
});
|
|
15
|
-
const cart = useAjaxCart(element);
|
|
16
15
|
const path = useCartPath({
|
|
17
16
|
element
|
|
18
17
|
});
|
|
19
18
|
const data = useCartValue({
|
|
20
|
-
|
|
19
|
+
element,
|
|
21
20
|
path
|
|
22
21
|
});
|
|
23
22
|
createEffect(
|
|
@@ -45,7 +44,7 @@ const Component = (props, { element }) => {
|
|
|
45
44
|
if (!on2) return console.error(`${Name}: on property is required!`);
|
|
46
45
|
let resetStatusId = null;
|
|
47
46
|
function onEvent(e) {
|
|
48
|
-
const
|
|
47
|
+
const cart = AjaxCart;
|
|
49
48
|
if (preventDefault) e.preventDefault();
|
|
50
49
|
async function handleStatus(promise) {
|
|
51
50
|
setStatus("loading");
|
|
@@ -78,7 +77,7 @@ const Component = (props, { element }) => {
|
|
|
78
77
|
);
|
|
79
78
|
if (method === "replaceItem") {
|
|
80
79
|
return handleStatus(
|
|
81
|
-
|
|
80
|
+
cart.replaceItem({
|
|
82
81
|
key: formObj.key,
|
|
83
82
|
id: formObj.id
|
|
84
83
|
})
|
|
@@ -86,7 +85,7 @@ const Component = (props, { element }) => {
|
|
|
86
85
|
}
|
|
87
86
|
if (method === "updateItem") {
|
|
88
87
|
return handleStatus(
|
|
89
|
-
|
|
88
|
+
cart.updateItem({
|
|
90
89
|
id: formObj.id,
|
|
91
90
|
quantity: formObj?.quantity || void 0,
|
|
92
91
|
properties: formObj?.properties || {},
|
|
@@ -95,30 +94,30 @@ const Component = (props, { element }) => {
|
|
|
95
94
|
).finally(reset2);
|
|
96
95
|
}
|
|
97
96
|
if (method === "removeItem") {
|
|
98
|
-
return handleStatus(
|
|
97
|
+
return handleStatus(cart.removeItem(formObj.key)).finally(reset2);
|
|
99
98
|
}
|
|
100
99
|
if (method === "addDiscount") {
|
|
101
|
-
return handleStatus(
|
|
100
|
+
return handleStatus(cart.addDiscount(formObj.code)).finally(
|
|
102
101
|
reset2
|
|
103
102
|
);
|
|
104
103
|
}
|
|
105
104
|
if (method === "removeDiscount") {
|
|
106
|
-
return handleStatus(
|
|
105
|
+
return handleStatus(cart.removeDiscount(formObj.code)).finally(
|
|
107
106
|
reset2
|
|
108
107
|
);
|
|
109
108
|
}
|
|
110
109
|
if (method === "updateNote") {
|
|
111
|
-
return handleStatus(
|
|
110
|
+
return handleStatus(cart.updateNote(formObj.note)).finally(reset2);
|
|
112
111
|
}
|
|
113
112
|
return;
|
|
114
113
|
}
|
|
115
114
|
const input = e.target;
|
|
116
115
|
if (method === "removeItem") {
|
|
117
|
-
return handleStatus(
|
|
116
|
+
return handleStatus(cart.removeItem(data2.key));
|
|
118
117
|
}
|
|
119
118
|
if (method === "updateQuantity") {
|
|
120
119
|
return handleStatus(
|
|
121
|
-
|
|
120
|
+
cart.updateItem({
|
|
122
121
|
id: data2.key,
|
|
123
122
|
quantity: input.valueAsNumber
|
|
124
123
|
})
|
|
@@ -126,14 +125,14 @@ const Component = (props, { element }) => {
|
|
|
126
125
|
}
|
|
127
126
|
if (method === "updateItemVariant") {
|
|
128
127
|
return handleStatus(
|
|
129
|
-
|
|
128
|
+
cart.replaceItem({
|
|
130
129
|
key: data2.key,
|
|
131
130
|
id: input.value
|
|
132
131
|
})
|
|
133
132
|
);
|
|
134
133
|
}
|
|
135
134
|
if (method === "updateNote") {
|
|
136
|
-
return handleStatus(
|
|
135
|
+
return handleStatus(cart.updateNote(input.value));
|
|
137
136
|
}
|
|
138
137
|
}
|
|
139
138
|
const handleEvent = debounce(onEvent, debounceDelay), controller = new AbortController();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/cart-data-listener.ts"],"names":["on","data","cart","reset"],"mappings":"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","file":"cart-data-listener.js","sourcesContent":["import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\n\nimport { createEffect, on, onCleanup } from \"solid-js\";\nimport debounce from \"lodash.debounce\";\n\nimport {\n type Status,\n provideListenerStatusContext,\n useAjaxCart,\n useCartValue,\n useCartPath,\n} from \"../hooks/index.js\";\nimport AjaxCart from \"@brytdesigns/shopify-ajax-cart\";\nimport { parseNestedObject } from \"../utils/index.js\";\n\ntype CartDataListenerProps = {\n status: Status;\n on: string;\n method: string;\n debounceDelay: number;\n resetForm: boolean;\n resetStatusDelay: number;\n preventDefault: boolean;\n};\n\nexport const Name = \"cart-data-listener\";\n\nexport const Component: CorrectComponentType<CartDataListenerProps> = (\n props,\n { element }\n) => {\n const [_, setStatus] = provideListenerStatusContext({\n element,\n get status() {\n return props.status;\n },\n });\n\n const cart = useAjaxCart(element);\n\n const path = useCartPath({\n element,\n });\n const data = useCartValue({\n data: cart,\n path,\n });\n\n // let currentEventId: string | null = null;\n\n createEffect(\n on(\n () => ({\n method: props.method,\n on: props.on,\n preventDefault: props.preventDefault,\n data: data() as any,\n debounceDelay: props.debounceDelay,\n resetForm: props.resetForm,\n resetStatusDelay: props.resetStatusDelay,\n }),\n ({\n method,\n on,\n preventDefault,\n data,\n debounceDelay,\n resetForm,\n resetStatusDelay,\n }) => {\n if (!method)\n return console.error(`${Name}: method property is required!`);\n if (!on) return console.error(`${Name}: on property is required!`);\n\n let resetStatusId: number | null = null;\n // tempEventId: string | null = null;\n\n function onEvent(e: Event) {\n const cart = AjaxCart;\n\n // (currentEventId = createUniqueId()), (tempEventId = currentEventId);\n\n if (preventDefault) e.preventDefault();\n\n async function handleStatus<T>(promise: Promise<T>) {\n setStatus(\"loading\");\n return promise\n .then((data) => {\n setStatus(\"success\");\n return data;\n })\n .catch((error) => {\n setStatus(\"error\");\n return error;\n })\n .finally(() => {\n if (resetStatusDelay > 0) {\n //@ts-ignore\n resetStatusId = setTimeout(() => {\n setStatus(\"default\");\n resetStatusId = null;\n }, resetStatusDelay);\n } else {\n setStatus(\"default\");\n }\n });\n }\n\n if (on === \"submit\") {\n const form = e.target as HTMLFormElement;\n const formData = new FormData(form);\n const formObj = parseNestedObject(\n //@ts-ignore\n Object.fromEntries(formData.entries())\n );\n\n function reset() {\n if (resetForm) form.reset();\n }\n\n if (method === \"replaceItem\") {\n return handleStatus(\n cart.replaceItem({\n key: formObj.key,\n id: formObj.id,\n })\n ).finally(reset);\n }\n\n if (method === \"updateItem\") {\n return handleStatus(\n cart.updateItem({\n id: formObj.id,\n quantity: formObj?.quantity || undefined,\n properties: formObj?.properties || {},\n selling_plan: formObj?.selling_plan || undefined,\n })\n ).finally(reset);\n }\n\n if (method === \"removeItem\") {\n return handleStatus(cart.removeItem(formObj.key)).finally(reset);\n }\n\n if (method === \"addDiscount\") {\n return handleStatus(cart.addDiscount(formObj.code)).finally(\n reset\n );\n }\n\n if (method === \"removeDiscount\") {\n return handleStatus(cart.removeDiscount(formObj.code)).finally(\n reset\n );\n }\n\n if (method === \"updateNote\") {\n return handleStatus(cart.updateNote(formObj.note)).finally(reset);\n }\n\n return;\n }\n\n const input = e.target as HTMLInputElement;\n\n if (method === \"removeItem\") {\n return handleStatus(cart.removeItem(data.key));\n }\n\n if (method === \"updateQuantity\") {\n return handleStatus(\n cart.updateItem({\n id: data.key,\n quantity: input.valueAsNumber,\n })\n );\n }\n\n if (method === \"updateItemVariant\") {\n return handleStatus(\n cart.replaceItem({\n key: data.key,\n id: input.value,\n })\n );\n }\n\n if (method === \"updateNote\") {\n return handleStatus(cart.updateNote(input.value));\n }\n }\n const handleEvent = debounce(onEvent, debounceDelay),\n controller = new AbortController();\n\n element.addEventListener(\n on,\n (e) => {\n if (preventDefault) e.preventDefault();\n handleEvent(e);\n },\n { signal: controller.signal }\n );\n\n return onCleanup(() => {\n controller.abort();\n if (resetStatusId) clearTimeout(resetStatusId);\n });\n }\n )\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/components/cart-data-listener.ts"],"names":["on","data","reset"],"mappings":"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","file":"cart-data-listener.js","sourcesContent":["import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\n\nimport { createEffect, on, onCleanup } from \"solid-js\";\nimport debounce from \"lodash.debounce\";\n\nimport {\n type Status,\n provideListenerStatusContext,\n useCartValue,\n useCartPath,\n} from \"../hooks/index.js\";\nimport AjaxCart from \"@brytdesigns/shopify-ajax-cart\";\nimport { parseNestedObject } from \"../utils/index.js\";\n\ntype CartDataListenerProps = {\n status: Status;\n on: string;\n method: string;\n debounceDelay: number;\n resetForm: boolean;\n resetStatusDelay: number;\n preventDefault: boolean;\n};\n\nexport const Name = \"cart-data-listener\";\n\nexport const Component: CorrectComponentType<CartDataListenerProps> = (\n props,\n { element },\n) => {\n const [_, setStatus] = provideListenerStatusContext({\n element,\n get status() {\n return props.status;\n },\n });\n\n const path = useCartPath({\n element,\n });\n const data = useCartValue({\n element,\n path,\n });\n\n // let currentEventId: string | null = null;\n\n createEffect(\n on(\n () => ({\n method: props.method,\n on: props.on,\n preventDefault: props.preventDefault,\n data: data() as any,\n debounceDelay: props.debounceDelay,\n resetForm: props.resetForm,\n resetStatusDelay: props.resetStatusDelay,\n }),\n ({\n method,\n on,\n preventDefault,\n data,\n debounceDelay,\n resetForm,\n resetStatusDelay,\n }) => {\n if (!method)\n return console.error(`${Name}: method property is required!`);\n if (!on) return console.error(`${Name}: on property is required!`);\n\n let resetStatusId: number | null = null;\n // tempEventId: string | null = null;\n\n function onEvent(e: Event) {\n const cart = AjaxCart;\n\n // (currentEventId = createUniqueId()), (tempEventId = currentEventId);\n\n if (preventDefault) e.preventDefault();\n\n async function handleStatus<T>(promise: Promise<T>) {\n setStatus(\"loading\");\n return promise\n .then((data) => {\n setStatus(\"success\");\n return data;\n })\n .catch((error) => {\n setStatus(\"error\");\n return error;\n })\n .finally(() => {\n if (resetStatusDelay > 0) {\n //@ts-ignore\n resetStatusId = setTimeout(() => {\n setStatus(\"default\");\n resetStatusId = null;\n }, resetStatusDelay);\n } else {\n setStatus(\"default\");\n }\n });\n }\n\n if (on === \"submit\") {\n const form = e.target as HTMLFormElement;\n const formData = new FormData(form);\n const formObj = parseNestedObject(\n //@ts-ignore\n Object.fromEntries(formData.entries()),\n );\n\n function reset() {\n if (resetForm) form.reset();\n }\n\n if (method === \"replaceItem\") {\n return handleStatus(\n cart.replaceItem({\n key: formObj.key,\n id: formObj.id,\n }),\n ).finally(reset);\n }\n\n if (method === \"updateItem\") {\n return handleStatus(\n cart.updateItem({\n id: formObj.id,\n quantity: formObj?.quantity || undefined,\n properties: formObj?.properties || {},\n selling_plan: formObj?.selling_plan || undefined,\n }),\n ).finally(reset);\n }\n\n if (method === \"removeItem\") {\n return handleStatus(cart.removeItem(formObj.key)).finally(reset);\n }\n\n if (method === \"addDiscount\") {\n return handleStatus(cart.addDiscount(formObj.code)).finally(\n reset,\n );\n }\n\n if (method === \"removeDiscount\") {\n return handleStatus(cart.removeDiscount(formObj.code)).finally(\n reset,\n );\n }\n\n if (method === \"updateNote\") {\n return handleStatus(cart.updateNote(formObj.note)).finally(reset);\n }\n\n return;\n }\n\n const input = e.target as HTMLInputElement;\n\n if (method === \"removeItem\") {\n return handleStatus(cart.removeItem(data.key));\n }\n\n if (method === \"updateQuantity\") {\n return handleStatus(\n cart.updateItem({\n id: data.key,\n quantity: input.valueAsNumber,\n }),\n );\n }\n\n if (method === \"updateItemVariant\") {\n return handleStatus(\n cart.replaceItem({\n key: data.key,\n id: input.value,\n }),\n );\n }\n\n if (method === \"updateNote\") {\n return handleStatus(cart.updateNote(input.value));\n }\n }\n const handleEvent = debounce(onEvent, debounceDelay),\n controller = new AbortController();\n\n element.addEventListener(\n on,\n (e) => {\n if (preventDefault) e.preventDefault();\n handleEvent(e);\n },\n { signal: controller.signal },\n );\n\n return onCleanup(() => {\n controller.abort();\n if (resetStatusId) clearTimeout(resetStatusId);\n });\n },\n ),\n );\n};\n"]}
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
import '../utils/index.js';
|
|
2
2
|
import { Show } from 'solid-js';
|
|
3
|
-
import {
|
|
3
|
+
import { useCartPath, useCartFormattedValue } from '../hooks/index.js';
|
|
4
4
|
import html from 'solid-js/html';
|
|
5
5
|
|
|
6
6
|
const Name = "cart-data";
|
|
7
7
|
const Component = (props, { element }) => {
|
|
8
8
|
if (!props.propertyName)
|
|
9
9
|
return console.warn(`${Name}: No property-name attribute provided.`);
|
|
10
|
-
const data = useAjaxCart(element);
|
|
11
10
|
const fullPath = useCartPath({
|
|
12
11
|
element,
|
|
13
12
|
path: () => props.propertyName
|
|
14
13
|
});
|
|
15
14
|
const formattedValue = useCartFormattedValue({
|
|
16
|
-
data,
|
|
17
15
|
get format() {
|
|
18
16
|
return props.format;
|
|
19
17
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/cart-data.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"sources":["../../../src/components/cart-data.ts"],"names":[],"mappings":";;;;;AAiBO,MAAM,IAAO,GAAA;AAEb,MAAM,SAAiD,GAAA,CAC5D,KACA,EAAA,EAAE,SACC,KAAA;AACH,EAAA,IAAI,CAAC,KAAM,CAAA,YAAA;AACT,IAAA,OAAO,OAAQ,CAAA,IAAA,CAAK,CAAG,EAAA,IAAI,CAAwC,sCAAA,CAAA,CAAA;AACrE,EAAA,MAAM,WAAW,WAAY,CAAA;AAAA,IAC3B,OAAA;AAAA,IACA,IAAA,EAAM,MAAM,KAAM,CAAA;AAAA,GACnB,CAAA;AACD,EAAA,MAAM,iBAAiB,qBAAsB,CAAA;AAAA,IAC3C,IAAI,MAAS,GAAA;AACX,MAAA,OAAO,KAAM,CAAA,MAAA;AAAA,KACf;AAAA,IACA,IAAM,EAAA,QAAA;AAAA,IACN;AAAA,GACD,CAAA;AAED,EAAO,OAAA,IAAA;AAAA,KAAA,EACF,IAAI,CAAS,MAAA,EAAA,MAAM,gBAAqB,KAAA,IAAI,KAAK,cAAc,CAAA;AAAA,EAAA,CAAA;AAEtE","file":"cart-data.js","sourcesContent":["import type { CorrectComponentType } from \"@brytdesigns/web-component-core/utils\";\nimport { type Format } from \"../utils/index.js\";\n\nimport { Show } from \"solid-js\";\n\nimport {\n type CartPath,\n useCartPath,\n useCartFormattedValue,\n} from \"../hooks/index.js\";\nimport html from \"solid-js/html\";\n\ntype CartDataProps = {\n propertyName: CartPath;\n format?: Format;\n};\n\nexport const Name = \"cart-data\";\n\nexport const Component: CorrectComponentType<CartDataProps> = (\n props,\n { element },\n) => {\n if (!props.propertyName)\n return console.warn(`${Name}: No property-name attribute provided.`);\n const fullPath = useCartPath({\n element,\n path: () => props.propertyName,\n });\n const formattedValue = useCartFormattedValue({\n get format() {\n return props.format;\n },\n path: fullPath,\n element,\n });\n\n return html`\n <${Show} when=${() => formattedValue() !== null}> ${formattedValue} <//>\n `;\n};\n"]}
|
package/dist/main/hooks/index.js
CHANGED
|
@@ -1,11 +1,27 @@
|
|
|
1
1
|
import { makeFullPropertyPathContext } from '@brytdesigns/web-component-core';
|
|
2
|
+
import { useAjaxCart } from './useAjaxCart.js';
|
|
2
3
|
export * from './useAjaxCart.js';
|
|
3
4
|
export * from './useListenerStatus.js';
|
|
4
5
|
|
|
5
6
|
const hooks = makeFullPropertyPathContext();
|
|
6
|
-
const useCartValue =
|
|
7
|
+
const useCartValue = (options) => {
|
|
8
|
+
const data = useAjaxCart(options.element);
|
|
9
|
+
return hooks.usePathValue({
|
|
10
|
+
...options,
|
|
11
|
+
data
|
|
12
|
+
});
|
|
13
|
+
};
|
|
7
14
|
const useCartPath = hooks.usePath;
|
|
8
|
-
const useCartFormattedValue =
|
|
15
|
+
const useCartFormattedValue = (options) => {
|
|
16
|
+
const data = useAjaxCart(options.element);
|
|
17
|
+
return hooks.useFormattedValue({
|
|
18
|
+
data,
|
|
19
|
+
get format() {
|
|
20
|
+
return options.format;
|
|
21
|
+
},
|
|
22
|
+
path: options.path
|
|
23
|
+
});
|
|
24
|
+
};
|
|
9
25
|
const provideCartPathContext = hooks.provide;
|
|
10
26
|
|
|
11
27
|
export { provideCartPathContext, useCartFormattedValue, useCartPath, useCartValue };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/hooks/index.ts"],"names":[],"mappings":";;;;;AASA,MAAM,QAAQ,2BAAsC,EAAA;AAIvC,MAAA,YAAA,GAAe,CAC1B,OAGG,KAAA;AACH,EAAM,MAAA,IAAA,GAAO,WAAY,CAAA,OAAA,CAAQ,OAAO,CAAA;AACxC,EAAA,OAAO,MAAM,YAAa,CAAA;AAAA,IACxB,GAAG,OAAA;AAAA,IACH;AAAA,GACD,CAAA;AACH;AACO,MAAM,cAAc,KAAM,CAAA;AACpB,MAAA,qBAAA,GAAwB,CACnC,OAGG,KAAA;AACH,EAAM,MAAA,IAAA,GAAO,WAAY,CAAA,OAAA,CAAQ,OAAO,CAAA;AACxC,EAAA,OAAO,MAAM,iBAAkB,CAAA;AAAA,IAC7B,IAAA;AAAA,IACA,IAAI,MAAS,GAAA;AACX,MAAA,OAAO,OAAQ,CAAA,MAAA;AAAA,KACjB;AAAA,IACA,MAAM,OAAQ,CAAA;AAAA,GACf,CAAA;AACH;AACO,MAAM,yBAAyB,KAAM,CAAA","file":"index.js","sourcesContent":["import type { CartData } from \"@brytdesigns/shopify-ajax-cart\";\nimport {\n makeFullPropertyPathContext,\n type Path,\n type PathValue,\n} from \"@brytdesigns/web-component-core\";\nimport type { ICustomElement } from \"component-register\";\nimport { useAjaxCart } from \"./useAjaxCart.js\";\n\nconst hooks = makeFullPropertyPathContext<CartData>();\n\nexport type CartPath = Path<CartData>;\nexport type CartPathValue<Path extends CartPath> = PathValue<CartData, Path>;\nexport const useCartValue = (\n options: Omit<Parameters<typeof hooks.usePathValue>[0], \"data\"> & {\n element: HTMLElement & ICustomElement;\n },\n) => {\n const data = useAjaxCart(options.element);\n return hooks.usePathValue({\n ...options,\n data,\n });\n};\nexport const useCartPath = hooks.usePath;\nexport const useCartFormattedValue = (\n options: Omit<Parameters<typeof hooks.useFormattedValue>[0], \"data\"> & {\n element: HTMLElement & ICustomElement;\n },\n) => {\n const data = useAjaxCart(options.element);\n return hooks.useFormattedValue({\n data,\n get format() {\n return options.format;\n },\n path: options.path,\n });\n};\nexport const provideCartPathContext = hooks.provide;\n\nexport * from \"./useAjaxCart.js\";\nexport * from \"./useListenerStatus.js\";\n"]}
|