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