@importcsv/react 0.1.12 → 0.1.13

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.
@@ -22,6 +22,10 @@ declare const CSVImporter: React.ForwardRefExoticComponent<{
22
22
  user?: Record<string, any> | undefined;
23
23
  metadata?: Record<string, any> | undefined;
24
24
  useIframe?: boolean | undefined;
25
+ demoData?: {
26
+ fileName: string;
27
+ csvContent: string;
28
+ } | undefined;
25
29
  } & {
26
30
  isModal?: boolean | undefined;
27
31
  modalIsOpen?: boolean | undefined;
@@ -3,10 +3,11 @@ interface ConfigureImportProps {
3
3
  template: Template;
4
4
  data: any;
5
5
  onSuccess: (mapping: any, headerRow: number) => void;
6
- onCancel: () => void;
6
+ onCancel?: () => void;
7
7
  isSubmitting?: boolean;
8
8
  importerKey?: string;
9
9
  backendUrl?: string;
10
+ isDemoMode?: boolean;
10
11
  }
11
- export default function ConfigureImport({ template, data, onSuccess, onCancel, isSubmitting, importerKey, backendUrl, }: ConfigureImportProps): import("react/jsx-runtime").JSX.Element;
12
+ export default function ConfigureImport({ template, data, onSuccess, onCancel, isSubmitting, importerKey, backendUrl, isDemoMode, }: ConfigureImportProps): import("react/jsx-runtime").JSX.Element;
12
13
  export {};
@@ -3,10 +3,11 @@ export interface ConfigureImportProps {
3
3
  template: Template;
4
4
  data: any;
5
5
  onSuccess: (mapping: any, headerRow: number) => void;
6
- onCancel: () => void;
6
+ onCancel?: () => void;
7
7
  isSubmitting?: boolean;
8
8
  importerKey?: string;
9
9
  backendUrl?: string;
10
+ isDemoMode?: boolean;
10
11
  }
11
12
  export interface TemplateColumnMapping {
12
13
  key: string;
@@ -32174,11 +32174,11 @@ styleInject(css_248z$4);
32174
32174
 
32175
32175
  function ConfigureImport(_a) {
32176
32176
  var _this = this;
32177
- var template = _a.template, data = _a.data, onSuccess = _a.onSuccess, onCancel = _a.onCancel, _b = _a.isSubmitting, isSubmitting = _b === void 0 ? false : _b, importerKey = _a.importerKey, backendUrl = _a.backendUrl;
32177
+ var template = _a.template, data = _a.data, onSuccess = _a.onSuccess, onCancel = _a.onCancel, _b = _a.isSubmitting, isSubmitting = _b === void 0 ? false : _b, importerKey = _a.importerKey, backendUrl = _a.backendUrl, _c = _a.isDemoMode, isDemoMode = _c === void 0 ? false : _c;
32178
32178
  var t = useTranslation().t;
32179
32179
  var selectedHeaderRow = 0; // Always use first row as headers
32180
- var _c = useState$1({}), columnMapping = _c[0], setColumnMapping = _c[1];
32181
- var _d = useState$1(null), error = _d[0], setError = _d[1];
32180
+ var _d = useState$1({}), columnMapping = _d[0], setColumnMapping = _d[1];
32181
+ var _e = useState$1(null), error = _e[0], setError = _e[1];
32182
32182
  var llmEnhancementCalled = useRef$1(false);
32183
32183
  // Get preview data (first 5 rows)
32184
32184
  useMemo$1(function () {
@@ -32357,7 +32357,7 @@ function ConfigureImport(_a) {
32357
32357
  columnMapping[idx].key !== field.key;
32358
32358
  return (jsx(SelectItem, __assign$1({ value: idx.toString(), disabled: isAlreadyMapped }, { children: isAlreadyMapped ? (jsxs("span", __assign$1({ className: "text-gray-400" }, { children: [header, " (mapped)"] }))) : (header) }), idx));
32359
32359
  })] })] })) })), jsx("td", __assign$1({ className: "px-6 py-4" }, { children: jsx(Text, __assign$1({ className: "text-sm text-gray-600 truncate max-w-[300px]", title: mappedColumn ? getSampleData(parseInt(mappedColumn)) : '' }, { children: mappedColumn ? (getSampleData(parseInt(mappedColumn)) || '-') : '' })) }))] }), field.key));
