Refactor and extend : rename project story
story: rename project
part of the refactor and extend stories
as a user I wish to rename a project
I will allow the project to be renamed by adding a edit icon to the right of the projects list similar to the todo tasks.
learnings featured:
Steps
- add edit project template
- modify the todo list template to show the edit button
- load the new template
- open and close the modal
- save the updated project
add a template ‘edit-project.html’
this template is similar to the edit-tasks template
<div class="modal">
    <!-- Modal header bar -->
    <ion-header-bar class="bar-secondary">
      <h1 class="title">Edit Project</h1>
      <button class="button button-clear button-positive" ng-click="closeEditProject()">Cancel</button>
    </ion-header-bar>
    <!-- Modal content area -->
    <ion-content>
      <form ng-submit="updateProject(projectIndex, project)">
        <div class="list">
          <label class="item item-input">
            <input type="text" placeholder="What is the name of the project?" ng-model="project.title">
          </label>
        </div>
        <div class="padding">
          <button type="submit" class="button button-block button-positive">Update Project</button>
        </div>
      </form>
    </ion-content>
  </div>modify the list of projects
modify ‘todo-list.html’ with the following changes:
- modify the list of projects to render an edit icon to the right using the classes ‘item item-icon-right’
- move the ng-clickevent from the <ion-item> directive to a <span;> tag wrapping the project title
- add an <i> tag and an ng-clickto call theeditProjectmethod, passing in the$indexand the project variable available within theng-repeat
...
    <ion-item class="item item-icon-right" ng-repeat="project in projects"  ng-class="{active: activeProject == project}">
      <span ng-click="selectProject(project, $index)">{{project.title}}</span>
      <i class="icon ion-edit" ng-click="editProject($index, project)"></i>
    </ion-item>
...load the new template
in the ‘controllers.js’ load the template into a scope variable
add after the other modal templates are loaded
...
 // Edit and load the Modal for edit project
  $ionicModal.fromTemplateUrl('templates/edit-project.html', function(modal) {
    $scope.editProjectModal = modal;
  }, {
    scope: $scope,
    animation: 'slide-in-up'
  });
...open and close the modal
in the ‘controllers.js’ add methods editProject to open the modal and closeProject to close the modal
...
  // Open our new task modal
  $scope.editProject = function(i, project) {
    $scope.project = {title: $scope.projects[i].title, tasks: $scope.projects[i].tasks};
    $scope.projectIndex = i;
    $scope.editProjectModal.show();
  };
...
  // Close the edit task modal
  $scope.closeEditProject = function() {
    $scope.editProjectModal.hide();
  };
...save the updated project
in the ‘controllers.js’ add the method updateProject to save the updated project
...
  // Called when the form is submitted
  $scope.updateProject = function(i, project) {
    if (!$scope.projects || !project) {
      return;
    }
    $scope.projects[i] = project;
    $scope.editProjectModal.hide();
    // Inefficient, but save all the projects
    Projects.save($scope.projects);
  };
...the code for this can be found on my github page