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 { TaskStatus, TaskBit, TaskItem, DailySummary } from '@canvuus-internal/mvp0-task-data'; import { CommonEvents } from '@canvuus-internal/mvp0-task-view'; import { CommonColorTagComponent } from '@canvuus-internal/mvp0-task-view'; import { Mvp0TaskEntryComponent } from '../mvp0-task-entry/mvp0-task-entry'; import { TaskEvents } from '../../common/events/task-events'; // import { EventTopics } from '../../common/events/event-topics'; @Component({ selector: 'mvp0-daily-calendar', // templateUrl: 'mvp0-daily-calendar.html', template: ` Date Open Items Done Items ` }) export class Mvp0DailyCalendarComponent implements OnInit, OnDestroy { // If true, the color tag will use grayscale for resolved items. @Input("color-changeable") isColorChangeEnabled: boolean; private _taskEntryViewEventHandler: (itemId: string) => void; // TBD. data: DailySummary; // // testing // taskItemId: string; constructor(private alertCtrl: AlertController, private toastCtrl: ToastController, private events: Events) { // console.log('Hello Mvp0DailyCalendar Component'); // False by default. this.isColorChangeEnabled = false; this._taskEntryViewEventHandler = (itemId: string) => { this.displayViewTaskPage(itemId); } // // testing... // this.taskItemId = "abc"; // temporary this.data = new DailySummary(DateIdUtil.getTodayId()); // this.data.userId = userId... ??? // .... } ngOnInit() { // console.log('::: ngOnInit()'); this.events.subscribe(TaskEvents.MVP0_UI_TASK_ENTRY_VIEW, this._taskEntryViewEventHandler); } ngOnDestroy() { // console.log('::: ngOnDestroy()'); this.events.unsubscribe(TaskEvents.MVP0_UI_TASK_ENTRY_VIEW, this._taskEntryViewEventHandler); } isGray(item: TaskItem): boolean { return this.isColorChangeEnabled && ((item) ? item.isResolved : false); } get targetDate(): string { return (this.data.targetDate) ? DateIdUtil.getLocaleDateString(this.data.targetDate) : ''; // ??? } get isoDate(): string { return (this.data && this.data.targetDate) ? DateIdUtil.getISODateString(this.data.targetDate) : ''; // ??? } set isoDate(str: string) { if (this.data) { this.data.targetDate = DateIdUtil.fromISODateString(str); } } // tbd refreshData(_data: (DailySummary | null) = null): void { console.log('Mvp0DailyCalendarComponent: >>> refreshData() _data = ' + _data); if (_data) { this.data = _data.clone(); // ?? } else { // This shouldn't happen. this.data = new DailySummary(DateIdUtil.getTodayId()); } // console.log('>>> refreshData() this.data = ' + this.data); } displayViewTaskPage(itemId: string) { let item = this.data.getItem(itemId); if (item) { this.events.publish(TaskEvents.MVP0_UI_TASK_DETAIL, item); } else { // what to do? console.log("Mvp0DailyCalendarComponent: TaskItem not found for itemId = " + itemId); } } // TBD: // This does not really make sense. // The arg this.data will have an inconsistent data: // It'll have a new/updated targetDate and the old task items.... // --> Just pass the updated targetDate ???? onSummaryDateChange(event) { console.log('Mvp0DailyCalendarComponent: onSummaryDateChange(): event = ' + event); // this.data should be automatically updated with the new targetDate. this.events.publish(CommonEvents.MVP0_DATA_DAILYSUMMARY_UPDATE, this.data); } }