Browse Source

Merge pull request #1148 from nocodb/fix/csv-import

fix: allow different boolean values for checkbox type
pull/1149/head
աɨռɢӄաօռɢ 3 years ago committed by GitHub
parent
commit
96e02a5bad
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 22
      packages/nc-gui/components/project/spreadsheet/components/importExport/columnMappingModal.vue
  2. 15
      packages/nc-gui/components/project/spreadsheet/components/moreActions.vue

22
packages/nc-gui/components/project/spreadsheet/components/importExport/columnMappingModal.vue

@ -158,8 +158,28 @@ export default {
return 'Source data contains some invalid numbers'
}
break
case UITypes.Checkbox:
if (
this.parsedCsv && this.parsedCsv.data && this.parsedCsv.data.slice(0, 500)
.some((r) => {
if (r => r[row.sourceCn] !== null && r[row.sourceCn] !== undefined) {
var input = r[row.sourceCn]
if (typeof input === 'string') {
input = input.replace(/["']/g, "").toLowerCase().trim()
return (
input == "false" || input == "no" || input == "n" || input == "0" ||
input == "true" || input == "yes" || input == "y" || input == "1"
) ? false : true
}
return input != 1 && input != 0 && input != true && input != false
}
return false
})
) {
return 'Source data contains some invalid boolean values'
}
break
}
return true
},
mapDefaultColumns() {

15
packages/nc-gui/components/project/spreadsheet/components/moreActions.vue

@ -106,6 +106,7 @@ import FileSaver from 'file-saver'
import DropOrSelectFileModal from '~/components/import/dropOrSelectFileModal'
import ColumnMappingModal from '~/components/project/spreadsheet/components/importExport/columnMappingModal'
import CSVTemplateAdapter from '~/components/import/templateParsers/CSVTemplateAdapter'
import { UITypes } from '~/components/project/spreadsheet/helpers/uiTypes'
export default {
name: 'ExportImport',
@ -276,9 +277,19 @@ export default {
for (let i = 0, progress = 0; i < data.length; i += 500) {
const batchData = data.slice(i, i + 500).map(row => columnMappings.reduce((res, col) => {
// todo: parse data
if (col.enabled && col.destCn) {
res[col.destCn] = row[col.sourceCn]
const v = this.meta && this.meta.columns.find(c => c._cn === col.destCn)
var input = row[col.sourceCn]
// parse potential boolean values
if (v.uidt == UITypes.Checkbox) {
input = input.replace(/["']/g, "").toLowerCase().trim()
if (input == "false" || input == "no" || input == "n") {
input = "0"
} else if (input == "true" || input == "yes" || input == "y") {
input = "1"
}
}
res[col.destCn] = input
}
return res
}, {}))

Loading…
Cancel
Save