1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
createSpanMethod(data, config) { const sortByFields = (list, sortRule) => { list.sort((a, b) => { for (let rule of sortRule) { const { field, order } = rule; if (a[field] < b[field]) { return order === 'asc' ? -1 : order === 'desc' ? 1 : 0; } else if (a[field] > b[field]) { return order === 'asc' ? 1 : order === 'desc' ? -1 : 0; } } return 0; }); };
const defaultRowRule = (row, column, rowIndex, columnIndex, list, rowConfig, temp, type) => { if (type === 'check') { return (row[rowConfig.linkField ?? column.property] === list[rowIndex - 1][rowConfig.linkField ?? column.property]); } else { return (list[temp][rowConfig.linkField ?? column.property] === list[temp + 1][rowConfig.linkField ?? column.property]); } };
const setRowSpan = (row, column, rowIndex, columnIndex, list, corSpan, rowConfig) => { const exportParams = { row, column, rowIndex, columnIndex, rowConfig }; if ((rowIndex > 0) && (rowConfig.rule ? rowConfig.rule(list[rowIndex - 1], row, rowConfig.linkField ?? column.property, exportParams) : defaultRowRule(row, column, rowIndex, columnIndex, list, rowConfig, null, 'check'))) { corSpan.rowspan = 0; } else if (rowIndex === list.length - 1) { corSpan.rowspan = 1; } else { let rowspan = 1; let temp = rowIndex; while ((temp < list.length - 1) && (rowConfig.rule ? rowConfig.rule(list[temp], list[temp + 1], rowConfig.linkField ?? column.property, exportParams) : defaultRowRule(row, column, rowIndex, columnIndex, list, rowConfig, temp))) { temp++; rowspan++; } corSpan.rowspan = rowspan; } };
const setColSpan = (row, column, rowIndex, columnIndex, list, corSpan, colConfig) => { const exportParams = { row, column, rowIndex, columnIndex, colConfig }; if (colConfig?.rule(exportParams)) { corSpan.colspan = column.property === colConfig?.fields[0].field ? colConfig?.fields.length : 0; } else { corSpan.colspan = 1; } };
if (config.sort) sortByFields(data, config.sortRule ?? []);
return ({ row, column, rowIndex, columnIndex }) => { const corSpan = { rowspan: 1, colspan: 1 }; if (!data.length) return corSpan;
const linkCellConfig = config?.mergeRow?.find(item => item?.linkField && (item?.columnIndex === columnIndex)); const rowConfig = config?.mergeRow?.find(item => (item?.field === column.property) && (item?.columnIndex === columnIndex));
if (linkCellConfig) { setRowSpan(row, column, rowIndex, columnIndex, data, corSpan, linkCellConfig); } else if (rowConfig) { setRowSpan(row, column, rowIndex, columnIndex, data, corSpan, rowConfig); }
const colConfig = config?.mergeCol?.find(item => item?.fields?.some(el => (el?.field === column.property) && (el?.columnIndex === columnIndex))); if (colConfig) setColSpan(row, column, rowIndex, columnIndex, data, corSpan, colConfig);
return corSpan; }; }
|