@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.
- package/build/components/CSVImporter/index.d.ts +4 -0
- package/build/importer/features/configure-import/index.d.ts +3 -2
- package/build/importer/features/configure-import/types/index.d.ts +2 -1
- package/build/index.esm.js +33 -10
- package/build/index.esm.js.map +1 -1
- package/build/index.js +33 -10
- package/build/index.js.map +1 -1
- package/build/js.d.ts +4 -0
- package/build/types/index.d.ts +4 -0
- package/package.json +1 -1
|
@@ -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
|
|
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
|
|
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;
|
package/build/index.esm.js
CHANGED
|
@@ -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
|
|
32181
|
-
var
|
|
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
|
-
|
|
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
|
|