@wix/bex-core 2.326.0 → 2.327.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.
@@ -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;AAmBO,SAASG,eAAeA,CAC7BC,MAAuB,EACvB;EACA,MAAM;IACJC,MAAM;IACNC,eAAe;IACfC,MAAM;IACNC,YAAY;IACZC,gBAAgB;IAChBC;EACF,CAAC,GAAGN,MAAM;EACV,MAAM;IAAEO,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;MACrBd,MAAM;MACNC,eAAe;MACfC,MAAM;MACNC,YAAY;MACZQ,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":[]}
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
- // The field type of a field created during import. Only `text` is supported for
13
- // now; data-driven type detection (Number/Date/Boolean/URL) is tracked in
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 (text) field when the
309
- // consumer supplied `updateSchema`; otherwise they default to skip.
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: 'text'
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: 'text'
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":"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","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":"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","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,GAIZ,MAAM,UAAU,CAAC;AAalB,MAAM,UAAU,eAAe,CAC7B,MAAuB;IAEvB,MAAM,EACJ,MAAM,EACN,eAAe,EACf,MAAM,EACN,YAAY,EACZ,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,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"}
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 (text) field when the
259
- // consumer supplied `updateSchema`; otherwise they default to skip.
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
- ? { kind: 'new', fieldType: 'text' }
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: 'text' },
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,3 +1,4 @@
1
1
  export * from './ImportState';
2
2
  export * from './parseCsv';
3
+ export * from './detectFieldType';
3
4
  //# sourceMappingURL=index.js.map
@@ -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,EACf,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,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,qBAkCxB"}
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":"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"}
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,3 +1,4 @@
1
1
  export * from './ImportState';
2
2
  export * from './parseCsv';
3
+ export * from './detectFieldType';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -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.326.0",
3
+ "version": "2.327.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.113.0",
44
+ "@wix/bex-utils": "2.114.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.88.0",
66
+ "@wix/cairo-integration-utils": "1.89.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": "8d20e72966f2458e71d14e78ee53fe54d58bd0bea2197bbf92d6d2b4"
172
+ "falconPackageHash": "6c5687da76f292d8e76a0834ce75a642941a5cb2f9e442bd777403e2"
173
173
  }