mirror of
https://github.com/nocodb/nocodb.git
synced 2026-05-03 12:16:38 +00:00
feat(nc-gui): enrich .dt & save dtxp for singleSelect / multiSelect
This commit is contained in:
@@ -103,13 +103,11 @@ export default class ExcelTemplateAdapter extends TemplateGenerator {
|
||||
}
|
||||
columnNamePrefixRef[cn] = 0
|
||||
|
||||
const column: Record<string, any> = {
|
||||
let column: Record<string, any> = {
|
||||
column_name: cn,
|
||||
ref_column_name: cn,
|
||||
}
|
||||
|
||||
table.columns.push(column)
|
||||
|
||||
// const cellId = `${col.toString(26).split('').map(s => (parseInt(s, 26) + 10).toString(36).toUpperCase())}2`;
|
||||
const cellId = XLSX.utils.encode_cell({
|
||||
c: range.s.c + col,
|
||||
@@ -118,6 +116,11 @@ export default class ExcelTemplateAdapter extends TemplateGenerator {
|
||||
const cellProps = ws[cellId] || {}
|
||||
column.uidt = excelTypeToUidt[cellProps.t] || UITypes.SingleLineText
|
||||
|
||||
const { sqlUi } = useProject()
|
||||
|
||||
// enrich data type for Template Editor to process
|
||||
column = { ...column, ...sqlUi?.value?.getDataTypeForUiType({ uidt: column.uidt }) }
|
||||
|
||||
// todo: optimize
|
||||
if (column.uidt === UITypes.SingleLineText) {
|
||||
// check for long text
|
||||
@@ -148,18 +151,26 @@ export default class ExcelTemplateAdapter extends TemplateGenerator {
|
||||
const uniqueVals = (flattenedVals = flattenedVals.filter(
|
||||
(v: any, i: any, arr: any) => i === arr.findIndex((v1: any) => v.toLowerCase() === v1.toLowerCase()),
|
||||
))
|
||||
// assume the column type is multiple select if there are repeated values
|
||||
if (flattenedVals.length > uniqueVals.length && uniqueVals.length <= Math.ceil(flattenedVals.length / 2)) {
|
||||
column.uidt = UITypes.MultiSelect
|
||||
column.dtxp = `'${uniqueVals.join("','")}'`
|
||||
}
|
||||
// set dtxp here so that users can have the options even they switch the type from other types to MultiSelect
|
||||
// once it's set, dtxp needs to be reset if the final column type is not MultiSelect
|
||||
column.dtxp = `'${uniqueVals.join("','")}'`
|
||||
} else {
|
||||
// assume the column type is single select if there are repeated values
|
||||
// once it's set, dtxp needs to be reset if the final column type is not Single Select
|
||||
const uniqueVals = vals
|
||||
.map((v: any) => v.toString().trim())
|
||||
.filter((v: any, i: any, arr: any) => i === arr.findIndex((v1: any) => v.toLowerCase() === v1.toLowerCase()))
|
||||
|
||||
if (vals.length > uniqueVals.length && uniqueVals.length <= Math.ceil(vals.length / 2)) {
|
||||
column.uidt = UITypes.SingleSelect
|
||||
column.dtxp = `'${uniqueVals.join("','")}'`
|
||||
}
|
||||
// set dtxp here so that users can have the options even they switch the type from other types to SingleSelect
|
||||
// once it's set, dtxp needs to be reset if the final column type is not MultiSelect
|
||||
column.dtxp = `'${uniqueVals.join("','")}'`
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -200,6 +211,7 @@ export default class ExcelTemplateAdapter extends TemplateGenerator {
|
||||
column.uidt = UITypes.Date
|
||||
}
|
||||
}
|
||||
table.columns.push(column)
|
||||
}
|
||||
|
||||
let rowIndex = 0
|
||||
|
||||
Reference in New Issue
Block a user