@cimplify/sdk 0.3.6 → 0.4.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/dist/client-Ug3b8v1t.d.mts +3166 -0
- package/dist/client-Ug3b8v1t.d.ts +3166 -0
- package/dist/index.d.mts +3 -2948
- package/dist/index.d.ts +3 -2948
- package/dist/index.js +325 -0
- package/dist/index.mjs +318 -1
- package/dist/react.d.mts +59 -0
- package/dist/react.d.ts +59 -0
- package/dist/react.js +144 -0
- package/dist/react.mjs +136 -0
- package/package.json +16 -1
package/dist/react.mjs
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { createContext, useContext, useState, useEffect, useRef, useCallback } from 'react';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
|
|
4
|
+
// src/react/index.tsx
|
|
5
|
+
|
|
6
|
+
// src/types/elements.ts
|
|
7
|
+
var ELEMENT_TYPES = {
|
|
8
|
+
AUTH: "auth",
|
|
9
|
+
ADDRESS: "address",
|
|
10
|
+
PAYMENT: "payment"
|
|
11
|
+
};
|
|
12
|
+
var EVENT_TYPES = {
|
|
13
|
+
READY: "ready",
|
|
14
|
+
AUTHENTICATED: "authenticated",
|
|
15
|
+
REQUIRES_OTP: "requires_otp",
|
|
16
|
+
ERROR: "error",
|
|
17
|
+
CHANGE: "change"};
|
|
18
|
+
var ElementsContext = createContext({
|
|
19
|
+
elements: null,
|
|
20
|
+
isReady: false
|
|
21
|
+
});
|
|
22
|
+
function useElements() {
|
|
23
|
+
return useContext(ElementsContext).elements;
|
|
24
|
+
}
|
|
25
|
+
function useElementsReady() {
|
|
26
|
+
return useContext(ElementsContext).isReady;
|
|
27
|
+
}
|
|
28
|
+
function ElementsProvider({
|
|
29
|
+
client,
|
|
30
|
+
businessId,
|
|
31
|
+
options,
|
|
32
|
+
children
|
|
33
|
+
}) {
|
|
34
|
+
const [elements, setElements] = useState(null);
|
|
35
|
+
const [isReady, setIsReady] = useState(false);
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
const instance = client.elements(businessId, options);
|
|
38
|
+
setElements(instance);
|
|
39
|
+
setIsReady(true);
|
|
40
|
+
return () => instance.destroy();
|
|
41
|
+
}, [client, businessId, options]);
|
|
42
|
+
return /* @__PURE__ */ jsx(ElementsContext.Provider, { value: { elements, isReady }, children });
|
|
43
|
+
}
|
|
44
|
+
function AuthElement({
|
|
45
|
+
className,
|
|
46
|
+
style,
|
|
47
|
+
prefillEmail,
|
|
48
|
+
onReady,
|
|
49
|
+
onAuthenticated,
|
|
50
|
+
onRequiresOtp,
|
|
51
|
+
onError
|
|
52
|
+
}) {
|
|
53
|
+
const containerRef = useRef(null);
|
|
54
|
+
const elementRef = useRef(null);
|
|
55
|
+
const elements = useElements();
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
if (!elements || !containerRef.current) return;
|
|
58
|
+
const element = elements.create(ELEMENT_TYPES.AUTH, { prefillEmail });
|
|
59
|
+
elementRef.current = element;
|
|
60
|
+
element.on(EVENT_TYPES.READY, () => onReady?.());
|
|
61
|
+
element.on(EVENT_TYPES.AUTHENTICATED, (data) => onAuthenticated?.(data));
|
|
62
|
+
element.on(EVENT_TYPES.REQUIRES_OTP, (data) => onRequiresOtp?.(data));
|
|
63
|
+
element.on(EVENT_TYPES.ERROR, (data) => onError?.(data));
|
|
64
|
+
element.mount(containerRef.current);
|
|
65
|
+
return () => element.destroy();
|
|
66
|
+
}, [elements, prefillEmail, onReady, onAuthenticated, onRequiresOtp, onError]);
|
|
67
|
+
return /* @__PURE__ */ jsx("div", { ref: containerRef, className, style });
|
|
68
|
+
}
|
|
69
|
+
function AddressElement({
|
|
70
|
+
className,
|
|
71
|
+
style,
|
|
72
|
+
mode = "shipping",
|
|
73
|
+
onReady,
|
|
74
|
+
onChange,
|
|
75
|
+
onError
|
|
76
|
+
}) {
|
|
77
|
+
const containerRef = useRef(null);
|
|
78
|
+
const elementRef = useRef(null);
|
|
79
|
+
const elements = useElements();
|
|
80
|
+
useEffect(() => {
|
|
81
|
+
if (!elements || !containerRef.current) return;
|
|
82
|
+
const element = elements.create(ELEMENT_TYPES.ADDRESS, { mode });
|
|
83
|
+
elementRef.current = element;
|
|
84
|
+
element.on(EVENT_TYPES.READY, () => onReady?.());
|
|
85
|
+
element.on(EVENT_TYPES.CHANGE, (data) => onChange?.(data));
|
|
86
|
+
element.on(EVENT_TYPES.ERROR, (data) => onError?.(data));
|
|
87
|
+
element.mount(containerRef.current);
|
|
88
|
+
return () => element.destroy();
|
|
89
|
+
}, [elements, mode, onReady, onChange, onError]);
|
|
90
|
+
return /* @__PURE__ */ jsx("div", { ref: containerRef, className, style });
|
|
91
|
+
}
|
|
92
|
+
function PaymentElement({
|
|
93
|
+
className,
|
|
94
|
+
style,
|
|
95
|
+
amount,
|
|
96
|
+
currency,
|
|
97
|
+
onReady,
|
|
98
|
+
onChange,
|
|
99
|
+
onError
|
|
100
|
+
}) {
|
|
101
|
+
const containerRef = useRef(null);
|
|
102
|
+
const elementRef = useRef(null);
|
|
103
|
+
const elements = useElements();
|
|
104
|
+
useEffect(() => {
|
|
105
|
+
if (!elements || !containerRef.current) return;
|
|
106
|
+
const element = elements.create(ELEMENT_TYPES.PAYMENT, { amount, currency });
|
|
107
|
+
elementRef.current = element;
|
|
108
|
+
element.on(EVENT_TYPES.READY, () => onReady?.());
|
|
109
|
+
element.on(EVENT_TYPES.CHANGE, (data) => onChange?.(data));
|
|
110
|
+
element.on(EVENT_TYPES.ERROR, (data) => onError?.(data));
|
|
111
|
+
element.mount(containerRef.current);
|
|
112
|
+
return () => element.destroy();
|
|
113
|
+
}, [elements, amount, currency, onReady, onChange, onError]);
|
|
114
|
+
return /* @__PURE__ */ jsx("div", { ref: containerRef, className, style });
|
|
115
|
+
}
|
|
116
|
+
function useCheckout() {
|
|
117
|
+
const elements = useElements();
|
|
118
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
119
|
+
const submit = useCallback(
|
|
120
|
+
async (data) => {
|
|
121
|
+
if (!elements) {
|
|
122
|
+
return { success: false, error: { code: "NO_ELEMENTS", message: "Elements not initialized" } };
|
|
123
|
+
}
|
|
124
|
+
setIsLoading(true);
|
|
125
|
+
try {
|
|
126
|
+
return await elements.submitCheckout(data);
|
|
127
|
+
} finally {
|
|
128
|
+
setIsLoading(false);
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
[elements]
|
|
132
|
+
);
|
|
133
|
+
return { submit, isLoading };
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export { AddressElement, AuthElement, ElementsProvider, PaymentElement, useCheckout, useElements, useElementsReady };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cimplify/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Cimplify Commerce SDK for storefronts",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cimplify",
|
|
@@ -20,6 +20,11 @@
|
|
|
20
20
|
"types": "./dist/index.d.ts",
|
|
21
21
|
"import": "./dist/index.mjs",
|
|
22
22
|
"require": "./dist/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./react": {
|
|
25
|
+
"types": "./dist/react.d.ts",
|
|
26
|
+
"import": "./dist/react.mjs",
|
|
27
|
+
"require": "./dist/react.js"
|
|
23
28
|
}
|
|
24
29
|
},
|
|
25
30
|
"scripts": {
|
|
@@ -31,8 +36,18 @@
|
|
|
31
36
|
"format": "oxfmt . --write",
|
|
32
37
|
"format:check": "oxfmt . --check"
|
|
33
38
|
},
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"react": ">=17.0.0"
|
|
41
|
+
},
|
|
42
|
+
"peerDependenciesMeta": {
|
|
43
|
+
"react": {
|
|
44
|
+
"optional": true
|
|
45
|
+
}
|
|
46
|
+
},
|
|
34
47
|
"devDependencies": {
|
|
48
|
+
"@types/react": "^19.2.7",
|
|
35
49
|
"@typescript/native-preview": "^7.0.0-dev.20260109.1",
|
|
50
|
+
"react": "^19.2.3",
|
|
36
51
|
"tsup": "^8.5.1",
|
|
37
52
|
"typescript": "5.9.3"
|
|
38
53
|
}
|