@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.
Files changed (76) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +1 -1
  3. package/lib/cjs/CrossMintButton.d.ts +16 -14
  4. package/lib/cjs/CrossMintButton.js +59 -54
  5. package/lib/cjs/CrossMintButton.js.map +1 -1
  6. package/lib/cjs/CrossMintModal.d.ts +6 -6
  7. package/lib/cjs/CrossMintModal.js +54 -54
  8. package/lib/cjs/CrossMintModalProvider.d.ts +6 -6
  9. package/lib/cjs/CrossMintModalProvider.js +47 -47
  10. package/lib/cjs/CrossMintModalProvider.js.map +1 -1
  11. package/lib/cjs/CrossMintPopupProvider.d.ts +6 -6
  12. package/lib/cjs/CrossMintPopupProvider.js +69 -68
  13. package/lib/cjs/CrossMintPopupProvider.js.map +1 -1
  14. package/lib/cjs/CrossMintProvider.d.ts +9 -7
  15. package/lib/cjs/CrossMintProvider.js +51 -49
  16. package/lib/cjs/CrossMintProvider.js.map +1 -1
  17. package/lib/cjs/CrossMintStatusButton.d.ts +10 -0
  18. package/lib/cjs/CrossMintStatusButton.js +66 -0
  19. package/lib/cjs/CrossMintStatusButton.js.map +1 -0
  20. package/lib/cjs/CrossMintStatusProvider.d.ts +7 -0
  21. package/lib/cjs/CrossMintStatusProvider.js +65 -0
  22. package/lib/cjs/CrossMintStatusProvider.js.map +1 -0
  23. package/lib/cjs/index.d.ts +7 -5
  24. package/lib/cjs/index.js +19 -17
  25. package/lib/cjs/index.js.map +1 -1
  26. package/lib/cjs/useCrossMintModal.d.ts +7 -7
  27. package/lib/cjs/useCrossMintModal.js +9 -9
  28. package/lib/cjs/useCrossMintPopup.d.ts +8 -8
  29. package/lib/cjs/useCrossMintPopup.js +9 -9
  30. package/lib/cjs/useCrossMintPopup.js.map +1 -1
  31. package/lib/cjs/useCrossMintStatus.d.ts +15 -0
  32. package/lib/cjs/useCrossMintStatus.js +18 -0
  33. package/lib/cjs/useCrossMintStatus.js.map +1 -0
  34. package/lib/esm/CrossMintButton.d.ts +16 -14
  35. package/lib/esm/CrossMintButton.js +24 -19
  36. package/lib/esm/CrossMintButton.js.map +1 -1
  37. package/lib/esm/CrossMintModal.d.ts +6 -6
  38. package/lib/esm/CrossMintModal.js +31 -31
  39. package/lib/esm/CrossMintModalProvider.d.ts +6 -6
  40. package/lib/esm/CrossMintModalProvider.js +12 -12
  41. package/lib/esm/CrossMintModalProvider.js.map +1 -1
  42. package/lib/esm/CrossMintPopupProvider.d.ts +6 -6
  43. package/lib/esm/CrossMintPopupProvider.js +46 -45
  44. package/lib/esm/CrossMintPopupProvider.js.map +1 -1
  45. package/lib/esm/CrossMintProvider.d.ts +9 -7
  46. package/lib/esm/CrossMintProvider.js +16 -14
  47. package/lib/esm/CrossMintProvider.js.map +1 -1
  48. package/lib/esm/CrossMintStatusButton.d.ts +10 -0
  49. package/lib/esm/CrossMintStatusButton.js +31 -0
  50. package/lib/esm/CrossMintStatusButton.js.map +1 -0
  51. package/lib/esm/CrossMintStatusProvider.d.ts +7 -0
  52. package/lib/esm/CrossMintStatusProvider.js +31 -0
  53. package/lib/esm/CrossMintStatusProvider.js.map +1 -0
  54. package/lib/esm/index.d.ts +7 -5
  55. package/lib/esm/index.js +7 -5
  56. package/lib/esm/index.js.map +1 -1
  57. package/lib/esm/useCrossMintModal.d.ts +7 -7
  58. package/lib/esm/useCrossMintModal.js +5 -5
  59. package/lib/esm/useCrossMintPopup.d.ts +8 -8
  60. package/lib/esm/useCrossMintPopup.js +5 -5
  61. package/lib/esm/useCrossMintPopup.js.map +1 -1
  62. package/lib/esm/useCrossMintStatus.d.ts +15 -0
  63. package/lib/esm/useCrossMintStatus.js +14 -0
  64. package/lib/esm/useCrossMintStatus.js.map +1 -0
  65. package/package.json +3 -3
  66. package/src/CrossMintButton.tsx +14 -3
  67. package/src/CrossMintModal.tsx +54 -54
  68. package/src/CrossMintModalProvider.tsx +0 -1
  69. package/src/CrossMintPopupProvider.tsx +19 -13
  70. package/src/CrossMintProvider.tsx +28 -12
  71. package/src/CrossMintStatusButton.tsx +73 -0
  72. package/src/CrossMintStatusProvider.tsx +58 -0
  73. package/src/index.ts +2 -0
  74. package/src/useCrossMintModal.tsx +12 -12
  75. package/src/useCrossMintPopup.tsx +4 -2
  76. package/src/useCrossMintStatus.tsx +22 -0