32360
- }) })] })) })), error && (jsx(Box, __assign$1({ className: "bg-red-50 border border-red-200 rounded-lg px-4 py-3" }, { children: jsx(Text, __assign$1({ className: "text-sm text-red-700" }, { children: error })) }))), jsxs(Flex, __assign$1({ justify: "between", className: "w-full pt-6 border-t border-gray-200" }, { children: [jsx(Button, __assign$1({ variant: "outline", onClick: onCancel, disabled: isSubmitting, size: "default" }, { children: t('Back') })), jsx(Button, __assign$1({ onClick: handleSubmit, isLoading: isSubmitting, disabled: !allRequiredFieldsMapped, size: "default", variant: "default" }, { children: t('Continue') }))] }))] })) })));
32360
+ }) })] })) })), error && (jsx(Box, __assign$1({ className: "bg-red-50 border border-red-200 rounded-lg px-4 py-3" }, { children: jsx(Text, __assign$1({ className: "text-sm text-red-700" }, { children: error })) }))), jsxs(Flex, __assign$1({ justify: "between", className: "w-full pt-6 border-t border-gray-200" }, { children: [!isDemoMode && onCancel && (jsx(Button, __assign$1({ variant: "outline", onClick: onCancel, disabled: isSubmitting, size: "default" }, { children: t('Back') }))), isDemoMode && jsx("div", {}), jsx(Button, __assign$1({ onClick: handleSubmit, isLoading: isSubmitting, disabled: !allRequiredFieldsMapped, size: "default", variant: "default" }, { children: t('Continue') }))] }))] })) })));
32361
32361
  }
32362
32362
 
