1
- import { createModule , mutation , action } from 'vuex-class-component'
2
- import dayjs from 'dayjs'
1
+ import {
2
+ createModule ,
3
+ mutation ,
4
+ action ,
5
+ createProxy
6
+ } from 'vuex-class-component'
3
7
import firebase from '@/plugins/firebase'
8
+ import { AppStore } from '@/store/modules/app'
4
9
import Timestamp = firebase . firestore . Timestamp
5
10
6
11
const VuexModule = createModule ( {
@@ -12,7 +17,6 @@ const VuexModule = createModule({
12
17
type ClassId = string
13
18
type ClassName = string
14
19
type Lessons = Lesson [ ]
15
- type DisplayDate = Date
16
20
17
21
interface Lesson {
18
22
subject : string
@@ -37,39 +41,31 @@ interface ClassData {
37
41
classId : ClassId
38
42
className : ClassName
39
43
lessons : Lessons
40
- displayDate : DisplayDate
41
44
}
42
45
43
46
export class ClassDataStore extends VuexModule implements ClassData {
44
47
classId : ClassId = ''
45
48
className : ClassName = ''
46
49
lessons : Lessons = [ ]
47
- displayDate : DisplayDate = new Date ( )
48
-
49
- public get getLessonsByDisplayDate ( ) : Lessons {
50
- const dateStart = new Date (
51
- this . displayDate . getFullYear ( ) ,
52
- this . displayDate . getMonth ( ) ,
53
- this . displayDate . getDate ( ) ,
54
- 0 ,
55
- 0 ,
56
- 0
57
- )
58
- const dateEnd = new Date (
59
- this . displayDate . getFullYear ( ) ,
60
- this . displayDate . getMonth ( ) ,
61
- this . displayDate . getDate ( ) ,
62
- 23 ,
63
- 59 ,
64
- 59
65
- )
66
- const lessonsByDate : Lessons = [ ]
67
- this . lessons . forEach ( value => {
68
- const sec = value . startTime . getTime ( )
69
- if ( dateStart . getTime ( ) <= sec && dateEnd . getTime ( ) >= sec )
70
- lessonsByDate . push ( value )
50
+
51
+ public get lessonsOnCurrentDate ( ) : Lessons {
52
+ const appStore = createProxy ( this . $store , AppStore )
53
+
54
+ // Generate a new Date object with a specified date & time
55
+ const d = ( date : Date , hours : number , minutes : number , seconds : number ) => {
56
+ const newDate = new Date ( date )
57
+ newDate . setHours ( hours )
58
+ newDate . setMinutes ( minutes )
59
+ newDate . setSeconds ( seconds )
60
+ return newDate
61
+ }
62
+ const start = d ( appStore . currentDate , 0 , 0 , 0 ) . getTime ( )
63
+ const end = d ( appStore . currentDate , 23 , 59 , 59 ) . getTime ( )
64
+
65
+ return this . lessons . filter ( lesson => {
66
+ const startOfLesson = lesson . startTime . getTime ( )
67
+ return start <= startOfLesson && end >= startOfLesson
71
68
} )
72
- return lessonsByDate
73
69
}
74
70
75
71
public get isLoaded ( ) : boolean {
@@ -87,25 +83,6 @@ export class ClassDataStore extends VuexModule implements ClassData {
87
83
this . lessons = lessons
88
84
}
89
85
90
- @mutation
91
- public nextDate ( ) {
92
- this . displayDate = dayjs ( this . displayDate )
93
- . add ( 1 , 'd' )
94
- . toDate ( )
95
- }
96
-
97
- @mutation
98
- public prevDate ( ) {
99
- this . displayDate = dayjs ( this . displayDate )
100
- . subtract ( 1 , 'd' )
101
- . toDate ( )
102
- }
103
-
104
- @mutation
105
- public setDate ( date : Date ) {
106
- this . displayDate = date
107
- }
108
-
109
86
@action
110
87
public async loadClassData ( classId : ClassId ) {
111
88
let className = ''
@@ -117,8 +94,8 @@ export class ClassDataStore extends VuexModule implements ClassData {
117
94
. collection ( 'Lessons' )
118
95
. orderBy ( 'startTime' )
119
96
. get ( )
120
- . then ( QuerySnapshot => {
121
- QuerySnapshot . forEach ( function ( doc ) {
97
+ . then ( querySnapshot => {
98
+ querySnapshot . forEach ( function ( doc ) {
122
99
const data = doc . data ( ) as RawLesson
123
100
const reformatData = {
124
101
subject : data . subject ,
0 commit comments