Advertisement
Guest User

Untitled

a guest
Sep 20th, 2019
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <template>
  2.   <div class="container">
  3.     <div id="projects" ref="projects" class="card">
  4.       <div class="card-header">
  5.         Projects
  6.         <div v-show="loading" class="spinner-grow spinner-grow-sm text-dark" role="status">
  7.           <span class="sr-only">Loading...</span>
  8.         </div>
  9.         <button
  10.           type="button"
  11.           class="btn btn-success btn-sm float-right"
  12.           data-toggle="modal"
  13.           data-target="#addProjectModal"
  14.         >
  15.           <i class="fa fa-plus"></i>
  16.         </button>
  17.       </div>
  18.       <div v-show="!loading" class="card-body">
  19.         <div v-if="projects.length" class="list-group accordion" id="projects-list-accordion">
  20.           <div class="list-group-item" v-for="project in projects" v-bind:key="project.id">
  21.             <div class="row">
  22.               <div class="col-sm-12">
  23.                 <span v-text="project.name"></span>
  24.                 <span class="btn-group float-right">
  25.                   <button
  26.                     type="button"
  27.                     class="btn btn-success btn-sm"
  28.                     data-toggle="modal"
  29.                     data-target="#addTaskModal"
  30.                     v-bind:data-project_id="project.id"
  31.                   >
  32.                     <i class="fa fa-plus"></i>
  33.                   </button>
  34.                   <button
  35.                     class="btn btn-outline-info btn-sm"
  36.                     data-toggle="collapse"
  37.                     data-parent="#projects-list-accordion"
  38.                     v-bind:data-target="'#task' + project.id"
  39.                   >
  40.                     <i class="fa fa-angle-down"></i>
  41.                   </button>
  42.                 </span>
  43.               </div>
  44.             </div>
  45.             <div class="collapse mt-1" v-bind:id="'task' + project.id">
  46.               <div class="list-group list-group-flush">
  47.                 <div class="list-group-item">test</div>
  48.                 <div class="list-group-item">test</div>
  49.                 <div class="list-group-item">test</div>
  50.               </div>
  51.             </div>
  52.           </div>
  53.         </div>
  54.         <div class="alert alert-info" v-if="!projects.length&&!loading">No projects</div>
  55.         <simple-pagination class="mt-1" v-bind:pagination="pagination" v-on:paginate="changePage" />
  56.       </div>
  57.       <div v-show="0" class="card-footer"></div>
  58.     </div>
  59.     <add-project-modal v-on:added="onNewProject" />
  60.     <add-task-modal v-on:added="onNewTask" />
  61.   </div>
  62. </template>
  63.  
  64. <script>
  65. import AddProjectModal from "./modals/AddProjectModal.vue";
  66. import AddTaskModal from "./modals/AddTaskModal.vue";
  67. import SimplePagination from "./SimplePagination.vue";
  68. import { mapState, mapActions } from "vuex";
  69.  
  70. export default {
  71.   components: {
  72.     "add-project-modal": AddProjectModal,
  73.     "add-task-modal": AddTaskModal,
  74.     "simple-pagination": SimplePagination
  75.   },
  76.   data: function() {
  77.     return {
  78.       loading: false
  79.     };
  80.   },
  81.   computed: {
  82.     ...mapState({
  83.       projects: state => state.project.projects,
  84.       pagination: state => state.project.pagination
  85.     })
  86.   },
  87.   methods: {
  88.     changePage(data) {
  89.       this.loadProjects({
  90.         page: data.page
  91.       });
  92.     },
  93.     loadProjects(params) {
  94.       if (!params) {
  95.         params = {};
  96.       }
  97.  
  98.       this.loading = true;
  99.  
  100.       this.$store.dispatch("project/fetchProjects", params).then(() => {
  101.         this.loading = false;
  102.       });
  103.     },
  104.     loadTasks(params) {
  105.       if (!params) {
  106.         params = {};
  107.       }
  108.  
  109.       this.loading = true;
  110.  
  111.       this.$store.dispatch("task/fetchTasks", params).then(() => {
  112.         this.loading = false;
  113.       });
  114.     },
  115.     onNewProject() {
  116.       this.loadProjects();
  117.     },
  118.     onNewTask() {
  119.       this.loadTasks();
  120.     }
  121.   },
  122.   created() {
  123.     this.loadProjects();
  124.   }
  125. };
  126. </script>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement