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);
}
}