Skip to content

Commit adda4d5

Browse files
committed
feat: switch to data by_college
1 parent 3457610 commit adda4d5

File tree

8 files changed

+98
-104
lines changed

8 files changed

+98
-104
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,5 @@ sw.*
8888

8989
# Vim swap files
9090
*.swp
91+
/static/by_college/
92+
/static/by_plan/

components/ClassesFilters.vue

Lines changed: 14 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -8,36 +8,23 @@
88
<v-row align="center">
99
<v-col class="d-flex" cols="12" sm="4">
1010
<v-select
11-
v-model="selectedDepartment"
12-
:items="Object.keys(departments)"
13-
label="Department"
14-
@input="$emit('department:change', $event)"
11+
v-model="selectedGender"
12+
:items="genders"
13+
label="Gender"
14+
@input="$emit('gender:change', $event)"
1515
></v-select>
1616
</v-col>
1717

1818
<v-col class="d-flex" cols="12" sm="4">
1919
<v-select
20-
v-model="selectedMajor"
21-
:items="departments[selectedDepartment]"
20+
v-model="selectedCollege"
21+
:items="colleges"
2222
item-text="name"
2323
item-value="abbrv"
24-
label="Major"
24+
label="College"
2525
return-object
26-
:disabled="!selectedDepartment"
27-
@input="$emit('major:change', $event)"
28-
></v-select>
29-
</v-col>
30-
<v-col class="d-flex" cols="12" sm="4">
31-
<v-select
32-
:items="semsters"
33-
v-model="selectedSemsters"
34-
label="Semsters"
35-
:clearable="true"
36-
:deletable-chips="false"
37-
:disabled="!selectedMajor"
38-
@input="$emit('semsters:change', $event)"
39-
chips
40-
multiple
26+
:disabled="!selectedGender"
27+
@input="$emit('college:change', $event)"
4128
></v-select>
4229
</v-col>
4330
</v-row>
@@ -50,28 +37,18 @@
5037
<script>
5138
export default {
5239
props: {
53-
departments: { type: Object },
40+
colleges : { type: Array, default: () => [] },
5441
loading: { type: Boolean, default: false },
55-
selectedSemstersProp: { type: Array },
42+
genders: {type: Array, default: () => []},
5643
},
5744
emits: ['major:change', 'semsters:change', 'department:change'],
5845
data() {
5946
return {
60-
selectedDepartment: null,
61-
selectedMajor: null,
62-
selectedSemsters: this.selectedSemstersProp,
47+
selectedGender: null, /* "male" or "female" */
48+
selectedCollege: null,
6349
}
6450
},
65-
computed: {
66-
semsters() {
67-
if (this.selectedMajor) {
68-
let sems = this.selectedMajor.sems
69-
return sems
70-
} else {
71-
return []
72-
}
73-
},
74-
},
51+
computed: {},
7552
methods: {},
7653
}
7754
</script>

components/ClassesList.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,9 @@
1515
<v-data-table
1616
:headers="headers"
1717
:items="classes"
18+
:items-per-page="999"
1819
item-key="crn"
19-
sort-by="semster_index"
20+
sort-by="crn"
2021
:dense="false"
2122
:loading="loading"
2223
group-by="name"
@@ -91,7 +92,7 @@ export default {
9192
{ text: 'Days', value: 'days', align: 'right', groupable: false },
9293
{ text: 'time', value: 'time', align: 'right', groupable: false },
9394
{ text: 'Instructor', value: 'instructor', align: 'right' },
94-
{ text: 'Semster', value: 'semster_index', align: 'right' },
95+
// { text: 'Semster', value: 'semster_index', align: 'right' },
9596
{ text: 'button', value: 'button', align: 'right', groupable: false },
9697
],
9798
}

components/ClassesSelectedStats.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
<v-row justify="center" align="center">
33
<v-col cols="12" sm="12" md="12" lg="8">
44
<v-card>
5-
<v-card-title> Total Credits: {{ totalCredits }}</v-card-title>
5+
<!-- <v-card-title> Total Credits: {{ totalCredits }}</v-card-title> -->
6+
<v-card-title>Selected Classes:</v-card-title>
67
<div class="text-center">
78
<v-chip
89
class="ma-2"

nuxt.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import colors from 'vuetify/es5/util/colors'
33
export default {
44
env: {
55
// changing this will clear localstorage by a plugin
6-
APP_VERSION: 'v0.0.2-beta',
6+
APP_VERSION: 'v0.0.3-beta',
77
},
88
telemetry: false,
99
// Disable server-side rendering: https://go.nuxtjs.dev/ssr-mode

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
"vue-save-state": "^1.2.0",
2424
"vue-server-renderer": "^2.6.14",
2525
"vue-template-compiler": "^2.6.14",
26+
"vue-virtual-scroller": "^2.0.0-beta.1",
2627
"vuetify": "^2.6.1",
2728
"webpack": "^4.46.0"
2829
},

