Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Onboarding Required Fields Bug #487

Merged
merged 2 commits into from
May 2, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 49 additions & 28 deletions src/components/Modals/Onboarding/Onboarding.vue
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,12 @@
<div class="onboarding-error" :class="{ 'onboarding--hidden': !isError }">
Please fill out all required fields and try again.
</div>
<div
class="onboarding-error"
:class="{ 'onboarding--hidden': !isInvalidMajorOrMinorError }"
>
Invalid major or minor. Delete the placeholder major or minor and try again.
</div>
</div>
<div class="onboarding-bottom">
<div class="onboarding-bottom--section onboarding-bottom--section---center">
Expand Down Expand Up @@ -95,6 +101,7 @@ import OnboardingBasic from '@/components/Modals/Onboarding/OnboardingBasic.vue'
import OnboardingTransfer from '@/components/Modals/Onboarding/OnboardingTransfer.vue';
import OnboardingReview from '@/components/Modals/Onboarding/OnboardingReview.vue';
import { db, onboardingDataCollection, usernameCollection } from '@/firebaseConfig';
import { getMajorFullName, getMinorFullName } from '@/utilities';
import store from '@/store';

const placeholderText = 'Select one';
Expand All @@ -111,42 +118,53 @@ export default defineComponent({
data() {
return {
currentPage: 1,
isError: false,
name: { ...this.userName },
onboarding: { ...this.onboardingData },
};
},
methods: {
submitOnboarding() {
// Display error if a required field is empty, otherwise submit
if (
computed: {
// Display error if a required field is empty
isError(): boolean {
return (
this.name.firstName === '' ||
this.name.lastName === '' ||
this.onboarding.college === '' ||
this.onboarding.gradYear === '' ||
this.onboarding.entranceYear === ''
) {
this.isError = true;
} else {
db.batch()
.set(usernameCollection.doc(store.state.currentFirebaseUser.email), {
firstName: this.name.firstName,
middleName: this.name.middleName,
lastName: this.name.lastName,
})
.set(onboardingDataCollection.doc(store.state.currentFirebaseUser.email), {
gradYear: this.onboarding.gradYear,
entranceYear: this.onboarding.entranceYear,
colleges: [{ acronym: this.onboarding.college }],
majors: this.onboarding.major.map(acronym => ({ acronym })),
minors: this.onboarding.minor.map(acronym => ({ acronym })),
exam: this.onboarding.exam,
class: this.onboarding.transferCourse,
tookSwim: this.onboarding.tookSwim,
})
.commit();
this.$emit('onboard');
}
);
},
// Display error if onboarding data includes a major or minor that doesn't exist in requirementsJSON
isInvalidMajorOrMinorError(): boolean {
return (
this.onboarding.major
.map(getMajorFullName)
.some((majorFullName: string) => majorFullName === '') ||
this.onboarding.minor
.map(getMinorFullName)
.some((minorFullName: string) => minorFullName === '')
);
},
},
methods: {
submitOnboarding() {
db.batch()
.set(usernameCollection.doc(store.state.currentFirebaseUser.email), {
firstName: this.name.firstName,
middleName: this.name.middleName,
lastName: this.name.lastName,
})
.set(onboardingDataCollection.doc(store.state.currentFirebaseUser.email), {
gradYear: this.onboarding.gradYear,
entranceYear: this.onboarding.entranceYear,
colleges: [{ acronym: this.onboarding.college }],
majors: this.onboarding.major.map(acronym => ({ acronym })),
minors: this.onboarding.minor.map(acronym => ({ acronym })),
exam: this.onboarding.exam,
class: this.onboarding.transferCourse,
tookSwim: this.onboarding.tookSwim,
})
.commit();
this.$emit('onboard');
},
goBack() {
this.currentPage = this.currentPage - 1 === 0 ? 0 : this.currentPage - 1;
Expand All @@ -155,7 +173,10 @@ export default defineComponent({
this.currentPage = page;
},
goNext() {
this.currentPage = this.currentPage === FINAL_PAGE ? FINAL_PAGE : this.currentPage + 1;
// Only move onto next page if error message is not displayed
if (!(this.isError || this.isInvalidMajorOrMinorError)) {
this.currentPage = this.currentPage === FINAL_PAGE ? FINAL_PAGE : this.currentPage + 1;
}
},
updateBasic(
gradYear: string,
Expand Down
12 changes: 9 additions & 3 deletions src/utilities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,21 @@ export function getCurrentYearSuffix(): string {
}

export function getCollegeFullName(acronym: string): string {
return requirementJSON.college[acronym].name;
// Return empty string if college is not in requirementJSON
const college = requirementJSON.college[acronym];
return college ? college.name : '';
}

export function getMajorFullName(acronym: string): string {
return requirementJSON.major[acronym].name;
// Return empty string if major is not in requirementJSON
const major = requirementJSON.major[acronym];
return major ? major.name : '';
}

export function getMinorFullName(acronym: string): string {
return requirementJSON.minor[acronym].name;
// Return empty string if minor is not in requirementJSON
const minor = requirementJSON.minor[acronym];
return minor ? minor.name : '';
}

function getAllSubjects(): ReadonlySet<string> {
Expand Down