@wix/bex-core 2.321.0 → 2.323.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/assets/locale/messages_ar.json +8 -1
- package/dist/cjs/assets/locale/messages_bg.json +8 -1
- package/dist/cjs/assets/locale/messages_ca.json +8 -1
- package/dist/cjs/assets/locale/messages_cs.json +7 -0
- package/dist/cjs/assets/locale/messages_da.json +7 -0
- package/dist/cjs/assets/locale/messages_de.json +7 -0
- package/dist/cjs/assets/locale/messages_el.json +8 -1
- package/dist/cjs/assets/locale/messages_en.json +8 -1
- package/dist/cjs/assets/locale/messages_es.json +7 -0
- package/dist/cjs/assets/locale/messages_fi.json +8 -1
- package/dist/cjs/assets/locale/messages_fr.json +7 -0
- package/dist/cjs/assets/locale/messages_he.json +8 -1
- package/dist/cjs/assets/locale/messages_hi.json +7 -0
- package/dist/cjs/assets/locale/messages_hu.json +8 -1
- package/dist/cjs/assets/locale/messages_id.json +7 -0
- package/dist/cjs/assets/locale/messages_it.json +7 -0
- package/dist/cjs/assets/locale/messages_ja.json +7 -0
- package/dist/cjs/assets/locale/messages_ko.json +7 -0
- package/dist/cjs/assets/locale/messages_lt.json +8 -1
- package/dist/cjs/assets/locale/messages_ms.json +8 -1
- package/dist/cjs/assets/locale/messages_nl.json +7 -0
- package/dist/cjs/assets/locale/messages_no.json +7 -0
- package/dist/cjs/assets/locale/messages_pl.json +7 -0
- package/dist/cjs/assets/locale/messages_pt.json +7 -0
- package/dist/cjs/assets/locale/messages_ro.json +8 -1
- package/dist/cjs/assets/locale/messages_ru.json +7 -0
- package/dist/cjs/assets/locale/messages_sk.json +8 -1
- package/dist/cjs/assets/locale/messages_sl.json +8 -1
- package/dist/cjs/assets/locale/messages_sv.json +7 -0
- package/dist/cjs/assets/locale/messages_th.json +7 -0
- package/dist/cjs/assets/locale/messages_tl.json +8 -1
- package/dist/cjs/assets/locale/messages_tr.json +7 -0
- package/dist/cjs/assets/locale/messages_uk.json +7 -0
- package/dist/cjs/assets/locale/messages_vi.json +7 -0
- package/dist/cjs/assets/locale/messages_zh.json +7 -0
- package/dist/cjs/assets/locale/version_file +1 -1
- package/dist/cjs/assets/visual-e2e-locale/messages_visuale2e.json +7 -2
- package/dist/cjs/hooks/useImport.js +6 -2
- package/dist/cjs/hooks/useImport.js.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/services/translations.js.map +1 -1
- package/dist/cjs/state/ImportState/ImportState.js +184 -37
- package/dist/cjs/state/ImportState/ImportState.js.map +1 -1
- package/dist/cjs/state/ImportState/parseCsv.js +5 -1
- package/dist/cjs/state/ImportState/parseCsv.js.map +1 -1
- package/dist/cjs/types/Field.js.map +1 -1
- package/dist/cjs/types/Schema.js +4 -0
- package/dist/cjs/types/Schema.js.map +1 -0
- package/dist/esm/assets/locale/messages_ar.json +8 -1
- package/dist/esm/assets/locale/messages_bg.json +8 -1
- package/dist/esm/assets/locale/messages_ca.json +8 -1
- package/dist/esm/assets/locale/messages_cs.json +7 -0
- package/dist/esm/assets/locale/messages_da.json +7 -0
- package/dist/esm/assets/locale/messages_de.json +7 -0
- package/dist/esm/assets/locale/messages_el.json +8 -1
- package/dist/esm/assets/locale/messages_en.json +8 -1
- package/dist/esm/assets/locale/messages_es.json +7 -0
- package/dist/esm/assets/locale/messages_fi.json +8 -1
- package/dist/esm/assets/locale/messages_fr.json +7 -0
- package/dist/esm/assets/locale/messages_he.json +8 -1
- package/dist/esm/assets/locale/messages_hi.json +7 -0
- package/dist/esm/assets/locale/messages_hu.json +8 -1
- package/dist/esm/assets/locale/messages_id.json +7 -0
- package/dist/esm/assets/locale/messages_it.json +7 -0
- package/dist/esm/assets/locale/messages_ja.json +7 -0
- package/dist/esm/assets/locale/messages_ko.json +7 -0
- package/dist/esm/assets/locale/messages_lt.json +8 -1
- package/dist/esm/assets/locale/messages_ms.json +8 -1
- package/dist/esm/assets/locale/messages_nl.json +7 -0
- package/dist/esm/assets/locale/messages_no.json +7 -0
- package/dist/esm/assets/locale/messages_pl.json +7 -0
- package/dist/esm/assets/locale/messages_pt.json +7 -0
- package/dist/esm/assets/locale/messages_ro.json +8 -1
- package/dist/esm/assets/locale/messages_ru.json +7 -0
- package/dist/esm/assets/locale/messages_sk.json +8 -1
- package/dist/esm/assets/locale/messages_sl.json +8 -1
- package/dist/esm/assets/locale/messages_sv.json +7 -0
- package/dist/esm/assets/locale/messages_th.json +7 -0
- package/dist/esm/assets/locale/messages_tl.json +8 -1
- package/dist/esm/assets/locale/messages_tr.json +7 -0
- package/dist/esm/assets/locale/messages_uk.json +7 -0
- package/dist/esm/assets/locale/messages_vi.json +7 -0
- package/dist/esm/assets/locale/messages_zh.json +7 -0
- package/dist/esm/assets/locale/version_file +1 -1
- package/dist/esm/assets/visual-e2e-locale/messages_visuale2e.json +7 -2
- package/dist/esm/hooks/useImport.js +4 -1
- package/dist/esm/hooks/useImport.js.map +1 -1
- package/dist/esm/state/ImportState/ImportState.js +168 -36
- package/dist/esm/state/ImportState/ImportState.js.map +1 -1
- package/dist/esm/state/ImportState/parseCsv.js +4 -1
- package/dist/esm/state/ImportState/parseCsv.js.map +1 -1
- package/dist/esm/types/Schema.js +2 -0
- package/dist/esm/types/Schema.js.map +1 -0
- package/dist/types/hooks/useImport.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/services/translations.d.ts +8 -1
- package/dist/types/services/translations.d.ts.map +1 -1
- package/dist/types/state/ImportState/ImportState.d.ts +19 -1
- package/dist/types/state/ImportState/ImportState.d.ts.map +1 -1
- package/dist/types/state/ImportState/parseCsv.d.ts +2 -1
- package/dist/types/state/ImportState/parseCsv.d.ts.map +1 -1
- package/dist/types/types/Field.d.ts +4 -0
- package/dist/types/types/Field.d.ts.map +1 -1
- package/dist/types/types/Schema.d.ts +103 -0
- package/dist/types/types/Schema.d.ts.map +1 -0
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_mobx","require","_model","_ConditionalModalState","_parseCsv","_set","_interopRequireDefault","DEFAULT_BATCH_SIZE","normalize","value","trim","toLowerCase","toMappedRows","rows","headers","mappingByHeader","map","row","mapped","forEach","header","index","mappedField","set","ImportState","constructor","props","_defineProperty2","default","ConditionalModalState","queryStatus","idle","succeeded","failed","errors","fields","bulkUploadItems","backup","collection","importModalState","translate","errorHandler","showToast","batchSize","makeObservable","currentStep","observable","ref","importStatus","parseError","fileName","csvHeaders","csvRows","processedCount","totalCount","result","isBackingUp","isRestoring","hasParsedRows","computed","hasMappings","selectedFieldIds","mappedRows","onUploadContinue","action","bound","goToUpload","setMapping","close","onFileSelected","startImport","reset","init","undefined","length","Object","values","some","Set","filter","v","_this$_abortControlle","_abortController","abort","restoreFn","_cancelled","_this$_abortControlle2","_restoreBackup","clearResultAndMoveToStart","force","restoreController","AbortController","signal","error","console","runInAction","discardAndGoBack","discardChangesModal","open","modal","promise","discardAndClose","getDefaultMapping","mapping","field","id","normalizedHeader","matched","find","applyParsedCsv","parsedCsv","file","content","text","parseCsv","message","name","e","fieldId","_uploadBatches","batches","processedRows","batch","batchResult","Math","min","_runBackup","restore","_createRowsBatches","reduce","acc","push","backupFailed","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 } 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 } 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 ImportField = NonNullable<\n CreateExportAsyncJobRequest['fields']\n>[number];\n\nexport interface ImportStateProps {\n fields: CreateExportAsyncJobRequest['fields'];\n bulkUploadItems: BulkUploadItemsFn;\n backup?: BackupFn;\n collection: ImportCollection;\n importModalState: ModalState;\n translate: Translate;\n errorHandler: PatternsErrorHandler;\n showToast?: ShowToast;\n batchSize?: number;\n}\n\nexport type ImportStep = 'upload' | 'configuration' | 'progress';\n\nconst DEFAULT_BATCH_SIZE = 100;\n\nfunction normalize(value: string) {\n return value.trim().toLowerCase();\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 collection: ImportCollection;\n readonly importModalState: ModalState;\n readonly translate: Translate;\n readonly errorHandler: PatternsErrorHandler;\n readonly showToast?: ShowToast;\n readonly batchSize: number;\n readonly discardChangesModal = new ConditionalModalState<'goBack' | 'close'>();\n\n currentStep: ImportStep = 'upload';\n importStatus: TaskStatus<BulkUploadResults, unknown> = {\n ...queryStatus.idle,\n };\n parseError: string | null = null;\n fileName = '';\n csvHeaders: string[] = [];\n csvRows: string[][] = [];\n mappingByHeader: Record<string, string | null> = {};\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\n constructor(props: ImportStateProps) {\n this.fields = (props.fields ?? []) as ImportField[];\n this.bulkUploadItems = props.bulkUploadItems;\n this.backup = props.backup;\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.batchSize = props.batchSize ?? DEFAULT_BATCH_SIZE;\n\n makeObservable(this, {\n currentStep: observable.ref,\n importStatus: observable.ref,\n parseError: 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 selectedFieldIds: computed,\n mappedRows: computed,\n onUploadContinue: action.bound,\n goToUpload: action.bound,\n setMapping: 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 get selectedFieldIds(): Set<string> {\n return new Set(\n Object.values(this.mappingByHeader).filter(\n (v): v is string => v != null,\n ),\n );\n }\n\n get mappedRows() {\n return toMappedRows(this.csvRows, this.csvHeaders, this.mappingByHeader);\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.parseError = null;\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 }\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, string | null> = {};\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 mapping[header] = matched?.id || null;\n });\n\n return mapping;\n }\n\n private applyParsedCsv(fileName: string, parsedCsv: ParseCsvResult) {\n this.fileName = fileName;\n this.parseError = null;\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 try {\n const content = await file.text();\n const parsedCsv = parseCsv(content);\n\n if ('message' in parsedCsv) {\n runInAction(() => {\n this.parseError = parsedCsv.message;\n this.fileName = file.name;\n this.csvHeaders = [];\n this.csvRows = [];\n this.mappingByHeader = {};\n this.currentStep = 'upload';\n });\n return;\n }\n\n runInAction(() => {\n this.applyParsedCsv(file.name, parsedCsv);\n });\n } catch (e) {\n console.error(e);\n runInAction(() => {\n this.parseError = this.translate('cairo.import.parseFailed');\n this.currentStep = 'upload';\n });\n }\n }\n\n setMapping(header: string, fieldId: string | null) {\n this.mappingByHeader = {\n ...this.mappingByHeader,\n [header]: fieldId,\n };\n }\n\n private async _uploadBatches(batches: Record<string, unknown>[][]) {\n let processedRows = 0;\n\n for (const batch of batches) {\n if (this._cancelled) {\n break;\n }\n\n try {\n const batchResult = await this.bulkUploadItems(batch);\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 } catch (error) {\n this.result = {\n succeeded: this.result.succeeded,\n failed: this.result.failed + batch.length,\n errors: this.result.errors,\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 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 _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 const rows = this.mappedRows;\n const totalCount = rows.length;\n const batches = this._createRowsBatches(rows);\n\n runInAction(() => {\n this.currentStep = 'progress';\n this.totalCount = totalCount;\n this.processedCount = 0;\n this.isBackingUp = !!this.backup;\n });\n\n const backupFailed = await this._runBackup();\n if (backupFailed) {\n return;\n }\n\n const promise = this._uploadBatches(batches);\n\n this.importStatus = {\n ...queryStatus.loading,\n promise,\n };\n\n try {\n await promise;\n runInAction(() => {\n if (this._cancelled) {\n return;\n }\n\n this.importStatus = {\n ...queryStatus.success,\n data: this.result,\n };\n\n if (this.result.failed === 0) {\n this.importModalState.close();\n this.collection.clearResultAndMoveToStart({ force: true });\n }\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","_set","_interopRequireDefault","DEFAULT_BATCH_SIZE","COMPLETION_LINGER_MS","normalize","value","trim","toLowerCase","toMappedRows","rows","headers","mappingByHeader","map","row","mapped","forEach","header","index","mappedField","set","ImportState","constructor","props","_defineProperty2","default","ConditionalModalState","queryStatus","idle","succeeded","failed","errors","fields","bulkUploadItems","backup","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","mappedRows","onUploadContinue","action","bound","goToUpload","setMapping","close","onFileSelected","startImport","reset","init","undefined","length","Object","values","some","mappedIndices","reduce","indices","push","Set","filter","v","_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","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","fieldId","_uploadBatches","batches","processedRows","receivedOkResponse","failedRowIndices","batch","batchStart","batchResult","rowIndex","Math","min","_runBackup","restore","_lingerOnCompletion","Promise","resolve","setTimeout","_createRowsBatches","acc","backupFailed","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\nexport interface ImportStateProps {\n fields: CreateExportAsyncJobRequest['fields'];\n bulkUploadItems: BulkUploadItemsFn;\n backup?: BackupFn;\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\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 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, string | null> = {};\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.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 mappedRows: computed,\n onUploadContinue: action.bound,\n goToUpload: action.bound,\n setMapping: 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).filter((v): v is string => v != null),\n );\n }\n\n get mappedRows() {\n return toMappedRows(this.csvRows, this.csvHeaders, this.mappingByHeader);\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, string | null> = {};\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 mapping[header] = matched?.id || null;\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,\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 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 const rows = this.mappedRows;\n const totalCount = rows.length;\n const batches = this._createRowsBatches(rows);\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\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":[]}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
exports.__esModule = true;
|
|
5
5
|
exports.parseCsv = parseCsv;
|
|
6
|
+
exports.unparseCsv = unparseCsv;
|
|
6
7
|
var _papaparse = _interopRequireDefault(require("papaparse"));
|
|
7
8
|
function parseCsv(content) {
|
|
8
9
|
const result = _papaparse.default.parse(content, {
|
|
@@ -10,7 +11,7 @@ function parseCsv(content) {
|
|
|
10
11
|
});
|
|
11
12
|
if (result.errors.length > 0) {
|
|
12
13
|
return {
|
|
13
|
-
|
|
14
|
+
code: 'PARSE_ERROR'
|
|
14
15
|
};
|
|
15
16
|
}
|
|
16
17
|
const data = result.data;
|
|
@@ -27,4 +28,7 @@ function parseCsv(content) {
|
|
|
27
28
|
rows
|
|
28
29
|
};
|
|
29
30
|
}
|
|
31
|
+
function unparseCsv(headers, rows) {
|
|
32
|
+
return _papaparse.default.unparse([headers, ...rows]);
|
|
33
|
+
}
|
|
30
34
|
//# sourceMappingURL=parseCsv.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_papaparse","_interopRequireDefault","require","parseCsv","content","result","Papa","parse","skipEmptyLines","errors","length","
|
|
1
|
+
{"version":3,"names":["_papaparse","_interopRequireDefault","require","parseCsv","content","result","Papa","parse","skipEmptyLines","errors","length","code","data","headers","rows","slice","filter","row","some","cell","String","trim","unparseCsv","unparse"],"sources":["../../../../src/state/ImportState/parseCsv.ts"],"sourcesContent":["import Papa from 'papaparse';\n\nexport interface ParseCsvResult {\n headers: string[];\n rows: string[][];\n}\n\nexport interface ParseCsvError {\n code: 'PARSE_ERROR';\n}\n\nexport function parseCsv(content: string): ParseCsvResult | ParseCsvError {\n const result = Papa.parse<string[]>(content, {\n skipEmptyLines: true,\n });\n\n if (result.errors.length > 0) {\n return {\n code: 'PARSE_ERROR',\n };\n }\n\n const data = result.data;\n if (!data || data.length === 0) {\n return { headers: [], rows: [] };\n }\n\n const headers = data[0];\n const rows = data\n .slice(1)\n .filter((row) => row.some((cell) => String(cell).trim() !== ''));\n\n return { headers, rows };\n}\n\nexport function unparseCsv(headers: string[], rows: string[][]): string {\n return Papa.unparse([headers, ...rows]);\n}\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AAWO,SAASC,QAAQA,CAACC,OAAe,EAAkC;EACxE,MAAMC,MAAM,GAAGC,kBAAI,CAACC,KAAK,CAAWH,OAAO,EAAE;IAC3CI,cAAc,EAAE;EAClB,CAAC,CAAC;EAEF,IAAIH,MAAM,CAACI,MAAM,CAACC,MAAM,GAAG,CAAC,EAAE;IAC5B,OAAO;MACLC,IAAI,EAAE;IACR,CAAC;EACH;EAEA,MAAMC,IAAI,GAAGP,MAAM,CAACO,IAAI;EACxB,IAAI,CAACA,IAAI,IAAIA,IAAI,CAACF,MAAM,KAAK,CAAC,EAAE;IAC9B,OAAO;MAAEG,OAAO,EAAE,EAAE;MAAEC,IAAI,EAAE;IAAG,CAAC;EAClC;EAEA,MAAMD,OAAO,GAAGD,IAAI,CAAC,CAAC,CAAC;EACvB,MAAME,IAAI,GAAGF,IAAI,CACdG,KAAK,CAAC,CAAC,CAAC,CACRC,MAAM,CAAEC,GAAG,IAAKA,GAAG,CAACC,IAAI,CAAEC,IAAI,IAAKC,MAAM,CAACD,IAAI,CAAC,CAACE,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;EAElE,OAAO;IAAER,OAAO;IAAEC;EAAK,CAAC;AAC1B;AAEO,SAASQ,UAAUA,CAACT,OAAiB,EAAEC,IAAgB,EAAU;EACtE,OAAOR,kBAAI,CAACiB,OAAO,CAAC,CAACV,OAAO,EAAE,GAAGC,IAAI,CAAC,CAAC;AACzC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["../../../src/types/Field.ts"],"sourcesContent":["export type PatternsFieldType =\n | 'SHORT_TEXT'\n | 'LONG_TEXT'\n | 'NUMBER'\n | 'BOOLEAN'\n | 'DATE'\n | 'DATETIME'\n | 'TIME'\n | 'URL'\n | 'ARRAY'\n | 'REFERENCE'\n | 'MULTI_REFERENCE'\n | 'OBJECT'\n | 'IMAGE'\n | 'VIDEO'\n | 'MEDIA_GALLERY'\n | 'ADDRESS'\n | 'RICH_TEXT'\n | 'DOCUMENT'\n | 'RICH_CONTENT'\n | 'MULTI_DOCUMENT'\n | 'EMAIL'\n | 'AUDIO'\n | 'COLOR'\n | 'UNKNOWN';\n\nexport type QueryOperator =\n | 'CONTAINS'\n | 'ENDS_WITH'\n | 'EQ'\n | 'EXISTS'\n | 'GT'\n | 'GTE'\n | 'HAS_ALL'\n | 'HAS_SOME'\n | 'LT'\n | 'LTE'\n | 'NE'\n | 'STARTS_WITH'\n | 'URLIZED';\n\nexport interface NumberRange {\n min?: number;\n max?: number;\n}\n\nexport interface StringLengthRange {\n minLength?: number;\n maxLength?: number;\n}\n\ninterface BaseField {\n id: string;\n displayName: string;\n isPii?: boolean;\n helpText?: string;\n validation?: {\n numberRange?: NumberRange;\n stringLengthRange?: StringLengthRange;\n required: boolean;\n };\n capabilities?: {\n supportedQueryOperators: QueryOperator[];\n sortable: boolean;\n };\n}\n\nexport interface BaseReferenceField extends BaseField {\n referenceMetadata: {\n referencedCollectionId: string;\n };\n}\n\nexport interface ReferenceField extends BaseReferenceField {\n type: 'REFERENCE';\n}\n\nexport interface MultiReferenceField extends BaseReferenceField {\n type: 'MULTI_REFERENCE';\n}\n\nexport interface NonReferenceField extends BaseField {\n type: Exclude<PatternsFieldType, 'REFERENCE' | 'MULTI_REFERENCE'>;\n}\n\nexport type Field = ReferenceField | MultiReferenceField | NonReferenceField;\nexport type FieldSpec = Omit<Field, 'id'>;\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sources":["../../../src/types/Field.ts"],"sourcesContent":["export type PatternsFieldType =\n | 'SHORT_TEXT'\n | 'LONG_TEXT'\n | 'NUMBER'\n | 'BOOLEAN'\n | 'DATE'\n | 'DATETIME'\n | 'TIME'\n | 'URL'\n | 'ARRAY'\n | 'REFERENCE'\n | 'MULTI_REFERENCE'\n | 'OBJECT'\n | 'IMAGE'\n | 'VIDEO'\n | 'MEDIA_GALLERY'\n | 'ADDRESS'\n | 'RICH_TEXT'\n | 'DOCUMENT'\n | 'RICH_CONTENT'\n | 'MULTI_DOCUMENT'\n | 'EMAIL'\n | 'AUDIO'\n | 'COLOR'\n | 'UNKNOWN';\n\nexport type QueryOperator =\n | 'CONTAINS'\n | 'ENDS_WITH'\n | 'EQ'\n | 'EXISTS'\n | 'GT'\n | 'GTE'\n | 'HAS_ALL'\n | 'HAS_SOME'\n | 'LT'\n | 'LTE'\n | 'NE'\n | 'STARTS_WITH'\n | 'URLIZED';\n\nexport interface NumberRange {\n min?: number;\n max?: number;\n}\n\nexport interface StringLengthRange {\n minLength?: number;\n maxLength?: number;\n}\n\ninterface BaseField {\n id: string;\n displayName: string;\n isPii?: boolean;\n helpText?: string;\n /** Whether this is a system-managed field (not user-created). */\n isSystem?: boolean;\n /** Whether this is the collection's primary display field. */\n isPrimary?: boolean;\n validation?: {\n numberRange?: NumberRange;\n stringLengthRange?: StringLengthRange;\n required: boolean;\n };\n capabilities?: {\n supportedQueryOperators: QueryOperator[];\n sortable: boolean;\n };\n}\n\nexport interface BaseReferenceField extends BaseField {\n referenceMetadata: {\n referencedCollectionId: string;\n };\n}\n\nexport interface ReferenceField extends BaseReferenceField {\n type: 'REFERENCE';\n}\n\nexport interface MultiReferenceField extends BaseReferenceField {\n type: 'MULTI_REFERENCE';\n}\n\nexport interface NonReferenceField extends BaseField {\n type: Exclude<PatternsFieldType, 'REFERENCE' | 'MULTI_REFERENCE'>;\n}\n\nexport type Field = ReferenceField | MultiReferenceField | NonReferenceField;\nexport type FieldSpec = Omit<Field, 'id'>;\n"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":["../../../src/types/Schema.ts"],"sourcesContent":["import type { Field } from './Field';\nimport type { FiltersMap, OptionalFiltersMap } from '../model';\nimport type {\n OffsetFetchDataFn,\n CursorFetchDataFn,\n FetchTotalFn,\n} from '../hooks/paginationModeConfig';\n\n/** Field-management permissions. Absent when the schema's fields cannot be edited. */\nexport interface SchemaPermissions {\n createField: boolean;\n updateField: boolean;\n deleteField: boolean;\n}\n\n/** Item-level CRUD permissions. */\nexport interface ItemPermissions {\n createItem: boolean;\n updateItem: boolean;\n deleteItem: boolean;\n}\n\n/**\n * A source-neutral description of a collection — data only, no behavior.\n * Item access is in `CollectionBackend`, field mutations in `FieldActions`.\n */\nexport interface Schema {\n id: string;\n fields: Record<string, Field | undefined>;\n /** The field that best represents the entity (titles/selections). */\n displayField: string;\n /** The identifier field (e.g. '_id'). */\n idField: string;\n /** Absent when the schema's fields cannot be edited. */\n schemaPermissions?: SchemaPermissions;\n itemPermissions?: ItemPermissions;\n}\n\nexport interface BackupConfig {\n create: () => Promise<{ backupId: string }>;\n waitForCompletion: (\n backupId: string,\n options?: { signal?: AbortSignal },\n ) => Promise<void>;\n cancel?: (backupId: string) => Promise<void>;\n restore?: (backupId: string) => Promise<{ restorationId: string }>;\n waitForRestoration?: (\n restorationId: string,\n options?: { signal?: AbortSignal },\n ) => Promise<void>;\n}\n\nexport interface BulkInsertError {\n rowIndex: number;\n message?: string;\n code?: string;\n}\n\nexport interface BulkInsertResult {\n succeeded?: number;\n failed?: number;\n errors?: BulkInsertError[];\n}\n\n/** Item data access shared by both pagination modes. */\nexport interface CollectionBackendBase<T = Record<string, unknown>> {\n get: (entityId: string) => Promise<T>;\n create: (entity: Partial<T>) => Promise<T>;\n update: (entity: T) => Promise<T>;\n delete: (entityId: string) => Promise<void>;\n bulkDelete: (entityIds: string[]) => Promise<void>;\n move?: (\n id: string,\n params: { moveAfterId: string | null | undefined },\n ) => Promise<void>;\n backup?: BackupConfig;\n bulkInsert?: (entities: Partial<T>[]) => Promise<BulkInsertResult>;\n}\n\n/**\n * A source's item data access. The source declares its `paginationMode`\n * (offset by default) together with the matching `find`, same as core's\n * `PaginationModeConfig`.\n */\nexport type CollectionBackend<\n T = Record<string, unknown>,\n F extends FiltersMap = OptionalFiltersMap,\n> = CollectionBackendBase<T> &\n (\n | { paginationMode?: 'offset'; find: OffsetFetchDataFn<T, F> }\n | {\n paginationMode: 'cursor';\n find: CursorFetchDataFn<T, F>;\n fetchTotal?: FetchTotalFn;\n }\n );\n\n/** Field-management actions. All optional — a read-only source provides none. */\nexport interface FieldActions {\n addField?: (field: Field) => Promise<void>;\n editField?: (fieldId: string, updates: Partial<Field>) => Promise<void>;\n deleteField?: (fieldId: string) => Promise<void>;\n renameField?: (fieldId: string, newName: string) => Promise<void>;\n makePrimary?: (fieldId: string) => Promise<void>;\n duplicateField?: (fieldId: string) => Promise<void>;\n duplicateFieldWithContent?: (fieldId: string) => Promise<void>;\n}\n\n/** Everything a source provides for a collection. */\nexport interface LoadedSchema<T = Record<string, unknown>> {\n schema: Schema;\n backend: CollectionBackend<T>;\n fieldActions?: FieldActions;\n}\n\n/**\n * Loads a collection's `LoadedSchema`. Sources that need dependencies expose a\n * factory that returns this type (e.g. `createCmsSchemaLoader(deps)`).\n */\nexport type SchemaLoader<\n T extends Record<string, unknown> = Record<string, unknown>,\n> = (collectionId: string) => Promise<LoadedSchema<T>>;\n"],"mappings":"","ignoreList":[]}
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"cairo.import.back": "Back",
|
|
46
46
|
"cairo.export.exportingDescription": "Once the export is complete, your file download will begin.",
|
|
47
47
|
"cairo.manageView.setAsDefault.CTA": "Set as default view",
|
|
48
|
+
"cairo.import.newFieldOption": "{column} (New)",
|
|
48
49
|
"cairo.customFields.addCustomField.modal.advancedSettings.siteCollaborators": "Site collaborators",
|
|
49
50
|
"cairo.passiveEmptyState.title": "No items yet",
|
|
50
51
|
"cairo.filterOperator.valuePlaceholder.tag": "select an option",
|
|
@@ -89,6 +90,7 @@
|
|
|
89
90
|
"cairo.archivedFields.more-actions.tooltip": "More actions",
|
|
90
91
|
"cairo.customFields.fieldType.dropdownList.placeholder": "e.g., Italy",
|
|
91
92
|
"cairo.filtersPanel.numRange.maxRange.error": "‘To’ value must be greater than the ‘From’ value.",
|
|
93
|
+
"cairo.import.fileReadFailed": "Couldn’t read this file. Check your internet connection and that the file hasn’t been moved or deleted.",
|
|
92
94
|
"cairo.setupWidget.step.inProgress": "In progress",
|
|
93
95
|
"cairo.errorHandler.requestID.tooltip.cta": "Copy ID",
|
|
94
96
|
"cairo.tags.manageTags.modal.deleteModal.cancel.CTA": "Cancel",
|
|
@@ -136,6 +138,7 @@
|
|
|
136
138
|
"cairo.search.Tab.noresults.text": "Look in a different tab or try a new search.",
|
|
137
139
|
"cairo.viewDropdown.unsavedView.status": "Unsaved view",
|
|
138
140
|
"cairo.technical.error.text": "There was a technical problem on our end. Refresh the page and try again in a moment.",
|
|
141
|
+
"cairo.import.downloadFailedRows": "Download failed rows",
|
|
139
142
|
"cairo.export.get-async-job.error.internal": "Unable to export due to a technical issue on our end.",
|
|
140
143
|
"cairo.table.advanced-sorting.subtitle": "Sort your items by multiple columns.",
|
|
141
144
|
"cairo.customFields.updateDataExtension.removing-fields-not-allowed.error": "This item can't be deleted.",
|
|
@@ -145,6 +148,7 @@
|
|
|
145
148
|
"cairo.customFields.addCustomField.modal.subtitle.note": "Note that this field will be added to all of your items.",
|
|
146
149
|
"cairo.entityPage.widgetError.TPAconnectionFail.CTA": "Reload Section",
|
|
147
150
|
"cairo.dragAndDrop.error.toast": "Due to a technical issue, changes you made to the order of your items weren’t saved.",
|
|
151
|
+
"cairo.import.partialSuccessToast": "{failed} rows failed, {imported} rows imported.",
|
|
148
152
|
"cairo.table.custom-columns.subtitle": "Choose which columns to show.",
|
|
149
153
|
"cairo.customFields.addCustomField.modal.advancedSettings.read": "Read",
|
|
150
154
|
"cairo.filterOperator.equals": "Equals",
|
|
@@ -469,6 +473,7 @@
|
|
|
469
473
|
"cairo.manageView.Rename.modal.title": "Rename view",
|
|
470
474
|
"cairo.tags.collectionPage.tagsColumn.title.asLabels": "Labels",
|
|
471
475
|
"cairo.table.summaryBar.loadError": "Couldn't load summary bar.",
|
|
476
|
+
"cairo.import.newFieldHelper": "This will be a new text field.",
|
|
472
477
|
"cairo.tags.tagsWidget.title": "Tags",
|
|
473
478
|
"cairo.customFields.entityPage.emptyState.subtitle": "User fields appear here if they are filled in by users.",
|
|
474
479
|
"cairo.archivedFields.title": "Archived fields",
|
|
@@ -506,7 +511,7 @@
|
|
|
506
511
|
"cairo.selected": "{total, plural, =1 {1 selected} other {# selected}}",
|
|
507
512
|
"cairo.table.subtitle.learnMore": "Learn more",
|
|
508
513
|
"cairo.table.manage-fields.title": "Manage fields",
|
|
509
|
-
"cairo.filtersPanel.search.noResults.title": "No filters match
|
|
514
|
+
"cairo.filtersPanel.search.noResults.title": "No filters match {term}",
|
|
510
515
|
"cairo.manageView.Rename.modal.save.CTA": "Save",
|
|
511
516
|
"cairo.customFields.archive.technicalError": "Field wasn’t archived due to a technical issue.",
|
|
512
517
|
"cairo.sortableColumns.notification": "Your list is no longer sorted by {columnTitle}.",
|
|
@@ -523,6 +528,7 @@
|
|
|
523
528
|
"cairo.table.saveViewModal.learnMoreLink": "Learn more",
|
|
524
529
|
"cairo.tags.collectionPage.toast.create.error.asLabels": "Unable to create the label because of a technical issue on our end.",
|
|
525
530
|
"cairo.tags.popover.creationLimitReached.error.asLabels": "Unable to create more than {limit} labels. Delete {count, plural, one {# label} other {# labels}} in Manage Labels to add new ones.",
|
|
531
|
+
"cairo.import.processFailed": "Couldn’t process this file. Make sure it’s a comma-separated CSV file.",
|
|
526
532
|
"cairo.tags.manageTags.modal.emptyState.title": "Create a new tag",
|
|
527
533
|
"cairo.entityPage.header.cancel.CTA": "Cancel",
|
|
528
534
|
"cairo.filterOperator.lessThanOrEqual.tag": "less than or equal to",
|
|
@@ -574,6 +580,7 @@
|
|
|
574
580
|
"cairo.filtersPanel.date.none": "None",
|
|
575
581
|
"cairo.import.collectionField": "Collection Field",
|
|
576
582
|
"cairo.saveViewModal.cancelButton": "Cancel",
|
|
583
|
+
"cairo.import.encodingFailed": "Couldn’t process this file due to its encoding. Make sure it’s saved with UTF-8 encoding.",
|
|
577
584
|
"cairo.tags.manageTags.modal.subtitle.asLabels": "Edit, remove and create labels.",
|
|
578
585
|
"cairo.tags.manageTags.modal.emptyState.body.asLabels": "Labels help you filter and organize your items.",
|
|
579
586
|
"cairo.table.custom-columns.hidden.disabled.tooltip": "This column can’t be hidden.",
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"cairo.import.back": "Back",
|
|
46
46
|
"cairo.export.exportingDescription": "Once the export is complete, your file download will begin.",
|
|
47
47
|
"cairo.manageView.setAsDefault.CTA": "Set as default view",
|
|
48
|
+
"cairo.import.newFieldOption": "{column} (New)",
|
|
48
49
|
"cairo.customFields.addCustomField.modal.advancedSettings.siteCollaborators": "Site collaborators",
|
|
49
50
|
"cairo.passiveEmptyState.title": "No items yet",
|
|
50
51
|
"cairo.filterOperator.valuePlaceholder.tag": "select an option",
|
|
@@ -89,6 +90,7 @@
|
|
|
89
90
|
"cairo.archivedFields.more-actions.tooltip": "More actions",
|
|
90
91
|
"cairo.customFields.fieldType.dropdownList.placeholder": "e.g., Italy",
|
|
91
92
|
"cairo.filtersPanel.numRange.maxRange.error": "‘To’ value must be greater than the ‘From’ value.",
|
|
93
|
+
"cairo.import.fileReadFailed": "Couldn’t read this file. Check your internet connection and that the file hasn’t been moved or deleted.",
|
|
92
94
|
"cairo.setupWidget.step.inProgress": "In progress",
|
|
93
95
|
"cairo.errorHandler.requestID.tooltip.cta": "Copy ID",
|
|
94
96
|
"cairo.tags.manageTags.modal.deleteModal.cancel.CTA": "Cancel",
|
|
@@ -136,6 +138,7 @@
|
|
|
136
138
|
"cairo.search.Tab.noresults.text": "Look in a different tab or try a new search.",
|
|
137
139
|
"cairo.viewDropdown.unsavedView.status": "Unsaved view",
|
|
138
140
|
"cairo.technical.error.text": "There was a technical problem on our end. Refresh the page and try again in a moment.",
|
|
141
|
+
"cairo.import.downloadFailedRows": "Download failed rows",
|
|
139
142
|
"cairo.export.get-async-job.error.internal": "Unable to export due to a technical issue on our end.",
|
|
140
143
|
"cairo.table.advanced-sorting.subtitle": "Sort your items by multiple columns.",
|
|
141
144
|
"cairo.customFields.updateDataExtension.removing-fields-not-allowed.error": "This item can't be deleted.",
|
|
@@ -145,6 +148,7 @@
|
|
|
145
148
|
"cairo.customFields.addCustomField.modal.subtitle.note": "Note that this field will be added to all of your items.",
|
|
146
149
|
"cairo.entityPage.widgetError.TPAconnectionFail.CTA": "Reload Section",
|
|
147
150
|
"cairo.dragAndDrop.error.toast": "Due to a technical issue, changes you made to the order of your items weren’t saved.",
|
|
151
|
+
"cairo.import.partialSuccessToast": "{failed} rows failed, {imported} rows imported.",
|
|
148
152
|
"cairo.table.custom-columns.subtitle": "Choose which columns to show.",
|
|
149
153
|
"cairo.customFields.addCustomField.modal.advancedSettings.read": "Read",
|
|
150
154
|
"cairo.filterOperator.equals": "Equals",
|
|
@@ -469,6 +473,7 @@
|
|
|
469
473
|
"cairo.manageView.Rename.modal.title": "Rename view",
|
|
470
474
|
"cairo.tags.collectionPage.tagsColumn.title.asLabels": "Labels",
|
|
471
475
|
"cairo.table.summaryBar.loadError": "Couldn't load summary bar.",
|
|
476
|
+
"cairo.import.newFieldHelper": "This will be a new text field.",
|
|
472
477
|
"cairo.tags.tagsWidget.title": "Tags",
|
|
473
478
|
"cairo.customFields.entityPage.emptyState.subtitle": "User fields appear here if they are filled in by users.",
|
|
474
479
|
"cairo.archivedFields.title": "Archived fields",
|
|
@@ -506,7 +511,7 @@
|
|
|
506
511
|
"cairo.selected": "{total, plural, =1 {1 selected} other {# selected}}",
|
|
507
512
|
"cairo.table.subtitle.learnMore": "Learn more",
|
|
508
513
|
"cairo.table.manage-fields.title": "Manage fields",
|
|
509
|
-
"cairo.filtersPanel.search.noResults.title": "No filters match
|
|
514
|
+
"cairo.filtersPanel.search.noResults.title": "No filters match {term}",
|
|
510
515
|
"cairo.manageView.Rename.modal.save.CTA": "Save",
|
|
511
516
|
"cairo.customFields.archive.technicalError": "Field wasn’t archived due to a technical issue.",
|
|
512
517
|
"cairo.sortableColumns.notification": "Your list is no longer sorted by {columnTitle}.",
|
|
@@ -523,6 +528,7 @@
|
|
|
523
528
|
"cairo.table.saveViewModal.learnMoreLink": "Learn more",
|
|
524
529
|
"cairo.tags.collectionPage.toast.create.error.asLabels": "Unable to create the label because of a technical issue on our end.",
|
|
525
530
|
"cairo.tags.popover.creationLimitReached.error.asLabels": "Unable to create more than {limit} labels. Delete {count, plural, one {# label} other {# labels}} in Manage Labels to add new ones.",
|
|
531
|
+
"cairo.import.processFailed": "Couldn’t process this file. Make sure it’s a comma-separated CSV file.",
|
|
526
532
|
"cairo.tags.manageTags.modal.emptyState.title": "Create a new tag",
|
|
527
533
|
"cairo.entityPage.header.cancel.CTA": "Cancel",
|
|
528
534
|
"cairo.filterOperator.lessThanOrEqual.tag": "less than or equal to",
|
|
@@ -574,6 +580,7 @@
|
|
|
574
580
|
"cairo.filtersPanel.date.none": "None",
|
|
575
581
|
"cairo.import.collectionField": "Collection Field",
|
|
576
582
|
"cairo.saveViewModal.cancelButton": "Cancel",
|
|
583
|
+
"cairo.import.encodingFailed": "Couldn’t process this file due to its encoding. Make sure it’s saved with UTF-8 encoding.",
|
|
577
584
|
"cairo.tags.manageTags.modal.subtitle.asLabels": "Edit, remove and create labels.",
|
|
578
585
|
"cairo.tags.manageTags.modal.emptyState.body.asLabels": "Labels help you filter and organize your items.",
|
|
579
586
|
"cairo.table.custom-columns.hidden.disabled.tooltip": "This column can’t be hidden.",
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"cairo.import.back": "Back",
|
|
46
46
|
"cairo.export.exportingDescription": "Once the export is complete, your file download will begin.",
|
|
47
47
|
"cairo.manageView.setAsDefault.CTA": "Set as default view",
|
|
48
|
+
"cairo.import.newFieldOption": "{column} (New)",
|
|
48
49
|
"cairo.customFields.addCustomField.modal.advancedSettings.siteCollaborators": "Site collaborators",
|
|
49
50
|
"cairo.passiveEmptyState.title": "No items yet",
|
|
50
51
|
"cairo.filterOperator.valuePlaceholder.tag": "select an option",
|
|
@@ -89,6 +90,7 @@
|
|
|
89
90
|
"cairo.archivedFields.more-actions.tooltip": "More actions",
|
|
90
91
|
"cairo.customFields.fieldType.dropdownList.placeholder": "e.g., Italy",
|
|
91
92
|
"cairo.filtersPanel.numRange.maxRange.error": "‘To’ value must be greater than the ‘From’ value.",
|
|
93
|
+
"cairo.import.fileReadFailed": "Couldn’t read this file. Check your internet connection and that the file hasn’t been moved or deleted.",
|
|
92
94
|
"cairo.setupWidget.step.inProgress": "In progress",
|
|
93
95
|
"cairo.errorHandler.requestID.tooltip.cta": "Copy ID",
|
|
94
96
|
"cairo.tags.manageTags.modal.deleteModal.cancel.CTA": "Cancel",
|
|
@@ -136,6 +138,7 @@
|
|
|
136
138
|
"cairo.search.Tab.noresults.text": "Look in a different tab or try a new search.",
|
|
137
139
|
"cairo.viewDropdown.unsavedView.status": "Unsaved view",
|
|
138
140
|
"cairo.technical.error.text": "There was a technical problem on our end. Refresh the page and try again in a moment.",
|
|
141
|
+
"cairo.import.downloadFailedRows": "Download failed rows",
|
|
139
142
|
"cairo.export.get-async-job.error.internal": "Unable to export due to a technical issue on our end.",
|
|
140
143
|
"cairo.table.advanced-sorting.subtitle": "Sort your items by multiple columns.",
|
|
141
144
|
"cairo.customFields.updateDataExtension.removing-fields-not-allowed.error": "This item can't be deleted.",
|
|
@@ -145,6 +148,7 @@
|
|
|
145
148
|
"cairo.customFields.addCustomField.modal.subtitle.note": "Note that this field will be added to all of your items.",
|
|
146
149
|
"cairo.entityPage.widgetError.TPAconnectionFail.CTA": "Reload Section",
|
|
147
150
|
"cairo.dragAndDrop.error.toast": "Due to a technical issue, changes you made to the order of your items weren’t saved.",
|
|
151
|
+
"cairo.import.partialSuccessToast": "{failed} rows failed, {imported} rows imported.",
|
|
148
152
|
"cairo.table.custom-columns.subtitle": "Choose which columns to show.",
|
|
149
153
|
"cairo.customFields.addCustomField.modal.advancedSettings.read": "Read",
|
|
150
154
|
"cairo.filterOperator.equals": "Equals",
|
|
@@ -469,6 +473,7 @@
|
|
|
469
473
|
"cairo.manageView.Rename.modal.title": "Rename view",
|
|
470
474
|
"cairo.tags.collectionPage.tagsColumn.title.asLabels": "Labels",
|
|
471
475
|
"cairo.table.summaryBar.loadError": "Couldn't load summary bar.",
|
|
476
|
+
"cairo.import.newFieldHelper": "This will be a new text field.",
|
|
472
477
|
"cairo.tags.tagsWidget.title": "Tags",
|
|
473
478
|
"cairo.customFields.entityPage.emptyState.subtitle": "User fields appear here if they are filled in by users.",
|
|
474
479
|
"cairo.archivedFields.title": "Archived fields",
|
|
@@ -506,7 +511,7 @@
|
|
|
506
511
|
"cairo.selected": "{total, plural, =1 {1 selected} other {# selected}}",
|
|
507
512
|
"cairo.table.subtitle.learnMore": "Learn more",
|
|
508
513
|
"cairo.table.manage-fields.title": "Manage fields",
|
|
509
|
-
"cairo.filtersPanel.search.noResults.title": "No filters match
|
|
514
|
+
"cairo.filtersPanel.search.noResults.title": "No filters match {term}",
|
|
510
515
|
"cairo.manageView.Rename.modal.save.CTA": "Save",
|
|
511
516
|
"cairo.customFields.archive.technicalError": "Field wasn’t archived due to a technical issue.",
|
|
512
517
|
"cairo.sortableColumns.notification": "Your list is no longer sorted by {columnTitle}.",
|
|
@@ -523,6 +528,7 @@
|
|
|
523
528
|
"cairo.table.saveViewModal.learnMoreLink": "Learn more",
|
|
524
529
|
"cairo.tags.collectionPage.toast.create.error.asLabels": "Unable to create the label because of a technical issue on our end.",
|
|
525
530
|
"cairo.tags.popover.creationLimitReached.error.asLabels": "Unable to create more than {limit} labels. Delete {count, plural, one {# label} other {# labels}} in Manage Labels to add new ones.",
|
|
531
|
+
"cairo.import.processFailed": "Couldn’t process this file. Make sure it’s a comma-separated CSV file.",
|
|
526
532
|
"cairo.tags.manageTags.modal.emptyState.title": "Create a new tag",
|
|
527
533
|
"cairo.entityPage.header.cancel.CTA": "Cancel",
|
|
528
534
|
"cairo.filterOperator.lessThanOrEqual.tag": "less than or equal to",
|
|
@@ -574,6 +580,7 @@
|
|
|
574
580
|
"cairo.filtersPanel.date.none": "None",
|
|
575
581
|
"cairo.import.collectionField": "Collection Field",
|
|
576
582
|
"cairo.saveViewModal.cancelButton": "Cancel",
|
|
583
|
+
"cairo.import.encodingFailed": "Couldn’t process this file due to its encoding. Make sure it’s saved with UTF-8 encoding.",
|
|
577
584
|
"cairo.tags.manageTags.modal.subtitle.asLabels": "Edit, remove and create labels.",
|
|
578
585
|
"cairo.tags.manageTags.modal.emptyState.body.asLabels": "Labels help you filter and organize your items.",
|
|
579
586
|
"cairo.table.custom-columns.hidden.disabled.tooltip": "This column can’t be hidden.",
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"cairo.import.back": "Back",
|
|
46
46
|
"cairo.export.exportingDescription": "Po dokončení exportu bude zahájeno stahování vašeho souboru.",
|
|
47
47
|
"cairo.manageView.setAsDefault.CTA": "Nastavit jako výchozí zobrazení",
|
|
48
|
+
"cairo.import.newFieldOption": "{column} (New)",
|
|
48
49
|
"cairo.customFields.addCustomField.modal.advancedSettings.siteCollaborators": "Spolupracovníci webu",
|
|
49
50
|
"cairo.passiveEmptyState.title": "Zatím žádné položky",
|
|
50
51
|
"cairo.filterOperator.valuePlaceholder.tag": "select an option",
|
|
@@ -89,6 +90,7 @@
|
|
|
89
90
|
"cairo.archivedFields.more-actions.tooltip": "Další akce",
|
|
90
91
|
"cairo.customFields.fieldType.dropdownList.placeholder": "Např. Itálie",
|
|
91
92
|
"cairo.filtersPanel.numRange.maxRange.error": "Hodnota „Do“ musí být větší než hodnota „Od“.",
|
|
93
|
+
"cairo.import.fileReadFailed": "Couldn’t read this file. Check your internet connection and that the file hasn’t been moved or deleted.",
|
|
92
94
|
"cairo.setupWidget.step.inProgress": "In progress",
|
|
93
95
|
"cairo.errorHandler.requestID.tooltip.cta": "Kopírovat ID",
|
|
94
96
|
"cairo.tags.manageTags.modal.deleteModal.cancel.CTA": "Zpět",
|
|
@@ -136,6 +138,7 @@
|
|
|
136
138
|
"cairo.search.Tab.noresults.text": "Podívejte se na jinou záložku nebo zkuste nové vyhledávání.",
|
|
137
139
|
"cairo.viewDropdown.unsavedView.status": "Neuložené zobrazení",
|
|
138
140
|
"cairo.technical.error.text": "Vyskytly se u nás technické potíže. Obnovte stránku a zkuste to za chvíli znovu.",
|
|
141
|
+
"cairo.import.downloadFailedRows": "Download failed rows",
|
|
139
142
|
"cairo.export.get-async-job.error.internal": "Kvůli technickým potížím na naší straně nebylo možné provést export.",
|
|
140
143
|
"cairo.table.advanced-sorting.subtitle": "Roztřiďte položky do více sloupců.",
|
|
141
144
|
"cairo.customFields.updateDataExtension.removing-fields-not-allowed.error": "Tuto položku nelze odstranit.",
|
|
@@ -145,6 +148,7 @@
|
|
|
145
148
|
"cairo.customFields.addCustomField.modal.subtitle.note": "Upozorňujeme, že toto pole bude přidáno do všech vašich položek.",
|
|
146
149
|
"cairo.entityPage.widgetError.TPAconnectionFail.CTA": "Obnovit oddíl",
|
|
147
150
|
"cairo.dragAndDrop.error.toast": "Změny, které jste v pořadí položek provedli, se nepodařilo kvůli technickým potížím uložit.",
|
|
151
|
+
"cairo.import.partialSuccessToast": "{failed} rows failed, {imported} rows imported.",
|
|
148
152
|
"cairo.table.custom-columns.subtitle": "Zvolte, jaké sloupce chcete zobrazit.",
|
|
149
153
|
"cairo.customFields.addCustomField.modal.advancedSettings.read": "Čtení",
|
|
150
154
|
"cairo.filterOperator.equals": "Rovná se",
|
|
@@ -469,6 +473,7 @@
|
|
|
469
473
|
"cairo.manageView.Rename.modal.title": "Přejmenovat zobrazení",
|
|
470
474
|
"cairo.tags.collectionPage.tagsColumn.title.asLabels": "Štítky",
|
|
471
475
|
"cairo.table.summaryBar.loadError": "Lištu shrnutí se nepodařilo načíst.",
|
|
476
|
+
"cairo.import.newFieldHelper": "This will be a new text field.",
|
|
472
477
|
"cairo.tags.tagsWidget.title": "Štítky",
|
|
473
478
|
"cairo.customFields.entityPage.emptyState.subtitle": "Zde se zobrazí uživatelská pole, pokud jej uživatelé vyplní.",
|
|
474
479
|
"cairo.archivedFields.title": "Archivovaná pole",
|
|
@@ -523,6 +528,7 @@
|
|
|
523
528
|
"cairo.table.saveViewModal.learnMoreLink": "Zjistit více",
|
|
524
529
|
"cairo.tags.collectionPage.toast.create.error.asLabels": "Štítek nelze vytvořit kvůli technickým potížím na naší straně.",
|
|
525
530
|
"cairo.tags.popover.creationLimitReached.error.asLabels": "{count, plural, one {Nelze vytvořit více než {limit} štítek. Chcete-li přidat nové, odstraňte {count,number} štítek ve Správě popisků.} few {Nelze vytvořit více než {limit} štítky. Chcete-li přidat nové, odstraňte {count,number} štítky ve Správě popisků.} many {Nelze vytvořit více než {limit} štítků. Chcete-li přidat nové, odstraňte {count,number} štítků ve Správě popisků.} other {Nelze vytvořit více než {limit} štítků. Chcete-li přidat nové, odstraňte {count,number} štítků ve Správě popisků.}}",
|
|
531
|
+
"cairo.import.processFailed": "Couldn’t process this file. Make sure it’s a comma-separated CSV file.",
|
|
526
532
|
"cairo.tags.manageTags.modal.emptyState.title": "Vytvořte nový tag",
|
|
527
533
|
"cairo.entityPage.header.cancel.CTA": "Zpět",
|
|
528
534
|
"cairo.filterOperator.lessThanOrEqual.tag": "less than or equal to",
|
|
@@ -574,6 +580,7 @@
|
|
|
574
580
|
"cairo.filtersPanel.date.none": "Vše",
|
|
575
581
|
"cairo.import.collectionField": "Collection Field",
|
|
576
582
|
"cairo.saveViewModal.cancelButton": "Zpět",
|
|
583
|
+
"cairo.import.encodingFailed": "Couldn’t process this file due to its encoding. Make sure it’s saved with UTF-8 encoding.",
|
|
577
584
|
"cairo.tags.manageTags.modal.subtitle.asLabels": "Upravovat, odstraňovat a vytvářet štítky.",
|
|
578
585
|
"cairo.tags.manageTags.modal.emptyState.body.asLabels": "Štítky vám pomáhají filtrovat a organizovat položky.",
|
|
579
586
|
"cairo.table.custom-columns.hidden.disabled.tooltip": "Tento sloupec nelze skrýt.",
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"cairo.import.back": "Back",
|
|
46
46
|
"cairo.export.exportingDescription": "Når eksporten er afsluttet, begynder din filoverførsel.",
|
|
47
47
|
"cairo.manageView.setAsDefault.CTA": "Indstil som standardvisning",
|
|
48
|
+
"cairo.import.newFieldOption": "{column} (New)",
|
|
48
49
|
"cairo.customFields.addCustomField.modal.advancedSettings.siteCollaborators": "Hjemmesidens samarbejdspartnere",
|
|
49
50
|
"cairo.passiveEmptyState.title": "Ingen elementer endnu",
|
|
50
51
|
"cairo.filterOperator.valuePlaceholder.tag": "select an option",
|
|
@@ -89,6 +90,7 @@
|
|
|
89
90
|
"cairo.archivedFields.more-actions.tooltip": "Flere handlinger",
|
|
90
91
|
"cairo.customFields.fieldType.dropdownList.placeholder": "fx Italien",
|
|
91
92
|
"cairo.filtersPanel.numRange.maxRange.error": "'Til'-værdien skal være højere end 'Fra'-værdien.",
|
|
93
|
+
"cairo.import.fileReadFailed": "Couldn’t read this file. Check your internet connection and that the file hasn’t been moved or deleted.",
|
|
92
94
|
"cairo.setupWidget.step.inProgress": "In progress",
|
|
93
95
|
"cairo.errorHandler.requestID.tooltip.cta": "Kopiér ID",
|
|
94
96
|
"cairo.tags.manageTags.modal.deleteModal.cancel.CTA": "Annuller",
|
|
@@ -136,6 +138,7 @@
|
|
|
136
138
|
"cairo.search.Tab.noresults.text": "Se efter i en anden fane eller prøv med en ny søgning.",
|
|
137
139
|
"cairo.viewDropdown.unsavedView.status": "Ikke-gemt",
|
|
138
140
|
"cairo.technical.error.text": "Der opstod et teknisk problem hos os. Opdater siden, og prøv igen om et øjeblik.",
|
|
141
|
+
"cairo.import.downloadFailedRows": "Download failed rows",
|
|
139
142
|
"cairo.export.get-async-job.error.internal": "Vi kan ikke eksportere på grund af et teknisk problem hos os.",
|
|
140
143
|
"cairo.table.advanced-sorting.subtitle": "Sorter dine elementer i flere kolonner.",
|
|
141
144
|
"cairo.customFields.updateDataExtension.removing-fields-not-allowed.error": "Dette element kan ikke slettes.",
|
|
@@ -145,6 +148,7 @@
|
|
|
145
148
|
"cairo.customFields.addCustomField.modal.subtitle.note": "Bemærk, at dette felt vil blive føjet til alle dine elementer.",
|
|
146
149
|
"cairo.entityPage.widgetError.TPAconnectionFail.CTA": "Genindlæs afsnit",
|
|
147
150
|
"cairo.dragAndDrop.error.toast": "På grund af et teknisk problem blev de ændringer, du har foretaget i rækkefølgen af dine varer, ikke gemt.",
|
|
151
|
+
"cairo.import.partialSuccessToast": "{failed} rows failed, {imported} rows imported.",
|
|
148
152
|
"cairo.table.custom-columns.subtitle": "Vælg, hvilke kolonner der skal vises.",
|
|
149
153
|
"cairo.customFields.addCustomField.modal.advancedSettings.read": "Læse",
|
|
150
154
|
"cairo.filterOperator.equals": "er lig med",
|
|
@@ -469,6 +473,7 @@
|
|
|
469
473
|
"cairo.manageView.Rename.modal.title": "Omdøb visning",
|
|
470
474
|
"cairo.tags.collectionPage.tagsColumn.title.asLabels": "Etiketter",
|
|
471
475
|
"cairo.table.summaryBar.loadError": "Kunne ikke indlæse oversigtbjælken.",
|
|
476
|
+
"cairo.import.newFieldHelper": "This will be a new text field.",
|
|
472
477
|
"cairo.tags.tagsWidget.title": "Tags",
|
|
473
478
|
"cairo.customFields.entityPage.emptyState.subtitle": "Brugerfelter vises her, hvis de er udfyldt af brugere.",
|
|
474
479
|
"cairo.archivedFields.title": "Arkiverede felter",
|
|
@@ -523,6 +528,7 @@
|
|
|
523
528
|
"cairo.table.saveViewModal.learnMoreLink": "Læs mere",
|
|
524
529
|
"cairo.tags.collectionPage.toast.create.error.asLabels": "Det var ikke muligt at oprette etiket på grund af et teknisk problem hos os.",
|
|
525
530
|
"cairo.tags.popover.creationLimitReached.error.asLabels": "{count, plural, one {Der kan ikke oprettes mere end {limit} etiket. Slet {count,number} etiket under Administrer etiketter for at tilføje nye.} other {Der kan ikke oprettes mere end {limit} etiketter. Slet {count,number} etiketter under Administrer etiketter for at tilføje nye.}}",
|
|
531
|
+
"cairo.import.processFailed": "Couldn’t process this file. Make sure it’s a comma-separated CSV file.",
|
|
526
532
|
"cairo.tags.manageTags.modal.emptyState.title": "Opret et nyt tag",
|
|
527
533
|
"cairo.entityPage.header.cancel.CTA": "Annuller",
|
|
528
534
|
"cairo.filterOperator.lessThanOrEqual.tag": "less than or equal to",
|
|
@@ -574,6 +580,7 @@
|
|
|
574
580
|
"cairo.filtersPanel.date.none": "Alle",
|
|
575
581
|
"cairo.import.collectionField": "Collection Field",
|
|
576
582
|
"cairo.saveViewModal.cancelButton": "Annuller",
|
|
583
|
+
"cairo.import.encodingFailed": "Couldn’t process this file due to its encoding. Make sure it’s saved with UTF-8 encoding.",
|
|
577
584
|
"cairo.tags.manageTags.modal.subtitle.asLabels": "Rediger, fjern og opret etiketter.",
|
|
578
585
|
"cairo.tags.manageTags.modal.emptyState.body.asLabels": "Etiketter hjælper dig med at filtrere og organisere dine elementer.",
|
|
579
586
|
"cairo.table.custom-columns.hidden.disabled.tooltip": "Denne kolonne kan ikke skjules.",
|
|
@@ -45,6 +45,7 @@
|
|
|
45
45
|
"cairo.import.back": "Back",
|
|
46
46
|
"cairo.export.exportingDescription": "Sobald der Export abgeschlossen ist, beginnt der Datei-Download.",
|
|
47
47
|
"cairo.manageView.setAsDefault.CTA": "Als Standardansicht festlegen",
|
|
48
|
+
"cairo.import.newFieldOption": "{column} (New)",
|
|
48
49
|
"cairo.customFields.addCustomField.modal.advancedSettings.siteCollaborators": "Website-Mitbearbeiter",
|
|
49
50
|
"cairo.passiveEmptyState.title": "Noch keine Elemente vorhanden",
|
|
50
51
|
"cairo.filterOperator.valuePlaceholder.tag": "select an option",
|
|
@@ -89,6 +90,7 @@
|
|
|
89
90
|
"cairo.archivedFields.more-actions.tooltip": "Weitere Aktionen",
|
|
90
91
|
"cairo.customFields.fieldType.dropdownList.placeholder": "z. B. Italien",
|
|
91
92
|
"cairo.filtersPanel.numRange.maxRange.error": "Der Wert „Bis“ muss größer sein als der Wert „Von“.",
|
|
93
|
+
"cairo.import.fileReadFailed": "Couldn’t read this file. Check your internet connection and that the file hasn’t been moved or deleted.",
|
|
92
94
|
"cairo.setupWidget.step.inProgress": "In progress",
|
|
93
95
|
"cairo.errorHandler.requestID.tooltip.cta": "ID kopieren",
|
|
94
96
|
"cairo.tags.manageTags.modal.deleteModal.cancel.CTA": "Abbrechen",
|
|
@@ -136,6 +138,7 @@
|
|
|
136
138
|
"cairo.search.Tab.noresults.text": "Suche in einem anderen Tab oder starte eine neue Suche.",
|
|
137
139
|
"cairo.viewDropdown.unsavedView.status": "Nicht gespeicherte Ansicht",
|
|
138
140
|
"cairo.technical.error.text": "Es gab ein technisches Problem. Aktualisiere die Seite und versuche es erneut.",
|
|
141
|
+
"cairo.import.downloadFailedRows": "Download failed rows",
|
|
139
142
|
"cairo.export.get-async-job.error.internal": "Wegen technischer Probleme kann nicht exportiert werden.",
|
|
140
143
|
"cairo.table.advanced-sorting.subtitle": "Sortiere deine Elemente in verschiedene Spalten.",
|
|
141
144
|
"cairo.customFields.updateDataExtension.removing-fields-not-allowed.error": "Dieses Element kann nicht gelöscht werden.",
|
|
@@ -145,6 +148,7 @@
|
|
|
145
148
|
"cairo.customFields.addCustomField.modal.subtitle.note": "Dieses Feld wird zu allen Elementen hinzugefügt.",
|
|
146
149
|
"cairo.entityPage.widgetError.TPAconnectionFail.CTA": "Abschnitt neu laden",
|
|
147
150
|
"cairo.dragAndDrop.error.toast": "Wegen eines technischen Problems wurden die Änderungen an der Reihenfolge deiner Elemente nicht gespeichert.",
|
|
151
|
+
"cairo.import.partialSuccessToast": "{failed} rows failed, {imported} rows imported.",
|
|
148
152
|
"cairo.table.custom-columns.subtitle": "Wähle, welche Spalten angezeigt werden sollen:",
|
|
149
153
|
"cairo.customFields.addCustomField.modal.advancedSettings.read": "Lesen",
|
|
150
154
|
"cairo.filterOperator.equals": "Entspricht",
|
|
@@ -469,6 +473,7 @@
|
|
|
469
473
|
"cairo.manageView.Rename.modal.title": "Ansicht umbenennen",
|
|
470
474
|
"cairo.tags.collectionPage.tagsColumn.title.asLabels": "Labels",
|
|
471
475
|
"cairo.table.summaryBar.loadError": "Übersichtsleiste konnte nicht geladen werden.",
|
|
476
|
+
"cairo.import.newFieldHelper": "This will be a new text field.",
|
|
472
477
|
"cairo.tags.tagsWidget.title": "Tags",
|
|
473
478
|
"cairo.customFields.entityPage.emptyState.subtitle": "Nutzerfelder erscheinen hier, wenn sie von Nutzern ausgefüllt werden.",
|
|
474
479
|
"cairo.archivedFields.title": "Archivierte Felder",
|
|
@@ -523,6 +528,7 @@
|
|
|
523
528
|
"cairo.table.saveViewModal.learnMoreLink": "Mehr erfahren",
|
|
524
529
|
"cairo.tags.collectionPage.toast.create.error.asLabels": "Wegen technischer Probleme wurde das Label nicht erstellt.",
|
|
525
530
|
"cairo.tags.popover.creationLimitReached.error.asLabels": "{count, plural, one {Es können nicht mehr als {limit} Labels erstellt werden. Lösche {count,number} Label unter „Labels verwalten“, um neue hinzuzufügen.} other {Es können nicht mehr als {limit} Labels erstellt werden. Lösche {count,number} Labels unter „Labels verwalten“, um neue hinzuzufügen.}}",
|
|
531
|
+
"cairo.import.processFailed": "Couldn’t process this file. Make sure it’s a comma-separated CSV file.",
|
|
526
532
|
"cairo.tags.manageTags.modal.emptyState.title": "Neues Tag erstellen",
|
|
527
533
|
"cairo.entityPage.header.cancel.CTA": "Abbrechen",
|
|
528
534
|
"cairo.filterOperator.lessThanOrEqual.tag": "less than or equal to",
|
|
@@ -574,6 +580,7 @@
|
|
|
574
580
|
"cairo.filtersPanel.date.none": "Beliebig",
|
|
575
581
|
"cairo.import.collectionField": "Collection Field",
|
|
576
582
|
"cairo.saveViewModal.cancelButton": "Abbrechen",
|
|
583
|
+
"cairo.import.encodingFailed": "Couldn’t process this file due to its encoding. Make sure it’s saved with UTF-8 encoding.",
|
|
577
584
|
"cairo.tags.manageTags.modal.subtitle.asLabels": "Bearbeite, entferne und erstelle Labels.",
|
|
578
585
|
"cairo.tags.manageTags.modal.emptyState.body.asLabels": "Labels helfen dir beim Filtern und Ordnen deiner Elemente.",
|
|
579
586
|
"cairo.table.custom-columns.hidden.disabled.tooltip": "Diese Spalte kann nicht ausgeblendet werden.",
|