pages/index.vue

Lines changed: 51 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,24 @@
11
<template>
22
<div>
3-
<!-- <pre> -->
4-
<!-- {{ selectedClasses.map((c) => ({ name: c.name, crn: c.crn })) }} -->
5-
<!-- {{ selectedClasses }} -->
6-
<!-- </pre> -->
73

84
<ClassesCalendar @class:delete="deleteClass" :classes="selectedClasses" />
95
<ClassesSelectedStats
106
@class:delete="deleteClass"
117
:selectedClasses="selectedClasses"
128
/>
139
<ClassesFilters
14-
@major:change="majorChange($event)"
15-
@department:change="departmentChange($event)"
16-
@semsters:change="selectedSemsters = $event"
17-
:selectedSemstersProp="selectedSemsters"
18-
:departments="departments"
19-
/>
20-
<ClassesList
21-
:loading="loadingClasses"
22-
:classes="filteredClasses"
23-
@class:action="classButtonAction($event)"
10+
@college:change="collegeChange($event)"
11+
@gender:change="genderChange($event)"
12+
:colleges="colleges"
13+
:genders="genders"
2414
/>
15+
<Lazy>
16+
<ClassesList
17+
:loading="loadingClasses"
18+
:classes="filteredClasses"
19+
@class:action="classButtonAction($event)"
20+
/>
21+
</Lazy>
2522
<snackBar :text="snackbarText" :active="snackbarActive" />
2623
</div>
2724
</template>
@@ -35,43 +32,30 @@ export default {
3532
mixins: [saveState],
3633
data() {
3734
return {
38-
departments: {
39-
// THIS SHOULD BE FROM API!!
40-
Engineering: [
41-
{
42-
name: 'Electrical Engineering',
43-
abbrv: 'EE',
44-
sems: [...Array(12).keys()].map((a) => a + 1),
45-
},
46-
// {
47-
// name: 'Mechanical Engineering',
48-
// abbrv: 'ME',
49-
// sems: [...Array(9).keys()].map((a) => a + 1),
50-
// },
51-
// {
52-
// name: 'Chemical Engineering',
53-
// abbrv: 'ChE',
54-
// sems: [...Array(9).keys()].map((a) => a + 1),
55-
// },
56-
// {
57-
// name: 'Civil Engineering',
58-
// abbrv: 'CE',
59-
// sems: [...Array(9).keys()].map((a) => a + 1),
60-
// },
61-
],
62-
/* 'Computer Science': [
63-
* {
64-
* name: 'Networking',
65-
* abbrv: 'Net',
66-
* // TODO: autogenerate key range! (by scrapper)
67-
* sems: [...Array(9).keys()].map((a) => a + 1),
68-
* },
69-
* ], */
70-
},
35+
colleges:
36+
[
37+
"الطب البيطيري",
38+
"العلوم",
39+
"علوم الحاسب وتقنية المعلومات",
40+
"الصيدلة الاكلينيكية",
41+
"الدراسات التطبيقية وخدمة المجمتع",
42+
"الطب",
43+
"إدارة الأعمال",
44+
"الهندسة",
45+
"العلوم الطبية التطبيقية",
46+
"العلوم الزراعية والاغذية",
47+
"الحقوق",
48+
"الاسنان",
49+
"مركز اللغة الانجيليزية",
50+
// "الدراسات التطبيقية وخدمة المجمتع فرع بقيق"
51+
"الآداب",
52+
"التربية",
53+
],
54+
55+
genders: ["Male", "Female", "Engineer"],
7156
rawClasses: [],
72-
selectedDepartment: null,
73-
selectedMajor: null,
74-
selectedSemsters: [1],
57+
selectedGender: null,
58+
selectedCollege: null,
7559
selectedClasses: [],
7660
loadingClasses: false,
7761
snackbarText: '',
@@ -80,11 +64,8 @@ export default {
8064
},
8165
computed: {
8266
filteredClasses() {
83-
// selected semster (from <ClassesFilters/>
84-
let filtered = this.rawClasses.filter((c) =>
85-
this.selectedSemsters.includes(c.semster_index)
86-
)
87-
filtered = filtered.map((clas) =>
67+
// it no longer filters, this naming is due to historic reasons
68+
let filtered = this.rawClasses.map((clas) =>
8869
findConflicts(clas, this.selectedClasses)
8970
)
9071
filtered = filtered.map(buttonOptions)
@@ -96,6 +77,7 @@ export default {
9677
getSaveStateConfig() {
9778
return {
9879
cacheKey: 'index',
80+
saveProperties: ['selectedClasses'],
9981
}
10082
},
10183
@@ -104,24 +86,30 @@ export default {
10486
(c) => c.code != e.code
10587
)
10688
},
107-
majorChange(e) {
108-
this.selectedMajor = e.abbrv
109-
this.getCP()
89+
genderChange(e) {
90+
this.selectedGender = e.toLowerCase()
91+
// don't download if college isn't yet selected
92+
if (this.selectedCollege){
93+
this.getClasses()
94+
}
11095
},
111-
departmentChange(e) {
112-
this.selectedDepartment = e
96+
collegeChange(e) {
97+
this.selectedCollege = e
98+
// college can only be selected after gender, no need to check for selectedGender
99+
this.getClasses()
113100
},
114101
// gets Classs for Plan/Major
115-
async getCP() {
116-
let url = `/CP/${this.selectedDepartment}/${this.selectedMajor}.json`
102+
async getClasses() {
103+
let url = `/by_college/${this.selectedGender}/${this.selectedCollege}.json`
104+
console.log(url)
117105
this.loadingClasses = true
118106
try {
119107
const response = await this.$axios.get(url)
120108
this.rawClasses = response.data
121109
this.loadingClasses = false
122110
} catch (error) {
123111
this.snackbarActive = !this.snackbarActive
124-
this.snackbarText = `${this.selectedDepartment}, ${this.selectedMajor} Not yet supported!`
112+
this.snackbarText = `${this.selectedGender}, ${this.selectedCollege}: Error fetching!`
125113
this.loadingClasses = false
126114
this.rawClasses = []
127115
console.log(error) //TODO: handle error

yarn.lock

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7348,6 +7348,11 @@ mississippi@^3.0.0:
73487348
stream-each "^1.1.0"
73497349
through2 "^2.0.0"
73507350

7351+
mitt@^2.1.0:
7352+
version "2.1.0"
7353+
resolved "https://registry.yarnpkg.com/mitt/-/mitt-2.1.0.tgz#f740577c23176c6205b121b2973514eade1b2230"
7354+
integrity sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==
7355+
73517356
mixin-deep@^1.2.0:
73527357
version "1.3.2"
73537358
resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566"
@@ -10673,6 +10678,16 @@ vue-no-ssr@^1.1.1:
1067310678
resolved "https://registry.yarnpkg.com/vue-no-ssr/-/vue-no-ssr-1.1.1.tgz#875f3be6fb0ae41568a837f3ac1a80eaa137b998"
1067410679
integrity sha512-ZMjqRpWabMPqPc7gIrG0Nw6vRf1+itwf0Itft7LbMXs2g3Zs/NFmevjZGN1x7K3Q95GmIjWbQZTVerxiBxI+0g==
1067510680

10681+
vue-observe-visibility@^2.0.0-alpha.1:
10682+
version "2.0.0-alpha.1"
10683+
resolved "https://registry.yarnpkg.com/vue-observe-visibility/-/vue-observe-visibility-2.0.0-alpha.1.tgz#1e4eda7b12562161d58984b7e0dea676d83bdb13"
10684+
integrity sha512-flFbp/gs9pZniXR6fans8smv1kDScJ8RS7rEpMjhVabiKeq7Qz3D9+eGsypncjfIyyU84saU88XZ0zjbD6Gq/g==
10685+
10686+
vue-resize@^2.0.0-alpha.1:
10687+
version "2.0.0-alpha.1"
10688+
resolved "https://registry.yarnpkg.com/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz#43eeb79e74febe932b9b20c5c57e0ebc14e2df3a"
10689+
integrity sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==
10690+
1067610691
vue-router@^3.5.1:
1067710692
version "3.5.3"
1067810693
resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.5.3.tgz#041048053e336829d05dafacf6a8fb669a2e7999"
@@ -10720,6 +10735,15 @@ vue-template-es2015-compiler@^1.6.0, vue-template-es2015-compiler@^1.9.0:
1072010735
resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
1072110736
integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
1072210737

10738+
vue-virtual-scroller@^2.0.0-beta.1:
10739+
version "2.0.0-beta.1"
10740+
resolved "https://registry.yarnpkg.com/vue-virtual-scroller/-/vue-virtual-scroller-2.0.0-beta.1.tgz#16f371d6ec8ddd588fade4a88d6ca36b88bd69d2"
10741+
integrity sha512-IbruFlvaSPeu47U+duqIcg4Gac2qvYd56w6N/o1OTg42df1a+zO8fngfYPy+yiLt9LM92u94Wm+ZRO3T6VSGfg==
10742+
dependencies:
10743+
mitt "^2.1.0"
10744+
vue-observe-visibility "^2.0.0-alpha.1"
10745+
vue-resize "^2.0.0-alpha.1"
10746+
1072310747
vue@^2.6.12, vue@^2.6.14:
1072410748
version "2.6.14"
1072510749
resolved "https://registry.yarnpkg.com/vue/-/vue-2.6.14.tgz#e51aa5250250d569a3fbad3a8a5a687d6036e235"

0 commit comments

Comments
 (0)