Skip to content

Commit 84103c2

Browse files
committed
feat: add conflict logic
1 parent 0f9e385 commit 84103c2

3 files changed

Lines changed: 48 additions & 11 deletions

File tree

logic/classes.ts

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
// too lazy to add types ;)
22
export function buttonOptions(todo: any) {
3-
let tooltips = todo.conflicts.time
4-
let color = 'success'
3+
let tooltips: String[] = []
4+
let color = 'grey'
55
let icon = 'mdi-plus'
66

77
let sameCourse = todo.conflicts.sameCourse
88
// course already added
99
if (sameCourse) {
1010
// same class
1111
if (sameCourse.crn == todo.crn) {
12-
icon = 'mdi-minus'
12+
icon = 'mdi-check'
1313
tooltips = ['Remove']
14-
color = 'red'
14+
color = 'success'
15+
} else if (todo.conflicts._any) {
16+
icon = 'mdi-alert-circle'
17+
tooltips = todo.conflicts.time.map((c: any) => 'Conflict: ' + c.name)
18+
color = 'error'
1519
} else {
16-
color = 'grey'
17-
console.log(sameCourse)
20+
color = 'lime'
1821
tooltips = ['Course added in Section: ' + sameCourse.section, 'Replace?']
1922
}
2023
}
@@ -27,14 +30,33 @@ export function buttonOptions(todo: any) {
2730
}
2831
return { ...todo, buttonOptions }
2932
}
30-
export function findConflicts(checkClass: any, selectedClasses: any) {
33+
export function findConflicts(checkClass: any, selectedClasses: any[]) {
3134
// same course
32-
let time: String[] = []
3335
let sameCourse: any = selectedClasses.filter(
3436
(c: any) => c.code == checkClass.code
3537
)[0]
38+
39+
// get rid of memory leak!
40+
if (sameCourse) {
41+
sameCourse.conflicts = {}
42+
sameCourse.buttonOptions = {}
43+
}
44+
45+
// time conflicts
46+
let time: any[] = []
47+
time = selectedClasses.filter((sc) => {
48+
return (
49+
checkConflict(sc, checkClass) &&
50+
// can't conflict with itself or other same courses
51+
(sc.crn != checkClass.crn || sc.code != checkClass.code)
52+
)
53+
})
3654
let _any = time.length > 0
3755
let conflicts = { _any, time, sameCourse }
3856

3957
return { ...checkClass, conflicts }
4058
}
59+
60+
function checkConflict(c1: any, c2: any): boolean {
61+
return JSON.stringify(c1.days) == JSON.stringify(c2.days)
62+
}

nuxt.config.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export default {
3636
'@nuxt/typescript-build',
3737
// https://go.nuxtjs.dev/vuetify
3838
'@nuxtjs/vuetify',
39-
'nuxt-compress'
39+
'nuxt-compress',
4040
],
4141

4242
// Modules: https://go.nuxtjs.dev/config-modules

pages/index.vue

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
<template>
22
<div>
3-
{{ selectedClasses }}
3+
<pre>
4+
{{ selectedClasses.map((c) => ({ name: c.name, crn: c.crn })) }}
5+
<!-- {{ selectedClasses }} -->
6+
</pre>
47
<!-- <ClassesCalendar /> -->
58
<!-- <ClassesSelectedStats /> -->
69
<ClassesFilters
@@ -106,7 +109,19 @@ export default {
106109
console.log(e)
107110
if (this.selectedClasses.find((c) => c.crn == e.crn)) {
108111
this.snackbarActive = !this.snackbarActive
109-
this.snackbarText = `Already added ${e.name}`
112+
this.snackbarText = `Removing ${e.name}`
113+
this.selectedClasses = this.selectedClasses.filter(
114+
(c) => c.code != e.code
115+
)
116+
//
117+
} else if (this.selectedClasses.find((c) => c.code == e.code)) {
118+
this.snackbarActive = !this.snackbarActive
119+
this.snackbarText = `Removing Other Section`
120+
this.selectedClasses = this.selectedClasses.filter(
121+
(c) => c.code != e.code
122+
)
123+
this.selectedClasses.push(e)
124+
//
110125
} else {
111126
this.selectedClasses.push(e)
112127
}

0 commit comments

Comments
 (0)