@crossmint/client-sdk-react-ui 0.0.5-alpha.1 → 0.0.8-alpha.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/LICENSE +201 -201
- package/README.md +1 -1
- package/lib/cjs/CrossMintButton.d.ts +16 -14
- package/lib/cjs/CrossMintButton.js +59 -54
- package/lib/cjs/CrossMintButton.js.map +1 -1
- package/lib/cjs/CrossMintModal.d.ts +6 -6
- package/lib/cjs/CrossMintModal.js +54 -54
- package/lib/cjs/CrossMintModalProvider.d.ts +6 -6
- package/lib/cjs/CrossMintModalProvider.js +47 -47
- package/lib/cjs/CrossMintModalProvider.js.map +1 -1
- package/lib/cjs/CrossMintPopupProvider.d.ts +6 -6
- package/lib/cjs/CrossMintPopupProvider.js +69 -68
- package/lib/cjs/CrossMintPopupProvider.js.map +1 -1
- package/lib/cjs/CrossMintProvider.d.ts +9 -7
- package/lib/cjs/CrossMintProvider.js +51 -49
- package/lib/cjs/CrossMintProvider.js.map +1 -1
- package/lib/cjs/CrossMintStatusButton.d.ts +10 -0
- package/lib/cjs/CrossMintStatusButton.js +66 -0
- package/lib/cjs/CrossMintStatusButton.js.map +1 -0
- package/lib/cjs/CrossMintStatusProvider.d.ts +7 -0
- package/lib/cjs/CrossMintStatusProvider.js +65 -0
- package/lib/cjs/CrossMintStatusProvider.js.map +1 -0
- package/lib/cjs/index.d.ts +7 -5
- package/lib/cjs/index.js +19 -17
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/useCrossMintModal.d.ts +7 -7
- package/lib/cjs/useCrossMintModal.js +9 -9
- package/lib/cjs/useCrossMintPopup.d.ts +8 -8
- package/lib/cjs/useCrossMintPopup.js +9 -9
- package/lib/cjs/useCrossMintPopup.js.map +1 -1
- package/lib/cjs/useCrossMintStatus.d.ts +15 -0
- package/lib/cjs/useCrossMintStatus.js +18 -0
- package/lib/cjs/useCrossMintStatus.js.map +1 -0
- package/lib/esm/CrossMintButton.d.ts +16 -14
- package/lib/esm/CrossMintButton.js +24 -19
- package/lib/esm/CrossMintButton.js.map +1 -1
- package/lib/esm/CrossMintModal.d.ts +6 -6
- package/lib/esm/CrossMintModal.js +31 -31
- package/lib/esm/CrossMintModalProvider.d.ts +6 -6
- package/lib/esm/CrossMintModalProvider.js +12 -12
- package/lib/esm/CrossMintModalProvider.js.map +1 -1
- package/lib/esm/CrossMintPopupProvider.d.ts +6 -6
- package/lib/esm/CrossMintPopupProvider.js +46 -45
- package/lib/esm/CrossMintPopupProvider.js.map +1 -1
- package/lib/esm/CrossMintProvider.d.ts +9 -7
- package/lib/esm/CrossMintProvider.js +16 -14
- package/lib/esm/CrossMintProvider.js.map +1 -1
- package/lib/esm/CrossMintStatusButton.d.ts +10 -0
- package/lib/esm/CrossMintStatusButton.js +31 -0
- package/lib/esm/CrossMintStatusButton.js.map +1 -0
- package/lib/esm/CrossMintStatusProvider.d.ts +7 -0
- package/lib/esm/CrossMintStatusProvider.js +31 -0
- package/lib/esm/CrossMintStatusProvider.js.map +1 -0
- package/lib/esm/index.d.ts +7 -5
- package/lib/esm/index.js +7 -5
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/useCrossMintModal.d.ts +7 -7
- package/lib/esm/useCrossMintModal.js +5 -5
- package/lib/esm/useCrossMintPopup.d.ts +8 -8
- package/lib/esm/useCrossMintPopup.js +5 -5
- package/lib/esm/useCrossMintPopup.js.map +1 -1
- package/lib/esm/useCrossMintStatus.d.ts +15 -0
- package/lib/esm/useCrossMintStatus.js +14 -0
- package/lib/esm/useCrossMintStatus.js.map +1 -0
- package/package.json +3 -3
- package/src/CrossMintButton.tsx +14 -3
- package/src/CrossMintModal.tsx +54 -54
- package/src/CrossMintModalProvider.tsx +0 -1
- package/src/CrossMintPopupProvider.tsx +19 -13
- package/src/CrossMintProvider.tsx +28 -12
- package/src/CrossMintStatusButton.tsx +73 -0
- package/src/CrossMintStatusProvider.tsx +58 -0
- package/src/index.ts +2 -0
- package/src/useCrossMintModal.tsx +12 -12
- package/src/useCrossMintPopup.tsx +4 -2
- package/src/useCrossMintStatus.tsx +22 -0
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import React, { useState } from "react";
|
|
2
|
-
import { CrossMintModal } from "./CrossMintModal";
|
|
3
|
-
import { CrossMintPopupProvider } from "./CrossMintPopupProvider";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
import React, { useState } from "react";
|
|
2
|
+
import { CrossMintModal } from "./CrossMintModal";
|
|
3
|
+
import { CrossMintPopupProvider } from "./CrossMintPopupProvider";
|
|
4
|
+
import { CrossMintStatusProvider } from "./CrossMintStatusProvider";
|
|
5
|
+
import { CrossMintModalContext } from "./useCrossMintModal";
|
|
6
|
+
export const CrossMintProvider = ({ clientId, hideMintOnInactiveClient = false, development = false, children, ...props }) => {
|
|
7
|
+
const [visible, setVisible] = useState(false);
|
|
8
|
+
return (React.createElement(CrossMintStatusProvider, { clientId: clientId, hideMintOnInactiveClient: hideMintOnInactiveClient },
|
|
9
|
+
React.createElement(CrossMintModalContext.Provider, { value: {
|
|
10
|
+
visible,
|
|
11
|
+
setVisible,
|
|
12
|
+
} },
|
|
13
|
+
React.createElement(CrossMintPopupProvider, { development: development },
|
|
14
|
+
children,
|
|
15
|
+
visible && React.createElement(CrossMintModal, { ...props })))));
|
|
16
|
+
};
|
|
15
17
|
//# sourceMappingURL=CrossMintProvider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CrossMintProvider.js","sourceRoot":"","sources":["../../src/CrossMintProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAiB,QAAQ,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,cAAc,EAAuB,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"CrossMintProvider.js","sourceRoot":"","sources":["../../src/CrossMintProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAiB,QAAQ,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,cAAc,EAAuB,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAS5D,MAAM,CAAC,MAAM,iBAAiB,GAA+B,CAAC,EAC1D,QAAQ,EACR,wBAAwB,GAAG,KAAK,EAChC,WAAW,GAAG,KAAK,EACnB,QAAQ,EACR,GAAG,KAAK,EACX,EAAE,EAAE;IACD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,OAAO,CACH,oBAAC,uBAAuB,IAAC,QAAQ,EAAE,QAAQ,EAAE,wBAAwB,EAAE,wBAAwB;QAC3F,oBAAC,qBAAqB,CAAC,QAAQ,IAC3B,KAAK,EAAE;gBACH,OAAO;gBACP,UAAU;aACb;YAED,oBAAC,sBAAsB,IAAC,WAAW,EAAE,WAAW;gBAC3C,QAAQ;gBACR,OAAO,IAAI,oBAAC,cAAc,OAAK,KAAK,GAAI,CACpB,CACI,CACX,CAC7B,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { CSSProperties, FC, MouseEvent } from "react";
|
|
2
|
+
export interface StatusButtonProps {
|
|
3
|
+
className?: string;
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
onClick?: (e: MouseEvent<HTMLButtonElement>) => void;
|
|
6
|
+
style?: CSSProperties;
|
|
7
|
+
tabIndex?: number;
|
|
8
|
+
theme?: "light" | "dark";
|
|
9
|
+
}
|
|
10
|
+
export declare const CrossMintStatusButton: FC<StatusButtonProps>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React, { useMemo, useCallback } from "react";
|
|
2
|
+
import { OnboardingRequestStatusResponse, useCrossMintStatus } from "./useCrossMintStatus";
|
|
3
|
+
export const CrossMintStatusButton = ({ className, disabled, onClick, style, tabIndex, theme = "dark", ...props }) => {
|
|
4
|
+
const { status, clientId } = useCrossMintStatus();
|
|
5
|
+
const handleClick = useCallback((event) => {
|
|
6
|
+
if (onClick)
|
|
7
|
+
onClick(event);
|
|
8
|
+
if (status === OnboardingRequestStatusResponse.WAITING_SUBMISSION) {
|
|
9
|
+
window.open(`https://crossmint.io/developers/onboarding${clientId && `?clientId=${clientId}`}`, "_blank");
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
}, [status]);
|
|
13
|
+
const content = useMemo(() => {
|
|
14
|
+
switch (status) {
|
|
15
|
+
case OnboardingRequestStatusResponse.INVALID:
|
|
16
|
+
return React.createElement("p", null, "Invalid clientId");
|
|
17
|
+
case OnboardingRequestStatusResponse.WAITING_SUBMISSION:
|
|
18
|
+
return React.createElement("p", null, "Click here to setup CrossMint");
|
|
19
|
+
case OnboardingRequestStatusResponse.PENDING:
|
|
20
|
+
return React.createElement("p", null, "Your application is under review");
|
|
21
|
+
case OnboardingRequestStatusResponse.ACCEPTED:
|
|
22
|
+
return React.createElement("p", null, "You're good to go!");
|
|
23
|
+
case OnboardingRequestStatusResponse.REJECTED:
|
|
24
|
+
return React.createElement("p", null, "You're application was rejected");
|
|
25
|
+
}
|
|
26
|
+
}, [status]);
|
|
27
|
+
return (React.createElement("button", { className: `client-sdk-button-trigger client-sdk-button-trigger-${theme}`, disabled: status !== OnboardingRequestStatusResponse.WAITING_SUBMISSION, onClick: handleClick, style: { ...style }, tabIndex: tabIndex, ...props },
|
|
28
|
+
React.createElement("img", { className: "client-sdk-button-icon", src: "https://www.crossmint.io/assets/crossmint/logo.png", alt: "Crossmint logo" }),
|
|
29
|
+
content));
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=CrossMintStatusButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CrossMintStatusButton.js","sourceRoot":"","sources":["../../src/CrossMintStatusButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAoD,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACtG,OAAO,EAAE,+BAA+B,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAW3F,MAAM,CAAC,MAAM,qBAAqB,GAA0B,CAAC,EACzD,SAAS,EACT,QAAQ,EACR,OAAO,EACP,KAAK,EACL,QAAQ,EACR,KAAK,GAAG,MAAM,EACd,GAAG,KAAK,EACX,EAAE,EAAE;IACD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAElD,MAAM,WAAW,GAAyC,WAAW,CACjE,CAAC,KAAK,EAAE,EAAE;QACN,IAAI,OAAO;YAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAE5B,IAAI,MAAM,KAAK,+BAA+B,CAAC,kBAAkB,EAAE;YAC/D,MAAM,CAAC,IAAI,CACP,6CAA6C,QAAQ,IAAI,aAAa,QAAQ,EAAE,EAAE,EAClF,QAAQ,CACX,CAAC;YACF,OAAO;SACV;IACL,CAAC,EACD,CAAC,MAAM,CAAC,CACX,CAAC;IAEF,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QACzB,QAAQ,MAAM,EAAE;YACZ,KAAK,+BAA+B,CAAC,OAAO;gBACxC,OAAO,kDAAuB,CAAC;YACnC,KAAK,+BAA+B,CAAC,kBAAkB;gBACnD,OAAO,+DAAoC,CAAC;YAChD,KAAK,+BAA+B,CAAC,OAAO;gBACxC,OAAO,kEAAuC,CAAC;YACnD,KAAK,+BAA+B,CAAC,QAAQ;gBACzC,OAAO,oDAAyB,CAAC;YACrC,KAAK,+BAA+B,CAAC,QAAQ;gBACzC,OAAO,iEAAsC,CAAC;SACrD;IACL,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,CACH,gCACI,SAAS,EAAE,uDAAuD,KAAK,EAAE,EACzE,QAAQ,EAAE,MAAM,KAAK,+BAA+B,CAAC,kBAAkB,EACvE,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,EACnB,QAAQ,EAAE,QAAQ,KACd,KAAK;QAET,6BACI,SAAS,EAAC,wBAAwB,EAClC,GAAG,EAAC,oDAAoD,EACxD,GAAG,EAAC,gBAAgB,GACtB;QACD,OAAO,CACH,CACZ,CAAC;AACN,CAAC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import React, { useEffect, useState } from "react";
|
|
2
|
+
import { OnboardingRequestStatusResponse, CrossMintStatusContext } from "./useCrossMintStatus";
|
|
3
|
+
export const CrossMintStatusProvider = ({ clientId, hideMintOnInactiveClient, children, }) => {
|
|
4
|
+
const [status, setStatus] = useState(OnboardingRequestStatusResponse.WAITING_SUBMISSION);
|
|
5
|
+
async function fetchClientIntegration() {
|
|
6
|
+
const res = await fetch(`https://crossmint.io/api/crossmint/onboardingRequests/${clientId}/status`);
|
|
7
|
+
if (res.status === 200) {
|
|
8
|
+
const resData = await res.json();
|
|
9
|
+
console.log("resData", resData);
|
|
10
|
+
setStatus(resData.status);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
if (status !== OnboardingRequestStatusResponse.INVALID) {
|
|
14
|
+
setStatus(OnboardingRequestStatusResponse.INVALID);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
fetchClientIntegration();
|
|
20
|
+
const interval = setInterval(() => {
|
|
21
|
+
fetchClientIntegration();
|
|
22
|
+
}, 60 * 1000);
|
|
23
|
+
return () => clearInterval(interval);
|
|
24
|
+
}, []);
|
|
25
|
+
return (React.createElement(CrossMintStatusContext.Provider, { value: {
|
|
26
|
+
status,
|
|
27
|
+
clientId,
|
|
28
|
+
hideMintOnInactiveClient,
|
|
29
|
+
} }, children));
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=CrossMintStatusProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CrossMintStatusProvider.js","sourceRoot":"","sources":["../../src/CrossMintStatusProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAiB,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,+BAA+B,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAQ/F,MAAM,CAAC,MAAM,uBAAuB,GAAqC,CAAC,EACtE,QAAQ,EACR,wBAAwB,EACxB,QAAQ,GACX,EAAE,EAAE;IACD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAChC,+BAA+B,CAAC,kBAAkB,CACrD,CAAC;IAEF,KAAK,UAAU,sBAAsB;QACjC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,yDAAyD,QAAQ,SAAS,CAAC,CAAC;QAEpG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE;YACpB,MAAM,OAAO,GAAkE,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAEhG,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SAC7B;aAAM;YACH,IAAI,MAAM,KAAK,+BAA+B,CAAC,OAAO,EAAE;gBACpD,SAAS,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC;aACtD;SACJ;IACL,CAAC;IAED,SAAS,CAAC,GAAG,EAAE;QACX,sBAAsB,EAAE,CAAC;QAEzB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;YAC9B,sBAAsB,EAAE,CAAC;QAC7B,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;QAEd,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACH,oBAAC,sBAAsB,CAAC,QAAQ,IAC5B,KAAK,EAAE;YACH,MAAM;YACN,QAAQ;YACR,wBAAwB;SAC3B,IAEA,QAAQ,CACqB,CACrC,CAAC;AACN,CAAC,CAAC"}
|
package/lib/esm/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
export * from "./CrossMintButton";
|
|
2
|
-
export * from "./CrossMintModal";
|
|
3
|
-
export * from "./useCrossMintModal";
|
|
4
|
-
export * from "./useCrossMintPopup";
|
|
5
|
-
export * from "./CrossMintProvider";
|
|
1
|
+
export * from "./CrossMintButton";
|
|
2
|
+
export * from "./CrossMintModal";
|
|
3
|
+
export * from "./useCrossMintModal";
|
|
4
|
+
export * from "./useCrossMintPopup";
|
|
5
|
+
export * from "./CrossMintProvider";
|
|
6
|
+
export * from "./useCrossMintStatus";
|
|
7
|
+
export * from "./CrossMintStatusButton";
|
package/lib/esm/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
export * from "./CrossMintButton";
|
|
2
|
-
export * from "./CrossMintModal";
|
|
3
|
-
export * from "./useCrossMintModal";
|
|
4
|
-
export * from "./useCrossMintPopup";
|
|
5
|
-
export * from "./CrossMintProvider";
|
|
1
|
+
export * from "./CrossMintButton";
|
|
2
|
+
export * from "./CrossMintModal";
|
|
3
|
+
export * from "./useCrossMintModal";
|
|
4
|
+
export * from "./useCrossMintPopup";
|
|
5
|
+
export * from "./CrossMintProvider";
|
|
6
|
+
export * from "./useCrossMintStatus";
|
|
7
|
+
export * from "./CrossMintStatusButton";
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
package/lib/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
export interface CrossMintModalContextState {
|
|
3
|
-
visible: boolean;
|
|
4
|
-
setVisible: (open: boolean) => void;
|
|
5
|
-
}
|
|
6
|
-
export declare const CrossMintModalContext: import("react").Context<CrossMintModalContextState>;
|
|
7
|
-
export declare function useCrossMintModal(): CrossMintModalContextState;
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export interface CrossMintModalContextState {
|
|
3
|
+
visible: boolean;
|
|
4
|
+
setVisible: (open: boolean) => void;
|
|
5
|
+
}
|
|
6
|
+
export declare const CrossMintModalContext: import("react").Context<CrossMintModalContextState>;
|
|
7
|
+
export declare function useCrossMintModal(): CrossMintModalContextState;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createContext, useContext } from "react";
|
|
2
|
-
export const CrossMintModalContext = createContext({});
|
|
3
|
-
export function useCrossMintModal() {
|
|
4
|
-
return useContext(CrossMintModalContext);
|
|
5
|
-
}
|
|
1
|
+
import { createContext, useContext } from "react";
|
|
2
|
+
export const CrossMintModalContext = createContext({});
|
|
3
|
+
export function useCrossMintModal() {
|
|
4
|
+
return useContext(CrossMintModalContext);
|
|
5
|
+
}
|
|
6
6
|
//# sourceMappingURL=useCrossMintModal.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
export interface PopupContextState {
|
|
3
|
-
connecting: boolean;
|
|
4
|
-
connect: (
|
|
5
|
-
popup: Window | null;
|
|
6
|
-
}
|
|
7
|
-
export declare const PopupContext: import("react").Context<PopupContextState>;
|
|
8
|
-
export declare function useCrossMintPopup(): PopupContextState;
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export interface PopupContextState {
|
|
3
|
+
connecting: boolean;
|
|
4
|
+
connect: (collectionTitle?: string, collectionDescription?: string, collectionPhoto?: string, mintTo?: string, emailTo?: string, listingId?: string) => void;
|
|
5
|
+
popup: Window | null;
|
|
6
|
+
}
|
|
7
|
+
export declare const PopupContext: import("react").Context<PopupContextState>;
|
|
8
|
+
export declare function useCrossMintPopup(): PopupContextState;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { createContext, useContext } from "react";
|
|
2
|
-
export const PopupContext = createContext({});
|
|
3
|
-
export function useCrossMintPopup() {
|
|
4
|
-
return useContext(PopupContext);
|
|
5
|
-
}
|
|
1
|
+
import { createContext, useContext } from "react";
|
|
2
|
+
export const PopupContext = createContext({});
|
|
3
|
+
export function useCrossMintPopup() {
|
|
4
|
+
return useContext(PopupContext);
|
|
5
|
+
}
|
|
6
6
|
//# sourceMappingURL=useCrossMintPopup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCrossMintPopup.js","sourceRoot":"","sources":["../../src/useCrossMintPopup.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"useCrossMintPopup.js","sourceRoot":"","sources":["../../src/useCrossMintPopup.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAgBlD,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAoB,EAAuB,CAAC,CAAC;AAEtF,MAAM,UAAU,iBAAiB;IAC7B,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
export declare enum OnboardingRequestStatusResponse {
|
|
3
|
+
WAITING_SUBMISSION = "waiting-submission",
|
|
4
|
+
PENDING = "pending",
|
|
5
|
+
REJECTED = "rejected",
|
|
6
|
+
ACCEPTED = "accepted",
|
|
7
|
+
INVALID = "invalid"
|
|
8
|
+
}
|
|
9
|
+
export interface CrossMintStatusContextState {
|
|
10
|
+
status: OnboardingRequestStatusResponse;
|
|
11
|
+
clientId: string;
|
|
12
|
+
hideMintOnInactiveClient: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare const CrossMintStatusContext: import("react").Context<CrossMintStatusContextState>;
|
|
15
|
+
export declare function useCrossMintStatus(): CrossMintStatusContextState;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createContext, useContext } from "react";
|
|
2
|
+
export var OnboardingRequestStatusResponse;
|
|
3
|
+
(function (OnboardingRequestStatusResponse) {
|
|
4
|
+
OnboardingRequestStatusResponse["WAITING_SUBMISSION"] = "waiting-submission";
|
|
5
|
+
OnboardingRequestStatusResponse["PENDING"] = "pending";
|
|
6
|
+
OnboardingRequestStatusResponse["REJECTED"] = "rejected";
|
|
7
|
+
OnboardingRequestStatusResponse["ACCEPTED"] = "accepted";
|
|
8
|
+
OnboardingRequestStatusResponse["INVALID"] = "invalid";
|
|
9
|
+
})(OnboardingRequestStatusResponse || (OnboardingRequestStatusResponse = {}));
|
|
10
|
+
export const CrossMintStatusContext = createContext({});
|
|
11
|
+
export function useCrossMintStatus() {
|
|
12
|
+
return useContext(CrossMintStatusContext);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=useCrossMintStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCrossMintStatus.js","sourceRoot":"","sources":["../../src/useCrossMintStatus.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAElD,MAAM,CAAN,IAAY,+BAMX;AAND,WAAY,+BAA+B;IACvC,4EAAyC,CAAA;IACzC,sDAAmB,CAAA;IACnB,wDAAqB,CAAA;IACrB,wDAAqB,CAAA;IACrB,sDAAmB,CAAA;AACvB,CAAC,EANW,+BAA+B,KAA/B,+BAA+B,QAM1C;AAQD,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAA8B,EAAiC,CAAC,CAAC;AAEpH,MAAM,UAAU,kBAAkB;IAC9B,OAAO,UAAU,CAAC,sBAAsB,CAAC,CAAC;AAC9C,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crossmint/client-sdk-react-ui",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8-alpha.0",
|
|
4
4
|
"author": "Paella Labs Inc",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": "https://github.com/CrossMint/crossmint-client-sdk",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"scripts": {
|
|
29
29
|
"clean": "shx rm -rf lib/*",
|
|
30
30
|
"build": "yarn clean && tsc -p tsconfig.json && tsc -p tsconfig-cjs.json",
|
|
31
|
-
"postbuild": "echo
|
|
31
|
+
"postbuild": "echo {\"type\":\"commonjs\"} | npx json > lib/cjs/package.json && echo {\"type\":\"module\"} | npx json > lib/esm/package.json"
|
|
32
32
|
},
|
|
33
33
|
"peerDependencies": {
|
|
34
34
|
"react": "^17.0.2",
|
|
@@ -40,5 +40,5 @@
|
|
|
40
40
|
"react": "^17.0.2",
|
|
41
41
|
"react-dom": "^17.0.2"
|
|
42
42
|
},
|
|
43
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "de01d9a883021d03c2cf37f9442144abb8fae9b9"
|
|
44
44
|
}
|
package/src/CrossMintButton.tsx
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React, { CSSProperties, FC, MouseEvent, MouseEventHandler, useMemo, useCallback } from "react";
|
|
2
|
+
import { OnboardingRequestStatusResponse, useCrossMintStatus } from ".";
|
|
2
3
|
import { useCrossMintPopup } from "./useCrossMintPopup";
|
|
3
4
|
|
|
4
5
|
export interface ButtonProps {
|
|
5
|
-
candyMachineId: string;
|
|
6
6
|
className?: string;
|
|
7
7
|
disabled?: boolean;
|
|
8
8
|
onClick?: (e: MouseEvent<HTMLButtonElement>) => void;
|
|
@@ -12,10 +12,12 @@ export interface ButtonProps {
|
|
|
12
12
|
collectionTitle?: string;
|
|
13
13
|
collectionDescription?: string;
|
|
14
14
|
collectionPhoto?: string;
|
|
15
|
+
mintTo?: string;
|
|
16
|
+
emailTo?: string;
|
|
17
|
+
listingId?: string;
|
|
15
18
|
}
|
|
16
19
|
|
|
17
20
|
export const CrossMintButton: FC<ButtonProps> = ({
|
|
18
|
-
candyMachineId,
|
|
19
21
|
className,
|
|
20
22
|
disabled,
|
|
21
23
|
onClick,
|
|
@@ -25,8 +27,13 @@ export const CrossMintButton: FC<ButtonProps> = ({
|
|
|
25
27
|
collectionTitle,
|
|
26
28
|
collectionDescription,
|
|
27
29
|
collectionPhoto,
|
|
30
|
+
mintTo,
|
|
31
|
+
emailTo,
|
|
32
|
+
listingId,
|
|
28
33
|
...props
|
|
29
34
|
}) => {
|
|
35
|
+
const { hideMintOnInactiveClient, status } = useCrossMintStatus();
|
|
36
|
+
|
|
30
37
|
const { connecting, connect } = useCrossMintPopup();
|
|
31
38
|
|
|
32
39
|
const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(
|
|
@@ -34,7 +41,7 @@ export const CrossMintButton: FC<ButtonProps> = ({
|
|
|
34
41
|
if (onClick) onClick(event);
|
|
35
42
|
|
|
36
43
|
if (!event.defaultPrevented)
|
|
37
|
-
connect(
|
|
44
|
+
connect(collectionTitle, collectionDescription, collectionPhoto, mintTo, emailTo, listingId);
|
|
38
45
|
},
|
|
39
46
|
[onClick]
|
|
40
47
|
);
|
|
@@ -44,6 +51,10 @@ export const CrossMintButton: FC<ButtonProps> = ({
|
|
|
44
51
|
return <p>Buy with credit card</p>;
|
|
45
52
|
}, [connecting]);
|
|
46
53
|
|
|
54
|
+
if (hideMintOnInactiveClient && status !== OnboardingRequestStatusResponse.ACCEPTED) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
|
|
47
58
|
return (
|
|
48
59
|
<button
|
|
49
60
|
className={`client-sdk-button-trigger client-sdk-button-trigger-${theme}`}
|
package/src/CrossMintModal.tsx
CHANGED
|
@@ -1,54 +1,54 @@
|
|
|
1
|
-
import React, { FC, useCallback, useLayoutEffect, useRef, useState } from "react";
|
|
2
|
-
import { createPortal } from "react-dom";
|
|
3
|
-
import { useCrossMintModal } from "./useCrossMintModal";
|
|
4
|
-
|
|
5
|
-
export interface CrossMintModalProps {
|
|
6
|
-
className?: string;
|
|
7
|
-
container?: string;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export const CrossMintModal: FC<CrossMintModalProps> = ({ className = "", container = "body" }) => {
|
|
11
|
-
const ref = useRef<HTMLDivElement>(null);
|
|
12
|
-
const { setVisible } = useCrossMintModal();
|
|
13
|
-
|
|
14
|
-
const [fadeIn, setFadeIn] = useState(false);
|
|
15
|
-
const [portal, setPortal] = useState<Element | null>(null);
|
|
16
|
-
|
|
17
|
-
const hideModal = useCallback(() => {
|
|
18
|
-
setFadeIn(false);
|
|
19
|
-
setTimeout(() => setVisible(false), 150);
|
|
20
|
-
}, [setFadeIn, setVisible]);
|
|
21
|
-
|
|
22
|
-
useLayoutEffect(() => {
|
|
23
|
-
// Get original overflow
|
|
24
|
-
const { overflow } = window.getComputedStyle(document.body);
|
|
25
|
-
// Hack to enable fade in animation after mount
|
|
26
|
-
setTimeout(() => setFadeIn(true), 0);
|
|
27
|
-
// Prevent scrolling on mount
|
|
28
|
-
document.body.style.overflow = "hidden";
|
|
29
|
-
|
|
30
|
-
return () => {
|
|
31
|
-
// Re-enable scrolling when component unmounts
|
|
32
|
-
document.body.style.overflow = overflow;
|
|
33
|
-
};
|
|
34
|
-
}, [hideModal]);
|
|
35
|
-
|
|
36
|
-
useLayoutEffect(() => setPortal(document.querySelector(container)), [setPortal, container]);
|
|
37
|
-
|
|
38
|
-
return (
|
|
39
|
-
portal &&
|
|
40
|
-
createPortal(
|
|
41
|
-
<div
|
|
42
|
-
aria-modal="true"
|
|
43
|
-
className={`client-sdk-modal ${fadeIn && "client-sdk-modal-fade-in"} ${className}`}
|
|
44
|
-
ref={ref}
|
|
45
|
-
>
|
|
46
|
-
<div className="client-sdk-modal-container">
|
|
47
|
-
<span className="client-sdk-modal-loader" />
|
|
48
|
-
</div>
|
|
49
|
-
<div className="client-sdk-modal-overlay" />
|
|
50
|
-
</div>,
|
|
51
|
-
portal
|
|
52
|
-
)
|
|
53
|
-
);
|
|
54
|
-
};
|
|
1
|
+
import React, { FC, useCallback, useLayoutEffect, useRef, useState } from "react";
|
|
2
|
+
import { createPortal } from "react-dom";
|
|
3
|
+
import { useCrossMintModal } from "./useCrossMintModal";
|
|
4
|
+
|
|
5
|
+
export interface CrossMintModalProps {
|
|
6
|
+
className?: string;
|
|
7
|
+
container?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const CrossMintModal: FC<CrossMintModalProps> = ({ className = "", container = "body" }) => {
|
|
11
|
+
const ref = useRef<HTMLDivElement>(null);
|
|
12
|
+
const { setVisible } = useCrossMintModal();
|
|
13
|
+
|
|
14
|
+
const [fadeIn, setFadeIn] = useState(false);
|
|
15
|
+
const [portal, setPortal] = useState<Element | null>(null);
|
|
16
|
+
|
|
17
|
+
const hideModal = useCallback(() => {
|
|
18
|
+
setFadeIn(false);
|
|
19
|
+
setTimeout(() => setVisible(false), 150);
|
|
20
|
+
}, [setFadeIn, setVisible]);
|
|
21
|
+
|
|
22
|
+
useLayoutEffect(() => {
|
|
23
|
+
// Get original overflow
|
|
24
|
+
const { overflow } = window.getComputedStyle(document.body);
|
|
25
|
+
// Hack to enable fade in animation after mount
|
|
26
|
+
setTimeout(() => setFadeIn(true), 0);
|
|
27
|
+
// Prevent scrolling on mount
|
|
28
|
+
document.body.style.overflow = "hidden";
|
|
29
|
+
|
|
30
|
+
return () => {
|
|
31
|
+
// Re-enable scrolling when component unmounts
|
|
32
|
+
document.body.style.overflow = overflow;
|
|
33
|
+
};
|
|
34
|
+
}, [hideModal]);
|
|
35
|
+
|
|
36
|
+
useLayoutEffect(() => setPortal(document.querySelector(container)), [setPortal, container]);
|
|
37
|
+
|
|
38
|
+
return (
|
|
39
|
+
portal &&
|
|
40
|
+
createPortal(
|
|
41
|
+
<div
|
|
42
|
+
aria-modal="true"
|
|
43
|
+
className={`client-sdk-modal ${fadeIn && "client-sdk-modal-fade-in"} ${className}`}
|
|
44
|
+
ref={ref}
|
|
45
|
+
>
|
|
46
|
+
<div className="client-sdk-modal-container">
|
|
47
|
+
<span className="client-sdk-modal-loader" />
|
|
48
|
+
</div>
|
|
49
|
+
<div className="client-sdk-modal-overlay" />
|
|
50
|
+
</div>,
|
|
51
|
+
portal
|
|
52
|
+
)
|
|
53
|
+
);
|
|
54
|
+
};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React, { FC, ReactNode, useState } from "react";
|
|
2
2
|
import { CrossMintModal, CrossMintModalProps } from "./CrossMintModal";
|
|
3
3
|
import { CrossMintModalContext } from "./useCrossMintModal";
|
|
4
|
-
// import { WalletModal, WalletModalProps } from './WalletModal';
|
|
5
4
|
|
|
6
5
|
export interface CrossMintModalProviderProps extends CrossMintModalProps {
|
|
7
6
|
children: ReactNode;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React, { FC, ReactNode, useState } from "react";
|
|
2
|
-
import { useCrossMintModal } from ".";
|
|
2
|
+
import { useCrossMintModal, useCrossMintStatus } from ".";
|
|
3
3
|
import { PopupContext } from "./useCrossMintPopup";
|
|
4
4
|
|
|
5
5
|
export interface PopupProviderProps {
|
|
@@ -7,29 +7,33 @@ export interface PopupProviderProps {
|
|
|
7
7
|
children: ReactNode;
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
const PROD_URL = "https://crossmint.io";
|
|
10
|
+
const PROD_URL = "https://www.crossmint.io";
|
|
11
11
|
const DEV_URL = "http://localhost:3001";
|
|
12
12
|
|
|
13
13
|
export const CrossMintPopupProvider: FC<PopupProviderProps> = ({ development, children }) => {
|
|
14
14
|
const [connecting, setConnecting] = useState(false);
|
|
15
15
|
const [popup, setPopup] = useState<Window | null>(null);
|
|
16
16
|
|
|
17
|
+
const { clientId } = useCrossMintStatus();
|
|
18
|
+
|
|
17
19
|
const { setVisible } = useCrossMintModal();
|
|
18
20
|
|
|
19
21
|
const createPopup = (
|
|
20
|
-
candyMachineId: string,
|
|
21
22
|
collectionTitle?: string,
|
|
22
23
|
collectionDescription?: string,
|
|
23
|
-
collectionPhoto?: string
|
|
24
|
+
collectionPhoto?: string,
|
|
25
|
+
mintTo?: string,
|
|
26
|
+
emailTo?: string,
|
|
27
|
+
listingId?: string
|
|
24
28
|
) => {
|
|
25
29
|
const pop = window.open(
|
|
26
30
|
`${development ? DEV_URL : PROD_URL}/signin?callbackUrl=${encodeURIComponent(
|
|
27
|
-
`${
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
}${
|
|
32
|
-
|
|
31
|
+
`${development ? DEV_URL : PROD_URL}/checkout/mint?clientId=${clientId}&closeOnSuccess=false${
|
|
32
|
+
collectionTitle && `collectionTitle=${collectionTitle}`
|
|
33
|
+
}${collectionDescription && `&collectionDescription=${collectionDescription}`}${
|
|
34
|
+
collectionPhoto && `&collectionPhoto=${collectionPhoto}`
|
|
35
|
+
}${mintTo && `&mintTo=${mintTo}`}${emailTo && `&emailTo=${emailTo}`}${
|
|
36
|
+
listingId && `&listingId=${listingId}`
|
|
33
37
|
}`
|
|
34
38
|
)}`,
|
|
35
39
|
"popUpWindow",
|
|
@@ -46,16 +50,18 @@ export const CrossMintPopupProvider: FC<PopupProviderProps> = ({ development, ch
|
|
|
46
50
|
};
|
|
47
51
|
|
|
48
52
|
const connect = (
|
|
49
|
-
candyMachineId: string,
|
|
50
53
|
collectionTitle?: string,
|
|
51
54
|
collectionDescription?: string,
|
|
52
|
-
collectionPhoto?: string
|
|
55
|
+
collectionPhoto?: string,
|
|
56
|
+
mintTo?: string,
|
|
57
|
+
emailTo?: string,
|
|
58
|
+
listingId?: string
|
|
53
59
|
) => {
|
|
54
60
|
if (connecting) return;
|
|
55
61
|
|
|
56
62
|
setConnecting(true);
|
|
57
63
|
|
|
58
|
-
createPopup(
|
|
64
|
+
createPopup(collectionTitle, collectionDescription, collectionPhoto, mintTo, emailTo, listingId);
|
|
59
65
|
};
|
|
60
66
|
|
|
61
67
|
function registerListeners(pop: Window) {
|
|
@@ -1,28 +1,44 @@
|
|
|
1
1
|
import React, { FC, ReactNode, useState } from "react";
|
|
2
2
|
import { CrossMintModal, CrossMintModalProps } from "./CrossMintModal";
|
|
3
3
|
import { CrossMintPopupProvider } from "./CrossMintPopupProvider";
|
|
4
|
+
import { CrossMintStatusProvider } from "./CrossMintStatusProvider";
|
|
4
5
|
import { CrossMintModalContext } from "./useCrossMintModal";
|
|
5
|
-
// import { WalletModal, WalletModalProps } from './WalletModal';
|
|
6
6
|
|
|
7
7
|
export interface CrossMintProviderProps extends CrossMintModalProps {
|
|
8
|
+
clientId: string;
|
|
9
|
+
auctionId?: string;
|
|
10
|
+
hideMintOnInactiveClient?: boolean;
|
|
8
11
|
development?: boolean;
|
|
9
12
|
children: ReactNode;
|
|
10
13
|
}
|
|
11
14
|
|
|
12
|
-
export const CrossMintProvider: FC<CrossMintProviderProps> = ({
|
|
15
|
+
export const CrossMintProvider: FC<CrossMintProviderProps> = ({
|
|
16
|
+
clientId,
|
|
17
|
+
auctionId,
|
|
18
|
+
hideMintOnInactiveClient = false,
|
|
19
|
+
development = false,
|
|
20
|
+
children,
|
|
21
|
+
...props
|
|
22
|
+
}) => {
|
|
13
23
|
const [visible, setVisible] = useState(false);
|
|
14
24
|
|
|
15
25
|
return (
|
|
16
|
-
<
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}}
|
|
26
|
+
<CrossMintStatusProvider
|
|
27
|
+
clientId={clientId}
|
|
28
|
+
hideMintOnInactiveClient={hideMintOnInactiveClient}
|
|
29
|
+
auctionId={auctionId}
|
|
21
30
|
>
|
|
22
|
-
<
|
|
23
|
-
{
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
31
|
+
<CrossMintModalContext.Provider
|
|
32
|
+
value={{
|
|
33
|
+
visible,
|
|
34
|
+
setVisible,
|
|
35
|
+
}}
|
|
36
|
+
>
|
|
37
|
+
<CrossMintPopupProvider development={development}>
|
|
38
|
+
{children}
|
|
39
|
+
{visible && <CrossMintModal {...props} />}
|
|
40
|
+
</CrossMintPopupProvider>
|
|
41
|
+
</CrossMintModalContext.Provider>
|
|
42
|
+
</CrossMintStatusProvider>
|
|
27
43
|
);
|
|
28
44
|
};
|