diff --git a/admin-ui/src/features/code/utils/getCodeJavaScript.ts b/admin-ui/src/features/code/utils/getCodeJavaScript.ts index 335cbc5c..1bea544b 100644 --- a/admin-ui/src/features/code/utils/getCodeJavaScript.ts +++ b/admin-ui/src/features/code/utils/getCodeJavaScript.ts @@ -5,23 +5,14 @@ export default function getCodeJavaScript(props: CodeProps) { if (props.hostUrl) { hostUrlLine = `\n hostUrl: "${props.hostUrl}",`; } - return `import createTableFlowImporter from "@tableflow/js";"; + return `import createTableFlowImporter from "@tableflow/js"; -const args = { +const importer = createTableFlowImporter({ importerId: "${props.importerId || "YOUR_IMPORTER_ID"}",${hostUrlLine} + onRequestClose: () => importer.close(), + onComplete: (data, error) => console.log(data), darkMode: ${props.theme !== "light"}, - primaryColor: "#7a5ef8", - metadata: '{"userId": 1234, "userEmail": "test@example.com"}', - onRequestClose: () => dialog.close(), - onComplete: (data, error) => { - if (error) { - alert(error); // Handle import error - } else { - console.log(data); // Use import data - } - } -} -const importer = createTableFlowImporter(args); +}); const uploadButton = document.getElementById("uploadButton"); uploadButton.addEventListener("click", () => { diff --git a/admin-ui/src/features/code/utils/getCodeReact.ts b/admin-ui/src/features/code/utils/getCodeReact.ts index 5ba70f68..b9a175f1 100644 --- a/admin-ui/src/features/code/utils/getCodeReact.ts +++ b/admin-ui/src/features/code/utils/getCodeReact.ts @@ -16,20 +16,11 @@ function MyComponent() { setIsOpen(false)} - importerId={"${props.importerId || "YOUR_IMPORTER_ID"}"}${hostUrlLine} darkMode={${props.theme !== "light"}} - primaryColor="#7A5EF8" - closeOnClickOutside={true} - metadata={"{\\"userId\\": 1234, \\"userEmail\\": \\"test@example.com\\"}"} - onComplete={(data, error) => { - if (error) { - alert(error); // Handle import error - } else { - console.log(data); // Use import data - } - }} + onComplete={(data, error) => console.log(data)} /> ); diff --git a/importer-ui/.prettierrc b/importer-ui/.prettierrc index f86fdc26..edf2a5ed 100644 --- a/importer-ui/.prettierrc +++ b/importer-ui/.prettierrc @@ -1,25 +1,25 @@ { - "semi": true, - "singleQuote": false, - "tabWidth": 2, - "jsxSingleQuote": false, - "bracketSameLine": true, - "printWidth": 150, - "endOfLine": "auto", - "importOrder": [ - "^[^/.]+$", - "^@.+$", - "^\\.\\./(.*)/[A-Z]((?!\\.)(?!types.).)+$", - "^\\.\\./(.*)/((?!\\.)(?!types.).)+$", - "^\\.$", - "^\\./(.*)/[A-Z]((?!\\.)(?!types.).)+$", - "^\\./(.*)/((?!\\.)(?!types.).)+$", - "/types$", - "\\.(css|scss)$", - "\\.(svg|png|jpg|jpeg|gif)$", - ".*" - ], - "importOrderSeparation": false, - "importOrderSortSpecifiers": true, - "importOrderCaseInsensitive": true + "semi": true, + "singleQuote": false, + "tabWidth": 2, + "jsxSingleQuote": false, + "bracketSameLine": true, + "printWidth": 150, + "endOfLine": "auto", + "importOrder": [ + "^[^/.]+$", + "^@.+$", + "^\\.\\./(.*)/[A-Z]((?!\\.)(?!types.).)+$", + "^\\.\\./(.*)/((?!\\.)(?!types.).)+$", + "^\\.$", + "^\\./(.*)/[A-Z]((?!\\.)(?!types.).)+$", + "^\\./(.*)/((?!\\.)(?!types.).)+$", + "/types$", + "\\.(css|scss)$", + "\\.(svg|png|jpg|jpeg|gif)$", + ".*" + ], + "importOrderSeparation": false, + "importOrderSortSpecifiers": true, + "importOrderCaseInsensitive": true } diff --git a/importer-ui/src/components/UppyWrapper/style/uppy.overrides.scss b/importer-ui/src/components/UppyWrapper/style/uppy.overrides.scss index 24ced64a..4abeb5f5 100644 --- a/importer-ui/src/components/UppyWrapper/style/uppy.overrides.scss +++ b/importer-ui/src/components/UppyWrapper/style/uppy.overrides.scss @@ -31,6 +31,10 @@ } } + &-browse { + color: var(--importer-link); + } + &-dropFilesHereHint { padding: 0; background-image: none; diff --git a/importer-ui/src/hooks/useSearchParams.ts b/importer-ui/src/hooks/useSearchParams.ts index d4ba0431..9cee4683 100644 --- a/importer-ui/src/hooks/useSearchParams.ts +++ b/importer-ui/src/hooks/useSearchParams.ts @@ -1,4 +1,7 @@ -type SearchParams = Record<"importerId" | "darkMode" | "primaryColor" | "metadata" | "isOpen" | "onComplete" | "showImportLoadingStatus", string>; +type SearchParams = Record< + "importerId" | "darkMode" | "primaryColor" | "metadata" | "isOpen" | "onComplete" | "customStyles" | "showImportLoadingStatus", + string +>; export default function useSearchParams() { const search = new URLSearchParams(document.location.search); diff --git a/importer-ui/src/providers/Embed.tsx b/importer-ui/src/providers/Embed.tsx index c795f2cd..a106c76f 100644 --- a/importer-ui/src/providers/Embed.tsx +++ b/importer-ui/src/providers/Embed.tsx @@ -5,7 +5,16 @@ import useEmbedStore from "../stores/embed"; import { EmbedProps } from "./types"; export default function Embed({ children }: EmbedProps) { - const { importerId, darkMode: darkModeString, primaryColor, metadata, isOpen, onComplete, showImportLoadingStatus } = useSearchParams(); + const { + importerId, + darkMode: darkModeString, + primaryColor, + metadata, + isOpen, + onComplete, + customStyles, + showImportLoadingStatus, + } = useSearchParams(); // Set importerId & metadata in embed store const setEmbedParams = useEmbedStore((state) => state.setEmbedParams); @@ -35,5 +44,20 @@ export default function Embed({ children }: EmbedProps) { } }, [primaryColor]); + useEffect(() => { + try { + const parsedStyles = customStyles && JSON.parse(customStyles); + + customStyles && + Object.keys(parsedStyles).forEach((key) => { + const root = document.documentElement; + const value = parsedStyles?.[key as any]; + root.style.setProperty("--" + key, value); + }); + } catch (e) { + console.error('The "customStyles" prop is not a valid JSON string. Please check the documentation for more details.'); + } + }, [customStyles]); + return <>{children}; } diff --git a/js-sdk/.prettierrc b/js-sdk/.prettierrc new file mode 100644 index 00000000..f86fdc26 --- /dev/null +++ b/js-sdk/.prettierrc @@ -0,0 +1,25 @@ +{ + "semi": true, + "singleQuote": false, + "tabWidth": 2, + "jsxSingleQuote": false, + "bracketSameLine": true, + "printWidth": 150, + "endOfLine": "auto", + "importOrder": [ + "^[^/.]+$", + "^@.+$", + "^\\.\\./(.*)/[A-Z]((?!\\.)(?!types.).)+$", + "^\\.\\./(.*)/((?!\\.)(?!types.).)+$", + "^\\.$", + "^\\./(.*)/[A-Z]((?!\\.)(?!types.).)+$", + "^\\./(.*)/((?!\\.)(?!types.).)+$", + "/types$", + "\\.(css|scss)$", + "\\.(svg|png|jpg|jpeg|gif)$", + ".*" + ], + "importOrderSeparation": false, + "importOrderSortSpecifiers": true, + "importOrderCaseInsensitive": true +} diff --git a/js-sdk/README.md b/js-sdk/README.md index b6597abb..d6724535 100644 --- a/js-sdk/README.md +++ b/js-sdk/README.md @@ -31,25 +31,18 @@ yarn add @tableflow/js ### 2. Add the Importer to your application Create an importer, define your template, and retrieve data at https://app.tableflow.com/importers +\ +The full SDK reference is available in our docs: https://tableflow.com/docs/sdk-reference/javascript ```javascript import createTableFlowImporter from "@tableflow/js"; -const args = { - importerId: "53a84496-819d-4ec6-93b7-b4b56fb676ad", // Replace with your importer ID from https://app.tableflow.com/importers - darkMode: true, - primaryColor: "#7a5ef8", - metadata: '{"userId": 1234, "userEmail": "test@example.com"}', +const importer = createTableFlowImporter({ + importerId: "6de452a2-bd1f-4cb3-b29b-0f8a2e3d9353", // Use your importer ID from https://app.tableflow.com/importers onRequestClose: () => importer.close(), - onComplete: (data, error) => { - if (error) { - alert(error); // Handle import error - } else { - console.log(data); // Use import data - } - } -}; -const importer = createTableFlowImporter(args); + onComplete: (data, error) => console.log(data), + darkMode: true, +}); const uploadButton = document.getElementById("uploadButton"); uploadButton.addEventListener("click", () => { @@ -64,24 +57,15 @@ Or directly in HTML - +