Wenn jemand interessiert es zwei Möglichkeiten, dies zu lösen:
private getTasksWithReferenceOOOOOOOOLD() {
let localTasksWithReference = this._store.select(state => state.tasks)
.map((localTasks: Task[]) => {
return localTasks.filter((localTask: Task) => {
return this.typeCode.toString() === localTask.taskProcessTypeCode.toString();
})
}).reduce((grouping, tasks: any) => {
grouping = {};
tasks.reduce((test, task) => {
let referenceIds =
task.jobs.reduce((references, job) => {
references.push(job.businessTransactionDocumentReference.id);
return references;
}, []);
referenceIds.forEach(referenceId => {
grouping[referenceId] = grouping[referenceId] || { "tasks": [] };
if (grouping[referenceId].tasks.indexOf(task) === -1) {
grouping[referenceId].tasks.push(task);
}
})
}, []);
const arr = Object.keys(grouping).reduce((arr, key) =>
([...arr, { ...grouping[key], key }]), // Can add key if you don't have it
[]);
this.tasksWithReference = Observable.of(arr);
return arr;
}, {}).subscribe();
}
Jetzt kann ich die referenceId mit dem Schlüssel zugreifen und die Aufgaben mit reference.tasks.
Zweite Lösung:
public tasksWithReferenceMap: Map<string, Task[]>
public getTasksWithReference() {
this.tasksWithReference = this._store.select(state => state.tasks)
.map((localTasks: Task[]) => {
this.tasksWithReferenceMap = new Map<string, Task[]>();
return localTasks.filter((localTask: Task) => {
return this.typeCode.toString() === localTask.taskProcessTypeCode.toString();
}).reduce((grouping, task: Task) => {
// Get all referenceIds for the task
const referenceIds = task.jobs.reduce((references, job: Job) => {
references.push(job.businessTransactionDocumentReference.id);
return references;
}, []);
// Add each referenceId and task to the grouping
referenceIds.forEach(referenceId => {
grouping.set(referenceId, grouping.get(referenceId) || []);
if (grouping.get(referenceId).indexOf(task) === -1) {
grouping.get(referenceId).push(task);
}
})
return grouping;
}, this.tasksWithReferenceMap);
});
}
mit Karten arbeiten hier.
als müssen wir eine eigene Pfeife erstellen:
import { Task } from './../../models/task.model';
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'keys',
})
@Pipe({ name: 'keys' })
export class KeysPipe implements PipeTransform
{
transform(value: Map<string, Task[]>, args: string[]): any
{
let keys = [];
for (let key of value.keys())
{
keys.push({ key: key });
}
return keys;
}
}
und als Zugang der html:
<ion-list *ngFor="let reference of tasksWithReference | async | keys | orderBy: 'key' : reverseReference">
<ion-list-header class="referenceListHeader">
{{'REFERENCE' | translate}}: {{reference?.key}}
</ion-list-header>
<ion-item-sliding *ngFor="let task of tasksWithReferenceMap.get(reference?.key) | orderBy: 'id'; let i = index">
Dank für Sie wieder helfen, sonst wäre es etwas mehr Zeit genommen haben;)
Könnten Sie Ihr erwartetes Ergebnis klären? Sie gruppieren Aufgaben vor allem nach der Referenz-ID eines _ seiner Jobs, nach all seinen Jobs usw.? – concat