32363
32363
  /**
@@ -35772,14 +35772,18 @@ function IframeWrapper(_a) {
35772
35772
 
35773
35773
  function Main(props) {
35774
35774
  var _this = this;
35775
- var _a = props.isModal, isModal = _a === void 0 ? true : _a, _b = props.modalOnCloseTriggered, modalOnCloseTriggered = _b === void 0 ? function () { return null; } : _b, onComplete = props.onComplete, customStyles = props.customStyles, showDownloadTemplateButton = props.showDownloadTemplateButton, skipHeaderRowSelection = props.skipHeaderRowSelection, importerKey = props.importerKey, _c = props.backendUrl, backendUrl = _c === void 0 ? config.apiBaseUrl : _c, user = props.user, metadata = props.metadata, _d = props.useIframe, useIframe = _d === void 0 ? true : _d;
35775
+ var _a = props.isModal, isModal = _a === void 0 ? true : _a, _b = props.modalOnCloseTriggered, modalOnCloseTriggered = _b === void 0 ? function () { return null; } : _b, onComplete = props.onComplete, customStyles = props.customStyles, showDownloadTemplateButton = props.showDownloadTemplateButton, skipHeaderRowSelection = props.skipHeaderRowSelection, importerKey = props.importerKey, _c = props.backendUrl, backendUrl = _c === void 0 ? config.apiBaseUrl : _c, user = props.user, metadata = props.metadata, _d = props.useIframe, useIframe = _d === void 0 ? true : _d, // Default to using iframe for CSS isolation
35776
+ demoData = props.demoData;
35776
35777
  var skipHeader = skipHeaderRowSelection !== null && skipHeaderRowSelection !== void 0 ? skipHeaderRowSelection : false;
35778
+ var isDemoMode = !!demoData;
35777
35779
  var t = useTranslation().t;
35778
35780
  // Apply custom styles
35779
35781
  useCustomStyles(parseObjectOrStringJSON("customStyles", customStyles));
35780
35782
  // Stepper handler - using consolidated flow
35781
35783
  var useConsolidatedFlow = true; // Using consolidated flow to combine header selection and mapping
35782
- var _e = useStepNavigation(StepEnum.Upload, skipHeader, useConsolidatedFlow), currentStep = _e.currentStep, setStep = _e.setStep, goNext = _e.goNext, goBack = _e.goBack, stepper = _e.stepper;
35784
+ // Start at MapColumns step if demo mode is active
35785
+ var initialStep = isDemoMode ? StepEnum.MapColumns : StepEnum.Upload;
35786
+ var _e = useStepNavigation(initialStep, skipHeader, useConsolidatedFlow), currentStep = _e.currentStep, setStep = _e.setStep, goNext = _e.goNext, goBack = _e.goBack, stepper = _e.stepper;
35783
35787
  // Error handling
35784
35788
  var _f = useState$1(null), initializationError = _f[0], setInitializationError = _f[1];
35785
35789
  var _g = useState$1(null), dataError = _g[0], setDataError = _g[1];
@@ -35804,6 +35808,25 @@ function Main(props) {
35804
35808
  var _p = useState$1(false), includeUnmatchedColumns = _p[0], setIncludeUnmatchedColumns = _p[1];
35805
35809
  var _q = useState$1(false), filterInvalidRows = _q[0], setFilterInvalidRows = _q[1];
35806
35810
  var _r = useState$1(false), disableOnInvalidRows = _r[0], setDisableOnInvalidRows = _r[1];
35811
+ // Initialize demo data if provided
35812
+ useEffect$2(function () {
35813
+ if (isDemoMode && demoData) {
35814
+ // Parse the demo CSV content
35815
+ papaparse_min.parse(demoData.csvContent, {
35816
+ complete: function (results) {
35817
+ var csvData = results.data;
35818
+ var isNotBlankRow = function (row) { return row.some(function (cell) { return cell.toString().trim() !== ""; }); };
35819
+ var rows = csvData.filter(isNotBlankRow).map(function (row, index) { return ({ index: index, values: row }); });
35820
+ setData({
35821
+ fileName: demoData.fileName,
35822
+ rows: rows,
35823
+ sheetList: [],
35824
+ errors: results.errors.map(function (error) { return error.message; }),
35825
+ });
35826
+ },
35827
+ });
35828
+ }
35829
+ }, [isDemoMode, demoData]);
35807
35830
  // Fetch schema from the backend using importerKey
35808
35831
  useEffect$2(function () {
35809
35832
  var fetchSchema = function () { return __awaiter(_this, void 0, void 0, function () {
@@ -36106,7 +36129,7 @@ function Main(props) {
36106
36129
  setColumnMapping(mapping);
36107
36130
  setSelectedHeaderRow(headerRow);
36108
36131
  goNext();
36109
- }, onCancel: function () { return goBack(StepEnum.Upload); }, isSubmitting: isSubmitting, importerKey: importerKey, backendUrl: backendUrl }));
36132
+ }, onCancel: isDemoMode ? undefined : function () { return goBack(StepEnum.Upload); }, isSubmitting: isSubmitting, importerKey: importerKey, backendUrl: backendUrl, isDemoMode: isDemoMode }));
36110
36133
  }
36111
36134
  case StepEnum.Validation:
36112
36135
  return (jsx(Validation, { template: parsedTemplate, data: data, columnMapping: columnMapping, selectedHeaderRow: selectedHeaderRow, onSuccess: handleValidationComplete, onCancel: handleBackToMapColumns, isSubmitting: isSubmitting, backendUrl: backendUrl, importerKey: importerKey, filterInvalidRows: filterInvalidRows, disableOnInvalidRows: disableOnInvalidRows }));
@@ -37802,9 +37825,9 @@ styleInject(css_248z);
37802
37825
 
37803
37826
  var CSVImporter = forwardRef(function (importerProps, forwardRef) {
37804
37827
  // Destructure all known props from CSVImporterProps
37805
- var _a = importerProps.isModal, isModal = _a === void 0 ? true : _a, _b = importerProps.modalIsOpen, modalIsOpen = _b === void 0 ? true : _b, _c = importerProps.modalOnCloseTriggered, modalOnCloseTriggered = _c === void 0 ? function () { return null; } : _c, modalCloseOnOutsideClick = importerProps.modalCloseOnOutsideClick, _d = importerProps.darkMode, darkMode = _d === void 0 ? false : _d, _e = importerProps.primaryColor, primaryColor = _e === void 0 ? "#2563eb" : _e, className = importerProps.className, onComplete = importerProps.onComplete, customStyles = importerProps.customStyles, showDownloadTemplateButton = importerProps.showDownloadTemplateButton, skipHeaderRowSelection = importerProps.skipHeaderRowSelection, language = importerProps.language, customTranslations = importerProps.customTranslations, importerKey = importerProps.importerKey, backendUrl = importerProps.backendUrl, user = importerProps.user, metadata = importerProps.metadata,
37828
+ var _a = importerProps.isModal, isModal = _a === void 0 ? true : _a, _b = importerProps.modalIsOpen, modalIsOpen = _b === void 0 ? true : _b, _c = importerProps.modalOnCloseTriggered, modalOnCloseTriggered = _c === void 0 ? function () { return null; } : _c, modalCloseOnOutsideClick = importerProps.modalCloseOnOutsideClick, _d = importerProps.darkMode, darkMode = _d === void 0 ? false : _d, _e = importerProps.primaryColor, primaryColor = _e === void 0 ? "#2563eb" : _e, className = importerProps.className, onComplete = importerProps.onComplete, customStyles = importerProps.customStyles, showDownloadTemplateButton = importerProps.showDownloadTemplateButton, skipHeaderRowSelection = importerProps.skipHeaderRowSelection, language = importerProps.language, customTranslations = importerProps.customTranslations, importerKey = importerProps.importerKey, backendUrl = importerProps.backendUrl, user = importerProps.user, metadata = importerProps.metadata, demoData = importerProps.demoData,
37806
37829
  // Any remaining props will be valid DOM props
37807
- domProps = __rest$1(importerProps, ["isModal", "modalIsOpen", "modalOnCloseTriggered", "modalCloseOnOutsideClick", "darkMode", "primaryColor", "className", "onComplete", "customStyles", "showDownloadTemplateButton", "skipHeaderRowSelection", "language", "customTranslations", "importerKey", "backendUrl", "user", "metadata"]);
37830
+ domProps = __rest$1(importerProps, ["isModal", "modalIsOpen", "modalOnCloseTriggered", "modalCloseOnOutsideClick", "darkMode", "primaryColor", "className", "onComplete", "customStyles", "showDownloadTemplateButton", "skipHeaderRowSelection", "language", "customTranslations", "importerKey", "backendUrl", "user", "metadata", "demoData"]);
37808
37831
  var ref = forwardRef !== null && forwardRef !== void 0 ? forwardRef : useRef$1(null);
37809
37832
  var current = ref === null || ref === void 0 ? void 0 : ref.current;
37810
37833
  useEffect$2(function () {
@@ -37845,7 +37868,7 @@ var CSVImporter = forwardRef(function (importerProps, forwardRef) {
37845
37868
  // domProps should only contain valid DOM attributes
37846
37869
  var elementProps = __assign$1(__assign$1(__assign$1({ ref: ref }, (isModal ? { onClick: backdropClick } : {})), { className: domElementClass, "data-theme": darkMode ? "dark" : "light", style: { colorScheme: darkMode ? "dark" : "light" } }), domProps);
37847
37870
  // Create a new component that properly passes only the props that Importer needs
37848
- var ImporterComponent = function () { return (jsx(Providers, __assign$1({ primaryColor: primaryColor }, { children: jsx(Main, { isModal: isModal, modalIsOpen: modalIsOpen, modalOnCloseTriggered: modalOnCloseTriggered, modalCloseOnOutsideClick: modalCloseOnOutsideClick, darkMode: darkMode, primaryColor: primaryColor, className: className, onComplete: onComplete, customStyles: customStyles, showDownloadTemplateButton: showDownloadTemplateButton, skipHeaderRowSelection: skipHeaderRowSelection, language: language, customTranslations: customTranslations, importerKey: importerKey, backendUrl: backendUrl, user: user, metadata: metadata }) }))); };
37871
+ var ImporterComponent = function () { return (jsx(Providers, __assign$1({ primaryColor: primaryColor }, { children: jsx(Main, { isModal: isModal, modalIsOpen: modalIsOpen, modalOnCloseTriggered: modalOnCloseTriggered, modalCloseOnOutsideClick: modalCloseOnOutsideClick, darkMode: darkMode, primaryColor: primaryColor, className: className, onComplete: onComplete, customStyles: customStyles, showDownloadTemplateButton: showDownloadTemplateButton, skipHeaderRowSelection: skipHeaderRowSelection, language: language, customTranslations: customTranslations, importerKey: importerKey, backendUrl: backendUrl, user: user, metadata: metadata, demoData: demoData }) }))); };
37849
37872
  return isModal ? (jsx("div", __assign$1({ className: "csvImporter" }, { children: jsx("dialog", __assign$1({}, elementProps, { children: jsx(ImporterComponent, {}) })) }))) : (jsx("div", __assign$1({}, elementProps, { children: jsx(ImporterComponent, {}) })));
37850
37873
  });
37851
37874