Skip to content

Commit 0f9e385

Browse files
committed
feat: added buttons
1 parent 60a4073 commit 0f9e385

4 files changed

Lines changed: 75 additions & 24 deletions

File tree

components/ClassesList.vue

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,22 +31,28 @@
3131
</template>
3232

3333
<template v-slot:item.button="{ item }">
34-
<v-tooltip top :color="item.buttonOptions.color">
34+
<v-tooltip right :color="item.buttonOptions.color">
3535
<template v-slot:activator="{ on, attrs }">
36-
<v-btn
37-
elevation="2"
38-
:color="item.buttonOptions.color"
39-
:disabled="item.buttonOptions.disabled"
40-
v-bind="attrs"
41-
v-on="on"
42-
fab
43-
small
44-
@click="$emit('class:action', item)"
45-
>
46-
<v-icon> mdi-plus </v-icon>
47-
</v-btn>
36+
<div v-bind="attrs" v-on="on">
37+
<v-btn
38+
elevation="2"
39+
:color="item.buttonOptions.color"
40+
:disabled="item.buttonOptions.disabled"
41+
fab
42+
small
43+
@click="$emit('class:action', item)"
44+
>
45+
<v-icon> {{ item.buttonOptions.icon }} </v-icon>
46+
</v-btn>
47+
</div>
4848
</template>
49-
<div v-for="tooltip in item.buttonOptions.tooltips">
49+
<div v-if="item.buttonOptions.tooltips == 0">
50+
{{ 'Add' }}
51+
</div>
52+
<div
53+
v-for="tooltip in item.buttonOptions.tooltips"
54+
align="center"
55+
>
5056
{{ tooltip }}
5157
</div>
5258
</v-tooltip>

components/snackBar.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export default {
2424
},
2525
watch: {
2626
active(val, oldVal) {
27-
this.snackbar = val
27+
this.snackbar = true
2828
},
2929
},
3030
}

logic/classes.ts

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,40 @@
11
// too lazy to add types ;)
22
export function buttonOptions(todo: any) {
3+
let tooltips = todo.conflicts.time
4+
let color = 'success'
5+
let icon = 'mdi-plus'
6+
7+
let sameCourse = todo.conflicts.sameCourse
8+
// course already added
9+
if (sameCourse) {
10+
// same class
11+
if (sameCourse.crn == todo.crn) {
12+
icon = 'mdi-minus'
13+
tooltips = ['Remove']
14+
color = 'red'
15+
} else {
16+
color = 'grey'
17+
console.log(sameCourse)
18+
tooltips = ['Course added in Section: ' + sameCourse.section, 'Replace?']
19+
}
20+
}
21+
322
let buttonOptions = {
4-
disabled: false,
5-
color: 'success',
6-
tooltips: ['Hello!', 'Error 2'],
23+
icon,
24+
disabled: todo.conflicts._any,
25+
color,
26+
tooltips,
727
}
828
return { ...todo, buttonOptions }
929
}
10-
export function findConflicts(todo: any) {
11-
return todo
30+
export function findConflicts(checkClass: any, selectedClasses: any) {
31+
// same course
32+
let time: String[] = []
33+
let sameCourse: any = selectedClasses.filter(
34+
(c: any) => c.code == checkClass.code
35+
)[0]
36+
let _any = time.length > 0
37+
let conflicts = { _any, time, sameCourse }
38+
39+
return { ...checkClass, conflicts }
1240
}

pages/index.vue

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<template>
22
<div>
3+
{{ selectedClasses }}
34
<!-- <ClassesCalendar /> -->
45
<!-- <ClassesSelectedStats /> -->
56
<ClassesFilters
@@ -9,7 +10,11 @@
910
:selectedSemstersProp="selectedSemsters"
1011
:departments="departments"
1112
/>
12-
<ClassesList :loading="loadingClasses" :classes="filteredClasses" />
13+
<ClassesList
14+
:loading="loadingClasses"
15+
:classes="filteredClasses"
16+
@class:action="classButtonAction($event)"
17+
/>
1318
<snackBar :text="snackbarText" :active="snackbarActive" />
1419
</div>
1520
</template>
@@ -52,6 +57,7 @@ export default {
5257
selectedDepartment: null,
5358
selectedMajor: null,
5459
selectedSemsters: [0],
60+
selectedClasses: [],
5561
loadingClasses: false,
5662
snackbarText: '',
5763
snackbarActive: false,
@@ -63,7 +69,9 @@ export default {
6369
let filtered = this.rawClasses.filter((c) =>
6470
this.selectedSemsters.includes(c.semster_index)
6571
)
66-
filtered = filtered.map(findConflicts)
72+
filtered = filtered.map((clas) =>
73+
findConflicts(clas, this.selectedClasses)
74+
)
6775
filtered = filtered.map(buttonOptions)
6876
6977
return filtered
@@ -72,7 +80,6 @@ export default {
7280
methods: {
7381
majorChange(e) {
7482
this.selectedMajor = e.abbrv
75-
this.snackbarActive = false
7683
this.getCP()
7784
},
7885
departmentChange(e) {
@@ -87,13 +94,23 @@ export default {
8794
this.rawClasses = response.data
8895
this.loadingClasses = false
8996
} catch (error) {
90-
this.snackbarActive = true
97+
this.snackbarActive = !this.snackbarActive
9198
this.snackbarText = `${this.selectedDepartment}, ${this.selectedMajor} Not yet supported!`
9299
this.loadingClasses = false
93100
this.rawClasses = []
94101
console.log(error) //TODO: handle error
95102
}
96103
},
104+
// If the button was pressed
105+
classButtonAction(e) {
106+
console.log(e)
107+
if (this.selectedClasses.find((c) => c.crn == e.crn)) {
108+
this.snackbarActive = !this.snackbarActive
109+
this.snackbarText = `Already added ${e.name}`
110+
} else {
111+
this.selectedClasses.push(e)
112+
}
113+
},
97114
},
98115
}
99116
</script>

0 commit comments

Comments
 (0)