@tagadapay/headless-sdk 1.6.0 → 1.8.0-rc.0
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/README.md +1 -186
- package/package.json +6 -11
- package/dist/core/client.d.ts +0 -54
- package/dist/core/client.d.ts.map +0 -1
- package/dist/core/client.js +0 -67
- package/dist/core/client.js.map +0 -1
- package/dist/core/errors.d.ts +0 -46
- package/dist/core/errors.d.ts.map +0 -1
- package/dist/core/errors.js +0 -57
- package/dist/core/errors.js.map +0 -1
- package/dist/core/helpers/autocomplete.d.ts +0 -89
- package/dist/core/helpers/autocomplete.d.ts.map +0 -1
- package/dist/core/helpers/autocomplete.js +0 -186
- package/dist/core/helpers/autocomplete.js.map +0 -1
- package/dist/core/helpers/countries.d.ts +0 -45
- package/dist/core/helpers/countries.d.ts.map +0 -1
- package/dist/core/helpers/countries.js +0 -65
- package/dist/core/helpers/countries.js.map +0 -1
- package/dist/core/helpers/currency.d.ts +0 -26
- package/dist/core/helpers/currency.d.ts.map +0 -1
- package/dist/core/helpers/currency.js +0 -72
- package/dist/core/helpers/currency.js.map +0 -1
- package/dist/core/helpers/index.d.ts +0 -5
- package/dist/core/helpers/index.d.ts.map +0 -1
- package/dist/core/helpers/index.js +0 -5
- package/dist/core/helpers/index.js.map +0 -1
- package/dist/core/helpers/iso3166.d.ts +0 -28
- package/dist/core/helpers/iso3166.d.ts.map +0 -1
- package/dist/core/helpers/iso3166.js +0 -84
- package/dist/core/helpers/iso3166.js.map +0 -1
- package/dist/core/http.d.ts +0 -27
- package/dist/core/http.d.ts.map +0 -1
- package/dist/core/http.js +0 -116
- package/dist/core/http.js.map +0 -1
- package/dist/core/index.d.ts +0 -12
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -11
- package/dist/core/index.js.map +0 -1
- package/dist/core/modules/catalog.d.ts +0 -27
- package/dist/core/modules/catalog.d.ts.map +0 -1
- package/dist/core/modules/catalog.js +0 -38
- package/dist/core/modules/catalog.js.map +0 -1
- package/dist/core/modules/checkout.d.ts +0 -249
- package/dist/core/modules/checkout.d.ts.map +0 -1
- package/dist/core/modules/checkout.js +0 -448
- package/dist/core/modules/checkout.js.map +0 -1
- package/dist/core/modules/customer.d.ts +0 -33
- package/dist/core/modules/customer.d.ts.map +0 -1
- package/dist/core/modules/customer.js +0 -53
- package/dist/core/modules/customer.js.map +0 -1
- package/dist/core/modules/offers.d.ts +0 -137
- package/dist/core/modules/offers.d.ts.map +0 -1
- package/dist/core/modules/offers.js +0 -141
- package/dist/core/modules/offers.js.map +0 -1
- package/dist/core/modules/payment.d.ts +0 -298
- package/dist/core/modules/payment.d.ts.map +0 -1
- package/dist/core/modules/payment.js +0 -701
- package/dist/core/modules/payment.js.map +0 -1
- package/dist/core/types.d.ts +0 -460
- package/dist/core/types.d.ts.map +0 -1
- package/dist/core/types.js +0 -5
- package/dist/core/types.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/react/hooks/useCatalog.d.ts +0 -25
- package/dist/react/hooks/useCatalog.d.ts.map +0 -1
- package/dist/react/hooks/useCatalog.js +0 -58
- package/dist/react/hooks/useCatalog.js.map +0 -1
- package/dist/react/hooks/useCheckout.d.ts +0 -58
- package/dist/react/hooks/useCheckout.d.ts.map +0 -1
- package/dist/react/hooks/useCheckout.js +0 -168
- package/dist/react/hooks/useCheckout.js.map +0 -1
- package/dist/react/hooks/useCustomer.d.ts +0 -28
- package/dist/react/hooks/useCustomer.d.ts.map +0 -1
- package/dist/react/hooks/useCustomer.js +0 -77
- package/dist/react/hooks/useCustomer.js.map +0 -1
- package/dist/react/hooks/useGoogleAutocomplete.d.ts +0 -26
- package/dist/react/hooks/useGoogleAutocomplete.d.ts.map +0 -1
- package/dist/react/hooks/useGoogleAutocomplete.js +0 -70
- package/dist/react/hooks/useGoogleAutocomplete.js.map +0 -1
- package/dist/react/hooks/useISOData.d.ts +0 -23
- package/dist/react/hooks/useISOData.d.ts.map +0 -1
- package/dist/react/hooks/useISOData.js +0 -63
- package/dist/react/hooks/useISOData.js.map +0 -1
- package/dist/react/hooks/useOffers.d.ts +0 -134
- package/dist/react/hooks/useOffers.d.ts.map +0 -1
- package/dist/react/hooks/useOffers.js +0 -171
- package/dist/react/hooks/useOffers.js.map +0 -1
- package/dist/react/hooks/usePayment.d.ts +0 -108
- package/dist/react/hooks/usePayment.d.ts.map +0 -1
- package/dist/react/hooks/usePayment.js +0 -233
- package/dist/react/hooks/usePayment.js.map +0 -1
- package/dist/react/index.d.ts +0 -20
- package/dist/react/index.d.ts.map +0 -1
- package/dist/react/index.js +0 -11
- package/dist/react/index.js.map +0 -1
- package/dist/react/internal/redirectGuard.d.ts +0 -9
- package/dist/react/internal/redirectGuard.d.ts.map +0 -1
- package/dist/react/internal/redirectGuard.js +0 -25
- package/dist/react/internal/redirectGuard.js.map +0 -1
- package/dist/react/provider.d.ts +0 -31
- package/dist/react/provider.d.ts.map +0 -1
- package/dist/react/provider.js +0 -32
- package/dist/react/provider.js.map +0 -1
- package/dist/stripe/StripeExpressButton.d.ts +0 -30
- package/dist/stripe/StripeExpressButton.d.ts.map +0 -1
- package/dist/stripe/StripeExpressButton.js +0 -32
- package/dist/stripe/StripeExpressButton.js.map +0 -1
- package/dist/stripe/StripeExpressCheckout.d.ts +0 -98
- package/dist/stripe/StripeExpressCheckout.d.ts.map +0 -1
- package/dist/stripe/StripeExpressCheckout.js +0 -198
- package/dist/stripe/StripeExpressCheckout.js.map +0 -1
- package/dist/stripe/index.d.ts +0 -8
- package/dist/stripe/index.d.ts.map +0 -1
- package/dist/stripe/index.js +0 -15
- package/dist/stripe/index.js.map +0 -1
- package/dist/stripe/useStripeExpress.d.ts +0 -54
- package/dist/stripe/useStripeExpress.d.ts.map +0 -1
- package/dist/stripe/useStripeExpress.js +0 -126
- package/dist/stripe/useStripeExpress.js.map +0 -1
- package/dist/tagada-headless-react.min.js +0 -8
- package/dist/tagada-headless-react.min.js.map +0 -7
- package/dist/tagada-headless.js +0 -2070
- package/dist/tagada-headless.min.js +0 -8
- package/dist/tagada-headless.min.js.map +0 -7
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import type { CheckoutSession, LineItem, ShippingRate, Address, CheckoutCustomer } from '../../core/types.js';
|
|
2
|
-
export interface UseCheckoutReturn {
|
|
3
|
-
session: CheckoutSession | null;
|
|
4
|
-
isLoading: boolean;
|
|
5
|
-
error: Error | null;
|
|
6
|
-
/** Reload the session from the server. */
|
|
7
|
-
refresh: () => Promise<void>;
|
|
8
|
-
/** Create a new checkout session (auto-loads it after creation). */
|
|
9
|
-
createSession: (opts: {
|
|
10
|
-
items: LineItem[];
|
|
11
|
-
currency?: string;
|
|
12
|
-
returnUrl?: string;
|
|
13
|
-
customerEmail?: string;
|
|
14
|
-
}) => Promise<void>;
|
|
15
|
-
/** Replace cart items. */
|
|
16
|
-
updateCart: (items: LineItem[]) => Promise<void>;
|
|
17
|
-
/** Update customer info on the session. */
|
|
18
|
-
updateCustomer: (customer: Partial<CheckoutCustomer>) => Promise<void>;
|
|
19
|
-
/** Update address on the session. */
|
|
20
|
-
updateAddress: (addresses: {
|
|
21
|
-
shippingAddress?: Address;
|
|
22
|
-
billingAddress?: Address;
|
|
23
|
-
}) => Promise<void>;
|
|
24
|
-
/**
|
|
25
|
-
* Update customer info AND address in a single call. Prefer this over
|
|
26
|
-
* calling `updateCustomer` then `updateAddress` separately — the
|
|
27
|
-
* underlying server action is destructive on partial saves
|
|
28
|
-
* (`customers.firstName = shippingAddress.firstName ?? null`), so
|
|
29
|
-
* sending the address without the customer name will silently wipe
|
|
30
|
-
* `customer.firstName` / `customer.lastName` from the session.
|
|
31
|
-
*/
|
|
32
|
-
updateCustomerAndAddress: (data: {
|
|
33
|
-
customer: Partial<CheckoutCustomer>;
|
|
34
|
-
shippingAddress?: Address;
|
|
35
|
-
billingAddress?: Address;
|
|
36
|
-
}) => Promise<void>;
|
|
37
|
-
/** Apply a promo code. */
|
|
38
|
-
applyPromo: (code: string) => Promise<void>;
|
|
39
|
-
/** Remove the applied promo code. */
|
|
40
|
-
removePromo: (promotionId?: string) => Promise<void>;
|
|
41
|
-
/** Fetch shipping rates. */
|
|
42
|
-
getShippingRates: () => Promise<ShippingRate[]>;
|
|
43
|
-
/** Select a shipping rate. */
|
|
44
|
-
selectShippingRate: (rateId: string) => Promise<void>;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* React hook for checkout session management.
|
|
48
|
-
*
|
|
49
|
-
* @param checkoutToken - The checkout token from the URL (e.g. `?checkoutToken=xxx`).
|
|
50
|
-
* @param sessionToken - Optional JWT session token (from URL param `token`).
|
|
51
|
-
*
|
|
52
|
-
* @example
|
|
53
|
-
* ```tsx
|
|
54
|
-
* const { session, isLoading, applyPromo, createSession } = useCheckout(checkoutToken, sessionToken);
|
|
55
|
-
* ```
|
|
56
|
-
*/
|
|
57
|
-
export declare function useCheckout(checkoutToken: string | null | undefined, sessionToken?: string): UseCheckoutReturn;
|
|
58
|
-
//# sourceMappingURL=useCheckout.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useCheckout.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useCheckout.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE9G,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,oEAAoE;IACpE,aAAa,EAAE,CAAC,IAAI,EAAE;QACpB,KAAK,EAAE,QAAQ,EAAE,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,0BAA0B;IAC1B,UAAU,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,2CAA2C;IAC3C,cAAc,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,qCAAqC;IACrC,aAAa,EAAE,CAAC,SAAS,EAAE;QAAE,eAAe,CAAC,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrG;;;;;;;OAOG;IACH,wBAAwB,EAAE,CAAC,IAAI,EAAE;QAC/B,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;QACpC,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,0BAA0B;IAC1B,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,qCAAqC;IACrC,WAAW,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,4BAA4B;IAC5B,gBAAgB,EAAE,MAAM,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAChD,8BAA8B;IAC9B,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACzB,aAAa,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACxC,YAAY,CAAC,EAAE,MAAM,GACpB,iBAAiB,CAyJnB"}
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
import { useState, useEffect, useCallback } from 'react';
|
|
2
|
-
import { useHeadlessClient } from '../provider.js';
|
|
3
|
-
/**
|
|
4
|
-
* React hook for checkout session management.
|
|
5
|
-
*
|
|
6
|
-
* @param checkoutToken - The checkout token from the URL (e.g. `?checkoutToken=xxx`).
|
|
7
|
-
* @param sessionToken - Optional JWT session token (from URL param `token`).
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```tsx
|
|
11
|
-
* const { session, isLoading, applyPromo, createSession } = useCheckout(checkoutToken, sessionToken);
|
|
12
|
-
* ```
|
|
13
|
-
*/
|
|
14
|
-
export function useCheckout(checkoutToken, sessionToken) {
|
|
15
|
-
const client = useHeadlessClient();
|
|
16
|
-
const [session, setSession] = useState(null);
|
|
17
|
-
const [isLoading, setIsLoading] = useState(false);
|
|
18
|
-
const [error, setError] = useState(null);
|
|
19
|
-
const loadSession = useCallback(async () => {
|
|
20
|
-
if (!checkoutToken)
|
|
21
|
-
return;
|
|
22
|
-
setIsLoading(true);
|
|
23
|
-
setError(null);
|
|
24
|
-
try {
|
|
25
|
-
const s = await client.checkout.loadSession(checkoutToken, sessionToken);
|
|
26
|
-
setSession(s);
|
|
27
|
-
}
|
|
28
|
-
catch (err) {
|
|
29
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
30
|
-
}
|
|
31
|
-
finally {
|
|
32
|
-
setIsLoading(false);
|
|
33
|
-
}
|
|
34
|
-
}, [client, checkoutToken, sessionToken]);
|
|
35
|
-
useEffect(() => {
|
|
36
|
-
loadSession();
|
|
37
|
-
}, [loadSession]);
|
|
38
|
-
const createSession = useCallback(async (opts) => {
|
|
39
|
-
setIsLoading(true);
|
|
40
|
-
setError(null);
|
|
41
|
-
try {
|
|
42
|
-
const result = await client.checkout.createSession(opts);
|
|
43
|
-
const newUrl = new URL(window.location.href);
|
|
44
|
-
newUrl.searchParams.set('checkoutToken', result.checkoutToken);
|
|
45
|
-
newUrl.searchParams.set('token', result.sessionToken);
|
|
46
|
-
window.history.replaceState({}, '', newUrl.toString());
|
|
47
|
-
const s = await client.checkout.loadSession(result.checkoutToken, result.sessionToken);
|
|
48
|
-
setSession(s);
|
|
49
|
-
}
|
|
50
|
-
catch (err) {
|
|
51
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
52
|
-
}
|
|
53
|
-
finally {
|
|
54
|
-
setIsLoading(false);
|
|
55
|
-
}
|
|
56
|
-
}, [client]);
|
|
57
|
-
const updateCart = useCallback(async (items) => {
|
|
58
|
-
if (!session)
|
|
59
|
-
return;
|
|
60
|
-
// `updateCart` returns mutation stats (counts), not a CheckoutSession.
|
|
61
|
-
// We previously assigned that result into `setSession`, which silently
|
|
62
|
-
// replaced the session with `{ success, updated, created, total }`.
|
|
63
|
-
// Mirror the same pattern as `updateAddress`: mutate, then reload.
|
|
64
|
-
await client.checkout.updateCart(session.id, items);
|
|
65
|
-
await loadSession();
|
|
66
|
-
}, [client, session, loadSession]);
|
|
67
|
-
const updateCustomer = useCallback(async (customer) => {
|
|
68
|
-
if (!session)
|
|
69
|
-
return;
|
|
70
|
-
await client.checkout.updateCustomer(session.id, customer);
|
|
71
|
-
}, [client, session]);
|
|
72
|
-
const updateAddress = useCallback(async (addresses) => {
|
|
73
|
-
if (!session)
|
|
74
|
-
return;
|
|
75
|
-
setIsLoading(true);
|
|
76
|
-
try {
|
|
77
|
-
await client.checkout.updateAddress(session.id, addresses);
|
|
78
|
-
await loadSession();
|
|
79
|
-
}
|
|
80
|
-
catch (err) {
|
|
81
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
82
|
-
}
|
|
83
|
-
finally {
|
|
84
|
-
setIsLoading(false);
|
|
85
|
-
}
|
|
86
|
-
}, [client, session, loadSession]);
|
|
87
|
-
const updateCustomerAndAddress = useCallback(async (data) => {
|
|
88
|
-
if (!session)
|
|
89
|
-
return;
|
|
90
|
-
setIsLoading(true);
|
|
91
|
-
try {
|
|
92
|
-
await client.checkout.updateCustomerAndAddress(session.id, data);
|
|
93
|
-
await loadSession();
|
|
94
|
-
}
|
|
95
|
-
catch (err) {
|
|
96
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
97
|
-
}
|
|
98
|
-
finally {
|
|
99
|
-
setIsLoading(false);
|
|
100
|
-
}
|
|
101
|
-
}, [client, session, loadSession]);
|
|
102
|
-
const applyPromo = useCallback(async (code) => {
|
|
103
|
-
if (!session)
|
|
104
|
-
return;
|
|
105
|
-
setIsLoading(true);
|
|
106
|
-
try {
|
|
107
|
-
await client.checkout.applyPromoCode(session.id, code);
|
|
108
|
-
await loadSession();
|
|
109
|
-
}
|
|
110
|
-
catch (err) {
|
|
111
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
112
|
-
}
|
|
113
|
-
finally {
|
|
114
|
-
setIsLoading(false);
|
|
115
|
-
}
|
|
116
|
-
}, [client, session, loadSession]);
|
|
117
|
-
const removePromo = useCallback(async (promotionId) => {
|
|
118
|
-
if (!session)
|
|
119
|
-
return;
|
|
120
|
-
setIsLoading(true);
|
|
121
|
-
try {
|
|
122
|
-
await client.checkout.removePromoCode(session.id, promotionId);
|
|
123
|
-
await loadSession();
|
|
124
|
-
}
|
|
125
|
-
catch (err) {
|
|
126
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
127
|
-
}
|
|
128
|
-
finally {
|
|
129
|
-
setIsLoading(false);
|
|
130
|
-
}
|
|
131
|
-
}, [client, session, loadSession]);
|
|
132
|
-
const getShippingRates = useCallback(async () => {
|
|
133
|
-
if (!session)
|
|
134
|
-
return [];
|
|
135
|
-
return client.checkout.getShippingRates(session.id);
|
|
136
|
-
}, [client, session]);
|
|
137
|
-
const selectShippingRate = useCallback(async (rateId) => {
|
|
138
|
-
if (!session)
|
|
139
|
-
return;
|
|
140
|
-
setIsLoading(true);
|
|
141
|
-
try {
|
|
142
|
-
await client.checkout.selectShippingRate(session.id, rateId);
|
|
143
|
-
await loadSession();
|
|
144
|
-
}
|
|
145
|
-
catch (err) {
|
|
146
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
147
|
-
}
|
|
148
|
-
finally {
|
|
149
|
-
setIsLoading(false);
|
|
150
|
-
}
|
|
151
|
-
}, [client, session, loadSession]);
|
|
152
|
-
return {
|
|
153
|
-
session,
|
|
154
|
-
isLoading,
|
|
155
|
-
error,
|
|
156
|
-
refresh: loadSession,
|
|
157
|
-
createSession,
|
|
158
|
-
updateCart,
|
|
159
|
-
updateCustomer,
|
|
160
|
-
updateAddress,
|
|
161
|
-
updateCustomerAndAddress,
|
|
162
|
-
applyPromo,
|
|
163
|
-
removePromo,
|
|
164
|
-
getShippingRates,
|
|
165
|
-
selectShippingRate,
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
//# sourceMappingURL=useCheckout.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useCheckout.js","sourceRoot":"","sources":["../../../src/react/hooks/useCheckout.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import type { Customer, Order, Subscription } from '../../core/types.js';
|
|
2
|
-
export interface UseCustomerReturn {
|
|
3
|
-
customer: Customer | null;
|
|
4
|
-
orders: Order[];
|
|
5
|
-
subscriptions: Subscription[];
|
|
6
|
-
isLoading: boolean;
|
|
7
|
-
error: Error | null;
|
|
8
|
-
/** Load customer profile by ID. */
|
|
9
|
-
loadCustomer: (customerId: string) => Promise<void>;
|
|
10
|
-
/** Load customer orders. */
|
|
11
|
-
loadOrders: (customerId: string) => Promise<void>;
|
|
12
|
-
/** Load customer subscriptions. */
|
|
13
|
-
loadSubscriptions: (customerId: string) => Promise<void>;
|
|
14
|
-
/** Update customer profile. */
|
|
15
|
-
updateProfile: (customerId: string, data: Partial<Pick<Customer, 'email' | 'firstName' | 'lastName' | 'phone'>>) => Promise<void>;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* React hook for customer data -- profile, orders, subscriptions.
|
|
19
|
-
*
|
|
20
|
-
* @param customerId - Auto-loads the customer profile when provided.
|
|
21
|
-
*
|
|
22
|
-
* @example
|
|
23
|
-
* ```tsx
|
|
24
|
-
* const { customer, orders, loadOrders } = useCustomer(session?.customer?.id);
|
|
25
|
-
* ```
|
|
26
|
-
*/
|
|
27
|
-
export declare function useCustomer(customerId?: string | null): UseCustomerReturn;
|
|
28
|
-
//# sourceMappingURL=useCustomer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useCustomer.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useCustomer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,mCAAmC;IACnC,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,4BAA4B;IAC5B,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,mCAAmC;IACnC,iBAAiB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,+BAA+B;IAC/B,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnI;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,iBAAiB,CAkEzE"}
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { useState, useEffect, useCallback } from 'react';
|
|
2
|
-
import { useHeadlessClient } from '../provider.js';
|
|
3
|
-
/**
|
|
4
|
-
* React hook for customer data -- profile, orders, subscriptions.
|
|
5
|
-
*
|
|
6
|
-
* @param customerId - Auto-loads the customer profile when provided.
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* ```tsx
|
|
10
|
-
* const { customer, orders, loadOrders } = useCustomer(session?.customer?.id);
|
|
11
|
-
* ```
|
|
12
|
-
*/
|
|
13
|
-
export function useCustomer(customerId) {
|
|
14
|
-
const client = useHeadlessClient();
|
|
15
|
-
const [customer, setCustomer] = useState(null);
|
|
16
|
-
const [orders, setOrders] = useState([]);
|
|
17
|
-
const [subscriptions, setSubscriptions] = useState([]);
|
|
18
|
-
const [isLoading, setIsLoading] = useState(false);
|
|
19
|
-
const [error, setError] = useState(null);
|
|
20
|
-
const loadCustomer = useCallback(async (id) => {
|
|
21
|
-
setIsLoading(true);
|
|
22
|
-
setError(null);
|
|
23
|
-
try {
|
|
24
|
-
const c = await client.customer.getProfile(id);
|
|
25
|
-
setCustomer(c);
|
|
26
|
-
}
|
|
27
|
-
catch (err) {
|
|
28
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
29
|
-
}
|
|
30
|
-
finally {
|
|
31
|
-
setIsLoading(false);
|
|
32
|
-
}
|
|
33
|
-
}, [client]);
|
|
34
|
-
const loadOrders = useCallback(async (id) => {
|
|
35
|
-
try {
|
|
36
|
-
const res = await client.customer.getOrders(id);
|
|
37
|
-
setOrders(res.orders);
|
|
38
|
-
}
|
|
39
|
-
catch (err) {
|
|
40
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
41
|
-
}
|
|
42
|
-
}, [client]);
|
|
43
|
-
const loadSubscriptions = useCallback(async (id) => {
|
|
44
|
-
try {
|
|
45
|
-
const subs = await client.customer.getSubscriptions(id);
|
|
46
|
-
setSubscriptions(subs);
|
|
47
|
-
}
|
|
48
|
-
catch (err) {
|
|
49
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
50
|
-
}
|
|
51
|
-
}, [client]);
|
|
52
|
-
const updateProfile = useCallback(async (id, data) => {
|
|
53
|
-
try {
|
|
54
|
-
const updated = await client.customer.updateProfile(id, data);
|
|
55
|
-
setCustomer(updated);
|
|
56
|
-
}
|
|
57
|
-
catch (err) {
|
|
58
|
-
setError(err instanceof Error ? err : new Error(String(err)));
|
|
59
|
-
}
|
|
60
|
-
}, [client]);
|
|
61
|
-
useEffect(() => {
|
|
62
|
-
if (customerId)
|
|
63
|
-
loadCustomer(customerId);
|
|
64
|
-
}, [customerId, loadCustomer]);
|
|
65
|
-
return {
|
|
66
|
-
customer,
|
|
67
|
-
orders,
|
|
68
|
-
subscriptions,
|
|
69
|
-
isLoading,
|
|
70
|
-
error,
|
|
71
|
-
loadCustomer,
|
|
72
|
-
loadOrders,
|
|
73
|
-
loadSubscriptions,
|
|
74
|
-
updateProfile,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
//# sourceMappingURL=useCustomer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useCustomer.js","sourceRoot":"","sources":["../../../src/react/hooks/useCustomer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* React hook for Google Places Autocomplete — handles script injection,
|
|
3
|
-
* debounced prediction search, place detail fetching, and address extraction.
|
|
4
|
-
*/
|
|
5
|
-
import { type GooglePrediction, type GooglePlaceDetails, type ExtractedAddress, type FormattedAddress } from '../../core/helpers/autocomplete.js';
|
|
6
|
-
export type { GooglePrediction, GooglePlaceDetails, ExtractedAddress, FormattedAddress };
|
|
7
|
-
export interface UseGoogleAutocompleteOptions {
|
|
8
|
-
apiKey: string;
|
|
9
|
-
language?: string;
|
|
10
|
-
region?: string;
|
|
11
|
-
version?: string;
|
|
12
|
-
/** Defer script loading until searchPlaces() is first called. Default: false. */
|
|
13
|
-
defer?: boolean;
|
|
14
|
-
}
|
|
15
|
-
export interface UseGoogleAutocompleteReturn {
|
|
16
|
-
predictions: GooglePrediction[];
|
|
17
|
-
isLoading: boolean;
|
|
18
|
-
isScriptLoaded: boolean;
|
|
19
|
-
searchPlaces: (input: string, countryRestriction?: string) => void;
|
|
20
|
-
getPlaceDetails: (placeId: string) => Promise<GooglePlaceDetails | null>;
|
|
21
|
-
extractAddressComponents: (place: GooglePlaceDetails) => ExtractedAddress;
|
|
22
|
-
extractFormattedAddress: (place: GooglePlaceDetails) => FormattedAddress;
|
|
23
|
-
clearPredictions: () => void;
|
|
24
|
-
}
|
|
25
|
-
export declare function useGoogleAutocomplete(options: UseGoogleAutocompleteOptions): UseGoogleAutocompleteReturn;
|
|
26
|
-
//# sourceMappingURL=useGoogleAutocomplete.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useGoogleAutocomplete.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useGoogleAutocomplete.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,oCAAoC,CAAC;AAE5C,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;AAEzF,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnE,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IACzE,wBAAwB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,gBAAgB,CAAC;IAC1E,uBAAuB,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,gBAAgB,CAAC;IACzE,gBAAgB,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,GAAG,2BAA2B,CA8ExG"}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* React hook for Google Places Autocomplete — handles script injection,
|
|
3
|
-
* debounced prediction search, place detail fetching, and address extraction.
|
|
4
|
-
*/
|
|
5
|
-
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
6
|
-
import { GoogleAutocompleteCore, loadGoogleMapsScript, } from '../../core/helpers/autocomplete.js';
|
|
7
|
-
export function useGoogleAutocomplete(options) {
|
|
8
|
-
const { apiKey, language, region, version, defer = false } = options;
|
|
9
|
-
const [predictions, setPredictions] = useState([]);
|
|
10
|
-
const [isLoading, setIsLoading] = useState(false);
|
|
11
|
-
const [isScriptLoaded, setIsScriptLoaded] = useState(false);
|
|
12
|
-
const debounceRef = useRef(null);
|
|
13
|
-
const pendingRef = useRef(null);
|
|
14
|
-
const inject = useCallback(() => {
|
|
15
|
-
loadGoogleMapsScript(apiKey, { language, region, version }).then(() => setIsScriptLoaded(true));
|
|
16
|
-
}, [apiKey, language, region, version]);
|
|
17
|
-
// Eager load unless defer
|
|
18
|
-
useEffect(() => {
|
|
19
|
-
if (!apiKey || defer)
|
|
20
|
-
return;
|
|
21
|
-
inject();
|
|
22
|
-
}, [apiKey, defer, inject]);
|
|
23
|
-
// Replay pending search after deferred load
|
|
24
|
-
useEffect(() => {
|
|
25
|
-
if (isScriptLoaded && pendingRef.current) {
|
|
26
|
-
const { input, country } = pendingRef.current;
|
|
27
|
-
pendingRef.current = null;
|
|
28
|
-
doSearch(input, country);
|
|
29
|
-
}
|
|
30
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
31
|
-
}, [isScriptLoaded]);
|
|
32
|
-
const doSearch = useCallback((input, countryRestriction) => {
|
|
33
|
-
if (!isScriptLoaded) {
|
|
34
|
-
if (defer) {
|
|
35
|
-
pendingRef.current = { input, country: countryRestriction };
|
|
36
|
-
inject();
|
|
37
|
-
}
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
if (input.length < 3) {
|
|
41
|
-
setPredictions([]);
|
|
42
|
-
return;
|
|
43
|
-
}
|
|
44
|
-
if (debounceRef.current)
|
|
45
|
-
clearTimeout(debounceRef.current);
|
|
46
|
-
debounceRef.current = setTimeout(async () => {
|
|
47
|
-
setIsLoading(true);
|
|
48
|
-
const results = await GoogleAutocompleteCore.searchPlaces(input, {
|
|
49
|
-
componentRestrictions: countryRestriction ? { country: countryRestriction.toLowerCase() } : undefined,
|
|
50
|
-
});
|
|
51
|
-
setPredictions(results);
|
|
52
|
-
setIsLoading(false);
|
|
53
|
-
}, 300);
|
|
54
|
-
}, [isScriptLoaded, defer, inject]);
|
|
55
|
-
const getPlaceDetails = useCallback((placeId) => GoogleAutocompleteCore.getPlaceDetails(placeId), []);
|
|
56
|
-
const extractAddressComponents = useCallback((place) => GoogleAutocompleteCore.extractAddressComponents(place), []);
|
|
57
|
-
const extractFormattedAddress = useCallback((place) => GoogleAutocompleteCore.extractFormattedAddress(place), []);
|
|
58
|
-
const clearPredictions = useCallback(() => setPredictions([]), []);
|
|
59
|
-
return {
|
|
60
|
-
predictions,
|
|
61
|
-
isLoading,
|
|
62
|
-
isScriptLoaded,
|
|
63
|
-
searchPlaces: doSearch,
|
|
64
|
-
getPlaceDetails,
|
|
65
|
-
extractAddressComponents,
|
|
66
|
-
extractFormattedAddress,
|
|
67
|
-
clearPredictions,
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
//# sourceMappingURL=useGoogleAutocomplete.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useGoogleAutocomplete.js","sourceRoot":"","sources":["../../../src/react/hooks/useGoogleAutocomplete.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* React hooks for ISO country/region data — CDN-backed,
|
|
3
|
-
* with Google Places → ISO region mapping.
|
|
4
|
-
*/
|
|
5
|
-
import { type ISOCountry, type ISORegion, type SupportedLanguage } from '../../core/helpers/countries.js';
|
|
6
|
-
export type { ISOCountry, ISORegion, SupportedLanguage };
|
|
7
|
-
export interface UseISODataReturn {
|
|
8
|
-
countries: Record<string, ISOCountry>;
|
|
9
|
-
getRegions: (countryCode: string) => ISORegion[];
|
|
10
|
-
findRegion: (countryCode: string, regionCode: string) => ISORegion | null;
|
|
11
|
-
mapGoogleToISO: (googleState: string, googleStateLong: string, countryCode: string) => ISORegion | null;
|
|
12
|
-
isLoaded: boolean;
|
|
13
|
-
}
|
|
14
|
-
export declare function useISOData(language?: SupportedLanguage): UseISODataReturn;
|
|
15
|
-
export declare function useCountryOptions(language?: SupportedLanguage): Array<{
|
|
16
|
-
value: string;
|
|
17
|
-
label: string;
|
|
18
|
-
}>;
|
|
19
|
-
export declare function useRegionOptions(countryCode: string, language?: SupportedLanguage): Array<{
|
|
20
|
-
value: string;
|
|
21
|
-
label: string;
|
|
22
|
-
}>;
|
|
23
|
-
//# sourceMappingURL=useISOData.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useISOData.d.ts","sourceRoot":"","sources":["../../../src/react/hooks/useISOData.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AAGzC,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;AAMzD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACtC,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;IACjD,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,SAAS,GAAG,IAAI,CAAC;IAC1E,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,SAAS,GAAG,IAAI,CAAC;IACxG,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,UAAU,CAAC,QAAQ,GAAE,iBAAwB,GAAG,gBAAgB,CA8B/E;AAMD,wBAAgB,iBAAiB,CAAC,QAAQ,GAAE,iBAAwB,GAAG,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAQ7G;AAMD,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,iBAAwB,GACjC,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAQzC"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* React hooks for ISO country/region data — CDN-backed,
|
|
3
|
-
* with Google Places → ISO region mapping.
|
|
4
|
-
*/
|
|
5
|
-
import { useEffect, useMemo, useState } from 'react';
|
|
6
|
-
import { ISODataCore, } from '../../core/helpers/countries.js';
|
|
7
|
-
import { ensureGeoDataLoaded, isLanguageLoaded } from '../../core/helpers/iso3166.js';
|
|
8
|
-
export function useISOData(language = 'en') {
|
|
9
|
-
const [isLoaded, setIsLoaded] = useState(isLanguageLoaded(language));
|
|
10
|
-
useEffect(() => {
|
|
11
|
-
let cancelled = false;
|
|
12
|
-
ensureGeoDataLoaded(language)
|
|
13
|
-
.then(() => { if (!cancelled)
|
|
14
|
-
setIsLoaded(true); })
|
|
15
|
-
.catch((err) => console.error('[headless-sdk] Failed to load geodata:', err));
|
|
16
|
-
return () => { cancelled = true; };
|
|
17
|
-
}, [language]);
|
|
18
|
-
return useMemo(() => {
|
|
19
|
-
if (!isLoaded) {
|
|
20
|
-
return {
|
|
21
|
-
countries: {},
|
|
22
|
-
getRegions: () => [],
|
|
23
|
-
findRegion: () => null,
|
|
24
|
-
mapGoogleToISO: () => null,
|
|
25
|
-
isLoaded: false,
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
return {
|
|
29
|
-
countries: ISODataCore.getCountries(language),
|
|
30
|
-
getRegions: (cc) => ISODataCore.getRegions(cc, language),
|
|
31
|
-
findRegion: (cc, rc) => ISODataCore.findRegion(cc, rc, language),
|
|
32
|
-
mapGoogleToISO: (gs, gsl, cc) => ISODataCore.mapGoogleToISO(gs, gsl, cc, language),
|
|
33
|
-
isLoaded: true,
|
|
34
|
-
};
|
|
35
|
-
}, [language, isLoaded]);
|
|
36
|
-
}
|
|
37
|
-
// ---------------------------------------------------------------------------
|
|
38
|
-
// useCountryOptions — countries as select options
|
|
39
|
-
// ---------------------------------------------------------------------------
|
|
40
|
-
export function useCountryOptions(language = 'en') {
|
|
41
|
-
const { countries, isLoaded } = useISOData(language);
|
|
42
|
-
return useMemo(() => {
|
|
43
|
-
if (!isLoaded)
|
|
44
|
-
return [];
|
|
45
|
-
return Object.values(countries)
|
|
46
|
-
.map((c) => ({ value: c.iso, label: c.name }))
|
|
47
|
-
.sort((a, b) => a.label.localeCompare(b.label));
|
|
48
|
-
}, [countries, isLoaded]);
|
|
49
|
-
}
|
|
50
|
-
// ---------------------------------------------------------------------------
|
|
51
|
-
// useRegionOptions — regions/states for a country as select options
|
|
52
|
-
// ---------------------------------------------------------------------------
|
|
53
|
-
export function useRegionOptions(countryCode, language = 'en') {
|
|
54
|
-
const { getRegions, isLoaded } = useISOData(language);
|
|
55
|
-
return useMemo(() => {
|
|
56
|
-
if (!isLoaded || !countryCode)
|
|
57
|
-
return [];
|
|
58
|
-
return getRegions(countryCode)
|
|
59
|
-
.map((r) => ({ value: r.iso, label: r.name }))
|
|
60
|
-
.sort((a, b) => a.label.localeCompare(b.label));
|
|
61
|
-
}, [countryCode, getRegions, isLoaded]);
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=useISOData.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useISOData.js","sourceRoot":"","sources":["../../../src/react/hooks/useISOData.ts"],"names":[],"mappings":"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"}
|