class ProjectsViewController extends OnTimeViewController {
constructor(element) {
super(element);
this.projectCells = { };
OnTime.projectManager.addEventListener("projectadded", this.onProjectAdded.bind(this));
OnTime.projectManager.addEventListener("projectchanged", this.onProjectChanged.bind(this));
OnTime.projectManager.addEventListener("projectremoved", this.onProjectRemoved.bind(this));
this.deleteProjectDialog = new Dialog("Are you sure you want to delete this project?
Already recorded time periods will not be deleted, but they will no longer be associated with this project.", this.onDeleteDialogReturned.bind(this), Dialog.BUTTONS_DESTRUCTIVE);
}
viewDidLoad() {
this.projectsTableController.addEventListener("cellselected", this.onCellSelected.bind(this));
this.newProjectCell = new TableViewCell();
this.newProjectCell.titleLabel.innerText = "New Project";
//Give the report view a reference to the view controller.
this.reportsViewController.projectsViewController = this;
}
onProjectAdded(event) {
var projectCell = new TableViewCell();
projectCell.titleLabel.innerText = event.project.name;
projectCell.subtitleLabel.innerText = event.project.description;
projectCell.project = event.project;
this.projectsTableController.addCell(projectCell, event.project.completed);
this.projectCells[event.project.project_key] = projectCell;
if (this.waitingForProjectCreation) {
this.waitingForProjectCreation = false;
this.projectsTableController.selectCell(projectCell);
}
}
onProjectChanged(event) {
if (!(event.project.project_key in this.projectCells)) {
return;
}
var projectCell = this.projectCells[event.project.project_key];
projectCell.titleLabel.innerText = event.project.name;
projectCell.subtitleLabel.innerText = event.project.description;
projectCell.project = event.project;
//Move the cell to the appropriate section.
this.projectsTableController.addCell(projectCell, event.project.completed);
}
onProjectRemoved(event) {
if (!(event.project.project_key in this.projectCells)) {
return;
}
var projectCell = this.projectCells[event.project.project_key];
this.projectsTableController.removeCell(projectCell);
delete this.projectCells[event.project.project_key];
}
onCellSelected(event) {
if (!event.cell) {
this.projectSettingsSheet.style.display = "none";
this.selectedProject = null;
}
else {
//Hide the new project cell if another cell was selected.
if (this.isNewProject && event.cell != this.newProjectCell) {
this.onDeleteButtonPressed(event);
}
this.setProjectData(event.cell.project);
this.projectSettingsSheet.style.display = "";
}
}
onFieldChanged(event) {
if (this.projectNameField.value && this.projectNameField.value.length > 0) {
var project = {
name: this.projectNameField.value,
description: this.projectDescriptionField.value,
completed: this.projectCompleteCheckbox.checked ? 1 : 0
};
if (this.isNewProject) {
if (!this.waitingForProjectCreation) {
OnTime.projectManager.createProject(project);
this.waitingForProjectCreation = true;
}
}
else {
project.project_key = this.selectedProject.project_key;
OnTime.projectManager.updateProject(project);
}
}
}
setProjectData(project) {
this.selectedProject = project;
this.projectNameField.value = project.name;
this.projectDescriptionField.value = project.description;
this.projectCompleteCheckbox.checked = project.completed;
//Load the report automatically if the user has the permission to do so.
if (!this.isNewProject && OnTime.userManager.isResourceAvailable("report_project", "r")) {
this.reportsViewController.loadButton.click();
}
}
onDeleteButtonPressed(event) {
if (this.isNewProject) {
this.isNewProject = false;
this.projectSettingsSheet.classList.remove("new-project");
this.projectsTableController.removeCell(this.newProjectCell);
}
else {
this.deleteProjectDialog.show();
}
}
onDeleteDialogReturned(buttonId) {
if (buttonId == "delete") {
OnTime.projectManager.deleteProject(this.selectedProject);
}
}
onCreateButtonPressed(event) {
this.isNewProject = true;
this.projectSettingsSheet.classList.add("new-project");
this.newProjectCell.project = {
name: "",
description: "",
completed: false
};
this.projectsTableController.addCell(this.newProjectCell);
this.projectsTableController.selectCell(this.newProjectCell);
this.projectNameField.focus();
}
}
UIKit.registerViewControllerType(ProjectsViewController);