diff --git a/src/app/core/dexie/dexie.service.ts b/src/app/core/dexie/dexie.service.ts index b8f3850d6..0a2497ccc 100644 --- a/src/app/core/dexie/dexie.service.ts +++ b/src/app/core/dexie/dexie.service.ts @@ -3,7 +3,7 @@ import 'dexie-observable'; import {Injectable} from '@angular/core'; import {Task} from '../../features/tasks/task.model'; import {from, merge, Observable, Subject} from 'rxjs'; -import {filter, switchMap} from 'rxjs/operators'; +import {debounceTime, filter, switchMap} from 'rxjs/operators'; import {IDatabaseChange} from 'dexie-observable/api'; import {TaskClass} from './task.class'; @@ -15,7 +15,7 @@ const storeCfg = [{ name: 'tasks', // tslint:disable-next-line // fields: '++id, projectId, title, *subTaskIds, timeSpentOnDay, timeSpent, timeEstimate, created, isDone, notes, &issueId, issueType, parentId, attachmentIds, &reminderId, &repeatCfgId, _showSubTasksMode, _currentTab' - fields: '++id, projectId, title, created, parentId, *subTaskIds', + fields: '++id, order, projectId, title, created, parentId, *subTaskIds', c: TaskClass, }]; @@ -25,9 +25,12 @@ export type TaskTable = Dexie.Table; providedIn: 'root', }) export class DexieService extends Dexie { - tasks: Ta; + tasks: any; private _refresh$ = new Subject(); + private _refreshDebounced$ = this._refresh$.pipe( + // debounceTime(10), + ); constructor() { super('SUP_DEXIE'); @@ -60,7 +63,7 @@ export class DexieService extends Dexie { return merge( from(query(this.tasks)), - this._refresh$.pipe( + this._refreshDebounced$.pipe( filter(changes => this._isRefreshForTable(Tables.tasks, changes)), switchMap(() => query(this.tasks)) ) diff --git a/src/app/features/tasks/task.service.ts b/src/app/features/tasks/task.service.ts index beacb342c..7a2a45f6b 100644 --- a/src/app/features/tasks/task.service.ts +++ b/src/app/features/tasks/task.service.ts @@ -9,7 +9,6 @@ import { AddTask, AddTaskReminder, AddTimeSpent, - DeleteTask, FocusLastActiveTask, FocusTask, LoadTaskState, @@ -64,7 +63,6 @@ import { selectTasksWithMissingIssueData, selectTasksWorkedOnOrDoneFlat, selectTaskWithSubTasksByRepeatConfigId, - selectTodaysDoneTasksWithSubTasks, selectTodaysTasksWithSubTasks, selectTotalTimeWorkedOnTodaysTasks } from './store/task.selectors'; @@ -136,12 +134,11 @@ export class TaskService { ); undoneTasks$: Observable = this._dexieService.getTasks$( - (taskTable: TaskTable) => taskTable.filter(task => !task.isDone).reverse().sortBy('created') + (taskTable: TaskTable) => taskTable.filter(task => !task.isDone && !task.parentId).reverse().sortBy('order') ); - doneTasks$: Observable = this._store.pipe( - select(selectTodaysDoneTasksWithSubTasks), - shareReplay(1), + doneTasks$: Observable = this._dexieService.getTasks$( + (taskTable: TaskTable) => taskTable.filter(task => task.isDone && !task.parentId).reverse().sortBy('order') ); allRepeatableTasks$: Observable = this._store.pipe( @@ -282,7 +279,7 @@ export class TaskService { isAddToBottom = false, ) { const task = this.createNewTaskWithDefaults(title, additionalFields); - this._dexieService.tasks.put(task); + this._dexieService.tasks.add(task); // this._store.dispatch(new AddTask({ // task: this.createNewTaskWithDefaults(title, additionalFields), // isAddToBacklog, @@ -308,14 +305,25 @@ export class TaskService { } remove(task: TaskWithSubTasks) { - this._store.dispatch(new DeleteTask({task})); + // this._store.dispatch(new DeleteTask({task})); + if (task.subTasks) { + this._dexieService.tasks.bulkDelete([task.id, ...task.subTaskIds]); + } else { + // this._dexieService.tasks.delete(task.id); + this._dexieService.tasks.bulkDelete([task.id]); + } } - update(id: string, changedFields: Partial) { - this._store.dispatch(new UpdateTask({ - task: {id, changes: this._shortSyntax(changedFields) as Partial} - })); + async update(id: string, changedFields: Partial) { + this._dexieService.tasks.put({ + id, + ...(await this._dexieService.tasks.get(id)), + ...changedFields, + }); + // this._store.dispatch(new UpdateTask({ + // task: {id, changes: this._shortSyntax(changedFields) as Partial} + // })); } // NOTE: side effects are not executed!!!