diff --git a/src/components/Project/Detail/ProjectFeatureTypes.vue b/src/components/Project/Detail/ProjectFeatureTypes.vue index 7cb7968533a7c1f3a17d9d919486a52e05b3075b..69c1713296523512241c640d1eda17a82d5817af 100644 --- a/src/components/Project/Detail/ProjectFeatureTypes.vue +++ b/src/components/Project/Detail/ProjectFeatureTypes.vue @@ -633,10 +633,10 @@ export default { try { fr.readAsText(this.csvFileToImport); fr.onloadend = () => { - + let content = fr.result; // Find csv delimiter - const commaDelimited = fr.result.split('\n')[0].includes(','); - const semicolonDelimited = fr.result.split('\n')[0].includes(';'); + const commaDelimited = content.split('\n')[0].includes(','); + const semicolonDelimited = content.split('\n')[0].includes(';'); const delimiter = commaDelimited && !semicolonDelimited ? ',' : semicolonDelimited ? ';' : false; if ((commaDelimited && semicolonDelimited) || !delimiter) { @@ -644,32 +644,39 @@ export default { this.featureTypeImporting = false; return; } - // Check if file contains 'lat' and 'long' fields - const headersLine = - fr.result - .split('\n')[0] - .split(delimiter) - .map(el => { - return el.replace('\r', ''); - }) - .filter(el => { - return el === 'lat' || el === 'lon'; - }); - + const headers = content + .split('\n')[0] + .split(delimiter) + .map(el => { + return el.replace('\r', ''); + }); + const headersCoord = headers.filter(el => { + return el === 'lat' || el === 'lon'; + }); // Look for 2 decimal fields in first line of csv // corresponding to lon and lat const sampleLine = - fr.result + content .split('\n')[1] .split(delimiter) .map(el => { return !isNaN(el) && el.indexOf('.') !== -1; }) .filter(Boolean); - if (sampleLine.length > 1 && headersLine.length === 2) { + if (sampleLine.length > 1 && headersCoord.length === 2) { this.csvError = null; - this.csvImport = csvToJson(fr.result, delimiter); + //* remove feature_id if found in headers + const featureIdIndex = headers.indexOf('feature_id'); + if (featureIdIndex > -1) { + content = content.split('\n') + .reduce((csvString, rowStr) => { + let rowArray = rowStr.split(delimiter); + rowArray.splice(featureIdIndex, 1); // remove feature_id in header and features + return csvString += rowArray.join(delimiter) + '\n'; + }, ''); + } + this.csvImport = csvToJson(content, delimiter); this.featureTypeImporting = false; //* stock filename to import features afterward this.SET_FILE_TO_IMPORT(this.csvFileToImport);