mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-24 17:32:15 +00:00
[AAE-7819] Change column order - enable drag and drop for datatable - [1/3] (#7567)
* [AAE-7819] Enable drag and drop for datatable [1/3] * [AAE-7819] Change column order - load and save columns order preferences for PROCESSES - [2/3] (#7568) * [AAE-7819] Load and save column order preferences for processes * [AAE-7819] Load and save column order preferences for tasks [3/3] (#7569) * fix css * fix icon module import * Fix unit tests * Fix test * Fix e2e * Fix C279927
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
*/
|
||||
|
||||
import { ContentChild, Input, Directive } from '@angular/core';
|
||||
import { ReplaySubject } from 'rxjs';
|
||||
import { AppConfigService } from '../../app-config/app-config.service';
|
||||
import { DataColumnListComponent } from '../../data-column/data-column-list.component';
|
||||
import { DataColumn } from './data-column.model';
|
||||
@@ -34,19 +35,34 @@ export abstract class DataTableSchema {
|
||||
|
||||
columns: any;
|
||||
|
||||
protected columnsOrder: string[] | undefined;
|
||||
protected columnsOrderedByKey: string = 'id';
|
||||
|
||||
private layoutPresets = {};
|
||||
|
||||
private columnsSchemaSubject$ = new ReplaySubject<boolean>();
|
||||
isColumnSchemaCreated$ = this.columnsSchemaSubject$.asObservable();
|
||||
|
||||
constructor(private appConfigService: AppConfigService,
|
||||
protected presetKey: string,
|
||||
protected presetsModel: any) { }
|
||||
|
||||
public createDatatableSchema(): void {
|
||||
this.loadLayoutPresets();
|
||||
|
||||
if (!this.columns || this.columns.length === 0) {
|
||||
this.columns = this.mergeJsonAndHtmlSchema();
|
||||
this.createColumns();
|
||||
this.columnsSchemaSubject$.next(true);
|
||||
} else {
|
||||
this.columnsSchemaSubject$.next(false);
|
||||
}
|
||||
}
|
||||
|
||||
public createColumns(): void {
|
||||
const columns = this.mergeJsonAndHtmlSchema();
|
||||
this.columns = this.sortColumnsByKey(columns);
|
||||
}
|
||||
|
||||
public loadLayoutPresets(): void {
|
||||
const externalSettings = this.appConfigService.get(this.presetKey, null);
|
||||
if (externalSettings) {
|
||||
@@ -57,10 +73,18 @@ export abstract class DataTableSchema {
|
||||
}
|
||||
|
||||
public mergeJsonAndHtmlSchema(): any {
|
||||
let customSchemaColumns = this.getSchemaFromConfig(this.presetColumn).concat(this.getSchemaFromHtml(this.columnList));
|
||||
const configSchemaColumns = this.getSchemaFromConfig(this.presetColumn);
|
||||
const htmlSchemaColumns = this.getSchemaFromHtml(this.columnList);
|
||||
|
||||
let customSchemaColumns = [
|
||||
...configSchemaColumns,
|
||||
...htmlSchemaColumns
|
||||
];
|
||||
|
||||
if (customSchemaColumns.length === 0) {
|
||||
customSchemaColumns = this.getDefaultLayoutPreset();
|
||||
}
|
||||
|
||||
return customSchemaColumns;
|
||||
}
|
||||
|
||||
@@ -87,4 +111,20 @@ export abstract class DataTableSchema {
|
||||
public setPresetsModel(presetsModel: any) {
|
||||
this.presetsModel = presetsModel;
|
||||
}
|
||||
|
||||
private sortColumnsByKey(columns: any[]): any[] {
|
||||
const defaultColumns = [...columns];
|
||||
const columnsWithProperOrder = [];
|
||||
|
||||
(this.columnsOrder ?? []).forEach(columnKey => {
|
||||
const originalColumnIndex = defaultColumns.findIndex(defaultColumn => defaultColumn[this.columnsOrderedByKey] === columnKey);
|
||||
|
||||
if (originalColumnIndex > -1) {
|
||||
columnsWithProperOrder.push(defaultColumns[originalColumnIndex]);
|
||||
defaultColumns.splice(originalColumnIndex, 1);
|
||||
}
|
||||
});
|
||||
|
||||
return [...columnsWithProperOrder, ...defaultColumns];
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user