Fixed calllist by removing the attached data from the tree (fixes #4296)

This commit is contained in:
FinnStutzenstein 2019-02-12 10:39:03 +01:00
parent 841d80a35b
commit 17ce91f309
6 changed files with 39 additions and 13 deletions

View File

@ -234,7 +234,7 @@ export class ItemRepositoryService extends BaseRepository<ViewItem, Item> {
*/
public async delete(item: ViewItem): Promise<void> {
const restUrl = `/rest/${item.contentObject.collectionString}/${item.contentObject.id}/`;
return await this.httpService.delete(restUrl);
await this.httpService.delete(restUrl);
}
/**
@ -260,7 +260,7 @@ export class ItemRepositoryService extends BaseRepository<ViewItem, Item> {
*
* @param data The reordered data from the sorting
*/
public async sortItems(data: OSTreeSortEvent<ViewItem>): Promise<void> {
public async sortItems(data: OSTreeSortEvent): Promise<void> {
const url = '/rest/agenda/item/sort/';
await this.httpService.post(url, data);
}

View File

@ -314,7 +314,7 @@ export class MotionRepositoryService extends BaseRepository<ViewMotion, Motion>
*
* @param data The reordered data from the sorting
*/
public async sortMotions(data: OSTreeSortEvent<ViewMotion>): Promise<void> {
public async sortMotions(data: OSTreeSortEvent): Promise<void> {
const url = '/rest/motions/motion/sort/';
await this.httpService.post(url, data);
}

View File

@ -4,11 +4,18 @@ import { Displayable } from 'app/site/base/displayable';
import { Identifiable } from 'app/shared/models/base/identifiable';
/**
* A representation of nodes in our tree. Saves the displayed name, the id, the element and children to build a full tree.
* A basic representation of a tree node. This node does not stores any data.
*/
export interface OSTreeNode<T> {
export interface OSTreeNodeWithoutItem {
name: string;
id: number;
children?: OSTreeNodeWithoutItem[];
}
/**
* A representation of nodes with the item atached.
*/
export interface OSTreeNode<T> extends OSTreeNodeWithoutItem {
item: T;
children?: OSTreeNode<T>[];
}
@ -113,6 +120,25 @@ export class TreeService {
}
}
/**
* Removes `item` from the tree.
*
* @param tree The tree with items
* @returns The tree without items
*/
public stripTree<T>(tree: OSTreeNode<T>[]): OSTreeNodeWithoutItem[] {
return tree.map(node => {
const nodeWithoutItem: OSTreeNodeWithoutItem = {
name: node.name,
id: node.id
};
if (node.children) {
nodeWithoutItem.children = this.stripTree(node.children);
}
return nodeWithoutItem;
});
}
/**
* Traverses items in pre-order givem (implicit) by the weight and parentId.
*

View File

@ -7,16 +7,16 @@ import { Subscription, Observable } from 'rxjs';
import { Identifiable } from 'app/shared/models/base/identifiable';
import { Displayable } from 'app/site/base/displayable';
import { OSTreeNode, TreeService } from 'app/core/ui-services/tree.service';
import { OSTreeNode, TreeService, OSTreeNodeWithoutItem } from 'app/core/ui-services/tree.service';
/**
* The data representation for the sort event.
*/
export interface OSTreeSortEvent<T> {
export interface OSTreeSortEvent {
/**
* Gives all nodes to be inserted below the parent_id.
*/
nodes: OSTreeNode<T>[];
nodes: OSTreeNodeWithoutItem[];
/**
* Provides the parent id for the nodes array. Do not provide it, if it's the
@ -85,7 +85,7 @@ export class SortingTreeComponent<T extends Identifiable & Displayable> implemen
* sorted part of the tree.
*/
@Output()
public readonly sort = new EventEmitter<OSTreeSortEvent<T>>();
public readonly sort = new EventEmitter<OSTreeSortEvent>();
/**
* Options for the tree. As a default drag and drop is allowed.
@ -159,6 +159,7 @@ export class SortingTreeComponent<T extends Identifiable & Displayable> implemen
to.parent.data.children = [];
}
transferArrayItem(fromArray, to.parent.data.children, from.index, to.index);
this.sort.emit({ nodes: to.parent.data.children, parent_id: parentId });
const strippedNodes = this.treeService.stripTree(to.parent.data.children);
this.sort.emit({ nodes: strippedNodes, parent_id: parentId });
}
}

View File

@ -51,7 +51,7 @@ export class AgendaSortComponent extends BaseViewComponent {
* @param data The event data. The representation fits the servers requirements, so it can directly
* be send to the server via the repository.
*/
public sort(data: OSTreeSortEvent<ViewItem>): void {
public sort(data: OSTreeSortEvent): void {
this.agendaRepo.sortItems(data).then(null, this.raiseError);
}

View File

@ -9,7 +9,6 @@ import { BaseViewComponent } from '../../../base/base-view';
import { MotionRepositoryService } from 'app/core/repositories/motions/motion-repository.service';
import { MotionCsvExportService } from '../../services/motion-csv-export.service';
import { MotionPdfExportService } from '../../services/motion-pdf-export.service';
import { ViewMotion } from '../../models/view-motion';
import { OSTreeSortEvent } from 'app/shared/components/sorting-tree/sorting-tree.component';
@ -67,7 +66,7 @@ export class CallListComponent extends BaseViewComponent {
* @param data The event data. The representation fits the servers requirements, so it can directly
* be send to the server via the repository.
*/
public sort(data: OSTreeSortEvent<ViewMotion>): void {
public sort(data: OSTreeSortEvent): void {
this.motionRepo.sortMotions(data).then(null, this.raiseError);
}