import { Component, ViewChild, Input, Output, EventEmitter } from '@angular/core'; import { OnInit, OnDestroy } from '@angular/core'; import { AlertController, ToastController, Events } from 'ionic-angular'; import { DateIdUtil } from '@canvuus-internal/mvp0-task-core'; import { TaskItem, TaskStatus, TaskBit, TaskBacklog } from '@canvuus-internal/mvp0-task-data'; import { CommonEvents } from '@canvuus-internal/mvp0-task-view'; import { CommonColorTagComponent } from '@canvuus-internal/mvp0-task-view'; import { TaskActions } from '../../common/core/task-actions'; import { TaskEvents } from '../../common/events/task-events'; import { Mvp0TaskEntryComponent } from '../mvp0-task-entry/mvp0-task-entry'; @Component({ selector: 'mvp0-task-backlog', // templateUrl: 'mvp0-task-backlog.html', template: ` Future Tasks Task Backlog ` }) export class Mvp0TaskBacklogComponent implements OnInit, OnDestroy { // If true, the color tag will use grayscale for resolved items. @Input("color-changeable") isColorChangeEnabled: boolean; private _taskEntryViewEventHandler: (itemId: string) => void; private _taskEntryDoItEventHandler: (itemId: string) => void; // text: string; data: TaskBacklog; constructor(private alertCtrl: AlertController, private toastCtrl: ToastController, private events: Events) { // console.log('Hello Mvp0TaskBacklog Component'); // False by default. this.isColorChangeEnabled = false; this._taskEntryViewEventHandler = (itemId: string) => { this.displayEditTaskPage(itemId); } this._taskEntryDoItEventHandler = (itemId: string) => { this.confirmForDoItToday(itemId); } // temporary this.data = new TaskBacklog(); // .... } ngOnInit() { // console.log('::: ngOnInit()'); this.events.subscribe(TaskEvents.MVP0_UI_TASK_ENTRY_VIEW, this._taskEntryViewEventHandler); this.events.subscribe(TaskEvents.MVP0_UI_TASK_ENTRY_DOIT, this._taskEntryDoItEventHandler); } ngOnDestroy() { // console.log('::: ngOnDestroy()'); this.events.unsubscribe(TaskEvents.MVP0_UI_TASK_ENTRY_VIEW, this._taskEntryViewEventHandler); this.events.unsubscribe(TaskEvents.MVP0_UI_TASK_ENTRY_DOIT, this._taskEntryDoItEventHandler); } isGray(item: TaskItem): boolean { return this.isColorChangeEnabled && ((item) ? item.isResolved : false); } // tbd refreshData(_data: (TaskBacklog | null) = null): void { console.log('Mvp0TaskBacklogComponent: >>> refreshData() _data = ' + _data); if (_data) { this.data = _data.clone(); // ?? } else { // This shouldn't happen. this.data = new TaskBacklog(); } // console.log('>>> refreshData() this.data = ' + this.data); } displayEditTaskPage(itemId: string) { // ???? let item = this.data.getItemFromLoaded(itemId); if (item) { // This seems to lose type information.... // heck // There seems to be a problem. Some weird empty tasks show up in the backlog list for some reason. // In such a case, just make it a brand new task..... if(item.status == TaskStatus.unknown) { item.setStatus(TaskStatus.ready); // ??? } // heck this.events.publish(TaskEvents.MVP0_UI_TASK_EDIT, item); // this.events.publish(TaskEvents.MVP0_UI_TASK_EDIT, item.getDocId()); } else { // what to do? console.log("Mvp0TaskBacklogComponent: TaskItem not found for itemId = " + itemId); } } displayNewTaskPage() { // console.log("displayNewTaskPage()"); // tbd: // item.targetDate should be set to null, by default, if the task is created from the backlog page... // (currently, item.targetDate is automatically set to today in the TaskItem.ctor.) // ..... this.events.publish(TaskEvents.MVP0_UI_TASK_NEW); } confirmForDoItToday(itemId: string) { // console.log("confirmForDoItToday()"); // tbd... let item = this.data.getItemFromLoaded(itemId); if (item) { // Show confirm dialog.... let alert = this.alertCtrl.create({ title: 'Do It Today', message: 'Do you want to do this task today?', buttons: [ { text: 'Cancel', role: 'cancel', handler: () => { // console.log('Cancel clicked'); } }, { text: 'Do it!', handler: () => { // console.log('DoIt clicked'); // ??? if(item) { item.setTargetDate(DateIdUtil.getTodayId()); item.setStatus(TaskStatus.ready); this.events.publish(CommonEvents.MVP0_DATA_TASKITEM_UPDATE, item, TaskActions.ACTION_UPDATED_FOR_TODAY); } } } ] }); alert.present(); } else { // what to do? console.log("Mvp0TaskBacklogComponent: TaskItem not found for itemId = " + itemId); } } }