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/states.service.ts

71 lines
2.5 KiB

import {WorkPackageTimelineTableController} from './wp-table/timeline/wp-timeline-container.directive';
import {whenDebugging} from '../helpers/debug_output';
import {WorkPackageTable} from './wp-fast-table/wp-fast-table';
import {WPTableRowSelectionState, WorkPackageTableRow} from './wp-fast-table/wp-table.interfaces';
import {MultiState, initStates, State} from "../helpers/reactive-fassade";
8 years ago
import {WorkPackageResource} from "./api/api-v3/hal-resources/work-package-resource.service";
import {opServicesModule} from "../angular-modules";
import {SchemaResource} from './api/api-v3/hal-resources/schema-resource.service';
import {TypeResource} from './api/api-v3/hal-resources/type-resource.service';
import {WorkPackageEditForm} from './wp-edit-form/work-package-edit-form';
import {WorkPackageTableMetadata} from './wp-fast-table/wp-table-metadata';
import {Subject} from 'rxjs';
8 years ago
export class States {
/* /api/v3/work_packages */
8 years ago
workPackages = new MultiState<WorkPackageResource>();
/* /api/v3/schemas */
schemas = new MultiState<SchemaResource>();
8 years ago
/* /api/v3/types */
types = new MultiState<TypeResource>();
// Work package table states
table = {
// Metadata of the current table result
// (page, links, grouping information)
metadata: new State<WorkPackageTableMetadata>(),
// Set of work package IDs in strict order of appearance
rows: new State<WorkPackageResource[]>(),
// Set of columns in strict order of appearance
columns: new State<string[]>(),
// Table row selection state
selection: new State<WPTableRowSelectionState>(),
// Current state of collapsed groups (if any)
collapsedGroups: new State<{[identifier:string]: boolean}>(),
// State to be updated when the table is up to date
rendered:new State<WorkPackageTable>(),
// State to determine timeline visibility
timelineVisible: new State<boolean>(),
// Subject used to unregister all listeners of states above.
stopAllSubscriptions:new Subject()
};
timeline = new State<WorkPackageTimelineTableController>();
// Query states
query = {
// All available columns for selection
availableColumns: new State<any[]>()
};
// Current focused work package (e.g, row preselected for details button)
focusedWorkPackage = new State<string>();
// Open editing forms
editing = new MultiState<WorkPackageEditForm>();
8 years ago
constructor() {
initStates(this, function (msg: any) {
whenDebugging(() => {
console.trace(msg);
});
8 years ago
});
}
}
opServicesModule.service('states', States);