@wix/bex-core 2.326.0 → 2.328.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.
- package/dist/cjs/hooks/useImport.js +2 -0
- package/dist/cjs/hooks/useImport.js.map +1 -1
- package/dist/cjs/state/ImportState/ImportState.js +20 -8
- package/dist/cjs/state/ImportState/ImportState.js.map +1 -1
- package/dist/cjs/state/ImportState/detectFieldType.js +140 -0
- package/dist/cjs/state/ImportState/detectFieldType.js.map +1 -0
- package/dist/cjs/state/ImportState/index.js +6 -0
- package/dist/cjs/state/ImportState/index.js.map +1 -1
- package/dist/esm/hooks/useImport.js +2 -1
- package/dist/esm/hooks/useImport.js.map +1 -1
- package/dist/esm/state/ImportState/ImportState.js +21 -5
- package/dist/esm/state/ImportState/ImportState.js.map +1 -1
- package/dist/esm/state/ImportState/detectFieldType.js +125 -0
- package/dist/esm/state/ImportState/detectFieldType.js.map +1 -0
- package/dist/esm/state/ImportState/index.js +1 -0
- package/dist/esm/state/ImportState/index.js.map +1 -1
- package/dist/types/hooks/useImport.d.ts +2 -1
- package/dist/types/hooks/useImport.d.ts.map +1 -1
- package/dist/types/state/ImportState/ImportState.d.ts +11 -1
- package/dist/types/state/ImportState/ImportState.d.ts.map +1 -1
- package/dist/types/state/ImportState/detectFieldType.d.ts +21 -0
- package/dist/types/state/ImportState/detectFieldType.d.ts.map +1 -0
- package/dist/types/state/ImportState/index.d.ts +1 -0
- package/dist/types/state/ImportState/index.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -11,6 +11,7 @@ function useCreateImport(params) {
|
|
|
11
11
|
bulkUploadItems,
|
|
12
12
|
backup,
|
|
13
13
|
updateSchema,
|
|
14
|
+
detectColumnType,
|
|
14
15
|
importModalState,
|
|
15
16
|
batchSize
|
|
16
17
|
} = params;
|
|
@@ -27,6 +28,7 @@ function useCreateImport(params) {
|
|
|
27
28
|
bulkUploadItems,
|
|
28
29
|
backup,
|
|
29
30
|
updateSchema,
|
|
31
|
+
detectColumnType,
|
|
30
32
|
collection,
|
|
31
33
|
importModalState,
|
|
32
34
|
batchSize,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_providers","_state","useCreateImport","params","fields","bulkUploadItems","backup","updateSchema","importModalState","batchSize","showToast","translate","errorHandler","window","useWixPatternsContainer","collection","useCollectionContext","useCallback","ImportState","downloadCsv","content","fileName","download","encodeURIComponent"],"sources":["../../../src/hooks/useImport.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useWixPatternsContainer, useCollectionContext } from '../providers';\nimport {\n ModalState,\n ImportState,\n BackupFn,\n BulkUploadItemsFn,\n UpdateSchemaFn,\n} from '../state';\nimport { CreateExportAsyncJobRequest } from '@wix/bex-utils/@wix/ambassador-fedinfra-exportservice-v1-export-async-job/types';\nimport { FiltersMap } from '../model';\n\nexport interface UseImportParams {\n fields: CreateExportAsyncJobRequest['fields'];\n bulkUploadItems: BulkUploadItemsFn;\n backup?: BackupFn;\n updateSchema?: UpdateSchemaFn;\n importModalState: ModalState;\n batchSize?: number;\n}\n\nexport function useCreateImport<T = unknown, F extends FiltersMap = FiltersMap>(\n params: UseImportParams,\n) {\n const {\n fields,\n bulkUploadItems,\n backup,\n updateSchema,\n importModalState,\n batchSize,\n } = params;\n const { showToast, translate, errorHandler, window } =\n useWixPatternsContainer();\n const collection = useCollectionContext<T, F>();\n\n return useCallback(() => {\n return new ImportState({\n fields,\n bulkUploadItems,\n backup,\n updateSchema,\n collection,\n importModalState,\n batchSize,\n showToast,\n translate,\n errorHandler,\n downloadCsv: (content, fileName) => {\n window.download(\n `data:text/csv;charset=utf-8,${encodeURIComponent(content)}`,\n fileName,\n );\n },\n });\n }, []);\n}\n"],"mappings":";;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;
|
|
1
|
+
{"version":3,"names":["_react","require","_providers","_state","useCreateImport","params","fields","bulkUploadItems","backup","updateSchema","detectColumnType","importModalState","batchSize","showToast","translate","errorHandler","window","useWixPatternsContainer","collection","useCollectionContext","useCallback","ImportState","downloadCsv","content","fileName","download","encodeURIComponent"],"sources":["../../../src/hooks/useImport.ts"],"sourcesContent":["import { useCallback } from 'react';\nimport { useWixPatternsContainer, useCollectionContext } from '../providers';\nimport {\n ModalState,\n ImportState,\n BackupFn,\n BulkUploadItemsFn,\n UpdateSchemaFn,\n DetectColumnType,\n} from '../state';\nimport { CreateExportAsyncJobRequest } from '@wix/bex-utils/@wix/ambassador-fedinfra-exportservice-v1-export-async-job/types';\nimport { FiltersMap } from '../model';\n\nexport interface UseImportParams {\n fields: CreateExportAsyncJobRequest['fields'];\n bulkUploadItems: BulkUploadItemsFn;\n backup?: BackupFn;\n updateSchema?: UpdateSchemaFn;\n detectColumnType?: DetectColumnType;\n importModalState: ModalState;\n batchSize?: number;\n}\n\nexport function useCreateImport<T = unknown, F extends FiltersMap = FiltersMap>(\n params: UseImportParams,\n) {\n const {\n fields,\n bulkUploadItems,\n backup,\n updateSchema,\n detectColumnType,\n importModalState,\n batchSize,\n } = params;\n const { showToast, translate, errorHandler, window } =\n useWixPatternsContainer();\n const collection = useCollectionContext<T, F>();\n\n return useCallback(() => {\n return new ImportState({\n fields,\n bulkUploadItems,\n backup,\n updateSchema,\n detectColumnType,\n collection,\n importModalState,\n batchSize,\n showToast,\n translate,\n errorHandler,\n downloadCsv: (content, fileName) => {\n window.download(\n `data:text/csv;charset=utf-8,${encodeURIComponent(content)}`,\n fileName,\n );\n },\n });\n }, []);\n}\n"],"mappings":";;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAqBO,SAASG,eAAeA,CAC7BC,MAAuB,EACvB;EACA,MAAM;IACJC,MAAM;IACNC,eAAe;IACfC,MAAM;IACNC,YAAY;IACZC,gBAAgB;IAChBC,gBAAgB;IAChBC;EACF,CAAC,GAAGP,MAAM;EACV,MAAM;IAAEQ,SAAS;IAAEC,SAAS;IAAEC,YAAY;IAAEC;EAAO,CAAC,GAClD,IAAAC,kCAAuB,EAAC,CAAC;EAC3B,MAAMC,UAAU,GAAG,IAAAC,+BAAoB,EAAO,CAAC;EAE/C,OAAO,IAAAC,kBAAW,EAAC,MAAM;IACvB,OAAO,IAAIC,kBAAW,CAAC;MACrBf,MAAM;MACNC,eAAe;MACfC,MAAM;MACNC,YAAY;MACZC,gBAAgB;MAChBQ,UAAU;MACVP,gBAAgB;MAChBC,SAAS;MACTC,SAAS;MACTC,SAAS;MACTC,YAAY;MACZO,WAAW,EAAEA,CAACC,OAAO,EAAEC,QAAQ,KAAK;QAClCR,MAAM,CAACS,QAAQ,CACb,+BAA+BC,kBAAkB,CAACH,OAAO,CAAC,EAAE,EAC5DC,QACF,CAAC;MACH;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,EAAE,CAAC;AACR","ignoreList":[]}
|
|
@@ -8,10 +8,10 @@ var _mobx = require("mobx");
|
|
|
8
8
|
var _model = require("../../model");
|
|
9
9
|
var _ConditionalModalState = require("../ConditionalModalState");
|
|
10
10
|
var _parseCsv = require("./parseCsv");
|
|
11
|
+
var _detectFieldType = require("./detectFieldType");
|
|
11
12
|
var _set = _interopRequireDefault(require("lodash/set"));
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
// CAIRO-4131.
|
|
13
|
+
// `NewFieldType`, `detectColumnType`, etc. are re-exported from the package via
|
|
14
|
+
// the `ImportState` barrel (`./index`), which also exports `./detectFieldType`.
|
|
15
15
|
|
|
16
16
|
// A new field to add to the collection schema during import. `key` is decided by
|
|
17
17
|
// Cairo (derived from the column header, deduped) and is also the key the
|
|
@@ -102,6 +102,7 @@ class ImportState {
|
|
|
102
102
|
(0, _defineProperty2.default)(this, "showToast", void 0);
|
|
103
103
|
(0, _defineProperty2.default)(this, "downloadCsv", void 0);
|
|
104
104
|
(0, _defineProperty2.default)(this, "batchSize", void 0);
|
|
105
|
+
(0, _defineProperty2.default)(this, "_detectColumnType", void 0);
|
|
105
106
|
(0, _defineProperty2.default)(this, "discardChangesModal", new _ConditionalModalState.ConditionalModalState());
|
|
106
107
|
(0, _defineProperty2.default)(this, "currentStep", 'upload');
|
|
107
108
|
(0, _defineProperty2.default)(this, "importStatus", {
|
|
@@ -139,6 +140,7 @@ class ImportState {
|
|
|
139
140
|
this.showToast = props.showToast;
|
|
140
141
|
this.downloadCsv = props.downloadCsv;
|
|
141
142
|
this.batchSize = props.batchSize ?? DEFAULT_BATCH_SIZE;
|
|
143
|
+
this._detectColumnType = props.detectColumnType ?? _detectFieldType.detectColumnType;
|
|
142
144
|
(0, _mobx.makeObservable)(this, {
|
|
143
145
|
currentStep: _mobx.observable.ref,
|
|
144
146
|
importStatus: _mobx.observable.ref,
|
|
@@ -296,7 +298,7 @@ class ImportState {
|
|
|
296
298
|
id: field.id ?? '',
|
|
297
299
|
header: field.header ?? ''
|
|
298
300
|
}));
|
|
299
|
-
headers.forEach(header => {
|
|
301
|
+
headers.forEach((header, index) => {
|
|
300
302
|
const normalizedHeader = normalize(header);
|
|
301
303
|
const matched = fields.find(field => normalize(field.id) === normalizedHeader || normalize(field.header) === normalizedHeader);
|
|
302
304
|
if (matched != null && matched.id) {
|
|
@@ -305,16 +307,24 @@ class ImportState {
|
|
|
305
307
|
fieldId: matched.id
|
|
306
308
|
};
|
|
307
309
|
} else {
|
|
308
|
-
// Unmatched columns default to creating a new (
|
|
309
|
-
// consumer supplied `updateSchema`;
|
|
310
|
+
// Unmatched columns default to creating a new field (type inferred from
|
|
311
|
+
// the column's data) when the consumer supplied `updateSchema`;
|
|
312
|
+
// otherwise they default to skip.
|
|
310
313
|
mapping[header] = this.canCreateNewField ? {
|
|
311
314
|
kind: 'new',
|
|
312
|
-
fieldType:
|
|
315
|
+
fieldType: this._detectColumnType(this._columnValues(index))
|
|
313
316
|
} : null;
|
|
314
317
|
}
|
|
315
318
|
});
|
|
316
319
|
return mapping;
|
|
317
320
|
}
|
|
321
|
+
|
|
322
|
+
// The column's values, capped at the detection sample size — detection only
|
|
323
|
+
// looks at the first `TYPE_SAMPLE_SIZE` values, so avoid copying the whole
|
|
324
|
+
// column (a wide CSV would otherwise allocate rows × columns strings).
|
|
325
|
+
_columnValues(columnIndex) {
|
|
326
|
+
return this.csvRows.slice(0, _detectFieldType.TYPE_SAMPLE_SIZE).map(row => row[columnIndex] ?? '');
|
|
327
|
+
}
|
|
318
328
|
applyParsedCsv(fileName, parsedCsv) {
|
|
319
329
|
this.fileName = fileName;
|
|
320
330
|
this.csvHeaders = parsedCsv.headers;
|
|
@@ -424,11 +434,13 @@ class ImportState {
|
|
|
424
434
|
};
|
|
425
435
|
}
|
|
426
436
|
setNewFieldMapping(header) {
|
|
437
|
+
const index = this.csvHeaders.indexOf(header);
|
|
438
|
+
const fieldType = index >= 0 ? this._detectColumnType(this._columnValues(index)) : 'text';
|
|
427
439
|
this.mappingByHeader = {
|
|
428
440
|
...this.mappingByHeader,
|
|
429
441
|
[header]: {
|
|
430
442
|
kind: 'new',
|
|
431
|
-
fieldType
|
|
443
|
+
fieldType
|
|
432
444
|
}
|
|
433
445
|
};
|
|
434
446
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_mobx","require","_model","_ConditionalModalState","_parseCsv","_set","_interopRequireDefault","DEFAULT_BATCH_SIZE","COMPLETION_LINGER_MS","normalize","value","trim","toLowerCase","toFieldKey","header","words","split","filter","Boolean","length","map","word","index","charAt","slice","toUpperCase","join","uniqueFieldNameAndKey","usedNames","usedKeys","displayName","suffix","key","has","toMappedRows","rows","headers","mappingByHeader","row","mapped","forEach","mappedField","set","ImportState","constructor","props","_defineProperty2","default","ConditionalModalState","queryStatus","idle","succeeded","failed","errors","fields","bulkUploadItems","backup","updateSchema","collection","importModalState","translate","errorHandler","showToast","downloadCsv","batchSize","makeObservable","currentStep","observable","ref","importStatus","fileName","csvHeaders","csvRows","processedCount","totalCount","result","isBackingUp","isRestoring","hasParsedRows","computed","hasMappings","hasNoMappedData","selectedFieldIds","onUploadContinue","action","bound","goToUpload","setMapping","setNewFieldMapping","close","onFileSelected","startImport","reset","init","undefined","Object","values","some","mappedIndices","reduce","indices","push","Set","m","kind","fieldId","canCreateNewField","_this$_abortControlle","_abortController","abort","restoreFn","_cancelled","_failedRowIndices","_this$_abortControlle2","_restoreBackup","clearResultAndMoveToStart","force","restoreController","AbortController","signal","error","console","runInAction","discardAndGoBack","discardChangesModal","open","modal","promise","discardAndClose","getDefaultMapping","mapping","field","id","normalizedHeader","matched","find","fieldType","applyParsedCsv","parsedCsv","file","bytes","_readFileBytes","_showFileReadErrorToast","content","_decodeUtf8","_rejectFile","parseCsv","name","arrayBuffer","e","TextDecoder","fatal","decode","messageKey","_this$showToast","call","type","message","_this$showToast2","text","onClick","removeToastOnClick","_showPartialSuccessToast","_this$showToast3","String","imported","_downloadFailedRows","_this$downloadCsv","failedRows","unparseCsv","_uploadBatches","batches","processedRows","receivedOkResponse","failedRowIndices","batch","batchStart","batchResult","rowIndex","Math","min","_runBackup","restore","_lingerOnCompletion","Promise","resolve","setTimeout","_resolveFieldMapping","resolved","newFields","add","_createRowsBatches","acc","backupFailed","resolvedMapping","loading","success","data","exports"],"sources":["../../../../src/state/ImportState/ImportState.ts"],"sourcesContent":["import {\n action,\n computed,\n makeObservable,\n observable,\n runInAction,\n} from 'mobx';\nimport {\n queryStatus,\n ShowToast,\n TaskStatus,\n PatternsErrorHandler,\n} from '../../model';\nimport { Translate, TranslationsKeys } from '../../services';\nimport { ModalState } from '../ModalState';\nimport { ConditionalModalState } from '../ConditionalModalState';\nimport { CreateExportAsyncJobRequest } from '@wix/bex-utils/@wix/ambassador-fedinfra-exportservice-v1-export-async-job/types';\nimport { ParseCsvResult, parseCsv, unparseCsv } from './parseCsv';\nimport set from 'lodash/set';\n\nexport interface ImportCollection {\n clearResultAndMoveToStart(params?: { force?: boolean }): void;\n}\n\nexport interface BulkUploadError {\n rowIndex: number;\n message?: string;\n code?: string;\n}\n\nexport interface BulkUploadResults {\n succeeded: number;\n failed: number;\n errors: BulkUploadError[];\n insertedIds?: string[];\n}\n\nexport type BulkUploadItemsFn = (\n items: Record<string, unknown>[],\n) => Promise<BulkUploadResults>;\n\nexport interface BackupResult {\n restore(signal: AbortSignal): Promise<void>;\n}\n\nexport type BackupFn = (signal: AbortSignal) => Promise<BackupResult | void>;\n\nexport type DownloadCsvFn = (content: string, fileName: string) => void;\n\nexport type ImportField = NonNullable<\n CreateExportAsyncJobRequest['fields']\n>[number];\n\n// The field type of a field created during import. Only `text` is supported for\n// now; data-driven type detection (Number/Date/Boolean/URL) is tracked in\n// CAIRO-4131.\nexport type NewFieldType = 'text';\n\n// A new field to add to the collection schema during import. `key` is decided by\n// Cairo (derived from the column header, deduped) and is also the key the\n// column's values are written under, so the consumer must add the field under\n// exactly this key.\nexport interface NewFieldDefinition {\n key: string;\n type: NewFieldType;\n displayName: string;\n}\n\n/**\n * Consumer-supplied callback that adds the given new fields to the collection\n * schema in a single call, before the rows are uploaded. Mirrors the cm-import\n * `beforeImport`/`updateSchema` flow: Cairo decides the fields (and their keys),\n * the consumer performs one schema mutation (e.g. `updateSchema(collectionId,\n * ...addField(key, config))`). Its presence is also the opt-in for the \"create\n * new field\" default — see `getDefaultMapping`.\n */\nexport type UpdateSchemaFn = (fields: NewFieldDefinition[]) => Promise<void>;\n\n/**\n * How a CSV column is mapped:\n * - `existing` — into an existing collection field by id\n * - `new` — into a new field created during import (always text for now)\n * - `null` — don't import (skip)\n */\nexport type ColumnMapping =\n | { kind: 'existing'; fieldId: string }\n | { kind: 'new'; fieldType: NewFieldType }\n | null;\n\nexport interface ImportStateProps {\n fields: CreateExportAsyncJobRequest['fields'];\n bulkUploadItems: BulkUploadItemsFn;\n backup?: BackupFn;\n updateSchema?: UpdateSchemaFn;\n collection: ImportCollection;\n importModalState: ModalState;\n translate: Translate;\n errorHandler: PatternsErrorHandler;\n showToast?: ShowToast;\n downloadCsv?: DownloadCsvFn;\n batchSize?: number;\n}\n\nexport type ImportStep = 'upload' | 'configuration' | 'progress';\n\nconst DEFAULT_BATCH_SIZE = 100;\n\n// How long to keep the completed progress bar (100%) on screen before closing\n// the modal on a clean import. Without it, an import of very few rows finishes\n// near-instantly and the modal appears to vanish without ever showing the bar\n// reaching completion.\nconst COMPLETION_LINGER_MS = 600;\n\nfunction normalize(value: string) {\n return value.trim().toLowerCase();\n}\n\n// camelCase key for a field created from a column header\n// (e.g. \"Product Name\" -> \"productName\").\nfunction toFieldKey(header: string): string {\n const words = header.trim().split(/[^a-zA-Z0-9]+/).filter(Boolean);\n if (words.length === 0) {\n return 'field';\n }\n return words\n .map((word, index) =>\n index === 0\n ? word.charAt(0).toLowerCase() + word.slice(1)\n : word.charAt(0).toUpperCase() + word.slice(1),\n )\n .join('');\n}\n\n// A display name + key for a field created from a column header, unique against\n// both `usedNames` (existing field display names + names already assigned to\n// earlier new columns) and `usedKeys` (existing field ids + keys already\n// assigned). Mirrors cm-import `generateFieldNameAndKey`: when the name or its\n// derived key collides, suffix the *display name* as `\"<header>-<n>\"` and\n// re-derive the key from it — so the created field's name and key are both\n// unique (otherwise two columns with the same header would create fields showing\n// the same name).\nfunction uniqueFieldNameAndKey(\n header: string,\n usedNames: Set<string>,\n usedKeys: Set<string>,\n): { displayName: string; key: string } {\n let displayName = header;\n for (let suffix = 1; ; suffix++) {\n const key = toFieldKey(displayName);\n if (!usedNames.has(displayName) && !usedKeys.has(key)) {\n return { displayName, key };\n }\n displayName = `${header}-${suffix}`;\n }\n}\n\nfunction toMappedRows(\n rows: string[][],\n headers: string[],\n mappingByHeader: Record<string, string | null | undefined>,\n) {\n return rows.map((row) => {\n const mapped: Record<string, unknown> = {};\n\n headers.forEach((header, index) => {\n const mappedField = mappingByHeader[header];\n if (mappedField == null) {\n return;\n }\n\n set(mapped, mappedField, row[index] ?? '');\n });\n\n return mapped;\n });\n}\n\nexport class ImportState {\n readonly fields: ImportField[];\n readonly bulkUploadItems: BulkUploadItemsFn;\n readonly backup?: BackupFn;\n readonly updateSchema?: UpdateSchemaFn;\n readonly collection: ImportCollection;\n readonly importModalState: ModalState;\n readonly translate: Translate;\n readonly errorHandler: PatternsErrorHandler;\n readonly showToast?: ShowToast;\n readonly downloadCsv?: DownloadCsvFn;\n readonly batchSize: number;\n readonly discardChangesModal = new ConditionalModalState<\n 'goBack' | 'close'\n >();\n\n currentStep: ImportStep = 'upload';\n importStatus: TaskStatus<BulkUploadResults, unknown> = {\n ...queryStatus.idle,\n };\n fileName = '';\n csvHeaders: string[] = [];\n csvRows: string[][] = [];\n mappingByHeader: Record<string, ColumnMapping> = {};\n processedCount = 0;\n totalCount = 0;\n result: BulkUploadResults = {\n succeeded: 0,\n failed: 0,\n errors: [],\n };\n isBackingUp = false;\n isRestoring = false;\n private restoreFn: ((signal: AbortSignal) => Promise<void>) | null = null;\n private _cancelled = false;\n private _abortController: AbortController | null = null;\n // Global indices (into `csvRows`) of every row that was not imported: rows\n // the server rejected via a batch's returned `errors`, plus — when a batch\n // throws after some rows succeeded — the throwing batch and all un-attempted\n // rows. Offered to the user as a downloadable CSV via the partial toast.\n private _failedRowIndices: number[] = [];\n\n constructor(props: ImportStateProps) {\n this.fields = (props.fields ?? []) as ImportField[];\n this.bulkUploadItems = props.bulkUploadItems;\n this.backup = props.backup;\n this.updateSchema = props.updateSchema;\n this.collection = props.collection;\n this.importModalState = props.importModalState;\n this.translate = props.translate;\n this.errorHandler = props.errorHandler;\n this.showToast = props.showToast;\n this.downloadCsv = props.downloadCsv;\n this.batchSize = props.batchSize ?? DEFAULT_BATCH_SIZE;\n\n makeObservable(this, {\n currentStep: observable.ref,\n importStatus: observable.ref,\n fileName: observable.ref,\n csvHeaders: observable.ref,\n csvRows: observable.ref,\n mappingByHeader: observable.ref,\n processedCount: observable.ref,\n totalCount: observable.ref,\n result: observable.ref,\n isBackingUp: observable.ref,\n isRestoring: observable.ref,\n hasParsedRows: computed,\n hasMappings: computed,\n hasNoMappedData: computed,\n selectedFieldIds: computed,\n onUploadContinue: action.bound,\n goToUpload: action.bound,\n setMapping: action.bound,\n setNewFieldMapping: action.bound,\n close: action.bound,\n onFileSelected: action.bound,\n startImport: action.bound,\n reset: action.bound,\n });\n }\n\n init() {\n return () => undefined;\n }\n\n get hasParsedRows() {\n return this.csvHeaders.length > 0 && this.csvRows.length > 0;\n }\n\n get hasMappings() {\n return Object.values(this.mappingByHeader).some((value) => value != null);\n }\n\n /**\n * True when there are mappings but none of the mapped columns contain any\n * data in any row (including the case of zero data rows). Drives the\n * non-blocking \"no rows found\" warning in the configuration step. Returns\n * false when nothing is mapped yet — that case is handled by the disabled\n * import button instead.\n */\n get hasNoMappedData(): boolean {\n if (!this.hasMappings) {\n return false;\n }\n\n const mappedIndices = this.csvHeaders.reduce<number[]>(\n (indices, header, index) => {\n if (this.mappingByHeader[header] != null) {\n indices.push(index);\n }\n return indices;\n },\n [],\n );\n\n return !this.csvRows.some((row) =>\n mappedIndices.some((index) => (row[index] ?? '').trim() !== ''),\n );\n }\n\n get selectedFieldIds(): Set<string> {\n return new Set(\n Object.values(this.mappingByHeader)\n .filter(\n (m): m is { kind: 'existing'; fieldId: string } =>\n m?.kind === 'existing',\n )\n .map((m) => m.fieldId),\n );\n }\n\n /**\n * Whether columns may be mapped to a brand-new field created during import.\n * Driven purely by the presence of the `updateSchema` callback — providing the\n * capability is the opt-in (see `getDefaultMapping`). Never changes after\n * construction, so it isn't an observable.\n */\n get canCreateNewField(): boolean {\n return this.updateSchema != null;\n }\n\n reset() {\n this._abortController?.abort();\n this._abortController = null;\n this.currentStep = 'upload';\n this.importStatus = {\n ...queryStatus.idle,\n };\n this.fileName = '';\n this.csvHeaders = [];\n this.csvRows = [];\n this.mappingByHeader = {};\n this.processedCount = 0;\n this.totalCount = 0;\n this.result = {\n succeeded: 0,\n failed: 0,\n errors: [],\n };\n this.isBackingUp = false;\n this.isRestoring = false;\n this.restoreFn = null;\n this._cancelled = false;\n this._failedRowIndices = [];\n }\n\n async close() {\n if (this.currentStep === 'progress') {\n this._cancelled = true;\n this._abortController?.abort();\n\n if (!this.isBackingUp) {\n await this._restoreBackup();\n }\n\n this.collection.clearResultAndMoveToStart({\n force: true,\n });\n }\n\n this.importModalState.close();\n }\n\n private async _restoreBackup() {\n const restoreFn = this.restoreFn;\n if (!restoreFn) {\n return;\n }\n\n const restoreController = new AbortController();\n this._abortController = restoreController;\n\n this.isRestoring = true;\n try {\n await restoreFn(restoreController.signal);\n } catch (error) {\n console.error('Restore failed', error);\n }\n runInAction(() => {\n this.isRestoring = false;\n this.restoreFn = null;\n });\n }\n\n goToUpload() {\n this.currentStep = 'upload';\n }\n\n async discardAndGoBack() {\n this.discardChangesModal.open('goBack');\n const { result } = await this.discardChangesModal.modal.promise();\n if (result === 'confirmed') {\n this.goToUpload();\n }\n }\n\n async discardAndClose() {\n this.discardChangesModal.open('close');\n const { result } = await this.discardChangesModal.modal.promise();\n if (result === 'confirmed') {\n this.close();\n }\n }\n\n onUploadContinue() {\n if (this.hasParsedRows) {\n this.currentStep = 'configuration';\n }\n }\n\n private getDefaultMapping(headers: string[]) {\n const mapping: Record<string, ColumnMapping> = {};\n const fields = this.fields.map((field) => ({\n id: field.id ?? '',\n header: field.header ?? '',\n }));\n\n headers.forEach((header) => {\n const normalizedHeader = normalize(header);\n const matched = fields.find(\n (field) =>\n normalize(field.id) === normalizedHeader ||\n normalize(field.header) === normalizedHeader,\n );\n\n if (matched?.id) {\n mapping[header] = { kind: 'existing', fieldId: matched.id };\n } else {\n // Unmatched columns default to creating a new (text) field when the\n // consumer supplied `updateSchema`; otherwise they default to skip.\n mapping[header] = this.canCreateNewField\n ? { kind: 'new', fieldType: 'text' }\n : null;\n }\n });\n\n return mapping;\n }\n\n private applyParsedCsv(fileName: string, parsedCsv: ParseCsvResult) {\n this.fileName = fileName;\n this.csvHeaders = parsedCsv.headers;\n this.csvRows = parsedCsv.rows;\n this.mappingByHeader = this.getDefaultMapping(parsedCsv.headers);\n this.currentStep = 'configuration';\n }\n\n async onFileSelected(file: File | null) {\n if (file == null) {\n return;\n }\n\n const bytes = await this._readFileBytes(file);\n if (bytes == null) {\n this._showFileReadErrorToast(file);\n return;\n }\n\n const content = this._decodeUtf8(bytes);\n if (content == null) {\n this._rejectFile(file, 'cairo.import.encodingFailed');\n return;\n }\n\n const parsedCsv = parseCsv(content);\n if ('code' in parsedCsv) {\n this._rejectFile(file, 'cairo.import.processFailed');\n return;\n }\n\n runInAction(() => {\n this.applyParsedCsv(file.name, parsedCsv);\n });\n }\n\n private async _readFileBytes(file: File): Promise<ArrayBuffer | null> {\n try {\n return await file.arrayBuffer();\n } catch (e) {\n console.error(e);\n return null;\n }\n }\n\n private _decodeUtf8(bytes: ArrayBuffer): string | null {\n try {\n // `fatal: true` throws on any byte sequence that isn't valid UTF-8,\n // so encoding is validated against the raw bytes before decoding —\n // unlike `File.text()`, which silently substitutes U+FFFD.\n return new TextDecoder('utf-8', { fatal: true }).decode(bytes);\n } catch (e) {\n console.error(e);\n return null;\n }\n }\n\n private _rejectFile(file: File, messageKey: TranslationsKeys) {\n runInAction(() => {\n this.fileName = file.name;\n this.csvHeaders = [];\n this.csvRows = [];\n this.mappingByHeader = {};\n this.currentStep = 'upload';\n });\n this.showToast?.({\n type: 'ERROR',\n message: this.translate(messageKey),\n });\n }\n\n private _showFileReadErrorToast(file: File) {\n this.showToast?.({\n type: 'ERROR',\n message: this.translate('cairo.import.fileReadFailed'),\n action: {\n text: this.translate('cairo.import.tryAgain'),\n onClick: () => this.onFileSelected(file),\n removeToastOnClick: true,\n },\n });\n }\n\n private _showPartialSuccessToast() {\n const failed = this._failedRowIndices.length;\n this.showToast?.({\n type: 'WARNING',\n message: this.translate('cairo.import.partialSuccessToast', {\n failed: String(failed),\n imported: String(this.totalCount - failed),\n }),\n action: {\n text: this.translate('cairo.import.downloadFailedRows'),\n onClick: () => this._downloadFailedRows(),\n removeToastOnClick: true,\n },\n });\n }\n\n private _downloadFailedRows() {\n const failedRows = this._failedRowIndices.map(\n (index) => this.csvRows[index],\n );\n const content = unparseCsv(this.csvHeaders, failedRows);\n this.downloadCsv?.(content, `failed-${this.fileName || 'import.csv'}`);\n }\n\n setMapping(header: string, fieldId: string | null) {\n this.mappingByHeader = {\n ...this.mappingByHeader,\n [header]: fieldId == null ? null : { kind: 'existing', fieldId },\n };\n }\n\n setNewFieldMapping(header: string) {\n this.mappingByHeader = {\n ...this.mappingByHeader,\n [header]: { kind: 'new', fieldType: 'text' },\n };\n }\n\n private async _uploadBatches(batches: Record<string, unknown>[][]) {\n let processedRows = 0;\n let receivedOkResponse = false;\n const failedRowIndices: number[] = [];\n\n for (const batch of batches) {\n if (this._cancelled) {\n break;\n }\n\n const batchStart = processedRows;\n\n try {\n const batchResult = await this.bulkUploadItems(batch);\n receivedOkResponse = true;\n\n this.result = {\n succeeded: this.result.succeeded + batchResult.succeeded,\n failed: this.result.failed + batchResult.failed,\n errors: [...this.result.errors, ...batchResult.errors],\n };\n\n // Rows the server rejected within an otherwise-OK response. `rowIndex`\n // is relative to the batch, so offset it to a global `csvRows` index.\n for (const { rowIndex } of batchResult.errors) {\n failedRowIndices.push(batchStart + rowIndex);\n }\n } catch (error) {\n // Full batch failure: a batch threw before any OK response came back.\n // Surface it as an error state with a \"Try again\" action by rejecting\n // up to `startImport`, instead of reporting a partial success.\n if (!receivedOkResponse) {\n throw error;\n }\n\n // A batch threw after some rows were already imported. Every row from\n // the throwing batch onward (including the batches we won't attempt)\n // counts as failed, on top of any rows already rejected via returned\n // errors in earlier batches.\n for (let index = batchStart; index < this.totalCount; index++) {\n failedRowIndices.push(index);\n }\n\n break;\n }\n\n processedRows += batch.length;\n\n runInAction(() => {\n this.processedCount = Math.min(processedRows, this.totalCount);\n });\n }\n\n this._failedRowIndices = failedRowIndices;\n\n return this.result;\n }\n\n private async _runBackup(): Promise<boolean> {\n const backup = this.backup;\n if (!backup) {\n return false;\n }\n\n try {\n const result = await backup(this._abortController!.signal);\n if (this._cancelled) {\n return true;\n }\n if (result?.restore) {\n this.restoreFn = result.restore;\n }\n } catch (error) {\n if (this._cancelled) {\n return true;\n }\n runInAction(() => {\n this.isBackingUp = false;\n this.importStatus = {\n ...queryStatus.error,\n error,\n };\n });\n return true;\n }\n\n runInAction(() => {\n this.isBackingUp = false;\n });\n return false;\n }\n\n private _lingerOnCompletion() {\n return new Promise<void>((resolve) =>\n setTimeout(resolve, COMPLETION_LINGER_MS),\n );\n }\n\n /**\n * Resolves every column to the final destination key used in the upload\n * payload: an existing field id, a new field's (Cairo-decided) key, or `null`\n * to skip. All new fields are added to the schema in a single `updateSchema`\n * call before the rows upload — mirroring the cm-import `beforeImport` flow.\n * `updateSchema` may throw — `startImport` surfaces that as the error state.\n */\n private async _resolveFieldMapping(): Promise<Record<string, string | null>> {\n const resolved: Record<string, string | null> = {};\n const newFields: NewFieldDefinition[] = [];\n // Seed with existing field ids/display names so derived keys and names never\n // collide with them or with each other.\n const usedKeys = new Set(\n this.fields.map((field) => field.id).filter((id): id is string => !!id),\n );\n const usedNames = new Set(\n this.fields\n .map((field) => field.header)\n .filter((header): header is string => !!header),\n );\n\n for (const header of this.csvHeaders) {\n const mapping = this.mappingByHeader[header];\n\n if (mapping == null) {\n resolved[header] = null;\n } else if (mapping.kind === 'existing') {\n resolved[header] = mapping.fieldId;\n } else if (this.updateSchema) {\n const { displayName, key } = uniqueFieldNameAndKey(\n header,\n usedNames,\n usedKeys,\n );\n usedKeys.add(key);\n usedNames.add(displayName);\n newFields.push({ key, type: mapping.fieldType, displayName });\n resolved[header] = key;\n } else {\n // \"new\" mapping without an `updateSchema` callback — nothing to map into.\n resolved[header] = null;\n }\n }\n\n if (newFields.length > 0 && this.updateSchema) {\n await this.updateSchema(newFields);\n }\n\n return resolved;\n }\n\n private _createRowsBatches(rows: Record<string, unknown>[]) {\n return rows.reduce<Record<string, unknown>[][]>((acc, row, index) => {\n if (index % this.batchSize === 0) {\n acc.push([]);\n }\n acc[acc.length - 1].push(row);\n return acc;\n }, []);\n }\n\n async startImport() {\n if (!this.hasMappings) {\n return;\n }\n\n this._cancelled = false;\n this._abortController = new AbortController();\n\n // One mapped row is produced per CSV row, so the total is known up front and\n // doesn't depend on field creation below.\n const totalCount = this.csvRows.length;\n\n runInAction(() => {\n this.currentStep = 'progress';\n this.totalCount = totalCount;\n this.processedCount = 0;\n this.isBackingUp = !!this.backup;\n // Clear any error/result from a previous attempt so \"Try again\" starts\n // from a clean slate (e.g. after a backup failure).\n this.importStatus = { ...queryStatus.idle };\n this.result = {\n succeeded: 0,\n failed: 0,\n errors: [],\n };\n this._failedRowIndices = [];\n });\n\n const backupFailed = await this._runBackup();\n if (backupFailed) {\n return;\n }\n if (this._cancelled) {\n return;\n }\n\n // Create any new fields and resolve every column to its destination key\n // before building the payload. A creation failure surfaces as the error\n // state with a \"Try again\" CTA, like a first-batch upload failure.\n let resolvedMapping: Record<string, string | null>;\n try {\n resolvedMapping = await this._resolveFieldMapping();\n } catch (error) {\n runInAction(() => {\n this.importStatus = {\n ...queryStatus.error,\n error,\n };\n });\n return;\n }\n if (this._cancelled) {\n return;\n }\n\n const rows = toMappedRows(this.csvRows, this.csvHeaders, resolvedMapping);\n const batches = this._createRowsBatches(rows);\n\n const promise = this._uploadBatches(batches);\n\n this.importStatus = {\n ...queryStatus.loading,\n promise,\n };\n\n try {\n await promise;\n if (this._cancelled) {\n return;\n }\n\n runInAction(() => {\n this.importStatus = {\n ...queryStatus.success,\n data: this.result,\n };\n });\n\n // On a clean import, hold the completed (100%) progress bar on screen\n // briefly so the completion is perceptible even for very few rows. Skip\n // the wait when there are failed rows — that path closes and surfaces a\n // toast instead.\n if (this._failedRowIndices.length === 0) {\n await this._lingerOnCompletion();\n if (this._cancelled) {\n return;\n }\n }\n\n runInAction(() => {\n // Any rows that didn't make it in — whether rejected via a batch's\n // returned `errors` or left unimported when a batch threw — are\n // reported via a toast that offers them as a downloadable CSV.\n if (this._failedRowIndices.length > 0) {\n this._showPartialSuccessToast();\n }\n\n this.importModalState.close();\n this.collection.clearResultAndMoveToStart({ force: true });\n });\n } catch (error) {\n runInAction(() => {\n this.importStatus = {\n ...queryStatus.error,\n error,\n };\n });\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_mobx","require","_model","_ConditionalModalState","_parseCsv","_detectFieldType","_set","_interopRequireDefault","DEFAULT_BATCH_SIZE","COMPLETION_LINGER_MS","normalize","value","trim","toLowerCase","toFieldKey","header","words","split","filter","Boolean","length","map","word","index","charAt","slice","toUpperCase","join","uniqueFieldNameAndKey","usedNames","usedKeys","displayName","suffix","key","has","toMappedRows","rows","headers","mappingByHeader","row","mapped","forEach","mappedField","set","ImportState","constructor","props","_defineProperty2","default","ConditionalModalState","queryStatus","idle","succeeded","failed","errors","fields","bulkUploadItems","backup","updateSchema","collection","importModalState","translate","errorHandler","showToast","downloadCsv","batchSize","_detectColumnType","detectColumnType","makeObservable","currentStep","observable","ref","importStatus","fileName","csvHeaders","csvRows","processedCount","totalCount","result","isBackingUp","isRestoring","hasParsedRows","computed","hasMappings","hasNoMappedData","selectedFieldIds","onUploadContinue","action","bound","goToUpload","setMapping","setNewFieldMapping","close","onFileSelected","startImport","reset","init","undefined","Object","values","some","mappedIndices","reduce","indices","push","Set","m","kind","fieldId","canCreateNewField","_this$_abortControlle","_abortController","abort","restoreFn","_cancelled","_failedRowIndices","_this$_abortControlle2","_restoreBackup","clearResultAndMoveToStart","force","restoreController","AbortController","signal","error","console","runInAction","discardAndGoBack","discardChangesModal","open","modal","promise","discardAndClose","getDefaultMapping","mapping","field","id","normalizedHeader","matched","find","fieldType","_columnValues","columnIndex","TYPE_SAMPLE_SIZE","applyParsedCsv","parsedCsv","file","bytes","_readFileBytes","_showFileReadErrorToast","content","_decodeUtf8","_rejectFile","parseCsv","name","arrayBuffer","e","TextDecoder","fatal","decode","messageKey","_this$showToast","call","type","message","_this$showToast2","text","onClick","removeToastOnClick","_showPartialSuccessToast","_this$showToast3","String","imported","_downloadFailedRows","_this$downloadCsv","failedRows","unparseCsv","indexOf","_uploadBatches","batches","processedRows","receivedOkResponse","failedRowIndices","batch","batchStart","batchResult","rowIndex","Math","min","_runBackup","restore","_lingerOnCompletion","Promise","resolve","setTimeout","_resolveFieldMapping","resolved","newFields","add","_createRowsBatches","acc","backupFailed","resolvedMapping","loading","success","data","exports"],"sources":["../../../../src/state/ImportState/ImportState.ts"],"sourcesContent":["import {\n action,\n computed,\n makeObservable,\n observable,\n runInAction,\n} from 'mobx';\nimport {\n queryStatus,\n ShowToast,\n TaskStatus,\n PatternsErrorHandler,\n} from '../../model';\nimport { Translate, TranslationsKeys } from '../../services';\nimport { ModalState } from '../ModalState';\nimport { ConditionalModalState } from '../ConditionalModalState';\nimport { CreateExportAsyncJobRequest } from '@wix/bex-utils/@wix/ambassador-fedinfra-exportservice-v1-export-async-job/types';\nimport { ParseCsvResult, parseCsv, unparseCsv } from './parseCsv';\nimport {\n detectColumnType,\n TYPE_SAMPLE_SIZE,\n type DetectColumnType,\n type NewFieldType,\n} from './detectFieldType';\nimport set from 'lodash/set';\n\nexport interface ImportCollection {\n clearResultAndMoveToStart(params?: { force?: boolean }): void;\n}\n\nexport interface BulkUploadError {\n rowIndex: number;\n message?: string;\n code?: string;\n}\n\nexport interface BulkUploadResults {\n succeeded: number;\n failed: number;\n errors: BulkUploadError[];\n insertedIds?: string[];\n}\n\nexport type BulkUploadItemsFn = (\n items: Record<string, unknown>[],\n) => Promise<BulkUploadResults>;\n\nexport interface BackupResult {\n restore(signal: AbortSignal): Promise<void>;\n}\n\nexport type BackupFn = (signal: AbortSignal) => Promise<BackupResult | void>;\n\nexport type DownloadCsvFn = (content: string, fileName: string) => void;\n\nexport type ImportField = NonNullable<\n CreateExportAsyncJobRequest['fields']\n>[number];\n\n// `NewFieldType`, `detectColumnType`, etc. are re-exported from the package via\n// the `ImportState` barrel (`./index`), which also exports `./detectFieldType`.\n\n// A new field to add to the collection schema during import. `key` is decided by\n// Cairo (derived from the column header, deduped) and is also the key the\n// column's values are written under, so the consumer must add the field under\n// exactly this key.\nexport interface NewFieldDefinition {\n key: string;\n type: NewFieldType;\n displayName: string;\n}\n\n/**\n * Consumer-supplied callback that adds the given new fields to the collection\n * schema in a single call, before the rows are uploaded. Mirrors the cm-import\n * `beforeImport`/`updateSchema` flow: Cairo decides the fields (and their keys),\n * the consumer performs one schema mutation (e.g. `updateSchema(collectionId,\n * ...addField(key, config))`). Its presence is also the opt-in for the \"create\n * new field\" default — see `getDefaultMapping`.\n */\nexport type UpdateSchemaFn = (fields: NewFieldDefinition[]) => Promise<void>;\n\n/**\n * How a CSV column is mapped:\n * - `existing` — into an existing collection field by id\n * - `new` — into a new field created during import (always text for now)\n * - `null` — don't import (skip)\n */\nexport type ColumnMapping =\n | { kind: 'existing'; fieldId: string }\n | { kind: 'new'; fieldType: NewFieldType }\n | null;\n\nexport interface ImportStateProps {\n fields: CreateExportAsyncJobRequest['fields'];\n bulkUploadItems: BulkUploadItemsFn;\n backup?: BackupFn;\n updateSchema?: UpdateSchemaFn;\n /**\n * Infers a new field's type from its column data. Defaults to the primitive\n * detector (number / date / boolean / url / text). `@wix/patterns` injects a\n * media-aware detector from `@wix/patterns-fields` (image / video / document /\n * audio) — that detection needs the media URI parser, which core can't depend\n * on.\n */\n detectColumnType?: DetectColumnType;\n collection: ImportCollection;\n importModalState: ModalState;\n translate: Translate;\n errorHandler: PatternsErrorHandler;\n showToast?: ShowToast;\n downloadCsv?: DownloadCsvFn;\n batchSize?: number;\n}\n\nexport type ImportStep = 'upload' | 'configuration' | 'progress';\n\nconst DEFAULT_BATCH_SIZE = 100;\n\n// How long to keep the completed progress bar (100%) on screen before closing\n// the modal on a clean import. Without it, an import of very few rows finishes\n// near-instantly and the modal appears to vanish without ever showing the bar\n// reaching completion.\nconst COMPLETION_LINGER_MS = 600;\n\nfunction normalize(value: string) {\n return value.trim().toLowerCase();\n}\n\n// camelCase key for a field created from a column header\n// (e.g. \"Product Name\" -> \"productName\").\nfunction toFieldKey(header: string): string {\n const words = header.trim().split(/[^a-zA-Z0-9]+/).filter(Boolean);\n if (words.length === 0) {\n return 'field';\n }\n return words\n .map((word, index) =>\n index === 0\n ? word.charAt(0).toLowerCase() + word.slice(1)\n : word.charAt(0).toUpperCase() + word.slice(1),\n )\n .join('');\n}\n\n// A display name + key for a field created from a column header, unique against\n// both `usedNames` (existing field display names + names already assigned to\n// earlier new columns) and `usedKeys` (existing field ids + keys already\n// assigned). Mirrors cm-import `generateFieldNameAndKey`: when the name or its\n// derived key collides, suffix the *display name* as `\"<header>-<n>\"` and\n// re-derive the key from it — so the created field's name and key are both\n// unique (otherwise two columns with the same header would create fields showing\n// the same name).\nfunction uniqueFieldNameAndKey(\n header: string,\n usedNames: Set<string>,\n usedKeys: Set<string>,\n): { displayName: string; key: string } {\n let displayName = header;\n for (let suffix = 1; ; suffix++) {\n const key = toFieldKey(displayName);\n if (!usedNames.has(displayName) && !usedKeys.has(key)) {\n return { displayName, key };\n }\n displayName = `${header}-${suffix}`;\n }\n}\n\nfunction toMappedRows(\n rows: string[][],\n headers: string[],\n mappingByHeader: Record<string, string | null | undefined>,\n) {\n return rows.map((row) => {\n const mapped: Record<string, unknown> = {};\n\n headers.forEach((header, index) => {\n const mappedField = mappingByHeader[header];\n if (mappedField == null) {\n return;\n }\n\n set(mapped, mappedField, row[index] ?? '');\n });\n\n return mapped;\n });\n}\n\nexport class ImportState {\n readonly fields: ImportField[];\n readonly bulkUploadItems: BulkUploadItemsFn;\n readonly backup?: BackupFn;\n readonly updateSchema?: UpdateSchemaFn;\n readonly collection: ImportCollection;\n readonly importModalState: ModalState;\n readonly translate: Translate;\n readonly errorHandler: PatternsErrorHandler;\n readonly showToast?: ShowToast;\n readonly downloadCsv?: DownloadCsvFn;\n readonly batchSize: number;\n private readonly _detectColumnType: DetectColumnType;\n readonly discardChangesModal = new ConditionalModalState<\n 'goBack' | 'close'\n >();\n\n currentStep: ImportStep = 'upload';\n importStatus: TaskStatus<BulkUploadResults, unknown> = {\n ...queryStatus.idle,\n };\n fileName = '';\n csvHeaders: string[] = [];\n csvRows: string[][] = [];\n mappingByHeader: Record<string, ColumnMapping> = {};\n processedCount = 0;\n totalCount = 0;\n result: BulkUploadResults = {\n succeeded: 0,\n failed: 0,\n errors: [],\n };\n isBackingUp = false;\n isRestoring = false;\n private restoreFn: ((signal: AbortSignal) => Promise<void>) | null = null;\n private _cancelled = false;\n private _abortController: AbortController | null = null;\n // Global indices (into `csvRows`) of every row that was not imported: rows\n // the server rejected via a batch's returned `errors`, plus — when a batch\n // throws after some rows succeeded — the throwing batch and all un-attempted\n // rows. Offered to the user as a downloadable CSV via the partial toast.\n private _failedRowIndices: number[] = [];\n\n constructor(props: ImportStateProps) {\n this.fields = (props.fields ?? []) as ImportField[];\n this.bulkUploadItems = props.bulkUploadItems;\n this.backup = props.backup;\n this.updateSchema = props.updateSchema;\n this.collection = props.collection;\n this.importModalState = props.importModalState;\n this.translate = props.translate;\n this.errorHandler = props.errorHandler;\n this.showToast = props.showToast;\n this.downloadCsv = props.downloadCsv;\n this.batchSize = props.batchSize ?? DEFAULT_BATCH_SIZE;\n this._detectColumnType = props.detectColumnType ?? detectColumnType;\n\n makeObservable(this, {\n currentStep: observable.ref,\n importStatus: observable.ref,\n fileName: observable.ref,\n csvHeaders: observable.ref,\n csvRows: observable.ref,\n mappingByHeader: observable.ref,\n processedCount: observable.ref,\n totalCount: observable.ref,\n result: observable.ref,\n isBackingUp: observable.ref,\n isRestoring: observable.ref,\n hasParsedRows: computed,\n hasMappings: computed,\n hasNoMappedData: computed,\n selectedFieldIds: computed,\n onUploadContinue: action.bound,\n goToUpload: action.bound,\n setMapping: action.bound,\n setNewFieldMapping: action.bound,\n close: action.bound,\n onFileSelected: action.bound,\n startImport: action.bound,\n reset: action.bound,\n });\n }\n\n init() {\n return () => undefined;\n }\n\n get hasParsedRows() {\n return this.csvHeaders.length > 0 && this.csvRows.length > 0;\n }\n\n get hasMappings() {\n return Object.values(this.mappingByHeader).some((value) => value != null);\n }\n\n /**\n * True when there are mappings but none of the mapped columns contain any\n * data in any row (including the case of zero data rows). Drives the\n * non-blocking \"no rows found\" warning in the configuration step. Returns\n * false when nothing is mapped yet — that case is handled by the disabled\n * import button instead.\n */\n get hasNoMappedData(): boolean {\n if (!this.hasMappings) {\n return false;\n }\n\n const mappedIndices = this.csvHeaders.reduce<number[]>(\n (indices, header, index) => {\n if (this.mappingByHeader[header] != null) {\n indices.push(index);\n }\n return indices;\n },\n [],\n );\n\n return !this.csvRows.some((row) =>\n mappedIndices.some((index) => (row[index] ?? '').trim() !== ''),\n );\n }\n\n get selectedFieldIds(): Set<string> {\n return new Set(\n Object.values(this.mappingByHeader)\n .filter(\n (m): m is { kind: 'existing'; fieldId: string } =>\n m?.kind === 'existing',\n )\n .map((m) => m.fieldId),\n );\n }\n\n /**\n * Whether columns may be mapped to a brand-new field created during import.\n * Driven purely by the presence of the `updateSchema` callback — providing the\n * capability is the opt-in (see `getDefaultMapping`). Never changes after\n * construction, so it isn't an observable.\n */\n get canCreateNewField(): boolean {\n return this.updateSchema != null;\n }\n\n reset() {\n this._abortController?.abort();\n this._abortController = null;\n this.currentStep = 'upload';\n this.importStatus = {\n ...queryStatus.idle,\n };\n this.fileName = '';\n this.csvHeaders = [];\n this.csvRows = [];\n this.mappingByHeader = {};\n this.processedCount = 0;\n this.totalCount = 0;\n this.result = {\n succeeded: 0,\n failed: 0,\n errors: [],\n };\n this.isBackingUp = false;\n this.isRestoring = false;\n this.restoreFn = null;\n this._cancelled = false;\n this._failedRowIndices = [];\n }\n\n async close() {\n if (this.currentStep === 'progress') {\n this._cancelled = true;\n this._abortController?.abort();\n\n if (!this.isBackingUp) {\n await this._restoreBackup();\n }\n\n this.collection.clearResultAndMoveToStart({\n force: true,\n });\n }\n\n this.importModalState.close();\n }\n\n private async _restoreBackup() {\n const restoreFn = this.restoreFn;\n if (!restoreFn) {\n return;\n }\n\n const restoreController = new AbortController();\n this._abortController = restoreController;\n\n this.isRestoring = true;\n try {\n await restoreFn(restoreController.signal);\n } catch (error) {\n console.error('Restore failed', error);\n }\n runInAction(() => {\n this.isRestoring = false;\n this.restoreFn = null;\n });\n }\n\n goToUpload() {\n this.currentStep = 'upload';\n }\n\n async discardAndGoBack() {\n this.discardChangesModal.open('goBack');\n const { result } = await this.discardChangesModal.modal.promise();\n if (result === 'confirmed') {\n this.goToUpload();\n }\n }\n\n async discardAndClose() {\n this.discardChangesModal.open('close');\n const { result } = await this.discardChangesModal.modal.promise();\n if (result === 'confirmed') {\n this.close();\n }\n }\n\n onUploadContinue() {\n if (this.hasParsedRows) {\n this.currentStep = 'configuration';\n }\n }\n\n private getDefaultMapping(headers: string[]) {\n const mapping: Record<string, ColumnMapping> = {};\n const fields = this.fields.map((field) => ({\n id: field.id ?? '',\n header: field.header ?? '',\n }));\n\n headers.forEach((header, index) => {\n const normalizedHeader = normalize(header);\n const matched = fields.find(\n (field) =>\n normalize(field.id) === normalizedHeader ||\n normalize(field.header) === normalizedHeader,\n );\n\n if (matched?.id) {\n mapping[header] = { kind: 'existing', fieldId: matched.id };\n } else {\n // Unmatched columns default to creating a new field (type inferred from\n // the column's data) when the consumer supplied `updateSchema`;\n // otherwise they default to skip.\n mapping[header] = this.canCreateNewField\n ? {\n kind: 'new',\n fieldType: this._detectColumnType(this._columnValues(index)),\n }\n : null;\n }\n });\n\n return mapping;\n }\n\n // The column's values, capped at the detection sample size — detection only\n // looks at the first `TYPE_SAMPLE_SIZE` values, so avoid copying the whole\n // column (a wide CSV would otherwise allocate rows × columns strings).\n private _columnValues(columnIndex: number): string[] {\n return this.csvRows\n .slice(0, TYPE_SAMPLE_SIZE)\n .map((row) => row[columnIndex] ?? '');\n }\n\n private applyParsedCsv(fileName: string, parsedCsv: ParseCsvResult) {\n this.fileName = fileName;\n this.csvHeaders = parsedCsv.headers;\n this.csvRows = parsedCsv.rows;\n this.mappingByHeader = this.getDefaultMapping(parsedCsv.headers);\n this.currentStep = 'configuration';\n }\n\n async onFileSelected(file: File | null) {\n if (file == null) {\n return;\n }\n\n const bytes = await this._readFileBytes(file);\n if (bytes == null) {\n this._showFileReadErrorToast(file);\n return;\n }\n\n const content = this._decodeUtf8(bytes);\n if (content == null) {\n this._rejectFile(file, 'cairo.import.encodingFailed');\n return;\n }\n\n const parsedCsv = parseCsv(content);\n if ('code' in parsedCsv) {\n this._rejectFile(file, 'cairo.import.processFailed');\n return;\n }\n\n runInAction(() => {\n this.applyParsedCsv(file.name, parsedCsv);\n });\n }\n\n private async _readFileBytes(file: File): Promise<ArrayBuffer | null> {\n try {\n return await file.arrayBuffer();\n } catch (e) {\n console.error(e);\n return null;\n }\n }\n\n private _decodeUtf8(bytes: ArrayBuffer): string | null {\n try {\n // `fatal: true` throws on any byte sequence that isn't valid UTF-8,\n // so encoding is validated against the raw bytes before decoding —\n // unlike `File.text()`, which silently substitutes U+FFFD.\n return new TextDecoder('utf-8', { fatal: true }).decode(bytes);\n } catch (e) {\n console.error(e);\n return null;\n }\n }\n\n private _rejectFile(file: File, messageKey: TranslationsKeys) {\n runInAction(() => {\n this.fileName = file.name;\n this.csvHeaders = [];\n this.csvRows = [];\n this.mappingByHeader = {};\n this.currentStep = 'upload';\n });\n this.showToast?.({\n type: 'ERROR',\n message: this.translate(messageKey),\n });\n }\n\n private _showFileReadErrorToast(file: File) {\n this.showToast?.({\n type: 'ERROR',\n message: this.translate('cairo.import.fileReadFailed'),\n action: {\n text: this.translate('cairo.import.tryAgain'),\n onClick: () => this.onFileSelected(file),\n removeToastOnClick: true,\n },\n });\n }\n\n private _showPartialSuccessToast() {\n const failed = this._failedRowIndices.length;\n this.showToast?.({\n type: 'WARNING',\n message: this.translate('cairo.import.partialSuccessToast', {\n failed: String(failed),\n imported: String(this.totalCount - failed),\n }),\n action: {\n text: this.translate('cairo.import.downloadFailedRows'),\n onClick: () => this._downloadFailedRows(),\n removeToastOnClick: true,\n },\n });\n }\n\n private _downloadFailedRows() {\n const failedRows = this._failedRowIndices.map(\n (index) => this.csvRows[index],\n );\n const content = unparseCsv(this.csvHeaders, failedRows);\n this.downloadCsv?.(content, `failed-${this.fileName || 'import.csv'}`);\n }\n\n setMapping(header: string, fieldId: string | null) {\n this.mappingByHeader = {\n ...this.mappingByHeader,\n [header]: fieldId == null ? null : { kind: 'existing', fieldId },\n };\n }\n\n setNewFieldMapping(header: string) {\n const index = this.csvHeaders.indexOf(header);\n const fieldType =\n index >= 0 ? this._detectColumnType(this._columnValues(index)) : 'text';\n this.mappingByHeader = {\n ...this.mappingByHeader,\n [header]: { kind: 'new', fieldType },\n };\n }\n\n private async _uploadBatches(batches: Record<string, unknown>[][]) {\n let processedRows = 0;\n let receivedOkResponse = false;\n const failedRowIndices: number[] = [];\n\n for (const batch of batches) {\n if (this._cancelled) {\n break;\n }\n\n const batchStart = processedRows;\n\n try {\n const batchResult = await this.bulkUploadItems(batch);\n receivedOkResponse = true;\n\n this.result = {\n succeeded: this.result.succeeded + batchResult.succeeded,\n failed: this.result.failed + batchResult.failed,\n errors: [...this.result.errors, ...batchResult.errors],\n };\n\n // Rows the server rejected within an otherwise-OK response. `rowIndex`\n // is relative to the batch, so offset it to a global `csvRows` index.\n for (const { rowIndex } of batchResult.errors) {\n failedRowIndices.push(batchStart + rowIndex);\n }\n } catch (error) {\n // Full batch failure: a batch threw before any OK response came back.\n // Surface it as an error state with a \"Try again\" action by rejecting\n // up to `startImport`, instead of reporting a partial success.\n if (!receivedOkResponse) {\n throw error;\n }\n\n // A batch threw after some rows were already imported. Every row from\n // the throwing batch onward (including the batches we won't attempt)\n // counts as failed, on top of any rows already rejected via returned\n // errors in earlier batches.\n for (let index = batchStart; index < this.totalCount; index++) {\n failedRowIndices.push(index);\n }\n\n break;\n }\n\n processedRows += batch.length;\n\n runInAction(() => {\n this.processedCount = Math.min(processedRows, this.totalCount);\n });\n }\n\n this._failedRowIndices = failedRowIndices;\n\n return this.result;\n }\n\n private async _runBackup(): Promise<boolean> {\n const backup = this.backup;\n if (!backup) {\n return false;\n }\n\n try {\n const result = await backup(this._abortController!.signal);\n if (this._cancelled) {\n return true;\n }\n if (result?.restore) {\n this.restoreFn = result.restore;\n }\n } catch (error) {\n if (this._cancelled) {\n return true;\n }\n runInAction(() => {\n this.isBackingUp = false;\n this.importStatus = {\n ...queryStatus.error,\n error,\n };\n });\n return true;\n }\n\n runInAction(() => {\n this.isBackingUp = false;\n });\n return false;\n }\n\n private _lingerOnCompletion() {\n return new Promise<void>((resolve) =>\n setTimeout(resolve, COMPLETION_LINGER_MS),\n );\n }\n\n /**\n * Resolves every column to the final destination key used in the upload\n * payload: an existing field id, a new field's (Cairo-decided) key, or `null`\n * to skip. All new fields are added to the schema in a single `updateSchema`\n * call before the rows upload — mirroring the cm-import `beforeImport` flow.\n * `updateSchema` may throw — `startImport` surfaces that as the error state.\n */\n private async _resolveFieldMapping(): Promise<Record<string, string | null>> {\n const resolved: Record<string, string | null> = {};\n const newFields: NewFieldDefinition[] = [];\n // Seed with existing field ids/display names so derived keys and names never\n // collide with them or with each other.\n const usedKeys = new Set(\n this.fields.map((field) => field.id).filter((id): id is string => !!id),\n );\n const usedNames = new Set(\n this.fields\n .map((field) => field.header)\n .filter((header): header is string => !!header),\n );\n\n for (const header of this.csvHeaders) {\n const mapping = this.mappingByHeader[header];\n\n if (mapping == null) {\n resolved[header] = null;\n } else if (mapping.kind === 'existing') {\n resolved[header] = mapping.fieldId;\n } else if (this.updateSchema) {\n const { displayName, key } = uniqueFieldNameAndKey(\n header,\n usedNames,\n usedKeys,\n );\n usedKeys.add(key);\n usedNames.add(displayName);\n newFields.push({ key, type: mapping.fieldType, displayName });\n resolved[header] = key;\n } else {\n // \"new\" mapping without an `updateSchema` callback — nothing to map into.\n resolved[header] = null;\n }\n }\n\n if (newFields.length > 0 && this.updateSchema) {\n await this.updateSchema(newFields);\n }\n\n return resolved;\n }\n\n private _createRowsBatches(rows: Record<string, unknown>[]) {\n return rows.reduce<Record<string, unknown>[][]>((acc, row, index) => {\n if (index % this.batchSize === 0) {\n acc.push([]);\n }\n acc[acc.length - 1].push(row);\n return acc;\n }, []);\n }\n\n async startImport() {\n if (!this.hasMappings) {\n return;\n }\n\n this._cancelled = false;\n this._abortController = new AbortController();\n\n // One mapped row is produced per CSV row, so the total is known up front and\n // doesn't depend on field creation below.\n const totalCount = this.csvRows.length;\n\n runInAction(() => {\n this.currentStep = 'progress';\n this.totalCount = totalCount;\n this.processedCount = 0;\n this.isBackingUp = !!this.backup;\n // Clear any error/result from a previous attempt so \"Try again\" starts\n // from a clean slate (e.g. after a backup failure).\n this.importStatus = { ...queryStatus.idle };\n this.result = {\n succeeded: 0,\n failed: 0,\n errors: [],\n };\n this._failedRowIndices = [];\n });\n\n const backupFailed = await this._runBackup();\n if (backupFailed) {\n return;\n }\n if (this._cancelled) {\n return;\n }\n\n // Create any new fields and resolve every column to its destination key\n // before building the payload. A creation failure surfaces as the error\n // state with a \"Try again\" CTA, like a first-batch upload failure.\n let resolvedMapping: Record<string, string | null>;\n try {\n resolvedMapping = await this._resolveFieldMapping();\n } catch (error) {\n runInAction(() => {\n this.importStatus = {\n ...queryStatus.error,\n error,\n };\n });\n return;\n }\n if (this._cancelled) {\n return;\n }\n\n const rows = toMappedRows(this.csvRows, this.csvHeaders, resolvedMapping);\n const batches = this._createRowsBatches(rows);\n\n const promise = this._uploadBatches(batches);\n\n this.importStatus = {\n ...queryStatus.loading,\n promise,\n };\n\n try {\n await promise;\n if (this._cancelled) {\n return;\n }\n\n runInAction(() => {\n this.importStatus = {\n ...queryStatus.success,\n data: this.result,\n };\n });\n\n // On a clean import, hold the completed (100%) progress bar on screen\n // briefly so the completion is perceptible even for very few rows. Skip\n // the wait when there are failed rows — that path closes and surfaces a\n // toast instead.\n if (this._failedRowIndices.length === 0) {\n await this._lingerOnCompletion();\n if (this._cancelled) {\n return;\n }\n }\n\n runInAction(() => {\n // Any rows that didn't make it in — whether rejected via a batch's\n // returned `errors` or left unimported when a batch threw — are\n // reported via a toast that offers them as a downloadable CSV.\n if (this._failedRowIndices.length > 0) {\n this._showPartialSuccessToast();\n }\n\n this.importModalState.close();\n this.collection.clearResultAndMoveToStart({ force: true });\n });\n } catch (error) {\n runInAction(() => {\n this.importStatus = {\n ...queryStatus.error,\n error,\n };\n });\n }\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAOA,IAAAC,MAAA,GAAAD,OAAA;AAQA,IAAAE,sBAAA,GAAAF,OAAA;AAEA,IAAAG,SAAA,GAAAH,OAAA;AACA,IAAAI,gBAAA,GAAAJ,OAAA;AAMA,IAAAK,IAAA,GAAAC,sBAAA,CAAAN,OAAA;AAmCA;AACA;;AAEA;AACA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA;AACA;AACA;AACA;AACA;AACA;;AA8BA,MAAMO,kBAAkB,GAAG,GAAG;;AAE9B;AACA;AACA;AACA;AACA,MAAMC,oBAAoB,GAAG,GAAG;AAEhC,SAASC,SAASA,CAACC,KAAa,EAAE;EAChC,OAAOA,KAAK,CAACC,IAAI,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;AACnC;;AAEA;AACA;AACA,SAASC,UAAUA,CAACC,MAAc,EAAU;EAC1C,MAAMC,KAAK,GAAGD,MAAM,CAACH,IAAI,CAAC,CAAC,CAACK,KAAK,CAAC,eAAe,CAAC,CAACC,MAAM,CAACC,OAAO,CAAC;EAClE,IAAIH,KAAK,CAACI,MAAM,KAAK,CAAC,EAAE;IACtB,OAAO,OAAO;EAChB;EACA,OAAOJ,KAAK,CACTK,GAAG,CAAC,CAACC,IAAI,EAAEC,KAAK,KACfA,KAAK,KAAK,CAAC,GACPD,IAAI,CAACE,MAAM,CAAC,CAAC,CAAC,CAACX,WAAW,CAAC,CAAC,GAAGS,IAAI,CAACG,KAAK,CAAC,CAAC,CAAC,GAC5CH,IAAI,CAACE,MAAM,CAAC,CAAC,CAAC,CAACE,WAAW,CAAC,CAAC,GAAGJ,IAAI,CAACG,KAAK,CAAC,CAAC,CACjD,CAAC,CACAE,IAAI,CAAC,EAAE,CAAC;AACb;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,qBAAqBA,CAC5Bb,MAAc,EACdc,SAAsB,EACtBC,QAAqB,EACiB;EACtC,IAAIC,WAAW,GAAGhB,MAAM;EACxB,KAAK,IAAIiB,MAAM,GAAG,CAAC,GAAIA,MAAM,EAAE,EAAE;IAC/B,MAAMC,GAAG,GAAGnB,UAAU,CAACiB,WAAW,CAAC;IACnC,IAAI,CAACF,SAAS,CAACK,GAAG,CAACH,WAAW,CAAC,IAAI,CAACD,QAAQ,CAACI,GAAG,CAACD,GAAG,CAAC,EAAE;MACrD,OAAO;QAAEF,WAAW;QAAEE;MAAI,CAAC;IAC7B;IACAF,WAAW,GAAG,GAAGhB,MAAM,IAAIiB,MAAM,EAAE;EACrC;AACF;AAEA,SAASG,YAAYA,CACnBC,IAAgB,EAChBC,OAAiB,EACjBC,eAA0D,EAC1D;EACA,OAAOF,IAAI,CAACf,GAAG,CAAEkB,GAAG,IAAK;IACvB,MAAMC,MAA+B,GAAG,CAAC,CAAC;IAE1CH,OAAO,CAACI,OAAO,CAAC,CAAC1B,MAAM,EAAEQ,KAAK,KAAK;MACjC,MAAMmB,WAAW,GAAGJ,eAAe,CAACvB,MAAM,CAAC;MAC3C,IAAI2B,WAAW,IAAI,IAAI,EAAE;QACvB;MACF;MAEA,IAAAC,YAAG,EAACH,MAAM,EAAEE,WAAW,EAAEH,GAAG,CAAChB,KAAK,CAAC,IAAI,EAAE,CAAC;IAC5C,CAAC,CAAC;IAEF,OAAOiB,MAAM;EACf,CAAC,CAAC;AACJ;AAEO,MAAMI,WAAW,CAAC;EA2CvBC,WAAWA,CAACC,KAAuB,EAAE;IAAA,IAAAC,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA;IAAA,IAAAD,gBAAA,CAAAC,OAAA,+BA9BN,IAAIC,4CAAqB,CAEtD,CAAC;IAAA,IAAAF,gBAAA,CAAAC,OAAA,uBAEuB,QAAQ;IAAA,IAAAD,gBAAA,CAAAC,OAAA,wBACqB;MACrD,GAAGE,kBAAW,CAACC;IACjB,CAAC;IAAA,IAAAJ,gBAAA,CAAAC,OAAA,oBACU,EAAE;IAAA,IAAAD,gBAAA,CAAAC,OAAA,sBACU,EAAE;IAAA,IAAAD,gBAAA,CAAAC,OAAA,mBACH,EAAE;IAAA,IAAAD,gBAAA,CAAAC,OAAA,2BACyB,CAAC,CAAC;IAAA,IAAAD,gBAAA,CAAAC,OAAA,0BAClC,CAAC;IAAA,IAAAD,gBAAA,CAAAC,OAAA,sBACL,CAAC;IAAA,IAAAD,gBAAA,CAAAC,OAAA,kBACc;MAC1BI,SAAS,EAAE,CAAC;MACZC,MAAM,EAAE,CAAC;MACTC,MAAM,EAAE;IACV,CAAC;IAAA,IAAAP,gBAAA,CAAAC,OAAA,uBACa,KAAK;IAAA,IAAAD,gBAAA,CAAAC,OAAA,uBACL,KAAK;IAAA,IAAAD,gBAAA,CAAAC,OAAA,qBACkD,IAAI;IAAA,IAAAD,gBAAA,CAAAC,OAAA,sBACpD,KAAK;IAAA,IAAAD,gBAAA,CAAAC,OAAA,4BACyB,IAAI;IACvD;IACA;IACA;IACA;IAAA,IAAAD,gBAAA,CAAAC,OAAA,6BACsC,EAAE;IAGtC,IAAI,CAACO,MAAM,GAAIT,KAAK,CAACS,MAAM,IAAI,EAAoB;IACnD,IAAI,CAACC,eAAe,GAAGV,KAAK,CAACU,eAAe;IAC5C,IAAI,CAACC,MAAM,GAAGX,KAAK,CAACW,MAAM;IAC1B,IAAI,CAACC,YAAY,GAAGZ,KAAK,CAACY,YAAY;IACtC,IAAI,CAACC,UAAU,GAAGb,KAAK,CAACa,UAAU;IAClC,IAAI,CAACC,gBAAgB,GAAGd,KAAK,CAACc,gBAAgB;IAC9C,IAAI,CAACC,SAAS,GAAGf,KAAK,CAACe,SAAS;IAChC,IAAI,CAACC,YAAY,GAAGhB,KAAK,CAACgB,YAAY;IACtC,IAAI,CAACC,SAAS,GAAGjB,KAAK,CAACiB,SAAS;IAChC,IAAI,CAACC,WAAW,GAAGlB,KAAK,CAACkB,WAAW;IACpC,IAAI,CAACC,SAAS,GAAGnB,KAAK,CAACmB,SAAS,IAAIzD,kBAAkB;IACtD,IAAI,CAAC0D,iBAAiB,GAAGpB,KAAK,CAACqB,gBAAgB,IAAIA,iCAAgB;IAEnE,IAAAC,oBAAc,EAAC,IAAI,EAAE;MACnBC,WAAW,EAAEC,gBAAU,CAACC,GAAG;MAC3BC,YAAY,EAAEF,gBAAU,CAACC,GAAG;MAC5BE,QAAQ,EAAEH,gBAAU,CAACC,GAAG;MACxBG,UAAU,EAAEJ,gBAAU,CAACC,GAAG;MAC1BI,OAAO,EAAEL,gBAAU,CAACC,GAAG;MACvBjC,eAAe,EAAEgC,gBAAU,CAACC,GAAG;MAC/BK,cAAc,EAAEN,gBAAU,CAACC,GAAG;MAC9BM,UAAU,EAAEP,gBAAU,CAACC,GAAG;MAC1BO,MAAM,EAAER,gBAAU,CAACC,GAAG;MACtBQ,WAAW,EAAET,gBAAU,CAACC,GAAG;MAC3BS,WAAW,EAAEV,gBAAU,CAACC,GAAG;MAC3BU,aAAa,EAAEC,cAAQ;MACvBC,WAAW,EAAED,cAAQ;MACrBE,eAAe,EAAEF,cAAQ;MACzBG,gBAAgB,EAAEH,cAAQ;MAC1BI,gBAAgB,EAAEC,YAAM,CAACC,KAAK;MAC9BC,UAAU,EAAEF,YAAM,CAACC,KAAK;MACxBE,UAAU,EAAEH,YAAM,CAACC,KAAK;MACxBG,kBAAkB,EAAEJ,YAAM,CAACC,KAAK;MAChCI,KAAK,EAAEL,YAAM,CAACC,KAAK;MACnBK,cAAc,EAAEN,YAAM,CAACC,KAAK;MAC5BM,WAAW,EAAEP,YAAM,CAACC,KAAK;MACzBO,KAAK,EAAER,YAAM,CAACC;IAChB,CAAC,CAAC;EACJ;EAEAQ,IAAIA,CAAA,EAAG;IACL,OAAO,MAAMC,SAAS;EACxB;EAEA,IAAIhB,aAAaA,CAAA,EAAG;IAClB,OAAO,IAAI,CAACP,UAAU,CAACtD,MAAM,GAAG,CAAC,IAAI,IAAI,CAACuD,OAAO,CAACvD,MAAM,GAAG,CAAC;EAC9D;EAEA,IAAI+D,WAAWA,CAAA,EAAG;IAChB,OAAOe,MAAM,CAACC,MAAM,CAAC,IAAI,CAAC7D,eAAe,CAAC,CAAC8D,IAAI,CAAEzF,KAAK,IAAKA,KAAK,IAAI,IAAI,CAAC;EAC3E;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,IAAIyE,eAAeA,CAAA,EAAY;IAC7B,IAAI,CAAC,IAAI,CAACD,WAAW,EAAE;MACrB,OAAO,KAAK;IACd;IAEA,MAAMkB,aAAa,GAAG,IAAI,CAAC3B,UAAU,CAAC4B,MAAM,CAC1C,CAACC,OAAO,EAAExF,MAAM,EAAEQ,KAAK,KAAK;MAC1B,IAAI,IAAI,CAACe,eAAe,CAACvB,MAAM,CAAC,IAAI,IAAI,EAAE;QACxCwF,OAAO,CAACC,IAAI,CAACjF,KAAK,CAAC;MACrB;MACA,OAAOgF,OAAO;IAChB,CAAC,EACD,EACF,CAAC;IAED,OAAO,CAAC,IAAI,CAAC5B,OAAO,CAACyB,IAAI,CAAE7D,GAAG,IAC5B8D,aAAa,CAACD,IAAI,CAAE7E,KAAK,IAAK,CAACgB,GAAG,CAAChB,KAAK,CAAC,IAAI,EAAE,EAAEX,IAAI,CAAC,CAAC,KAAK,EAAE,CAChE,CAAC;EACH;EAEA,IAAIyE,gBAAgBA,CAAA,EAAgB;IAClC,OAAO,IAAIoB,GAAG,CACZP,MAAM,CAACC,MAAM,CAAC,IAAI,CAAC7D,eAAe,CAAC,CAChCpB,MAAM,CACJwF,CAAC,IACA,CAAAA,CAAC,oBAADA,CAAC,CAAEC,IAAI,MAAK,UAChB,CAAC,CACAtF,GAAG,CAAEqF,CAAC,IAAKA,CAAC,CAACE,OAAO,CACzB,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,IAAIC,iBAAiBA,CAAA,EAAY;IAC/B,OAAO,IAAI,CAACnD,YAAY,IAAI,IAAI;EAClC;EAEAqC,KAAKA,CAAA,EAAG;IAAA,IAAAe,qBAAA;IACN,CAAAA,qBAAA,OAAI,CAACC,gBAAgB,aAArBD,qBAAA,CAAuBE,KAAK,CAAC,CAAC;IAC9B,IAAI,CAACD,gBAAgB,GAAG,IAAI;IAC5B,IAAI,CAAC1C,WAAW,GAAG,QAAQ;IAC3B,IAAI,CAACG,YAAY,GAAG;MAClB,GAAGtB,kBAAW,CAACC;IACjB,CAAC;IACD,IAAI,CAACsB,QAAQ,GAAG,EAAE;IAClB,IAAI,CAACC,UAAU,GAAG,EAAE;IACpB,IAAI,CAACC,OAAO,GAAG,EAAE;IACjB,IAAI,CAACrC,eAAe,GAAG,CAAC,CAAC;IACzB,IAAI,CAACsC,cAAc,GAAG,CAAC;IACvB,IAAI,CAACC,UAAU,GAAG,CAAC;IACnB,IAAI,CAACC,MAAM,GAAG;MACZ1B,SAAS,EAAE,CAAC;MACZC,MAAM,EAAE,CAAC;MACTC,MAAM,EAAE;IACV,CAAC;IACD,IAAI,CAACyB,WAAW,GAAG,KAAK;IACxB,IAAI,CAACC,WAAW,GAAG,KAAK;IACxB,IAAI,CAACiC,SAAS,GAAG,IAAI;IACrB,IAAI,CAACC,UAAU,GAAG,KAAK;IACvB,IAAI,CAACC,iBAAiB,GAAG,EAAE;EAC7B;EAEA,MAAMvB,KAAKA,CAAA,EAAG;IACZ,IAAI,IAAI,CAACvB,WAAW,KAAK,UAAU,EAAE;MAAA,IAAA+C,sBAAA;MACnC,IAAI,CAACF,UAAU,GAAG,IAAI;MACtB,CAAAE,sBAAA,OAAI,CAACL,gBAAgB,aAArBK,sBAAA,CAAuBJ,KAAK,CAAC,CAAC;MAE9B,IAAI,CAAC,IAAI,CAACjC,WAAW,EAAE;QACrB,MAAM,IAAI,CAACsC,cAAc,CAAC,CAAC;MAC7B;MAEA,IAAI,CAAC1D,UAAU,CAAC2D,yBAAyB,CAAC;QACxCC,KAAK,EAAE;MACT,CAAC,CAAC;IACJ;IAEA,IAAI,CAAC3D,gBAAgB,CAACgC,KAAK,CAAC,CAAC;EAC/B;EAEA,MAAcyB,cAAcA,CAAA,EAAG;IAC7B,MAAMJ,SAAS,GAAG,IAAI,CAACA,SAAS;IAChC,IAAI,CAACA,SAAS,EAAE;MACd;IACF;IAEA,MAAMO,iBAAiB,GAAG,IAAIC,eAAe,CAAC,CAAC;IAC/C,IAAI,CAACV,gBAAgB,GAAGS,iBAAiB;IAEzC,IAAI,CAACxC,WAAW,GAAG,IAAI;IACvB,IAAI;MACF,MAAMiC,SAAS,CAACO,iBAAiB,CAACE,MAAM,CAAC;IAC3C,CAAC,CAAC,OAAOC,KAAK,EAAE;MACdC,OAAO,CAACD,KAAK,CAAC,gBAAgB,EAAEA,KAAK,CAAC;IACxC;IACA,IAAAE,iBAAW,EAAC,MAAM;MAChB,IAAI,CAAC7C,WAAW,GAAG,KAAK;MACxB,IAAI,CAACiC,SAAS,GAAG,IAAI;IACvB,CAAC,CAAC;EACJ;EAEAxB,UAAUA,CAAA,EAAG;IACX,IAAI,CAACpB,WAAW,GAAG,QAAQ;EAC7B;EAEA,MAAMyD,gBAAgBA,CAAA,EAAG;IACvB,IAAI,CAACC,mBAAmB,CAACC,IAAI,CAAC,QAAQ,CAAC;IACvC,MAAM;MAAElD;IAAO,CAAC,GAAG,MAAM,IAAI,CAACiD,mBAAmB,CAACE,KAAK,CAACC,OAAO,CAAC,CAAC;IACjE,IAAIpD,MAAM,KAAK,WAAW,EAAE;MAC1B,IAAI,CAACW,UAAU,CAAC,CAAC;IACnB;EACF;EAEA,MAAM0C,eAAeA,CAAA,EAAG;IACtB,IAAI,CAACJ,mBAAmB,CAACC,IAAI,CAAC,OAAO,CAAC;IACtC,MAAM;MAAElD;IAAO,CAAC,GAAG,MAAM,IAAI,CAACiD,mBAAmB,CAACE,KAAK,CAACC,OAAO,CAAC,CAAC;IACjE,IAAIpD,MAAM,KAAK,WAAW,EAAE;MAC1B,IAAI,CAACc,KAAK,CAAC,CAAC;IACd;EACF;EAEAN,gBAAgBA,CAAA,EAAG;IACjB,IAAI,IAAI,CAACL,aAAa,EAAE;MACtB,IAAI,CAACZ,WAAW,GAAG,eAAe;IACpC;EACF;EAEQ+D,iBAAiBA,CAAC/F,OAAiB,EAAE;IAC3C,MAAMgG,OAAsC,GAAG,CAAC,CAAC;IACjD,MAAM9E,MAAM,GAAG,IAAI,CAACA,MAAM,CAAClC,GAAG,CAAEiH,KAAK,KAAM;MACzCC,EAAE,EAAED,KAAK,CAACC,EAAE,IAAI,EAAE;MAClBxH,MAAM,EAAEuH,KAAK,CAACvH,MAAM,IAAI;IAC1B,CAAC,CAAC,CAAC;IAEHsB,OAAO,CAACI,OAAO,CAAC,CAAC1B,MAAM,EAAEQ,KAAK,KAAK;MACjC,MAAMiH,gBAAgB,GAAG9H,SAAS,CAACK,MAAM,CAAC;MAC1C,MAAM0H,OAAO,GAAGlF,MAAM,CAACmF,IAAI,CACxBJ,KAAK,IACJ5H,SAAS,CAAC4H,KAAK,CAACC,EAAE,CAAC,KAAKC,gBAAgB,IACxC9H,SAAS,CAAC4H,KAAK,CAACvH,MAAM,CAAC,KAAKyH,gBAChC,CAAC;MAED,IAAIC,OAAO,YAAPA,OAAO,CAAEF,EAAE,EAAE;QACfF,OAAO,CAACtH,MAAM,CAAC,GAAG;UAAE4F,IAAI,EAAE,UAAU;UAAEC,OAAO,EAAE6B,OAAO,CAACF;QAAG,CAAC;MAC7D,CAAC,MAAM;QACL;QACA;QACA;QACAF,OAAO,CAACtH,MAAM,CAAC,GAAG,IAAI,CAAC8F,iBAAiB,GACpC;UACEF,IAAI,EAAE,KAAK;UACXgC,SAAS,EAAE,IAAI,CAACzE,iBAAiB,CAAC,IAAI,CAAC0E,aAAa,CAACrH,KAAK,CAAC;QAC7D,CAAC,GACD,IAAI;MACV;IACF,CAAC,CAAC;IAEF,OAAO8G,OAAO;EAChB;;EAEA;EACA;EACA;EACQO,aAAaA,CAACC,WAAmB,EAAY;IACnD,OAAO,IAAI,CAAClE,OAAO,CAChBlD,KAAK,CAAC,CAAC,EAAEqH,iCAAgB,CAAC,CAC1BzH,GAAG,CAAEkB,GAAG,IAAKA,GAAG,CAACsG,WAAW,CAAC,IAAI,EAAE,CAAC;EACzC;EAEQE,cAAcA,CAACtE,QAAgB,EAAEuE,SAAyB,EAAE;IAClE,IAAI,CAACvE,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACC,UAAU,GAAGsE,SAAS,CAAC3G,OAAO;IACnC,IAAI,CAACsC,OAAO,GAAGqE,SAAS,CAAC5G,IAAI;IAC7B,IAAI,CAACE,eAAe,GAAG,IAAI,CAAC8F,iBAAiB,CAACY,SAAS,CAAC3G,OAAO,CAAC;IAChE,IAAI,CAACgC,WAAW,GAAG,eAAe;EACpC;EAEA,MAAMwB,cAAcA,CAACoD,IAAiB,EAAE;IACtC,IAAIA,IAAI,IAAI,IAAI,EAAE;MAChB;IACF;IAEA,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACC,cAAc,CAACF,IAAI,CAAC;IAC7C,IAAIC,KAAK,IAAI,IAAI,EAAE;MACjB,IAAI,CAACE,uBAAuB,CAACH,IAAI,CAAC;MAClC;IACF;IAEA,MAAMI,OAAO,GAAG,IAAI,CAACC,WAAW,CAACJ,KAAK,CAAC;IACvC,IAAIG,OAAO,IAAI,IAAI,EAAE;MACnB,IAAI,CAACE,WAAW,CAACN,IAAI,EAAE,6BAA6B,CAAC;MACrD;IACF;IAEA,MAAMD,SAAS,GAAG,IAAAQ,kBAAQ,EAACH,OAAO,CAAC;IACnC,IAAI,MAAM,IAAIL,SAAS,EAAE;MACvB,IAAI,CAACO,WAAW,CAACN,IAAI,EAAE,4BAA4B,CAAC;MACpD;IACF;IAEA,IAAApB,iBAAW,EAAC,MAAM;MAChB,IAAI,CAACkB,cAAc,CAACE,IAAI,CAACQ,IAAI,EAAET,SAAS,CAAC;IAC3C,CAAC,CAAC;EACJ;EAEA,MAAcG,cAAcA,CAACF,IAAU,EAA+B;IACpE,IAAI;MACF,OAAO,MAAMA,IAAI,CAACS,WAAW,CAAC,CAAC;IACjC,CAAC,CAAC,OAAOC,CAAC,EAAE;MACV/B,OAAO,CAACD,KAAK,CAACgC,CAAC,CAAC;MAChB,OAAO,IAAI;IACb;EACF;EAEQL,WAAWA,CAACJ,KAAkB,EAAiB;IACrD,IAAI;MACF;MACA;MACA;MACA,OAAO,IAAIU,WAAW,CAAC,OAAO,EAAE;QAAEC,KAAK,EAAE;MAAK,CAAC,CAAC,CAACC,MAAM,CAACZ,KAAK,CAAC;IAChE,CAAC,CAAC,OAAOS,CAAC,EAAE;MACV/B,OAAO,CAACD,KAAK,CAACgC,CAAC,CAAC;MAChB,OAAO,IAAI;IACb;EACF;EAEQJ,WAAWA,CAACN,IAAU,EAAEc,UAA4B,EAAE;IAAA,IAAAC,eAAA;IAC5D,IAAAnC,iBAAW,EAAC,MAAM;MAChB,IAAI,CAACpD,QAAQ,GAAGwE,IAAI,CAACQ,IAAI;MACzB,IAAI,CAAC/E,UAAU,GAAG,EAAE;MACpB,IAAI,CAACC,OAAO,GAAG,EAAE;MACjB,IAAI,CAACrC,eAAe,GAAG,CAAC,CAAC;MACzB,IAAI,CAAC+B,WAAW,GAAG,QAAQ;IAC7B,CAAC,CAAC;IACF,CAAA2F,eAAA,OAAI,CAACjG,SAAS,aAAdiG,eAAA,CAAAC,IAAA,KAAI,EAAa;MACfC,IAAI,EAAE,OAAO;MACbC,OAAO,EAAE,IAAI,CAACtG,SAAS,CAACkG,UAAU;IACpC,CAAC,CAAC;EACJ;EAEQX,uBAAuBA,CAACH,IAAU,EAAE;IAAA,IAAAmB,gBAAA;IAC1C,CAAAA,gBAAA,OAAI,CAACrG,SAAS,aAAdqG,gBAAA,CAAAH,IAAA,KAAI,EAAa;MACfC,IAAI,EAAE,OAAO;MACbC,OAAO,EAAE,IAAI,CAACtG,SAAS,CAAC,6BAA6B,CAAC;MACtD0B,MAAM,EAAE;QACN8E,IAAI,EAAE,IAAI,CAACxG,SAAS,CAAC,uBAAuB,CAAC;QAC7CyG,OAAO,EAAEA,CAAA,KAAM,IAAI,CAACzE,cAAc,CAACoD,IAAI,CAAC;QACxCsB,kBAAkB,EAAE;MACtB;IACF,CAAC,CAAC;EACJ;EAEQC,wBAAwBA,CAAA,EAAG;IAAA,IAAAC,gBAAA;IACjC,MAAMpH,MAAM,GAAG,IAAI,CAAC8D,iBAAiB,CAAC/F,MAAM;IAC5C,CAAAqJ,gBAAA,OAAI,CAAC1G,SAAS,aAAd0G,gBAAA,CAAAR,IAAA,KAAI,EAAa;MACfC,IAAI,EAAE,SAAS;MACfC,OAAO,EAAE,IAAI,CAACtG,SAAS,CAAC,kCAAkC,EAAE;QAC1DR,MAAM,EAAEqH,MAAM,CAACrH,MAAM,CAAC;QACtBsH,QAAQ,EAAED,MAAM,CAAC,IAAI,CAAC7F,UAAU,GAAGxB,MAAM;MAC3C,CAAC,CAAC;MACFkC,MAAM,EAAE;QACN8E,IAAI,EAAE,IAAI,CAACxG,SAAS,CAAC,iCAAiC,CAAC;QACvDyG,OAAO,EAAEA,CAAA,KAAM,IAAI,CAACM,mBAAmB,CAAC,CAAC;QACzCL,kBAAkB,EAAE;MACtB;IACF,CAAC,CAAC;EACJ;EAEQK,mBAAmBA,CAAA,EAAG;IAAA,IAAAC,iBAAA;IAC5B,MAAMC,UAAU,GAAG,IAAI,CAAC3D,iBAAiB,CAAC9F,GAAG,CAC1CE,KAAK,IAAK,IAAI,CAACoD,OAAO,CAACpD,KAAK,CAC/B,CAAC;IACD,MAAM8H,OAAO,GAAG,IAAA0B,oBAAU,EAAC,IAAI,CAACrG,UAAU,EAAEoG,UAAU,CAAC;IACvD,CAAAD,iBAAA,OAAI,CAAC7G,WAAW,aAAhB6G,iBAAA,CAAAZ,IAAA,KAAI,EAAeZ,OAAO,EAAE,UAAU,IAAI,CAAC5E,QAAQ,IAAI,YAAY,EAAE,CAAC;EACxE;EAEAiB,UAAUA,CAAC3E,MAAc,EAAE6F,OAAsB,EAAE;IACjD,IAAI,CAACtE,eAAe,GAAG;MACrB,GAAG,IAAI,CAACA,eAAe;MACvB,CAACvB,MAAM,GAAG6F,OAAO,IAAI,IAAI,GAAG,IAAI,GAAG;QAAED,IAAI,EAAE,UAAU;QAAEC;MAAQ;IACjE,CAAC;EACH;EAEAjB,kBAAkBA,CAAC5E,MAAc,EAAE;IACjC,MAAMQ,KAAK,GAAG,IAAI,CAACmD,UAAU,CAACsG,OAAO,CAACjK,MAAM,CAAC;IAC7C,MAAM4H,SAAS,GACbpH,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC2C,iBAAiB,CAAC,IAAI,CAAC0E,aAAa,CAACrH,KAAK,CAAC,CAAC,GAAG,MAAM;IACzE,IAAI,CAACe,eAAe,GAAG;MACrB,GAAG,IAAI,CAACA,eAAe;MACvB,CAACvB,MAAM,GAAG;QAAE4F,IAAI,EAAE,KAAK;QAAEgC;MAAU;IACrC,CAAC;EACH;EAEA,MAAcsC,cAAcA,CAACC,OAAoC,EAAE;IACjE,IAAIC,aAAa,GAAG,CAAC;IACrB,IAAIC,kBAAkB,GAAG,KAAK;IAC9B,MAAMC,gBAA0B,GAAG,EAAE;IAErC,KAAK,MAAMC,KAAK,IAAIJ,OAAO,EAAE;MAC3B,IAAI,IAAI,CAAChE,UAAU,EAAE;QACnB;MACF;MAEA,MAAMqE,UAAU,GAAGJ,aAAa;MAEhC,IAAI;QACF,MAAMK,WAAW,GAAG,MAAM,IAAI,CAAChI,eAAe,CAAC8H,KAAK,CAAC;QACrDF,kBAAkB,GAAG,IAAI;QAEzB,IAAI,CAACtG,MAAM,GAAG;UACZ1B,SAAS,EAAE,IAAI,CAAC0B,MAAM,CAAC1B,SAAS,GAAGoI,WAAW,CAACpI,SAAS;UACxDC,MAAM,EAAE,IAAI,CAACyB,MAAM,CAACzB,MAAM,GAAGmI,WAAW,CAACnI,MAAM;UAC/CC,MAAM,EAAE,CAAC,GAAG,IAAI,CAACwB,MAAM,CAACxB,MAAM,EAAE,GAAGkI,WAAW,CAAClI,MAAM;QACvD,CAAC;;QAED;QACA;QACA,KAAK,MAAM;UAAEmI;QAAS,CAAC,IAAID,WAAW,CAAClI,MAAM,EAAE;UAC7C+H,gBAAgB,CAAC7E,IAAI,CAAC+E,UAAU,GAAGE,QAAQ,CAAC;QAC9C;MACF,CAAC,CAAC,OAAO9D,KAAK,EAAE;QACd;QACA;QACA;QACA,IAAI,CAACyD,kBAAkB,EAAE;UACvB,MAAMzD,KAAK;QACb;;QAEA;QACA;QACA;QACA;QACA,KAAK,IAAIpG,KAAK,GAAGgK,UAAU,EAAEhK,KAAK,GAAG,IAAI,CAACsD,UAAU,EAAEtD,KAAK,EAAE,EAAE;UAC7D8J,gBAAgB,CAAC7E,IAAI,CAACjF,KAAK,CAAC;QAC9B;QAEA;MACF;MAEA4J,aAAa,IAAIG,KAAK,CAAClK,MAAM;MAE7B,IAAAyG,iBAAW,EAAC,MAAM;QAChB,IAAI,CAACjD,cAAc,GAAG8G,IAAI,CAACC,GAAG,CAACR,aAAa,EAAE,IAAI,CAACtG,UAAU,CAAC;MAChE,CAAC,CAAC;IACJ;IAEA,IAAI,CAACsC,iBAAiB,GAAGkE,gBAAgB;IAEzC,OAAO,IAAI,CAACvG,MAAM;EACpB;EAEA,MAAc8G,UAAUA,CAAA,EAAqB;IAC3C,MAAMnI,MAAM,GAAG,IAAI,CAACA,MAAM;IAC1B,IAAI,CAACA,MAAM,EAAE;MACX,OAAO,KAAK;IACd;IAEA,IAAI;MACF,MAAMqB,MAAM,GAAG,MAAMrB,MAAM,CAAC,IAAI,CAACsD,gBAAgB,CAAEW,MAAM,CAAC;MAC1D,IAAI,IAAI,CAACR,UAAU,EAAE;QACnB,OAAO,IAAI;MACb;MACA,IAAIpC,MAAM,YAANA,MAAM,CAAE+G,OAAO,EAAE;QACnB,IAAI,CAAC5E,SAAS,GAAGnC,MAAM,CAAC+G,OAAO;MACjC;IACF,CAAC,CAAC,OAAOlE,KAAK,EAAE;MACd,IAAI,IAAI,CAACT,UAAU,EAAE;QACnB,OAAO,IAAI;MACb;MACA,IAAAW,iBAAW,EAAC,MAAM;QAChB,IAAI,CAAC9C,WAAW,GAAG,KAAK;QACxB,IAAI,CAACP,YAAY,GAAG;UAClB,GAAGtB,kBAAW,CAACyE,KAAK;UACpBA;QACF,CAAC;MACH,CAAC,CAAC;MACF,OAAO,IAAI;IACb;IAEA,IAAAE,iBAAW,EAAC,MAAM;MAChB,IAAI,CAAC9C,WAAW,GAAG,KAAK;IAC1B,CAAC,CAAC;IACF,OAAO,KAAK;EACd;EAEQ+G,mBAAmBA,CAAA,EAAG;IAC5B,OAAO,IAAIC,OAAO,CAAQC,OAAO,IAC/BC,UAAU,CAACD,OAAO,EAAEvL,oBAAoB,CAC1C,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAAcyL,oBAAoBA,CAAA,EAA2C;IAC3E,MAAMC,QAAuC,GAAG,CAAC,CAAC;IAClD,MAAMC,SAA+B,GAAG,EAAE;IAC1C;IACA;IACA,MAAMtK,QAAQ,GAAG,IAAI2E,GAAG,CACtB,IAAI,CAAClD,MAAM,CAAClC,GAAG,CAAEiH,KAAK,IAAKA,KAAK,CAACC,EAAE,CAAC,CAACrH,MAAM,CAAEqH,EAAE,IAAmB,CAAC,CAACA,EAAE,CACxE,CAAC;IACD,MAAM1G,SAAS,GAAG,IAAI4E,GAAG,CACvB,IAAI,CAAClD,MAAM,CACRlC,GAAG,CAAEiH,KAAK,IAAKA,KAAK,CAACvH,MAAM,CAAC,CAC5BG,MAAM,CAAEH,MAAM,IAAuB,CAAC,CAACA,MAAM,CAClD,CAAC;IAED,KAAK,MAAMA,MAAM,IAAI,IAAI,CAAC2D,UAAU,EAAE;MACpC,MAAM2D,OAAO,GAAG,IAAI,CAAC/F,eAAe,CAACvB,MAAM,CAAC;MAE5C,IAAIsH,OAAO,IAAI,IAAI,EAAE;QACnB8D,QAAQ,CAACpL,MAAM,CAAC,GAAG,IAAI;MACzB,CAAC,MAAM,IAAIsH,OAAO,CAAC1B,IAAI,KAAK,UAAU,EAAE;QACtCwF,QAAQ,CAACpL,MAAM,CAAC,GAAGsH,OAAO,CAACzB,OAAO;MACpC,CAAC,MAAM,IAAI,IAAI,CAAClD,YAAY,EAAE;QAC5B,MAAM;UAAE3B,WAAW;UAAEE;QAAI,CAAC,GAAGL,qBAAqB,CAChDb,MAAM,EACNc,SAAS,EACTC,QACF,CAAC;QACDA,QAAQ,CAACuK,GAAG,CAACpK,GAAG,CAAC;QACjBJ,SAAS,CAACwK,GAAG,CAACtK,WAAW,CAAC;QAC1BqK,SAAS,CAAC5F,IAAI,CAAC;UAAEvE,GAAG;UAAEiI,IAAI,EAAE7B,OAAO,CAACM,SAAS;UAAE5G;QAAY,CAAC,CAAC;QAC7DoK,QAAQ,CAACpL,MAAM,CAAC,GAAGkB,GAAG;MACxB,CAAC,MAAM;QACL;QACAkK,QAAQ,CAACpL,MAAM,CAAC,GAAG,IAAI;MACzB;IACF;IAEA,IAAIqL,SAAS,CAAChL,MAAM,GAAG,CAAC,IAAI,IAAI,CAACsC,YAAY,EAAE;MAC7C,MAAM,IAAI,CAACA,YAAY,CAAC0I,SAAS,CAAC;IACpC;IAEA,OAAOD,QAAQ;EACjB;EAEQG,kBAAkBA,CAAClK,IAA+B,EAAE;IAC1D,OAAOA,IAAI,CAACkE,MAAM,CAA8B,CAACiG,GAAG,EAAEhK,GAAG,EAAEhB,KAAK,KAAK;MACnE,IAAIA,KAAK,GAAG,IAAI,CAAC0C,SAAS,KAAK,CAAC,EAAE;QAChCsI,GAAG,CAAC/F,IAAI,CAAC,EAAE,CAAC;MACd;MACA+F,GAAG,CAACA,GAAG,CAACnL,MAAM,GAAG,CAAC,CAAC,CAACoF,IAAI,CAACjE,GAAG,CAAC;MAC7B,OAAOgK,GAAG;IACZ,CAAC,EAAE,EAAE,CAAC;EACR;EAEA,MAAMzG,WAAWA,CAAA,EAAG;IAClB,IAAI,CAAC,IAAI,CAACX,WAAW,EAAE;MACrB;IACF;IAEA,IAAI,CAAC+B,UAAU,GAAG,KAAK;IACvB,IAAI,CAACH,gBAAgB,GAAG,IAAIU,eAAe,CAAC,CAAC;;IAE7C;IACA;IACA,MAAM5C,UAAU,GAAG,IAAI,CAACF,OAAO,CAACvD,MAAM;IAEtC,IAAAyG,iBAAW,EAAC,MAAM;MAChB,IAAI,CAACxD,WAAW,GAAG,UAAU;MAC7B,IAAI,CAACQ,UAAU,GAAGA,UAAU;MAC5B,IAAI,CAACD,cAAc,GAAG,CAAC;MACvB,IAAI,CAACG,WAAW,GAAG,CAAC,CAAC,IAAI,CAACtB,MAAM;MAChC;MACA;MACA,IAAI,CAACe,YAAY,GAAG;QAAE,GAAGtB,kBAAW,CAACC;MAAK,CAAC;MAC3C,IAAI,CAAC2B,MAAM,GAAG;QACZ1B,SAAS,EAAE,CAAC;QACZC,MAAM,EAAE,CAAC;QACTC,MAAM,EAAE;MACV,CAAC;MACD,IAAI,CAAC6D,iBAAiB,GAAG,EAAE;IAC7B,CAAC,CAAC;IAEF,MAAMqF,YAAY,GAAG,MAAM,IAAI,CAACZ,UAAU,CAAC,CAAC;IAC5C,IAAIY,YAAY,EAAE;MAChB;IACF;IACA,IAAI,IAAI,CAACtF,UAAU,EAAE;MACnB;IACF;;IAEA;IACA;IACA;IACA,IAAIuF,eAA8C;IAClD,IAAI;MACFA,eAAe,GAAG,MAAM,IAAI,CAACP,oBAAoB,CAAC,CAAC;IACrD,CAAC,CAAC,OAAOvE,KAAK,EAAE;MACd,IAAAE,iBAAW,EAAC,MAAM;QAChB,IAAI,CAACrD,YAAY,GAAG;UAClB,GAAGtB,kBAAW,CAACyE,KAAK;UACpBA;QACF,CAAC;MACH,CAAC,CAAC;MACF;IACF;IACA,IAAI,IAAI,CAACT,UAAU,EAAE;MACnB;IACF;IAEA,MAAM9E,IAAI,GAAGD,YAAY,CAAC,IAAI,CAACwC,OAAO,EAAE,IAAI,CAACD,UAAU,EAAE+H,eAAe,CAAC;IACzE,MAAMvB,OAAO,GAAG,IAAI,CAACoB,kBAAkB,CAAClK,IAAI,CAAC;IAE7C,MAAM8F,OAAO,GAAG,IAAI,CAAC+C,cAAc,CAACC,OAAO,CAAC;IAE5C,IAAI,CAAC1G,YAAY,GAAG;MAClB,GAAGtB,kBAAW,CAACwJ,OAAO;MACtBxE;IACF,CAAC;IAED,IAAI;MACF,MAAMA,OAAO;MACb,IAAI,IAAI,CAAChB,UAAU,EAAE;QACnB;MACF;MAEA,IAAAW,iBAAW,EAAC,MAAM;QAChB,IAAI,CAACrD,YAAY,GAAG;UAClB,GAAGtB,kBAAW,CAACyJ,OAAO;UACtBC,IAAI,EAAE,IAAI,CAAC9H;QACb,CAAC;MACH,CAAC,CAAC;;MAEF;MACA;MACA;MACA;MACA,IAAI,IAAI,CAACqC,iBAAiB,CAAC/F,MAAM,KAAK,CAAC,EAAE;QACvC,MAAM,IAAI,CAAC0K,mBAAmB,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC5E,UAAU,EAAE;UACnB;QACF;MACF;MAEA,IAAAW,iBAAW,EAAC,MAAM;QAChB;QACA;QACA;QACA,IAAI,IAAI,CAACV,iBAAiB,CAAC/F,MAAM,GAAG,CAAC,EAAE;UACrC,IAAI,CAACoJ,wBAAwB,CAAC,CAAC;QACjC;QAEA,IAAI,CAAC5G,gBAAgB,CAACgC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAACjC,UAAU,CAAC2D,yBAAyB,CAAC;UAAEC,KAAK,EAAE;QAAK,CAAC,CAAC;MAC5D,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOI,KAAK,EAAE;MACd,IAAAE,iBAAW,EAAC,MAAM;QAChB,IAAI,CAACrD,YAAY,GAAG;UAClB,GAAGtB,kBAAW,CAACyE,KAAK;UACpBA;QACF,CAAC;MACH,CAAC,CAAC;IACJ;EACF;AACF;AAACkF,OAAA,CAAAjK,WAAA,GAAAA,WAAA","ignoreList":[]}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.TYPE_SAMPLE_SIZE = void 0;
|
|
5
|
+
exports.detectColumnType = detectColumnType;
|
|
6
|
+
exports.detectValueType = detectValueType;
|
|
7
|
+
// Field-type detection for new fields created during CSV import (CAIRO-4131).
|
|
8
|
+
//
|
|
9
|
+
// Ported from cm-import (`wix-data-client/cm-import`):
|
|
10
|
+
// - per-cell rules from `src/field-configuration/detectFieldConfig.js`
|
|
11
|
+
// (`detectPrimitiveType`) and `src/types/validators/{number,url}.js`
|
|
12
|
+
// - the column-level majority vote from
|
|
13
|
+
// `src/field-configuration/guessFieldConfigFromSamples.js`
|
|
14
|
+
//
|
|
15
|
+
// This module owns the shared `NewFieldType` vocabulary and the primitive
|
|
16
|
+
// detector (number / date / boolean / url, else text). Media detection (image /
|
|
17
|
+
// video / document / audio) lives in `@wix/patterns-fields` — it needs the media
|
|
18
|
+
// URI parser, which core must not depend on — and is injected into `ImportState`
|
|
19
|
+
// via `detectColumnType` (see `ImportStateProps`). `detectColumnType` here takes
|
|
20
|
+
// the per-value detector as a parameter so the fields detector reuses this
|
|
21
|
+
// sampling/majority logic instead of re-implementing it.
|
|
22
|
+
|
|
23
|
+
// All field types a new column can be detected as. The primitive detector below
|
|
24
|
+
// only ever returns the first five; image/video/document/audio come from the
|
|
25
|
+
// injected fields detector.
|
|
26
|
+
|
|
27
|
+
// Infers a column's field type from its values. Injected into `ImportState`.
|
|
28
|
+
|
|
29
|
+
// Infers a single cell's field type.
|
|
30
|
+
|
|
31
|
+
// Column-detection sampling: look at the first `TYPE_SAMPLE_SIZE` values and
|
|
32
|
+
// require a >= `MAJORITY` share to agree on a non-text type. We use the same 2/3
|
|
33
|
+
// vote as cm-import but a **larger sample** — cm-import's `constants.sampleSize`
|
|
34
|
+
// is 6; we deliberately sample more so the inference is steadier on messy
|
|
35
|
+
// columns. Exported so callers pass only the head of a column to
|
|
36
|
+
// `detectColumnType` instead of copying it whole.
|
|
37
|
+
const TYPE_SAMPLE_SIZE = exports.TYPE_SAMPLE_SIZE = 50;
|
|
38
|
+
const MAJORITY = 2 / 3;
|
|
39
|
+
|
|
40
|
+
// cm-import `validators/number.js` `validateString`.
|
|
41
|
+
const NUMBER_RE = /^[+-]?(?:\d+\.?\d*)?$/;
|
|
42
|
+
|
|
43
|
+
// cm-import `detectFieldConfig.js` date patterns.
|
|
44
|
+
const SLASH_DATE_RE = /^\d{1,2}\/\d{1,2}\/\d{4}(?: \d{1,2}:\d{1,2})?$/;
|
|
45
|
+
const ISO_DATE_RE = /\d{4}-\d{2}-\d{2}/;
|
|
46
|
+
|
|
47
|
+
// Approximates cm-import `validators/url.js` (website / email / phone / relative
|
|
48
|
+
// links). cm-import delegates structural validation to `@wix/santa-core-utils`
|
|
49
|
+
// `isValidUrl`/`isValidEmail`, which aren't available here — so website URLs are
|
|
50
|
+
// validated with the platform `URL` parser instead (rejects empty/whitespace/
|
|
51
|
+
// malformed authorities). It's still an approximation: `URL` accepts some
|
|
52
|
+
// odd-but-parseable hosts santa would reject.
|
|
53
|
+
const WEBSITE_PROTOCOLS = ['http:', 'https:', 'ftp:'];
|
|
54
|
+
const EMAIL_PROTOCOL = 'mailto:';
|
|
55
|
+
const PHONE_PROTOCOLS = ['sms:', 'tel:'];
|
|
56
|
+
const RELATIVE_PREFIXES = ['/', '#', '?'];
|
|
57
|
+
const PHONE_RE = /^[\s\d()+\-/_]+$/;
|
|
58
|
+
const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
59
|
+
const startsWithAny = (value, prefixes) => prefixes.some(prefix => value.startsWith(prefix));
|
|
60
|
+
const isValidWebsiteUrl = value => {
|
|
61
|
+
let parsed;
|
|
62
|
+
try {
|
|
63
|
+
parsed = new URL(value);
|
|
64
|
+
} catch {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
return WEBSITE_PROTOCOLS.includes(parsed.protocol);
|
|
68
|
+
};
|
|
69
|
+
const isEmailUrl = value => value.startsWith(EMAIL_PROTOCOL) && EMAIL_RE.test(value.slice(EMAIL_PROTOCOL.length));
|
|
70
|
+
const isPhoneUrl = value => PHONE_PROTOCOLS.some(protocol => value.startsWith(protocol) && PHONE_RE.test(value.slice(protocol.length)));
|
|
71
|
+
const isUrl = value => isValidWebsiteUrl(value) || isEmailUrl(value) || isPhoneUrl(value) || startsWithAny(value, RELATIVE_PREFIXES);
|
|
72
|
+
const isDate = value => {
|
|
73
|
+
if (SLASH_DATE_RE.test(value)) {
|
|
74
|
+
if (!Number.isNaN(new Date(value).getTime())) {
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
// cm-import also accepts dd/mm/yyyy by swapping day and month.
|
|
78
|
+
const swapped = value.replace(/(\d{1,2})\/(\d{1,2})\/(\d{4})/, '$2/$1/$3');
|
|
79
|
+
if (!Number.isNaN(new Date(swapped).getTime())) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return ISO_DATE_RE.test(value) && !Number.isNaN(new Date(value).getTime());
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Infer the field type of a single CSV cell, in cm-import's order:
|
|
88
|
+
* empty → number → boolean → date → url, else text.
|
|
89
|
+
*/
|
|
90
|
+
function detectValueType(value) {
|
|
91
|
+
if (value === '') {
|
|
92
|
+
return 'text';
|
|
93
|
+
}
|
|
94
|
+
if (NUMBER_RE.test(value)) {
|
|
95
|
+
return 'number';
|
|
96
|
+
}
|
|
97
|
+
const lower = value.toLowerCase();
|
|
98
|
+
if (lower === 'true' || lower === 'false') {
|
|
99
|
+
return 'boolean';
|
|
100
|
+
}
|
|
101
|
+
if (isDate(value)) {
|
|
102
|
+
return 'date';
|
|
103
|
+
}
|
|
104
|
+
if (isUrl(value)) {
|
|
105
|
+
return 'url';
|
|
106
|
+
}
|
|
107
|
+
return 'text';
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Infer a column's field type from its first values: the most common detected
|
|
112
|
+
* type, but only when it covers at least two-thirds of the samples (otherwise
|
|
113
|
+
* `text`). Same majority-vote algorithm as cm-import
|
|
114
|
+
* `guessFieldConfigFromSamples`, with a larger sample (see `TYPE_SAMPLE_SIZE`).
|
|
115
|
+
*
|
|
116
|
+
* `detectValue` defaults to the primitive {@link detectValueType}; the fields
|
|
117
|
+
* detector passes a media-aware variant so it reuses this sampling/majority
|
|
118
|
+
* logic.
|
|
119
|
+
*/
|
|
120
|
+
function detectColumnType(values, detectValue = detectValueType) {
|
|
121
|
+
const samples = values.slice(0, TYPE_SAMPLE_SIZE);
|
|
122
|
+
if (samples.length === 0) {
|
|
123
|
+
return 'text';
|
|
124
|
+
}
|
|
125
|
+
const counts = new Map();
|
|
126
|
+
samples.forEach(value => {
|
|
127
|
+
const type = detectValue(value);
|
|
128
|
+
counts.set(type, (counts.get(type) ?? 0) + 1);
|
|
129
|
+
});
|
|
130
|
+
let best = 'text';
|
|
131
|
+
let bestCount = 0;
|
|
132
|
+
counts.forEach((count, type) => {
|
|
133
|
+
if (count > bestCount) {
|
|
134
|
+
best = type;
|
|
135
|
+
bestCount = count;
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
return bestCount >= samples.length * MAJORITY ? best : 'text';
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=detectFieldType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TYPE_SAMPLE_SIZE","exports","MAJORITY","NUMBER_RE","SLASH_DATE_RE","ISO_DATE_RE","WEBSITE_PROTOCOLS","EMAIL_PROTOCOL","PHONE_PROTOCOLS","RELATIVE_PREFIXES","PHONE_RE","EMAIL_RE","startsWithAny","value","prefixes","some","prefix","startsWith","isValidWebsiteUrl","parsed","URL","includes","protocol","isEmailUrl","test","slice","length","isPhoneUrl","isUrl","isDate","Number","isNaN","Date","getTime","swapped","replace","detectValueType","lower","toLowerCase","detectColumnType","values","detectValue","samples","counts","Map","forEach","type","set","get","best","bestCount","count"],"sources":["../../../../src/state/ImportState/detectFieldType.ts"],"sourcesContent":["// Field-type detection for new fields created during CSV import (CAIRO-4131).\n//\n// Ported from cm-import (`wix-data-client/cm-import`):\n// - per-cell rules from `src/field-configuration/detectFieldConfig.js`\n// (`detectPrimitiveType`) and `src/types/validators/{number,url}.js`\n// - the column-level majority vote from\n// `src/field-configuration/guessFieldConfigFromSamples.js`\n//\n// This module owns the shared `NewFieldType` vocabulary and the primitive\n// detector (number / date / boolean / url, else text). Media detection (image /\n// video / document / audio) lives in `@wix/patterns-fields` — it needs the media\n// URI parser, which core must not depend on — and is injected into `ImportState`\n// via `detectColumnType` (see `ImportStateProps`). `detectColumnType` here takes\n// the per-value detector as a parameter so the fields detector reuses this\n// sampling/majority logic instead of re-implementing it.\n\n// All field types a new column can be detected as. The primitive detector below\n// only ever returns the first five; image/video/document/audio come from the\n// injected fields detector.\nexport type NewFieldType =\n | 'text'\n | 'number'\n | 'date'\n | 'boolean'\n | 'url'\n | 'image'\n | 'video'\n | 'document'\n | 'audio';\n\n// Infers a column's field type from its values. Injected into `ImportState`.\nexport type DetectColumnType = (values: string[]) => NewFieldType;\n\n// Infers a single cell's field type.\nexport type DetectValueType = (value: string) => NewFieldType;\n\n// Column-detection sampling: look at the first `TYPE_SAMPLE_SIZE` values and\n// require a >= `MAJORITY` share to agree on a non-text type. We use the same 2/3\n// vote as cm-import but a **larger sample** — cm-import's `constants.sampleSize`\n// is 6; we deliberately sample more so the inference is steadier on messy\n// columns. Exported so callers pass only the head of a column to\n// `detectColumnType` instead of copying it whole.\nexport const TYPE_SAMPLE_SIZE = 50;\nconst MAJORITY = 2 / 3;\n\n// cm-import `validators/number.js` `validateString`.\nconst NUMBER_RE = /^[+-]?(?:\\d+\\.?\\d*)?$/;\n\n// cm-import `detectFieldConfig.js` date patterns.\nconst SLASH_DATE_RE = /^\\d{1,2}\\/\\d{1,2}\\/\\d{4}(?: \\d{1,2}:\\d{1,2})?$/;\nconst ISO_DATE_RE = /\\d{4}-\\d{2}-\\d{2}/;\n\n// Approximates cm-import `validators/url.js` (website / email / phone / relative\n// links). cm-import delegates structural validation to `@wix/santa-core-utils`\n// `isValidUrl`/`isValidEmail`, which aren't available here — so website URLs are\n// validated with the platform `URL` parser instead (rejects empty/whitespace/\n// malformed authorities). It's still an approximation: `URL` accepts some\n// odd-but-parseable hosts santa would reject.\nconst WEBSITE_PROTOCOLS = ['http:', 'https:', 'ftp:'];\nconst EMAIL_PROTOCOL = 'mailto:';\nconst PHONE_PROTOCOLS = ['sms:', 'tel:'];\nconst RELATIVE_PREFIXES = ['/', '#', '?'];\nconst PHONE_RE = /^[\\s\\d()+\\-/_]+$/;\nconst EMAIL_RE = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nconst startsWithAny = (value: string, prefixes: readonly string[]): boolean =>\n prefixes.some((prefix) => value.startsWith(prefix));\n\nconst isValidWebsiteUrl = (value: string): boolean => {\n let parsed: URL;\n try {\n parsed = new URL(value);\n } catch {\n return false;\n }\n return WEBSITE_PROTOCOLS.includes(parsed.protocol);\n};\n\nconst isEmailUrl = (value: string): boolean =>\n value.startsWith(EMAIL_PROTOCOL) &&\n EMAIL_RE.test(value.slice(EMAIL_PROTOCOL.length));\n\nconst isPhoneUrl = (value: string): boolean =>\n PHONE_PROTOCOLS.some(\n (protocol) =>\n value.startsWith(protocol) && PHONE_RE.test(value.slice(protocol.length)),\n );\n\nconst isUrl = (value: string): boolean =>\n isValidWebsiteUrl(value) ||\n isEmailUrl(value) ||\n isPhoneUrl(value) ||\n startsWithAny(value, RELATIVE_PREFIXES);\n\nconst isDate = (value: string): boolean => {\n if (SLASH_DATE_RE.test(value)) {\n if (!Number.isNaN(new Date(value).getTime())) {\n return true;\n }\n // cm-import also accepts dd/mm/yyyy by swapping day and month.\n const swapped = value.replace(/(\\d{1,2})\\/(\\d{1,2})\\/(\\d{4})/, '$2/$1/$3');\n if (!Number.isNaN(new Date(swapped).getTime())) {\n return true;\n }\n }\n return ISO_DATE_RE.test(value) && !Number.isNaN(new Date(value).getTime());\n};\n\n/**\n * Infer the field type of a single CSV cell, in cm-import's order:\n * empty → number → boolean → date → url, else text.\n */\nexport function detectValueType(value: string): NewFieldType {\n if (value === '') {\n return 'text';\n }\n if (NUMBER_RE.test(value)) {\n return 'number';\n }\n const lower = value.toLowerCase();\n if (lower === 'true' || lower === 'false') {\n return 'boolean';\n }\n if (isDate(value)) {\n return 'date';\n }\n if (isUrl(value)) {\n return 'url';\n }\n return 'text';\n}\n\n/**\n * Infer a column's field type from its first values: the most common detected\n * type, but only when it covers at least two-thirds of the samples (otherwise\n * `text`). Same majority-vote algorithm as cm-import\n * `guessFieldConfigFromSamples`, with a larger sample (see `TYPE_SAMPLE_SIZE`).\n *\n * `detectValue` defaults to the primitive {@link detectValueType}; the fields\n * detector passes a media-aware variant so it reuses this sampling/majority\n * logic.\n */\nexport function detectColumnType(\n values: string[],\n detectValue: DetectValueType = detectValueType,\n): NewFieldType {\n const samples = values.slice(0, TYPE_SAMPLE_SIZE);\n if (samples.length === 0) {\n return 'text';\n }\n\n const counts = new Map<NewFieldType, number>();\n samples.forEach((value) => {\n const type = detectValue(value);\n counts.set(type, (counts.get(type) ?? 0) + 1);\n });\n\n let best: NewFieldType = 'text';\n let bestCount = 0;\n counts.forEach((count, type) => {\n if (count > bestCount) {\n best = type;\n bestCount = count;\n }\n });\n\n return bestCount >= samples.length * MAJORITY ? best : 'text';\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAYA;;AAGA;;AAGA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMA,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,GAAG,EAAE;AAClC,MAAME,QAAQ,GAAG,CAAC,GAAG,CAAC;;AAEtB;AACA,MAAMC,SAAS,GAAG,uBAAuB;;AAEzC;AACA,MAAMC,aAAa,GAAG,gDAAgD;AACtE,MAAMC,WAAW,GAAG,mBAAmB;;AAEvC;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,iBAAiB,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;AACrD,MAAMC,cAAc,GAAG,SAAS;AAChC,MAAMC,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;AACxC,MAAMC,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;AACzC,MAAMC,QAAQ,GAAG,kBAAkB;AACnC,MAAMC,QAAQ,GAAG,4BAA4B;AAE7C,MAAMC,aAAa,GAAGA,CAACC,KAAa,EAAEC,QAA2B,KAC/DA,QAAQ,CAACC,IAAI,CAAEC,MAAM,IAAKH,KAAK,CAACI,UAAU,CAACD,MAAM,CAAC,CAAC;AAErD,MAAME,iBAAiB,GAAIL,KAAa,IAAc;EACpD,IAAIM,MAAW;EACf,IAAI;IACFA,MAAM,GAAG,IAAIC,GAAG,CAACP,KAAK,CAAC;EACzB,CAAC,CAAC,MAAM;IACN,OAAO,KAAK;EACd;EACA,OAAOP,iBAAiB,CAACe,QAAQ,CAACF,MAAM,CAACG,QAAQ,CAAC;AACpD,CAAC;AAED,MAAMC,UAAU,GAAIV,KAAa,IAC/BA,KAAK,CAACI,UAAU,CAACV,cAAc,CAAC,IAChCI,QAAQ,CAACa,IAAI,CAACX,KAAK,CAACY,KAAK,CAAClB,cAAc,CAACmB,MAAM,CAAC,CAAC;AAEnD,MAAMC,UAAU,GAAId,KAAa,IAC/BL,eAAe,CAACO,IAAI,CACjBO,QAAQ,IACPT,KAAK,CAACI,UAAU,CAACK,QAAQ,CAAC,IAAIZ,QAAQ,CAACc,IAAI,CAACX,KAAK,CAACY,KAAK,CAACH,QAAQ,CAACI,MAAM,CAAC,CAC5E,CAAC;AAEH,MAAME,KAAK,GAAIf,KAAa,IAC1BK,iBAAiB,CAACL,KAAK,CAAC,IACxBU,UAAU,CAACV,KAAK,CAAC,IACjBc,UAAU,CAACd,KAAK,CAAC,IACjBD,aAAa,CAACC,KAAK,EAAEJ,iBAAiB,CAAC;AAEzC,MAAMoB,MAAM,GAAIhB,KAAa,IAAc;EACzC,IAAIT,aAAa,CAACoB,IAAI,CAACX,KAAK,CAAC,EAAE;IAC7B,IAAI,CAACiB,MAAM,CAACC,KAAK,CAAC,IAAIC,IAAI,CAACnB,KAAK,CAAC,CAACoB,OAAO,CAAC,CAAC,CAAC,EAAE;MAC5C,OAAO,IAAI;IACb;IACA;IACA,MAAMC,OAAO,GAAGrB,KAAK,CAACsB,OAAO,CAAC,+BAA+B,EAAE,UAAU,CAAC;IAC1E,IAAI,CAACL,MAAM,CAACC,KAAK,CAAC,IAAIC,IAAI,CAACE,OAAO,CAAC,CAACD,OAAO,CAAC,CAAC,CAAC,EAAE;MAC9C,OAAO,IAAI;IACb;EACF;EACA,OAAO5B,WAAW,CAACmB,IAAI,CAACX,KAAK,CAAC,IAAI,CAACiB,MAAM,CAACC,KAAK,CAAC,IAAIC,IAAI,CAACnB,KAAK,CAAC,CAACoB,OAAO,CAAC,CAAC,CAAC;AAC5E,CAAC;;AAED;AACA;AACA;AACA;AACO,SAASG,eAAeA,CAACvB,KAAa,EAAgB;EAC3D,IAAIA,KAAK,KAAK,EAAE,EAAE;IAChB,OAAO,MAAM;EACf;EACA,IAAIV,SAAS,CAACqB,IAAI,CAACX,KAAK,CAAC,EAAE;IACzB,OAAO,QAAQ;EACjB;EACA,MAAMwB,KAAK,GAAGxB,KAAK,CAACyB,WAAW,CAAC,CAAC;EACjC,IAAID,KAAK,KAAK,MAAM,IAAIA,KAAK,KAAK,OAAO,EAAE;IACzC,OAAO,SAAS;EAClB;EACA,IAAIR,MAAM,CAAChB,KAAK,CAAC,EAAE;IACjB,OAAO,MAAM;EACf;EACA,IAAIe,KAAK,CAACf,KAAK,CAAC,EAAE;IAChB,OAAO,KAAK;EACd;EACA,OAAO,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS0B,gBAAgBA,CAC9BC,MAAgB,EAChBC,WAA4B,GAAGL,eAAe,EAChC;EACd,MAAMM,OAAO,GAAGF,MAAM,CAACf,KAAK,CAAC,CAAC,EAAEzB,gBAAgB,CAAC;EACjD,IAAI0C,OAAO,CAAChB,MAAM,KAAK,CAAC,EAAE;IACxB,OAAO,MAAM;EACf;EAEA,MAAMiB,MAAM,GAAG,IAAIC,GAAG,CAAuB,CAAC;EAC9CF,OAAO,CAACG,OAAO,CAAEhC,KAAK,IAAK;IACzB,MAAMiC,IAAI,GAAGL,WAAW,CAAC5B,KAAK,CAAC;IAC/B8B,MAAM,CAACI,GAAG,CAACD,IAAI,EAAE,CAACH,MAAM,CAACK,GAAG,CAACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;EAC/C,CAAC,CAAC;EAEF,IAAIG,IAAkB,GAAG,MAAM;EAC/B,IAAIC,SAAS,GAAG,CAAC;EACjBP,MAAM,CAACE,OAAO,CAAC,CAACM,KAAK,EAAEL,IAAI,KAAK;IAC9B,IAAIK,KAAK,GAAGD,SAAS,EAAE;MACrBD,IAAI,GAAGH,IAAI;MACXI,SAAS,GAAGC,KAAK;IACnB;EACF,CAAC,CAAC;EAEF,OAAOD,SAAS,IAAIR,OAAO,CAAChB,MAAM,GAAGxB,QAAQ,GAAG+C,IAAI,GAAG,MAAM;AAC/D","ignoreList":[]}
|
|
@@ -13,4 +13,10 @@ Object.keys(_parseCsv).forEach(function (key) {
|
|
|
13
13
|
if (key in exports && exports[key] === _parseCsv[key]) return;
|
|
14
14
|
exports[key] = _parseCsv[key];
|
|
15
15
|
});
|
|
16
|
+
var _detectFieldType = require("./detectFieldType");
|
|
17
|
+
Object.keys(_detectFieldType).forEach(function (key) {
|
|
18
|
+
if (key === "default" || key === "__esModule") return;
|
|
19
|
+
if (key in exports && exports[key] === _detectFieldType[key]) return;
|
|
20
|
+
exports[key] = _detectFieldType[key];
|
|
21
|
+
});
|
|
16
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_ImportState","require","Object","keys","forEach","key","exports","_parseCsv"],"sources":["../../../../src/state/ImportState/index.ts"],"sourcesContent":["export * from './ImportState';\nexport * from './parseCsv';\n"],"mappings":";;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,YAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,YAAA,CAAAK,GAAA;EAAAC,OAAA,CAAAD,GAAA,IAAAL,YAAA,CAAAK,GAAA;AAAA;AACA,IAAAE,SAAA,GAAAN,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAI,SAAA,EAAAH,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAE,SAAA,CAAAF,GAAA;EAAAC,OAAA,CAAAD,GAAA,IAAAE,SAAA,CAAAF,GAAA;AAAA","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_ImportState","require","Object","keys","forEach","key","exports","_parseCsv","_detectFieldType"],"sources":["../../../../src/state/ImportState/index.ts"],"sourcesContent":["export * from './ImportState';\nexport * from './parseCsv';\nexport * from './detectFieldType';\n"],"mappings":";;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,YAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,YAAA,CAAAK,GAAA;EAAAC,OAAA,CAAAD,GAAA,IAAAL,YAAA,CAAAK,GAAA;AAAA;AACA,IAAAE,SAAA,GAAAN,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAI,SAAA,EAAAH,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAE,SAAA,CAAAF,GAAA;EAAAC,OAAA,CAAAD,GAAA,IAAAE,SAAA,CAAAF,GAAA;AAAA;AACA,IAAAG,gBAAA,GAAAP,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAK,gBAAA,EAAAJ,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAG,gBAAA,CAAAH,GAAA;EAAAC,OAAA,CAAAD,GAAA,IAAAG,gBAAA,CAAAH,GAAA;AAAA","ignoreList":[]}
|
|
@@ -2,7 +2,7 @@ import { useCallback } from 'react';
|
|
|
2
2
|
import { useWixPatternsContainer, useCollectionContext } from '../providers';
|
|
3
3
|
import { ImportState, } from '../state';
|
|
4
4
|
export function useCreateImport(params) {
|
|
5
|
-
const { fields, bulkUploadItems, backup, updateSchema, importModalState, batchSize, } = params;
|
|
5
|
+
const { fields, bulkUploadItems, backup, updateSchema, detectColumnType, importModalState, batchSize, } = params;
|
|
6
6
|
const { showToast, translate, errorHandler, window } = useWixPatternsContainer();
|
|
7
7
|
const collection = useCollectionContext();
|
|
8
8
|
return useCallback(() => {
|
|
@@ -11,6 +11,7 @@ export function useCreateImport(params) {
|
|
|
11
11
|
bulkUploadItems,
|
|
12
12
|
backup,
|
|
13
13
|
updateSchema,
|
|
14
|
+
detectColumnType,
|
|
14
15
|
collection,
|
|
15
16
|
importModalState,
|
|
16
17
|
batchSize,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useImport.js","sourceRoot":"","sources":["../../../src/hooks/useImport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAEL,WAAW,
|
|
1
|
+
{"version":3,"file":"useImport.js","sourceRoot":"","sources":["../../../src/hooks/useImport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAEL,WAAW,GAKZ,MAAM,UAAU,CAAC;AAclB,MAAM,UAAU,eAAe,CAC7B,MAAuB;IAEvB,MAAM,EACJ,MAAM,EACN,eAAe,EACf,MAAM,EACN,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,GACV,GAAG,MAAM,CAAC;IACX,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,GAClD,uBAAuB,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAG,oBAAoB,EAAQ,CAAC;IAEhD,OAAO,WAAW,CAAC,GAAG,EAAE;QACtB,OAAO,IAAI,WAAW,CAAC;YACrB,MAAM;YACN,eAAe;YACf,MAAM;YACN,YAAY;YACZ,gBAAgB;YAChB,UAAU;YACV,gBAAgB;YAChB,SAAS;YACT,SAAS;YACT,SAAS;YACT,YAAY;YACZ,WAAW,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;gBACjC,MAAM,CAAC,QAAQ,CACb,+BAA+B,kBAAkB,CAAC,OAAO,CAAC,EAAE,EAC5D,QAAQ,CACT,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { action, computed, makeObservable, observable, runInAction, } from 'mobx
|
|
|
2
2
|
import { queryStatus, } from '../../model';
|
|
3
3
|
import { ConditionalModalState } from '../ConditionalModalState';
|
|
4
4
|
import { parseCsv, unparseCsv } from './parseCsv';
|
|
5
|
+
import { detectColumnType, TYPE_SAMPLE_SIZE, } from './detectFieldType';
|
|
5
6
|
import set from 'lodash/set';
|
|
6
7
|
const DEFAULT_BATCH_SIZE = 100;
|
|
7
8
|
// How long to keep the completed progress bar (100%) on screen before closing
|
|
@@ -95,6 +96,7 @@ export class ImportState {
|
|
|
95
96
|
this.showToast = props.showToast;
|
|
96
97
|
this.downloadCsv = props.downloadCsv;
|
|
97
98
|
this.batchSize = props.batchSize ?? DEFAULT_BATCH_SIZE;
|
|
99
|
+
this._detectColumnType = props.detectColumnType ?? detectColumnType;
|
|
98
100
|
makeObservable(this, {
|
|
99
101
|
currentStep: observable.ref,
|
|
100
102
|
importStatus: observable.ref,
|
|
@@ -247,7 +249,7 @@ export class ImportState {
|
|
|
247
249
|
id: field.id ?? '',
|
|
248
250
|
header: field.header ?? '',
|
|
249
251
|
}));
|
|
250
|
-
headers.forEach((header) => {
|
|
252
|
+
headers.forEach((header, index) => {
|
|
251
253
|
const normalizedHeader = normalize(header);
|
|
252
254
|
const matched = fields.find((field) => normalize(field.id) === normalizedHeader ||
|
|
253
255
|
normalize(field.header) === normalizedHeader);
|
|
@@ -255,15 +257,27 @@ export class ImportState {
|
|
|
255
257
|
mapping[header] = { kind: 'existing', fieldId: matched.id };
|
|
256
258
|
}
|
|
257
259
|
else {
|
|
258
|
-
// Unmatched columns default to creating a new (
|
|
259
|
-
// consumer supplied `updateSchema`;
|
|
260
|
+
// Unmatched columns default to creating a new field (type inferred from
|
|
261
|
+
// the column's data) when the consumer supplied `updateSchema`;
|
|
262
|
+
// otherwise they default to skip.
|
|
260
263
|
mapping[header] = this.canCreateNewField
|
|
261
|
-
? {
|
|
264
|
+
? {
|
|
265
|
+
kind: 'new',
|
|
266
|
+
fieldType: this._detectColumnType(this._columnValues(index)),
|
|
267
|
+
}
|
|
262
268
|
: null;
|
|
263
269
|
}
|
|
264
270
|
});
|
|
265
271
|
return mapping;
|
|
266
272
|
}
|
|
273
|
+
// The column's values, capped at the detection sample size — detection only
|
|
274
|
+
// looks at the first `TYPE_SAMPLE_SIZE` values, so avoid copying the whole
|
|
275
|
+
// column (a wide CSV would otherwise allocate rows × columns strings).
|
|
276
|
+
_columnValues(columnIndex) {
|
|
277
|
+
return this.csvRows
|
|
278
|
+
.slice(0, TYPE_SAMPLE_SIZE)
|
|
279
|
+
.map((row) => row[columnIndex] ?? '');
|
|
280
|
+
}
|
|
267
281
|
applyParsedCsv(fileName, parsedCsv) {
|
|
268
282
|
this.fileName = fileName;
|
|
269
283
|
this.csvHeaders = parsedCsv.headers;
|
|
@@ -366,9 +380,11 @@ export class ImportState {
|
|
|
366
380
|
};
|
|
367
381
|
}
|
|
368
382
|
setNewFieldMapping(header) {
|
|
383
|
+
const index = this.csvHeaders.indexOf(header);
|
|
384
|
+
const fieldType = index >= 0 ? this._detectColumnType(this._columnValues(index)) : 'text';
|
|
369
385
|
this.mappingByHeader = {
|
|
370
386
|
...this.mappingByHeader,
|
|
371
|
-
[header]: { kind: 'new', fieldType
|
|
387
|
+
[header]: { kind: 'new', fieldType },
|
|
372
388
|
};
|
|
373
389
|
}
|
|
374
390
|
async _uploadBatches(batches) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImportState.js","sourceRoot":"","sources":["../../../../src/state/ImportState/ImportState.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ImportState.js","sourceRoot":"","sources":["../../../../src/state/ImportState/ImportState.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
// Field-type detection for new fields created during CSV import (CAIRO-4131).
|
|
2
|
+
//
|
|
3
|
+
// Ported from cm-import (`wix-data-client/cm-import`):
|
|
4
|
+
// - per-cell rules from `src/field-configuration/detectFieldConfig.js`
|
|
5
|
+
// (`detectPrimitiveType`) and `src/types/validators/{number,url}.js`
|
|
6
|
+
// - the column-level majority vote from
|
|
7
|
+
// `src/field-configuration/guessFieldConfigFromSamples.js`
|
|
8
|
+
//
|
|
9
|
+
// This module owns the shared `NewFieldType` vocabulary and the primitive
|
|
10
|
+
// detector (number / date / boolean / url, else text). Media detection (image /
|
|
11
|
+
// video / document / audio) lives in `@wix/patterns-fields` — it needs the media
|
|
12
|
+
// URI parser, which core must not depend on — and is injected into `ImportState`
|
|
13
|
+
// via `detectColumnType` (see `ImportStateProps`). `detectColumnType` here takes
|
|
14
|
+
// the per-value detector as a parameter so the fields detector reuses this
|
|
15
|
+
// sampling/majority logic instead of re-implementing it.
|
|
16
|
+
// Column-detection sampling: look at the first `TYPE_SAMPLE_SIZE` values and
|
|
17
|
+
// require a >= `MAJORITY` share to agree on a non-text type. We use the same 2/3
|
|
18
|
+
// vote as cm-import but a **larger sample** — cm-import's `constants.sampleSize`
|
|
19
|
+
// is 6; we deliberately sample more so the inference is steadier on messy
|
|
20
|
+
// columns. Exported so callers pass only the head of a column to
|
|
21
|
+
// `detectColumnType` instead of copying it whole.
|
|
22
|
+
export const TYPE_SAMPLE_SIZE = 50;
|
|
23
|
+
const MAJORITY = 2 / 3;
|
|
24
|
+
// cm-import `validators/number.js` `validateString`.
|
|
25
|
+
const NUMBER_RE = /^[+-]?(?:\d+\.?\d*)?$/;
|
|
26
|
+
// cm-import `detectFieldConfig.js` date patterns.
|
|
27
|
+
const SLASH_DATE_RE = /^\d{1,2}\/\d{1,2}\/\d{4}(?: \d{1,2}:\d{1,2})?$/;
|
|
28
|
+
const ISO_DATE_RE = /\d{4}-\d{2}-\d{2}/;
|
|
29
|
+
// Approximates cm-import `validators/url.js` (website / email / phone / relative
|
|
30
|
+
// links). cm-import delegates structural validation to `@wix/santa-core-utils`
|
|
31
|
+
// `isValidUrl`/`isValidEmail`, which aren't available here — so website URLs are
|
|
32
|
+
// validated with the platform `URL` parser instead (rejects empty/whitespace/
|
|
33
|
+
// malformed authorities). It's still an approximation: `URL` accepts some
|
|
34
|
+
// odd-but-parseable hosts santa would reject.
|
|
35
|
+
const WEBSITE_PROTOCOLS = ['http:', 'https:', 'ftp:'];
|
|
36
|
+
const EMAIL_PROTOCOL = 'mailto:';
|
|
37
|
+
const PHONE_PROTOCOLS = ['sms:', 'tel:'];
|
|
38
|
+
const RELATIVE_PREFIXES = ['/', '#', '?'];
|
|
39
|
+
const PHONE_RE = /^[\s\d()+\-/_]+$/;
|
|
40
|
+
const EMAIL_RE = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
41
|
+
const startsWithAny = (value, prefixes) => prefixes.some((prefix) => value.startsWith(prefix));
|
|
42
|
+
const isValidWebsiteUrl = (value) => {
|
|
43
|
+
let parsed;
|
|
44
|
+
try {
|
|
45
|
+
parsed = new URL(value);
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
return WEBSITE_PROTOCOLS.includes(parsed.protocol);
|
|
51
|
+
};
|
|
52
|
+
const isEmailUrl = (value) => value.startsWith(EMAIL_PROTOCOL) &&
|
|
53
|
+
EMAIL_RE.test(value.slice(EMAIL_PROTOCOL.length));
|
|
54
|
+
const isPhoneUrl = (value) => PHONE_PROTOCOLS.some((protocol) => value.startsWith(protocol) && PHONE_RE.test(value.slice(protocol.length)));
|
|
55
|
+
const isUrl = (value) => isValidWebsiteUrl(value) ||
|
|
56
|
+
isEmailUrl(value) ||
|
|
57
|
+
isPhoneUrl(value) ||
|
|
58
|
+
startsWithAny(value, RELATIVE_PREFIXES);
|
|
59
|
+
const isDate = (value) => {
|
|
60
|
+
if (SLASH_DATE_RE.test(value)) {
|
|
61
|
+
if (!Number.isNaN(new Date(value).getTime())) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
// cm-import also accepts dd/mm/yyyy by swapping day and month.
|
|
65
|
+
const swapped = value.replace(/(\d{1,2})\/(\d{1,2})\/(\d{4})/, '$2/$1/$3');
|
|
66
|
+
if (!Number.isNaN(new Date(swapped).getTime())) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return ISO_DATE_RE.test(value) && !Number.isNaN(new Date(value).getTime());
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Infer the field type of a single CSV cell, in cm-import's order:
|
|
74
|
+
* empty → number → boolean → date → url, else text.
|
|
75
|
+
*/
|
|
76
|
+
export function detectValueType(value) {
|
|
77
|
+
if (value === '') {
|
|
78
|
+
return 'text';
|
|
79
|
+
}
|
|
80
|
+
if (NUMBER_RE.test(value)) {
|
|
81
|
+
return 'number';
|
|
82
|
+
}
|
|
83
|
+
const lower = value.toLowerCase();
|
|
84
|
+
if (lower === 'true' || lower === 'false') {
|
|
85
|
+
return 'boolean';
|
|
86
|
+
}
|
|
87
|
+
if (isDate(value)) {
|
|
88
|
+
return 'date';
|
|
89
|
+
}
|
|
90
|
+
if (isUrl(value)) {
|
|
91
|
+
return 'url';
|
|
92
|
+
}
|
|
93
|
+
return 'text';
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Infer a column's field type from its first values: the most common detected
|
|
97
|
+
* type, but only when it covers at least two-thirds of the samples (otherwise
|
|
98
|
+
* `text`). Same majority-vote algorithm as cm-import
|
|
99
|
+
* `guessFieldConfigFromSamples`, with a larger sample (see `TYPE_SAMPLE_SIZE`).
|
|
100
|
+
*
|
|
101
|
+
* `detectValue` defaults to the primitive {@link detectValueType}; the fields
|
|
102
|
+
* detector passes a media-aware variant so it reuses this sampling/majority
|
|
103
|
+
* logic.
|
|
104
|
+
*/
|
|
105
|
+
export function detectColumnType(values, detectValue = detectValueType) {
|
|
106
|
+
const samples = values.slice(0, TYPE_SAMPLE_SIZE);
|
|
107
|
+
if (samples.length === 0) {
|
|
108
|
+
return 'text';
|
|
109
|
+
}
|
|
110
|
+
const counts = new Map();
|
|
111
|
+
samples.forEach((value) => {
|
|
112
|
+
const type = detectValue(value);
|
|
113
|
+
counts.set(type, (counts.get(type) ?? 0) + 1);
|
|
114
|
+
});
|
|
115
|
+
let best = 'text';
|
|
116
|
+
let bestCount = 0;
|
|
117
|
+
counts.forEach((count, type) => {
|
|
118
|
+
if (count > bestCount) {
|
|
119
|
+
best = type;
|
|
120
|
+
bestCount = count;
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
return bestCount >= samples.length * MAJORITY ? best : 'text';
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=detectFieldType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detectFieldType.js","sourceRoot":"","sources":["../../../../src/state/ImportState/detectFieldType.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/state/ImportState/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/state/ImportState/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ModalState, ImportState, BackupFn, BulkUploadItemsFn, UpdateSchemaFn } from '../state';
|
|
1
|
+
import { ModalState, ImportState, BackupFn, BulkUploadItemsFn, UpdateSchemaFn, DetectColumnType } from '../state';
|
|
2
2
|
import { CreateExportAsyncJobRequest } from '@wix/bex-utils/@wix/ambassador-fedinfra-exportservice-v1-export-async-job/types';
|
|
3
3
|
import { FiltersMap } from '../model';
|
|
4
4
|
export interface UseImportParams {
|
|
@@ -6,6 +6,7 @@ export interface UseImportParams {
|
|
|
6
6
|
bulkUploadItems: BulkUploadItemsFn;
|
|
7
7
|
backup?: BackupFn;
|
|
8
8
|
updateSchema?: UpdateSchemaFn;
|
|
9
|
+
detectColumnType?: DetectColumnType;
|
|
9
10
|
importModalState: ModalState;
|
|
10
11
|
batchSize?: number;
|
|
11
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useImport.d.ts","sourceRoot":"","sources":["../../../src/hooks/useImport.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,UAAU,EACV,WAAW,EACX,QAAQ,EACR,iBAAiB,EACjB,cAAc,
|
|
1
|
+
{"version":3,"file":"useImport.d.ts","sourceRoot":"","sources":["../../../src/hooks/useImport.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,UAAU,EACV,WAAW,EACX,QAAQ,EACR,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EACjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,2BAA2B,EAAE,MAAM,iFAAiF,CAAC;AAC9H,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC;IAC9C,eAAe,EAAE,iBAAiB,CAAC;IACnC,MAAM,CAAC,EAAE,QAAQ,CAAC;IAClB,YAAY,CAAC,EAAE,cAAc,CAAC;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,gBAAgB,EAAE,UAAU,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,SAAS,UAAU,GAAG,UAAU,EAC5E,MAAM,EAAE,eAAe,qBAoCxB"}
|
|
@@ -3,6 +3,7 @@ import { Translate } from '../../services';
|
|
|
3
3
|
import { ModalState } from '../ModalState';
|
|
4
4
|
import { ConditionalModalState } from '../ConditionalModalState';
|
|
5
5
|
import { CreateExportAsyncJobRequest } from '@wix/bex-utils/@wix/ambassador-fedinfra-exportservice-v1-export-async-job/types';
|
|
6
|
+
import { type DetectColumnType, type NewFieldType } from './detectFieldType';
|
|
6
7
|
export interface ImportCollection {
|
|
7
8
|
clearResultAndMoveToStart(params?: {
|
|
8
9
|
force?: boolean;
|
|
@@ -26,7 +27,6 @@ export interface BackupResult {
|
|
|
26
27
|
export type BackupFn = (signal: AbortSignal) => Promise<BackupResult | void>;
|
|
27
28
|
export type DownloadCsvFn = (content: string, fileName: string) => void;
|
|
28
29
|
export type ImportField = NonNullable<CreateExportAsyncJobRequest['fields']>[number];
|
|
29
|
-
export type NewFieldType = 'text';
|
|
30
30
|
export interface NewFieldDefinition {
|
|
31
31
|
key: string;
|
|
32
32
|
type: NewFieldType;
|
|
@@ -59,6 +59,14 @@ export interface ImportStateProps {
|
|
|
59
59
|
bulkUploadItems: BulkUploadItemsFn;
|
|
60
60
|
backup?: BackupFn;
|
|
61
61
|
updateSchema?: UpdateSchemaFn;
|
|
62
|
+
/**
|
|
63
|
+
* Infers a new field's type from its column data. Defaults to the primitive
|
|
64
|
+
* detector (number / date / boolean / url / text). `@wix/patterns` injects a
|
|
65
|
+
* media-aware detector from `@wix/patterns-fields` (image / video / document /
|
|
66
|
+
* audio) — that detection needs the media URI parser, which core can't depend
|
|
67
|
+
* on.
|
|
68
|
+
*/
|
|
69
|
+
detectColumnType?: DetectColumnType;
|
|
62
70
|
collection: ImportCollection;
|
|
63
71
|
importModalState: ModalState;
|
|
64
72
|
translate: Translate;
|
|
@@ -80,6 +88,7 @@ export declare class ImportState {
|
|
|
80
88
|
readonly showToast?: ShowToast;
|
|
81
89
|
readonly downloadCsv?: DownloadCsvFn;
|
|
82
90
|
readonly batchSize: number;
|
|
91
|
+
private readonly _detectColumnType;
|
|
83
92
|
readonly discardChangesModal: ConditionalModalState<"close" | "goBack">;
|
|
84
93
|
currentStep: ImportStep;
|
|
85
94
|
importStatus: TaskStatus<BulkUploadResults, unknown>;
|
|
@@ -124,6 +133,7 @@ export declare class ImportState {
|
|
|
124
133
|
discardAndClose(): Promise<void>;
|
|
125
134
|
onUploadContinue(): void;
|
|
126
135
|
private getDefaultMapping;
|
|
136
|
+
private _columnValues;
|
|
127
137
|
private applyParsedCsv;
|
|
128
138
|
onFileSelected(file: File | null): Promise<void>;
|
|
129
139
|
private _readFileBytes;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImportState.d.ts","sourceRoot":"","sources":["../../../../src/state/ImportState/ImportState.ts"],"names":[],"mappings":"AAOA,OAAO,EAEL,SAAS,EACT,UAAU,EACV,oBAAoB,EACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAoB,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,MAAM,iFAAiF,CAAC;
|
|
1
|
+
{"version":3,"file":"ImportState.d.ts","sourceRoot":"","sources":["../../../../src/state/ImportState/ImportState.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type NewFieldType = 'text' | 'number' | 'date' | 'boolean' | 'url' | 'image' | 'video' | 'document' | 'audio';
|
|
2
|
+
export type DetectColumnType = (values: string[]) => NewFieldType;
|
|
3
|
+
export type DetectValueType = (value: string) => NewFieldType;
|
|
4
|
+
export declare const TYPE_SAMPLE_SIZE = 50;
|
|
5
|
+
/**
|
|
6
|
+
* Infer the field type of a single CSV cell, in cm-import's order:
|
|
7
|
+
* empty → number → boolean → date → url, else text.
|
|
8
|
+
*/
|
|
9
|
+
export declare function detectValueType(value: string): NewFieldType;
|
|
10
|
+
/**
|
|
11
|
+
* Infer a column's field type from its first values: the most common detected
|
|
12
|
+
* type, but only when it covers at least two-thirds of the samples (otherwise
|
|
13
|
+
* `text`). Same majority-vote algorithm as cm-import
|
|
14
|
+
* `guessFieldConfigFromSamples`, with a larger sample (see `TYPE_SAMPLE_SIZE`).
|
|
15
|
+
*
|
|
16
|
+
* `detectValue` defaults to the primitive {@link detectValueType}; the fields
|
|
17
|
+
* detector passes a media-aware variant so it reuses this sampling/majority
|
|
18
|
+
* logic.
|
|
19
|
+
*/
|
|
20
|
+
export declare function detectColumnType(values: string[], detectValue?: DetectValueType): NewFieldType;
|
|
21
|
+
//# sourceMappingURL=detectFieldType.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detectFieldType.d.ts","sourceRoot":"","sources":["../../../../src/state/ImportState/detectFieldType.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,QAAQ,GACR,MAAM,GACN,SAAS,GACT,KAAK,GACL,OAAO,GACP,OAAO,GACP,UAAU,GACV,OAAO,CAAC;AAGZ,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,YAAY,CAAC;AAGlE,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,YAAY,CAAC;AAQ9D,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAkEnC;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAkB3D;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EAAE,EAChB,WAAW,GAAE,eAAiC,GAC7C,YAAY,CAsBd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/state/ImportState/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/state/ImportState/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wix/bex-core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.328.0",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Kobi",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"exports"
|
|
42
42
|
],
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@wix/bex-utils": "2.
|
|
44
|
+
"@wix/bex-utils": "2.115.0",
|
|
45
45
|
"chance": "^1.0.0",
|
|
46
46
|
"events": "^3.0.0",
|
|
47
47
|
"formstate": "^2.1.0",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"@types/react": "^16.0.0",
|
|
64
64
|
"@wix/auto-crud": "^1.0.108",
|
|
65
65
|
"@wix/babel-cli": "^1.11.0",
|
|
66
|
-
"@wix/cairo-integration-utils": "1.
|
|
66
|
+
"@wix/cairo-integration-utils": "1.90.0",
|
|
67
67
|
"@wix/eslint-config-yoshi": "^6.74.0",
|
|
68
68
|
"@wix/fe-essentials": "^1.233.0",
|
|
69
69
|
"@wix/fe-essentials-standalone": "^1.374.0",
|
|
@@ -169,5 +169,5 @@
|
|
|
169
169
|
"wallaby": {
|
|
170
170
|
"autoDetect": true
|
|
171
171
|
},
|
|
172
|
-
"falconPackageHash": "
|
|
172
|
+
"falconPackageHash": "937273e49fb3b36ccae1843df8c212d5c084f7f45e6882b59d212c82"
|
|
173
173
|
}
|