From 538f267ce89b3d5bfb58bbd7f0b142411f17c286 Mon Sep 17 00:00:00 2001 From: Luke E Glasscock Date: Fri, 12 Mar 2021 02:44:56 -0700 Subject: [PATCH 1/4] Fix dropdown bug --- src/views/super-admin/Training.vue | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/views/super-admin/Training.vue b/src/views/super-admin/Training.vue index 1176ca6..0d0bc11 100644 --- a/src/views/super-admin/Training.vue +++ b/src/views/super-admin/Training.vue @@ -88,6 +88,7 @@ @change="fetchDebounced()" v-model="filter.courseType" label="Filter by Course Type" + class="mt-3" > @@ -481,10 +482,6 @@ export default { }; diff --git a/src/views/Team.vue b/src/views/Team.vue index e600552..1223534 100644 --- a/src/views/Team.vue +++ b/src/views/Team.vue @@ -88,52 +88,81 @@ - - Add new member to {{ team.name }} + +
+ Platform One Smokey +
+

Add to Course

+ + + + + You have + {{ availableCourseSeats }} + available seat reservation{{ + availableCourseSeats === 1 ? "" : "s" + }} + - - + Cancel - Add Member + Add to Course
@@ -174,7 +203,7 @@ Remove Selected mdi-email Email Selected + + mdi-plus-circle + Add to Course + @@ -236,13 +274,15 @@ import Vue from "vue"; import TeamService from "@/api/services/team"; import UserSelect from "@/components/UserSelect"; +import CourseSelect from "@/components/CourseSelect"; import AddTeam from "@/components/AddTeam"; import { defaultSnackbarTimeout } from "@/config/config"; import inputRules from "@/utils/inputRules"; import Permission from "@/config/user-permissions"; +import TrainingService from "@/api/services/training"; export default { - components: { UserSelect, AddTeam }, + components: { UserSelect, CourseSelect, AddTeam }, data: () => ({ editValid: false, editValues: {}, @@ -258,6 +298,13 @@ export default { teamDetails: false, timeout: defaultSnackbarTimeout, }, + addToCourse: { + course: null, + className: "", + startDate: "", + selectedCourse: "", + }, + startDateList: [], state: { // edit team details flags showEditDialog: false, @@ -272,6 +319,7 @@ export default { isAdding: false, isAddingDuplicate: false, isAddingBusy: false, + isAddingCourse: false, }, headers: [ { text: "Name", value: "name", width: "200px", fixed: true }, @@ -282,12 +330,51 @@ export default { selectedMembers: [], deletingMembers: [], membersToAdd: null, + membersToAddToCourse: null, inputRules, }), async mounted() { this.init(); }, methods: { + clearAddUsersToCourse() { + this.state.isAddingCourse = false; + this.addToCourse.startDate = ""; + this.membersToAddToCourse = null; + }, + async addUsersToCourse() { + this.addBusy = true; + try { + const courseId = this.coursesByName.find( + ({ startDate }) => this.addToCourse.startDate === startDate + ).id; + //Need to add check to see if student already exists in courseList prior to submission + await TrainingService.addStudents(courseId, this.membersToAddToCourse); + } catch (error) { + // TODO: WHY AREN'T ERRORS DISPLAYED TO THE USER??? + console.error(error); + } + this.addBusy = false; + this.clearAddUsersToCourse(); + }, + async onCourseChange(course) { + try { + this.addToCourse.startDate = ""; + if (course && course.name) { + const response = await TrainingService.getCourses({ + q: course.name, + }); + this.coursesByName = response.courses; + this.startDateList = this.coursesByName + ? this.coursesByName.map(({ startDate }) => startDate) + : []; + } else { + this.startDateList = []; + } + } catch (error) { + console.error(error); + } + }, async init() { let isTeamLead = false; try { @@ -422,6 +509,13 @@ export default { }, }, computed: { + availableCourseSeats() { + return this.addToCourse?.course?.registeredCount !== undefined && + this.addToCourse?.course?.capacity !== undefined + ? this.addToCourse.course.capacity - + this.addToCourse.course.registeredCount + : null; + }, canEdit() { // TODO: pull this from user info return true; -- GitLab From f088317ce8c47e835fc20f996a131254d1d5a146 Mon Sep 17 00:00:00 2001 From: Luke E Glasscock Date: Tue, 16 Mar 2021 00:37:05 -0600 Subject: [PATCH 3/4] Add tests and finish course select --- src/components/CourseSelect.vue | 8 +- src/views/Team.vue | 43 +- tests/unit/components/CourseSelect.spec.js | 199 ++++++++ tests/unit/views/Team.spec.js | 502 ++++++++++++++++++++- 4 files changed, 706 insertions(+), 46 deletions(-) create mode 100644 tests/unit/components/CourseSelect.spec.js diff --git a/src/components/CourseSelect.vue b/src/components/CourseSelect.vue index c725c66..0db2adf 100644 --- a/src/components/CourseSelect.vue +++ b/src/components/CourseSelect.vue @@ -3,7 +3,7 @@ v-model="model" ref="courseAutocomplete" :loading="loading" - :items="items" + :items="Array.isArray(items) ? items : []" :search-input.sync="search" :rules="rules" :multiple="multiple" @@ -51,6 +51,7 @@ import TrainingService from "@/api/services/training"; import uniq from "lodash/uniq"; import { setInputElementFocus } from "@/utils/events"; +import { SET_ERROR_MESSAGE } from "@/store/mutation-types"; export default { props: { @@ -157,9 +158,8 @@ export default { } else { this.items = newItems.courses; } - } catch (e) { - // TODO: WHY AREN'T ERRORS DISPLAYED TO THE USER??? - console.error("unable to get courses", e); + } catch (error) { + this.$store.commit(SET_ERROR_MESSAGE, error); this.items = []; } finally { this.loading = false; diff --git a/src/views/Team.vue b/src/views/Team.vue index 1223534..1ccdd91 100644 --- a/src/views/Team.vue +++ b/src/views/Team.vue @@ -1,5 +1,6 @@