kanbanworkflowstimelinescrumrubyroadmapproject-planningproject-managementopenprojectangularissue-trackerifcgantt-chartganttbug-trackerboardsbcf
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.
136 lines
6.0 KiB
136 lines
6.0 KiB
import {States} from '../states.service';
|
|
import {WorkPackageTablePaginationService} from '../wp-fast-table/state/wp-table-pagination.service';
|
|
import {WorkPackageTableHierarchiesService} from '../wp-fast-table/state/wp-table-hierarchy.service';
|
|
import {WorkPackageTableTimelineService} from '../wp-fast-table/state/wp-table-timeline.service';
|
|
import {WorkPackageTableSumService} from '../wp-fast-table/state/wp-table-sum.service';
|
|
import {WorkPackageTableFiltersService} from '../wp-fast-table/state/wp-table-filters.service';
|
|
import {WorkPackageTableGroupByService} from '../wp-fast-table/state/wp-table-group-by.service';
|
|
import {WorkPackageTableColumnsService} from '../wp-fast-table/state/wp-table-columns.service';
|
|
import {QueryResource} from '../api/api-v3/hal-resources/query-resource.service';
|
|
import {WorkPackageCollectionResource} from '../api/api-v3/hal-resources/wp-collection-resource.service';
|
|
import {SchemaResource} from '../api/api-v3/hal-resources/schema-resource.service';
|
|
import {QueryFormResource} from '../api/api-v3/hal-resources/query-form-resource.service';
|
|
import {QuerySchemaResourceInterface} from '../api/api-v3/hal-resources/query-schema-resource.service';
|
|
import {QueryFilterInstanceSchemaResource} from '../api/api-v3/hal-resources/query-filter-instance-schema-resource.service';
|
|
import {WorkPackageCacheService} from '../work-packages/work-package-cache.service';
|
|
import {WorkPackageTableRelationColumnsService} from '../wp-fast-table/state/wp-table-relation-columns.service';
|
|
import {WorkPackagesListChecksumService} from './wp-list-checksum.service';
|
|
import {WorkPackageTableSortByService} from '../wp-fast-table/state/wp-table-sort-by.service';
|
|
import {WorkPackageTableAdditionalElementsService} from '../wp-fast-table/state/wp-table-additional-elements.service';
|
|
|
|
export class WorkPackageStatesInitializationService {
|
|
constructor(protected states:States,
|
|
protected wpTableColumns:WorkPackageTableColumnsService,
|
|
protected wpTableGroupBy:WorkPackageTableGroupByService,
|
|
protected wpTableSortBy:WorkPackageTableSortByService,
|
|
protected wpTableFilters:WorkPackageTableFiltersService,
|
|
protected wpTableSum:WorkPackageTableSumService,
|
|
protected wpTableTimeline:WorkPackageTableTimelineService,
|
|
protected wpTableHierarchies:WorkPackageTableHierarchiesService,
|
|
protected wpTableRelationColumns:WorkPackageTableRelationColumnsService,
|
|
protected wpTablePagination:WorkPackageTablePaginationService,
|
|
protected wpTableAdditionalElements:WorkPackageTableAdditionalElementsService,
|
|
protected wpCacheService:WorkPackageCacheService,
|
|
protected wpListChecksumService:WorkPackagesListChecksumService,
|
|
protected AuthorisationService:any) {
|
|
}
|
|
|
|
/**
|
|
* Initialize the query and table states from the given query and results.
|
|
* They may or may not come from the same query source.
|
|
*
|
|
* @param query
|
|
* @param results
|
|
*/
|
|
public initialize(query:QueryResource, results:WorkPackageCollectionResource) {
|
|
this.clearStates();
|
|
|
|
this.initializeFromQuery(query);
|
|
|
|
this.updateFromResults(results);
|
|
}
|
|
|
|
/**
|
|
* Insert new information from the query from to the states.
|
|
*
|
|
* @param query
|
|
* @param form
|
|
*/
|
|
public updateStatesFromForm(query:QueryResource, form:QueryFormResource) {
|
|
let schema = form.schema as QuerySchemaResourceInterface;
|
|
|
|
_.each(schema.filtersSchemas.elements, (schema:QueryFilterInstanceSchemaResource) => {
|
|
this.states.schemas.get(schema.href as string).putValue(schema);
|
|
});
|
|
|
|
this.wpTableFilters.initialize(query, schema);
|
|
this.states.query.form.putValue(form);
|
|
|
|
this.states.query.available.columns.putValue(schema.columns.allowedValues);
|
|
this.states.query.available.sortBy.putValue(schema.sortBy.allowedValues);
|
|
this.states.query.available.groupBy.putValue(schema.groupBy.allowedValues);
|
|
}
|
|
|
|
public updateFromResults(results:WorkPackageCollectionResource) {
|
|
// Clear table required data states
|
|
this.states.table.additionalRequiredWorkPackages.clear('Clearing additional WPs before updating rows');
|
|
|
|
if (results.schemas) {
|
|
_.each(results.schemas.elements, (schema:SchemaResource) => {
|
|
this.states.schemas.get(schema.href as string).putValue(schema);
|
|
});
|
|
}
|
|
|
|
this.states.table.rows.putValue(results.elements);
|
|
|
|
this.wpCacheService.updateWorkPackageList(results.elements);
|
|
|
|
this.states.table.results.putValue(results);
|
|
|
|
this.states.table.groups.putValue(angular.copy(results.groups));
|
|
|
|
this.wpTablePagination.initialize(results);
|
|
|
|
this.wpListChecksumService.updateIfDifferent(this.states.query.resource.value!, this.wpTablePagination.current);
|
|
|
|
this.wpTableRelationColumns.initialize(results.elements);
|
|
|
|
this.wpTableAdditionalElements.initialize(results.elements);
|
|
|
|
this.AuthorisationService.initModelAuth('work_packages', results.$links);
|
|
}
|
|
|
|
private initializeFromQuery(query:QueryResource) {
|
|
this.states.query.resource.putValue(query);
|
|
|
|
this.wpTableSum.initialize(query);
|
|
this.wpTableColumns.initialize(query);
|
|
this.wpTableSortBy.initialize(query);
|
|
this.wpTableGroupBy.initialize(query);
|
|
this.wpTableTimeline.initialize(query);
|
|
this.wpTableHierarchies.initialize(query);
|
|
|
|
this.AuthorisationService.initModelAuth('query', query.$links);
|
|
}
|
|
|
|
private clearStates() {
|
|
const reason = 'Clearing states before re-initialization.';
|
|
|
|
// Clear immediate input states
|
|
this.states.table.rows.clear(reason);
|
|
this.states.table.columns.clear(reason);
|
|
this.states.table.sortBy.clear(reason);
|
|
this.states.table.groupBy.clear(reason);
|
|
this.states.table.sum.clear(reason);
|
|
this.states.table.results.clear(reason);
|
|
this.states.table.groups.clear(reason);
|
|
this.states.table.additionalRequiredWorkPackages.clear(reason);
|
|
|
|
// Clear rendered state
|
|
this.states.table.rendered.clear(reason);
|
|
}
|
|
}
|
|
|
|
angular
|
|
.module('openproject.workPackages.services')
|
|
.service('wpStatesInitialization', WorkPackageStatesInitializationService);
|
|
|