mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-10-12 15:04:04 +00:00
65 lines
1.7 KiB
JavaScript
65 lines
1.7 KiB
JavaScript
import Module from "../../../../vendor/olifolkerd/tabulator5/src/js/core/Module.js";
|
|
|
|
export default class TablePresetsModule extends Module {
|
|
static moduleName = "tablePresets";
|
|
static moduleInitNumber = 1;
|
|
|
|
constructor(table) {
|
|
super(table);
|
|
}
|
|
|
|
applyPreset(preset) {
|
|
let columnsConfig = this.table.options.columns;
|
|
let reorderedColumnsConfig = [];
|
|
preset.displayedColumns.forEach((columnField) => {
|
|
let columnConfig = columnsConfig.find(
|
|
(column) => column.field === columnField,
|
|
);
|
|
if (!columnConfig) return;
|
|
columnConfig.visible = true;
|
|
reorderedColumnsConfig.push(columnConfig);
|
|
});
|
|
|
|
let hiddenColumnsConfig = columnsConfig
|
|
.filter((column) => !preset.displayedColumns.includes(column.field))
|
|
.map((column) => {
|
|
column.visible = false;
|
|
return column;
|
|
});
|
|
this.table.setColumns(
|
|
reorderedColumnsConfig.concat(hiddenColumnsConfig),
|
|
);
|
|
|
|
this.table.clearHeaderFilter();
|
|
if (preset.headerFilters) {
|
|
Object.entries(preset.headerFilters).forEach(
|
|
([columnField, filterValue]) => {
|
|
this.table.setHeaderFilterValue(columnField, filterValue);
|
|
|
|
// double checking if filter inputs are filled in due to issues with custom header filters
|
|
const headerFilterInputElement =
|
|
this.table.columnManager.columns
|
|
.find((column) => column.field === columnField)
|
|
?.element.querySelector(
|
|
".tabulator-header-filter input",
|
|
);
|
|
if (
|
|
headerFilterInputElement &&
|
|
headerFilterInputElement.value !== filterValue
|
|
) {
|
|
headerFilterInputElement.value = filterValue;
|
|
}
|
|
},
|
|
);
|
|
}
|
|
|
|
this.table.clearSort();
|
|
if (preset.sort?.column) {
|
|
this.table.setSort(
|
|
preset.sort.column,
|
|
preset.sort.direction ?? "asc",
|
|
);
|
|
}
|
|
}
|
|
}
|