diff options
| author | Furkan Sahin <furkan-dev@proton.me> | 2021-04-13 09:50:37 -0500 |
|---|---|---|
| committer | Furkan Sahin <furkan-dev@proton.me> | 2021-04-13 09:50:37 -0500 |
| commit | b595ffa5efaa76d97fd6d6b79c24af46755cffd4 (patch) | |
| tree | bf6c6f87c940d89e9743cc20c5d5530ee25ec017 | |
| parent | 484c6067af99f5118c8f88280572e68dd2af590e (diff) | |
Move editor lists to component
| -rw-r--r-- | src/components/EditorLists.vue | 112 | ||||
| -rw-r--r-- | src/views/Editor.vue | 87 |
2 files changed, 115 insertions, 84 deletions
diff --git a/src/components/EditorLists.vue b/src/components/EditorLists.vue new file mode 100644 index 0000000..2d72b1e --- /dev/null +++ b/src/components/EditorLists.vue @@ -0,0 +1,112 @@ +<template> + <div id="editor"> + <div class="column"> + <list :items="peerTeachers" @selection-changed="handlePtClick" #default="pt"> + {{ pt.item.name }} <button @click.stop="deletePeerTeacher(pt.item.id)">X</button> + </list> + </div> + <div class="column"> + <list :items="compatibleLabs" #default="lab"> + {{ lab.item.fullInfo }} <button @click.stop="assignLab(lab.item.id)">+</button> + </list> + </div> + <div class="column"> + <list :items="selectedPeerTeacherAssignments" #default="lab"> + {{ lab.item.fullInfo }} <button @click.stop="unassignLab(lab.item.id)">X</button> + </list> + </div> + </div> +</template> + +<script lang="ts"> +import { defineComponent, PropType } from 'vue'; +import List from '@/components/List.vue'; +import PeerTeacher from '@/models/PeerTeacher'; +import Lab from '@/models/Lab'; + +export default defineComponent({ + name: 'EditorLists', + components: { + List, + }, + props: { + peerTeachers: { + type: Array as PropType<PeerTeacher[]>, + default: [], + }, + labs: { + type: Array as PropType<Lab[]>, + default: [], + }, + }, + computed: { + compatibleLabs(): Lab[] { + const temp = this.labs.filter((lab) => (!this.selectedPeerTeacher.assignedLabs.has(lab.id) + && !this.selectedPeerTeacher.conflictsWith(lab.event))); + + const currentAssignments = this.selectedPeerTeacherAssignments; + return temp.filter((lab) => !currentAssignments + .some((assignedLab) => lab.event.conflictsWith(assignedLab.event))); + }, + selectedPeerTeacherAssignments(): Lab[] { + return Array.from(this.selectedPeerTeacher.assignedLabs.values()) + .flatMap((id) => { + const lab = this.$store.state.labs.get(id); + return (lab === undefined) ? [] : [lab]; + }).sort((a, b) => { + if (a.course < b.course) { + return -1; + } + if (b.course < a.course) { + return 1; + } + + if (a.section < b.section) { + return -1; + } + if (b.section < a.section) { + return 1; + } + + return 0; + }); + }, + }, + data() { + return { + selectedPeerTeacher: new PeerTeacher(), + }; + }, + methods: { + handlePtClick(peerTeacher: PeerTeacher) { + this.selectedPeerTeacher = peerTeacher; + }, + deletePeerTeacher(id: number) { + if (this.selectedPeerTeacher.id === id) { + this.selectedPeerTeacher = new PeerTeacher(); + } + this.$store.commit('deletePeerTeacher', id); + }, + assignLab(id: string) { + if (this.selectedPeerTeacher.id !== 0) { + this.selectedPeerTeacher.assignedLabs.add(id); + } + }, + unassignLab(id: string) { + this.selectedPeerTeacher.assignedLabs.delete(id); + }, + }, +}); +</script> + +<style> +#editor { + display: flex; + max-height: inherit; +} + +.column { + flex: 1; + overflow: auto; +} +</style> diff --git a/src/views/Editor.vue b/src/views/Editor.vue index fd83fb7..b4a2e8e 100644 --- a/src/views/Editor.vue +++ b/src/views/Editor.vue @@ -1,30 +1,14 @@ <template> <div id="home"> <action-bar /> - <div id="editor"> - <div class="column"> - <list :items="peerTeachers" @selection-changed="handlePtClick" #default="pt"> - {{ pt.item.name }} <button @click.stop="deletePeerTeacher(pt.item.id)">X</button> - </list> - </div> - <div class="column"> - <list :items="compatibleLabs" #default="lab"> - {{ lab.item.fullInfo }} <button @click.stop="assignLab(lab.item.id)">+</button> - </list> - </div> - <div class="column"> - <list :items="selectedPeerTeacherAssignments" #default="lab"> - {{ lab.item.fullInfo }} <button @click.stop="unassignLab(lab.item.id)">X</button> - </list> - </div> - </div> + <editor-lists :peerTeachers="peerTeachers" :labs="labs" /> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; import ActionBar from '@/components/ActionBar.vue'; -import List from '@/components/List.vue'; +import EditorLists from '@/components/EditorLists.vue'; import PeerTeacher from '@/models/PeerTeacher'; import Lab from '@/models/Lab'; @@ -32,7 +16,7 @@ export default defineComponent({ name: 'Editor', components: { ActionBar, - List, + EditorLists, }, computed: { labs(): Lab[] { @@ -43,61 +27,6 @@ export default defineComponent({ return Array.from(this.$store.state.peerTeachers.values()).sort((a, b) => a.lastname .toUpperCase().localeCompare(b.lastname.toUpperCase())); }, - compatibleLabs(): Lab[] { - const temp = this.labs.filter((lab) => (!this.selectedPeerTeacher.assignedLabs.has(lab.id) - && !this.selectedPeerTeacher.conflictsWith(lab.event))); - - const currentAssignments = this.selectedPeerTeacherAssignments; - return temp.filter((lab) => !currentAssignments - .some((assignedLab) => lab.event.conflictsWith(assignedLab.event))); - }, - selectedPeerTeacherAssignments(): Lab[] { - return Array.from(this.selectedPeerTeacher.assignedLabs.values()) - .flatMap((id) => { - const lab = this.$store.state.labs.get(id); - return (lab === undefined) ? [] : [lab]; - }).sort((a, b) => { - if (a.course < b.course) { - return -1; - } - if (b.course < a.course) { - return 1; - } - - if (a.section < b.section) { - return -1; - } - if (b.section < a.section) { - return 1; - } - - return 0; - }); - }, - }, - data() { - return { - selectedPeerTeacher: new PeerTeacher(), - }; - }, - methods: { - handlePtClick(peerTeacher: PeerTeacher) { - this.selectedPeerTeacher = peerTeacher; - }, - deletePeerTeacher(id: number) { - if (this.selectedPeerTeacher.id === id) { - this.selectedPeerTeacher = new PeerTeacher(); - } - this.$store.commit('deletePeerTeacher', id); - }, - assignLab(id: string) { - if (this.selectedPeerTeacher.id !== 0) { - this.selectedPeerTeacher.assignedLabs.add(id); - } - }, - unassignLab(id: string) { - this.selectedPeerTeacher.assignedLabs.delete(id); - }, }, }); </script> @@ -106,14 +35,4 @@ export default defineComponent({ #home { max-height: inherit; } - -#editor { - display: flex; - max-height: inherit; -} - -.column { - flex: 1; - overflow: auto; -} </style> |
