OpenProject is the leading open source project management software.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openproject/frontend/app/components/wp-fast-table/handlers/state/rows-transformer.ts

56 lines
1.8 KiB

import {debugLog} from "../../../../helpers/debug_output";
import {injectorBridge} from "../../../angular/angular-injector-bridge.functions";
import {WorkPackageResourceInterface} from "../../../api/api-v3/hal-resources/work-package-resource.service";
import {States} from "../../../states.service";
import {WorkPackageTable} from "../../wp-fast-table";
import {WorkPackageTableRow} from "../../wp-table.interfaces";
export class RowsTransformer {
public states: States;
constructor(public table: WorkPackageTable) {
injectorBridge(this);
// Redraw table if the current row state changed
this.states.table.rows.values$()
.takeUntil(this.states.table.stopAllSubscriptions)
.subscribe((rows: WorkPackageResourceInterface[]) => {
var t0 = performance.now();
table.initialSetup(rows);
table.postRender();
var t1 = performance.now();
debugLog("[RowTransformer] Reinitialized in " + (t1 - t0) + " milliseconds.");
});
// Refresh a single row if it exists
this.states.workPackages.observeChange()
.takeUntil(this.states.table.stopAllSubscriptions.asObservable())
.subscribe(([changedId, wp, state]) => {
if (wp === undefined) {
return;
}
// let [changedId, wp] = nextVal;
let row: WorkPackageTableRow = table.rowIndex[changedId];
if (wp && row) {
row.object = wp as any;
this.refreshWorkPackage(table, row);
}
});
}
/**
* Refreshes a single entity from changes in the work package itself.
* Will skip rendering when dirty or fresh. Does not check for table changes.
*/
private refreshWorkPackage(table: WorkPackageTable, row: WorkPackageTableRow) {
table.refreshRow(row);
}
}
RowsTransformer.$inject = ['states'];