@@ -92,6 +92,7 @@ export default createStore({
9292 repeatOften : payload . repeatOften as number ,
9393 repeatFrequency : payload . repeatFrequency as number ,
9494 timesCompleted : payload . timesCompleted as number ,
95+ originalDueDate : payload . originalDueDate as Date ,
9596 } ;
9697 state . todos . unshift ( createTask ) ;
9798 } ,
@@ -100,9 +101,132 @@ export default createStore({
100101 ( todo : { newId : number } ) => todo . newId === payload
101102 ) ;
102103 if ( item . repeatFrequency == 5 ) {
104+ //if task is a one-time only
103105 item . completed = ! item . completed ; //complete task item
104106 } else {
105107 item . timesCompleted ++ ; //increment number of times task has been completed by 1
108+ if ( item . repeatFrequency == 1 ) {
109+ const newDueDate : Date = new Date (
110+ new Date ( item . originalDueDate + " 23:59:59.999" ) . setDate (
111+ new Date ( item . originalDueDate + " 23:59:59.999" ) . getDate ( ) +
112+ item . timesCompleted * item . repeatOften
113+ )
114+ ) ; //get new due date
115+ const adjustedNewDueDate : Date = new Date (
116+ newDueDate . setMinutes (
117+ newDueDate . getMinutes ( ) - newDueDate . getTimezoneOffset ( )
118+ )
119+ ) ; //convert to local timezone
120+ item . dueDate = adjustedNewDueDate . toISOString ( ) . split ( "T" ) [ 0 ] ; //convert due date to YYYY-MM-DD string
121+ } else if ( item . repeatFrequency == 2 ) {
122+ const newDueDate : Date = new Date (
123+ new Date ( item . originalDueDate + " 23:59:59.999" ) . setDate (
124+ new Date ( item . originalDueDate + " 23:59:59.999" ) . getDate ( ) +
125+ item . timesCompleted * item . repeatOften * 7
126+ )
127+ ) ;
128+ const adjustedNewDueDate : Date = new Date (
129+ newDueDate . setMinutes (
130+ newDueDate . getMinutes ( ) - newDueDate . getTimezoneOffset ( )
131+ )
132+ ) ;
133+ item . dueDate = adjustedNewDueDate . toISOString ( ) . split ( "T" ) [ 0 ] ;
134+ } else if ( item . repeatFrequency == 3 ) {
135+ const monthsAfter : Date = new Date (
136+ new Date ( item . originalDueDate + " 23:59:59.999" ) . setMonth (
137+ new Date ( item . originalDueDate + " 23:59:59.999" ) . getMonth ( ) +
138+ item . timesCompleted * item . repeatOften
139+ )
140+ ) ;
141+ if (
142+ monthsAfter . getMonth ( ) !=
143+ ( new Date ( item . originalDueDate + " 23:59:59.999" ) . getMonth ( ) +
144+ item . timesCompleted * item . repeatOften ) %
145+ 12
146+ ) {
147+ //if task due date is more than days of the month, set to last day of month
148+ const newDueDate : Date = new Date (
149+ new Date ( item . originalDueDate + " 23:59:59.999" ) . getFullYear ( ) ,
150+ new Date ( item . originalDueDate + " 23:59:59.999" ) . getMonth ( ) +
151+ item . timesCompleted * item . repeatOften +
152+ 1 ,
153+ 0 ,
154+ 23 ,
155+ 59 ,
156+ 59 ,
157+ 999
158+ ) ;
159+ const adjustedNewDueDate : Date = new Date (
160+ newDueDate . setMinutes (
161+ newDueDate . getMinutes ( ) - newDueDate . getTimezoneOffset ( )
162+ )
163+ ) ;
164+ item . dueDate = adjustedNewDueDate . toISOString ( ) . split ( "T" ) [ 0 ] ;
165+ } else {
166+ const newDueDate : Date = new Date (
167+ new Date ( item . originalDueDate + " 23:59:59.999" ) . getFullYear ( ) ,
168+ new Date ( item . originalDueDate + " 23:59:59.999" ) . getMonth ( ) +
169+ item . timesCompleted * item . repeatOften ,
170+ new Date ( item . originalDueDate + " 23:59:59.999" ) . getDate ( ) ,
171+ 23 ,
172+ 59 ,
173+ 59 ,
174+ 999
175+ ) ;
176+ const adjustedNewDueDate : Date = new Date (
177+ newDueDate . setMinutes (
178+ newDueDate . getMinutes ( ) - newDueDate . getTimezoneOffset ( )
179+ )
180+ ) ;
181+ item . dueDate = adjustedNewDueDate . toISOString ( ) . split ( "T" ) [ 0 ] ;
182+ }
183+ } else {
184+ const yearsAfter : Date = new Date (
185+ new Date ( item . originalDueDate + " 23:59:59.999" ) . setFullYear (
186+ new Date ( item . originalDueDate + " 23:59:59.999" ) . getFullYear ( ) +
187+ item . timesCompleted * item . repeatOften
188+ )
189+ ) ;
190+ if (
191+ yearsAfter . getMonth ( ) !=
192+ new Date ( item . originalDueDate + " 23:59:59.999" ) . getMonth ( )
193+ ) {
194+ //if task due date don't have leap year, set task due date to February 28
195+ const newDueDate : Date = new Date (
196+ new Date ( item . originalDueDate + " 23:59:59.999" ) . getFullYear ( ) +
197+ item . timesCompleted * item . repeatOften ,
198+ new Date ( item . originalDueDate + " 23:59:59.999" ) . getMonth ( ) + 1 ,
199+ 0 ,
200+ 23 ,
201+ 59 ,
202+ 59 ,
203+ 999
204+ ) ;
205+ const adjustedNewDueDate : Date = new Date (
206+ newDueDate . setMinutes (
207+ newDueDate . getMinutes ( ) - newDueDate . getTimezoneOffset ( )
208+ )
209+ ) ;
210+ item . dueDate = adjustedNewDueDate . toISOString ( ) . split ( "T" ) [ 0 ] ;
211+ } else {
212+ const newDueDate : Date = new Date (
213+ new Date ( item . originalDueDate + " 23:59:59.999" ) . getFullYear ( ) +
214+ item . timesCompleted * item . repeatOften ,
215+ new Date ( item . originalDueDate + " 23:59:59.999" ) . getMonth ( ) ,
216+ new Date ( item . originalDueDate + " 23:59:59.999" ) . getDate ( ) ,
217+ 23 ,
218+ 59 ,
219+ 59 ,
220+ 999
221+ ) ;
222+ const adjustedNewDueDate : Date = new Date (
223+ newDueDate . setMinutes (
224+ newDueDate . getMinutes ( ) - newDueDate . getTimezoneOffset ( )
225+ )
226+ ) ;
227+ item . dueDate = adjustedNewDueDate . toISOString ( ) . split ( "T" ) [ 0 ] ;
228+ }
229+ }
106230 }
107231 } ,
108232 delete_Todo : ( state , payload ) => {
0 commit comments