Operations on 2 separate collections v2
unknown
typescript
2 years ago
1.7 kB
12
Indexable
class MyService {
getTasksByCategory(category:string):Observable<any> {
const daysFromThisWeek = this.getDaysFromThisWeek();
return forkJoin({
tasks: this.tasksS.tasksCollection(),
goals: this.goalsS.goalsCollection(),
})
// !!! OPERATIONS ON GOALS !!!
.pipe(
// filter goals with category from parameter
map(({ tasks, goals }) => {
return goals.filter((item:any) => item.category === category);
}),
// get ID's of found goals in the previous step
map((goals:any) => {
const goalsIDs = goals.map((item:any) => item.id);
return goalsIDs;
})
)
// !!! OPERATIONS ON TASKS !!!
.pipe(
// get IDs-matching-tasks
map(({ tasks, goalsIDs }) => {
let modArr = [] as any;
goalsIDs.forEach((goalId:any) => {
const forModArr = tasks.filter((task:any) => task.goal_id === goalId);
modArr = modArr.concat(forModArr);
})
return modArr;
}),
map(tasksArr => {
// get number of IDs-matching-tasks on each week day
let finalTasks = [] as any;
daysFromThisWeek.forEach((day:any) => {
const forFinalTasks = tasksArr.filter((task:any) => task.taskDate === day);
finalTasks = finalTasks.concat(forFinalTasks.length);
})
return finalTasks;
})
)
}
getDaysFromThisWeek() {
let daysArr = [];
for(let i=1; i<=7; i++) {
daysArr.push(dayjs().startOf('week').add(i, "day").format('YYYY-MM-DD'));
}
return daysArr;
}
}Editor is loading...