From 666cbb5dc49ef148ca458d39f913bbb2ca79ef04 Mon Sep 17 00:00:00 2001 From: Johannes Millan Date: Mon, 15 Jul 2024 16:28:22 +0200 Subject: [PATCH] feat(weekPlanner): make super basic add task work for planner --- .../add-task-inline.component.html | 17 ++++++++++ .../add-task-inline.component.scss | 0 .../add-task-inline.component.spec.ts | 23 +++++++++++++ .../add-task-inline.component.ts | 18 ++++++++++ .../planner-plan-view.component.html | 7 +--- src/app/features/planner/planner.module.ts | 2 ++ .../add-task-bar/add-task-bar.component.ts | 33 ++++++++++++++++++- 7 files changed, 93 insertions(+), 7 deletions(-) create mode 100644 src/app/features/planner/add-task-inline/add-task-inline.component.html create mode 100644 src/app/features/planner/add-task-inline/add-task-inline.component.scss create mode 100644 src/app/features/planner/add-task-inline/add-task-inline.component.spec.ts create mode 100644 src/app/features/planner/add-task-inline/add-task-inline.component.ts diff --git a/src/app/features/planner/add-task-inline/add-task-inline.component.html b/src/app/features/planner/add-task-inline/add-task-inline.component.html new file mode 100644 index 0000000000..9c0a012297 --- /dev/null +++ b/src/app/features/planner/add-task-inline/add-task-inline.component.html @@ -0,0 +1,17 @@ +
+ +
+ + diff --git a/src/app/features/planner/add-task-inline/add-task-inline.component.scss b/src/app/features/planner/add-task-inline/add-task-inline.component.scss new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/app/features/planner/add-task-inline/add-task-inline.component.spec.ts b/src/app/features/planner/add-task-inline/add-task-inline.component.spec.ts new file mode 100644 index 0000000000..0af55b6dc7 --- /dev/null +++ b/src/app/features/planner/add-task-inline/add-task-inline.component.spec.ts @@ -0,0 +1,23 @@ +// import { ComponentFixture, TestBed } from '@angular/core/testing'; +// +// import { AddTaskInlineComponent } from './add-task-inline.component'; +// +// describe('AddTaskInlineComponent', () => { +// let component: AddTaskInlineComponent; +// let fixture: ComponentFixture; +// +// beforeEach(async () => { +// await TestBed.configureTestingModule({ +// imports: [AddTaskInlineComponent] +// }) +// .compileComponents(); +// +// fixture = TestBed.createComponent(AddTaskInlineComponent); +// component = fixture.componentInstance; +// fixture.detectChanges(); +// }); +// +// it('should create', () => { +// expect(component).toBeTruthy(); +// }); +// }); diff --git a/src/app/features/planner/add-task-inline/add-task-inline.component.ts b/src/app/features/planner/add-task-inline/add-task-inline.component.ts new file mode 100644 index 0000000000..904a438395 --- /dev/null +++ b/src/app/features/planner/add-task-inline/add-task-inline.component.ts @@ -0,0 +1,18 @@ +import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; +import { TasksModule } from '../../tasks/tasks.module'; +import { UiModule } from '../../../ui/ui.module'; +import { CommonModule } from '@angular/common'; + +@Component({ + selector: 'add-task-inline', + standalone: true, + imports: [TasksModule, UiModule, CommonModule], + templateUrl: './add-task-inline.component.html', + styleUrl: './add-task-inline.component.scss', + changeDetection: ChangeDetectionStrategy.OnPush, +}) +export class AddTaskInlineComponent { + @Input() planForDay?: string; + + isShowAddTask = false; +} diff --git a/src/app/features/planner/planner-plan-view/planner-plan-view.component.html b/src/app/features/planner/planner-plan-view/planner-plan-view.component.html index faf5232757..9f4bf3a7ac 100644 --- a/src/app/features/planner/planner-plan-view/planner-plan-view.component.html +++ b/src/app/features/planner/planner-plan-view/planner-plan-view.component.html @@ -48,12 +48,7 @@ } -
- -
+
diff --git a/src/app/features/planner/planner.module.ts b/src/app/features/planner/planner.module.ts index f870c9d8f3..c4b0d7a959 100644 --- a/src/app/features/planner/planner.module.ts +++ b/src/app/features/planner/planner.module.ts @@ -25,6 +25,7 @@ import { plannerFeature } from './store/planner.reducer'; import { PlannerEffects } from './store/planner.effects'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { DialogAddPlannedTasksComponent } from './dialog-add-planned-tasks/dialog-add-planned-tasks.component'; +import { AddTaskInlineComponent } from './add-task-inline/add-task-inline.component'; @NgModule({ declarations: [ @@ -53,6 +54,7 @@ import { DialogAddPlannedTasksComponent } from './dialog-add-planned-tasks/dialo TagModule, CdkDragPlaceholder, IssueModule, + AddTaskInlineComponent, ], }) export class PlannerModule {} diff --git a/src/app/features/tasks/add-task-bar/add-task-bar.component.ts b/src/app/features/tasks/add-task-bar/add-task-bar.component.ts index 748492fe35..0bd9dbfc08 100644 --- a/src/app/features/tasks/add-task-bar/add-task-bar.component.ts +++ b/src/app/features/tasks/add-task-bar/add-task-bar.component.ts @@ -44,6 +44,9 @@ import { blendInOutAnimation } from 'src/app/ui/animations/blend-in-out.ani'; import { fadeAnimation } from '../../../ui/animations/fade.ani'; import { SS } from '../../../core/persistence/storage-keys.const'; import { IS_ANDROID_WEB_VIEW } from '../../../util/is-android-web-view'; +import { Store } from '@ngrx/store'; +import { PlannerActions } from '../../planner/store/planner.actions'; +import { getWorklogStr } from '../../../util/get-work-log-str'; @Component({ selector: 'add-task-bar', @@ -59,6 +62,7 @@ export class AddTaskBarComponent implements AfterViewInit, OnDestroy { @Input() isDoubleEnterMode: boolean = false; @Input() isElevated: boolean = false; @Input() isDisableAutoFocus: boolean = false; + @Input() planForDay?: string; @Output() blurred: EventEmitter = new EventEmitter(); @Output() done: EventEmitter = new EventEmitter(); @@ -166,6 +170,7 @@ export class AddTaskBarComponent implements AfterViewInit, OnDestroy { private _projectService: ProjectService, private _tagService: TagService, private _cd: ChangeDetectorRef, + private _store: Store, ) { this._subs.add( this.activatedIssueTask$.subscribe((v) => (this.activatedIssueTask = v)), @@ -239,6 +244,7 @@ export class AddTaskBarComponent implements AfterViewInit, OnDestroy { onBlur(ev: FocusEvent): void { const relatedTarget: HTMLElement = ev.relatedTarget as HTMLElement; let isUIelement = false; + if (relatedTarget) { const { className } = relatedTarget; isUIelement = @@ -253,6 +259,7 @@ export class AddTaskBarComponent implements AfterViewInit, OnDestroy { (this.inputEl as ElementRef).nativeElement.value, ); } + if (relatedTarget && isUIelement) { (this.inputEl as ElementRef).nativeElement.focus(); } else { @@ -262,6 +269,8 @@ export class AddTaskBarComponent implements AfterViewInit, OnDestroy { this._blurTimeout = window.setTimeout(() => { this.blurred.emit(ev); }, 300); + } else { + this.blurred.emit(ev); } }, 20); } @@ -369,7 +378,29 @@ export class AddTaskBarComponent implements AfterViewInit, OnDestroy { this.taskSuggestionsCtrl.setValue(''); this._isAddInProgress = false; - this._focusInput(); + + if (this._lastAddedTaskId) { + this._planForDayAfterAddTaskIfConfigured(this._lastAddedTaskId); + } + + if (this.planForDay) { + this.blurred.emit(); + } else { + this._focusInput(); + } + } + + private _planForDayAfterAddTaskIfConfigured(taskId: string): void { + const planForDay = this.planForDay; + if (planForDay) { + this._taskService.getByIdOnce$(taskId).subscribe((task) => { + if (getWorklogStr() !== planForDay) { + this._store.dispatch( + PlannerActions.planTaskForDay({ task: task, day: planForDay }), + ); + } + }); + } } private async _getCtxForTaskSuggestion({