@@ -0,0 +1,73 @@
1
+ import React, { CSSProperties, FC, MouseEvent, MouseEventHandler, useMemo, useCallback } from "react";
2
+ import { OnboardingRequestStatusResponse, useCrossMintStatus } from "./useCrossMintStatus";
3
+
4
+ export interface StatusButtonProps {
5
+ className?: string;
6
+ disabled?: boolean;
7
+ onClick?: (e: MouseEvent<HTMLButtonElement>) => void;
8
+ style?: CSSProperties;
9
+ tabIndex?: number;
10
+ theme?: "light" | "dark";
11
+ }
12
+
13
+ export const CrossMintStatusButton: FC<StatusButtonProps> = ({
14
+ className,
15
+ disabled,
16
+ onClick,
17
+ style,
18
+ tabIndex,
19
+ theme = "dark",
20
+ ...props
21
+ }) => {
22
+ const { status, clientId, auctionId } = useCrossMintStatus();
23
+
24
+ const handleClick: MouseEventHandler<HTMLButtonElement> = useCallback(
25
+ (event) => {
26
+ if (onClick) onClick(event);
27
+
28
+ if (status === OnboardingRequestStatusResponse.WAITING_SUBMISSION) {
29
+ window.open(
30
+ `https://crossmint.io/developers/onboarding${
31
+ clientId && `?clientId=${clientId}${auctionId && `&auctionId=${auctionId}`}`
32
+ }`,
33
+ "_blank"
34
+ );
35
+ return;
36
+ }
37
+ },
38
+ [status]
39
+ );
40
+
41
+ const content = useMemo(() => {
42
+ switch (status) {
43
+ case OnboardingRequestStatusResponse.INVALID:
44
+ return <p>Invalid clientId</p>;
45
+ case OnboardingRequestStatusResponse.WAITING_SUBMISSION:
46
+ return <p>Click here to setup CrossMint</p>;
47
+ case OnboardingRequestStatusResponse.PENDING:
48
+ return <p>Your application is under review</p>;
49
+ case OnboardingRequestStatusResponse.ACCEPTED:
50
+ return <p>You're good to go!</p>;
51
+ case OnboardingRequestStatusResponse.REJECTED:
52
+ return <p>You're application was rejected</p>;
53
+ }
54
+ }, [status]);
55
+
56
+ return (
57
+ <button
58
+ className={`client-sdk-button-trigger client-sdk-button-trigger-${theme}`}
59
+ disabled={status !== OnboardingRequestStatusResponse.WAITING_SUBMISSION}
60
+ onClick={handleClick}
61
+ style={{ ...style }}
62
+ tabIndex={tabIndex}
63
+ {...props}
64
+ >
65
+ <img
66
+ className="client-sdk-button-icon"
67
+ src="https://www.crossmint.io/assets/crossmint/logo.png"
68
+ alt="Crossmint logo"
69
+ />
70
+ {content}
71
+ </button>
72
+ );
73
+ };
@@ -0,0 +1,58 @@
1
+ import React, { FC, ReactNode, useEffect, useState } from "react";
2
+ import { OnboardingRequestStatusResponse, CrossMintStatusContext } from "./useCrossMintStatus";
3
+
4
+ export interface CrossMintStatusProviderProps {
5
+ clientId: string;
6
+ auctionId?: string;
7
+ hideMintOnInactiveClient: boolean;
8
+ children: ReactNode;
9
+ }
10
+
11
+ export const CrossMintStatusProvider: FC<CrossMintStatusProviderProps> = ({
12
+ clientId,
13
+ auctionId,
14
+ hideMintOnInactiveClient,
15
+ children,
16
+ }) => {
17
+ const [status, setStatus] = useState<OnboardingRequestStatusResponse>(
18
+ OnboardingRequestStatusResponse.WAITING_SUBMISSION
19
+ );
20
+
21
+ async function fetchClientIntegration() {
22
+ const res = await fetch(`https://www.crossmint.io/api/crossmint/onboardingRequests/${clientId}/status`);
23
+
24
+ if (res.status === 200) {
25
+ const resData: { clientId: string; status: OnboardingRequestStatusResponse } = await res.json();
26
+
27
+ console.log("resData", resData);
28
+ setStatus(resData.status);
29
+ } else {
30
+ if (status !== OnboardingRequestStatusResponse.INVALID) {
31
+ setStatus(OnboardingRequestStatusResponse.INVALID);
32
+ }
33
+ }
34
+ }
35
+
36
+ useEffect(() => {
37
+ fetchClientIntegration();
38
+
39
+ const interval = setInterval(() => {
40
+ fetchClientIntegration();
41
+ }, 60 * 1000);
42
+
43
+ return () => clearInterval(interval);
44
+ }, []);
45
+
46
+ return (
47
+ <CrossMintStatusContext.Provider
48
+ value={{
49
+ status,
50
+ clientId,
51
+ auctionId,
52
+ hideMintOnInactiveClient,
53
+ }}
54
+ >
55
+ {children}
56
+ </CrossMintStatusContext.Provider>
57
+ );
58
+ };
package/src/index.ts CHANGED
@@ -3,3 +3,5 @@ export * from "./CrossMintModal";
3
3
  export * from "./useCrossMintModal";
