mirror of
https://gitee.com/nocobase/nocobase.git
synced 2025-05-09 15:39:24 +08:00
fix: test
This commit is contained in:
parent
3502e10227
commit
5e7f28aa68
@ -288,9 +288,8 @@ export class XlsxImporter extends EventEmitter {
|
|||||||
return columns.map((col) => col.title || col.defaultTitle);
|
return columns.map((col) => col.title || col.defaultTitle);
|
||||||
}
|
}
|
||||||
|
|
||||||
private alignWithHeaders(expectedHeaders: string[], data: string[][]): string[][] {
|
private alignWithHeaders(params: { headers: string[]; expectedHeaders: string[]; data: string[][] }): string[][] {
|
||||||
const headers = this.options.explain ? data[1] : data[0];
|
const { expectedHeaders, headers, data } = params;
|
||||||
|
|
||||||
const keepCols = headers.map((x, i) => (expectedHeaders.includes(x) ? i : -1)).filter((i) => i > -1);
|
const keepCols = headers.map((x, i) => (expectedHeaders.includes(x) ? i : -1)).filter((i) => i > -1);
|
||||||
|
|
||||||
return data.map((row) => keepCols.map((i) => row[i]));
|
return data.map((row) => keepCols.map((i) => row[i]));
|
||||||
@ -304,13 +303,13 @@ export class XlsxImporter extends EventEmitter {
|
|||||||
|
|
||||||
// Find and validate header row
|
// Find and validate header row
|
||||||
const expectedHeaders = this.getExpectedHeaders(ctx);
|
const expectedHeaders = this.getExpectedHeaders(ctx);
|
||||||
data = this.alignWithHeaders(expectedHeaders, data);
|
|
||||||
const { headerRowIndex, headers } = this.findAndValidateHeaders({ data, expectedHeaders });
|
const { headerRowIndex, headers } = this.findAndValidateHeaders({ data, expectedHeaders });
|
||||||
if (headerRowIndex === -1) {
|
if (headerRowIndex === -1) {
|
||||||
throw new ImportValidationError('Headers not found. Expected headers: {{headers}}', {
|
throw new ImportValidationError('Headers not found. Expected headers: {{headers}}', {
|
||||||
headers: expectedHeaders.join(', '),
|
headers: expectedHeaders.join(', '),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
data = this.alignWithHeaders({ data, expectedHeaders, headers });
|
||||||
|
|
||||||
// Extract data rows
|
// Extract data rows
|
||||||
const rows = data.slice(headerRowIndex + 1);
|
const rows = data.slice(headerRowIndex + 1);
|
||||||
@ -334,25 +333,10 @@ export class XlsxImporter extends EventEmitter {
|
|||||||
const actualHeaders = row.filter((cell) => cell !== null && cell !== '');
|
const actualHeaders = row.filter((cell) => cell !== null && cell !== '');
|
||||||
|
|
||||||
const allHeadersFound = expectedHeaders.every((header) => actualHeaders.includes(header));
|
const allHeadersFound = expectedHeaders.every((header) => actualHeaders.includes(header));
|
||||||
const noExtraHeaders = actualHeaders.length === expectedHeaders.length;
|
|
||||||
|
|
||||||
if (allHeadersFound && noExtraHeaders) {
|
if (allHeadersFound) {
|
||||||
const mismatchIndex = expectedHeaders.findIndex((title, index) => actualHeaders[index] !== title);
|
const orderedHeaders = expectedHeaders.filter((h) => actualHeaders.includes(h));
|
||||||
|
return { headerRowIndex: rowIndex, headers: orderedHeaders };
|
||||||
if (mismatchIndex === -1) {
|
|
||||||
// All headers match
|
|
||||||
return { headerRowIndex: rowIndex, headers: actualHeaders };
|
|
||||||
} else {
|
|
||||||
// Found potential header row but with mismatch
|
|
||||||
throw new ImportValidationError(
|
|
||||||
'Header mismatch at column {{column}}: expected "{{expected}}", but got "{{actual}}"',
|
|
||||||
{
|
|
||||||
column: mismatchIndex + 1,
|
|
||||||
expected: expectedHeaders[mismatchIndex],
|
|
||||||
actual: actualHeaders[mismatchIndex] || 'empty',
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user