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
-
+