4
4
  export * from "./useCrossMintPopup";
5
5
  export * from "./CrossMintProvider";
6
+ export * from "./useCrossMintStatus";
7
+ export * from "./CrossMintStatusButton";
@@ -1,12 +1,12 @@
1
- import { createContext, useContext } from "react";
2
-
3
- export interface CrossMintModalContextState {
4
- visible: boolean;
5
- setVisible: (open: boolean) => void;
6
- }
7
-
8
- export const CrossMintModalContext = createContext<CrossMintModalContextState>({} as CrossMintModalContextState);
9
-
10
- export function useCrossMintModal(): CrossMintModalContextState {
11
- return useContext(CrossMintModalContext);
12
- }
1
+ import { createContext, useContext } from "react";
2
+
3
+ export interface CrossMintModalContextState {
4
+ visible: boolean;
5
+ setVisible: (open: boolean) => void;
6
+ }
7
+
8
+ export const CrossMintModalContext = createContext<CrossMintModalContextState>({} as CrossMintModalContextState);
9
+
10
+ export function useCrossMintModal(): CrossMintModalContextState {
11
+ return useContext(CrossMintModalContext);
12
+ }
@@ -3,10 +3,12 @@ import { createContext, useContext } from "react";
3
3
  export interface PopupContextState {
4
4
  connecting: boolean;
5
5
  connect: (
6
- candyMachineId: string,
7
6
  collectionTitle?: string,
8
7
  collectionDescription?: string,
9
- collectionPhoto?: string
8
+ collectionPhoto?: string,
9
+ mintTo?: string,
10
+ emailTo?: string,
11
+ listingId?: string
10
12
  ) => void;
11
13
 
12
14
  popup: Window | null;
@@ -0,0 +1,22 @@
1
+ import { createContext, useContext } from "react";
2
+
3
+ export enum OnboardingRequestStatusResponse {
4
+ WAITING_SUBMISSION = "waiting-submission",
5
+ PENDING = "pending",
6
+ REJECTED = "rejected",
7
+ ACCEPTED = "accepted",
8
+ INVALID = "invalid",
9
+ }
10
+
11
+ export interface CrossMintStatusContextState {
12
+ status: OnboardingRequestStatusResponse;
13
+ clientId: string;
14
+ auctionId?: string;
15
+ hideMintOnInactiveClient: boolean;
16
+ }
17
+
18
+ export const CrossMintStatusContext = createContext<CrossMintStatusContextState>({} as CrossMintStatusContextState);
19
+
20
+ export function useCrossMintStatus(): CrossMintStatusContextState {
21
+ return useContext(CrossMintStatusContext);
22
+ }