Skip to content

Commit bfc4013

Browse files
committed
Fix code bugs and increase XP and score multiplier if task is completed when task is due today
1 parent 1eb8ade commit bfc4013

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

src/store/index.ts

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,23 @@ export default createStore({
4040
Number(new Date().setHours(23, 59, 59, 999))) /
4141
(1000 * 60 * 60 * 24); //calculate number of days until the task is due
4242
const dateMultiplier: number =
43-
daysToDue < 0 ? -2 / (daysToDue - 1) : 1 + 1 / (daysToDue + 1); //if task is overdue, XP and score multiplier is less than 1 that decreases over time when task is overdue, else XP multiplier bonus increases (more than 1) when task gets closer to due date
43+
daysToDue < 0
44+
? -2 / (daysToDue - 1)
45+
: daysToDue === 0
46+
? 4 /
47+
(1 +
48+
(Number(new Date().setHours(23, 59, 59, 999)) -
49+
Number(new Date())) /
50+
(1000 * 24 * 60 * 60))
51+
: 1 + 1 / (daysToDue + 1); //if task is overdue, XP and score multiplier is less than 1 that decreases over time when task is overdue, else XP multiplier bonus increases (more than 1) when task gets closer to due date
4452
let streakMultiplier: number; //calculate task streak XP and score multiplier based on task streak, if task is completed before the due date then the streak increases else if the task is completed overdue (after the due date) reset task streak to 0
4553
let repeatMultiplier: number; //calculate task repetition XP and score multiplier based on task repetition occurrence and task repetition frequency
4654
let dailyStreakMultiplier: number; //calculate daily streak XP and score multiplier based on daily streak
4755
let levelMultiplier: number; //calculate level score multiplier based on user level
48-
let dayTasksMultiplier: number; //calculate XP and score multiplier for tasks completed in a day
56+
let dayTasksMultiplier: number; //calculate XP and score multiplier for tasks completed in a day (today)
4957
let tasksMultiplier: number; //calculate score multiplier for total number of tasks completed
5058
//calculate task repetition XP multiplier
51-
if (task.repeatFrequency === 1) {
59+
if (Number(task.repeatFrequency) === 1) {
5260
//if task repetition is daily
5361
if (task.repeatOften < 7) {
5462
//7 days is 1 week
@@ -62,7 +70,7 @@ export default createStore({
6270
} else {
6371
repeatMultiplier = 5 - 365 / task.repeatOften; //4x XP multiplier for yearly tasks (approximately 365 days) to 5x XP multiplier for one-time tasks
6472
}
65-
} else if (task.repeatFrequency === 2) {
73+
} else if (Number(task.repeatFrequency) === 2) {
6674
//if task repetition is weekly
6775
if (task.repeatOften < 4) {
6876
//approximately 4 weeks is 1 month
@@ -73,15 +81,15 @@ export default createStore({
7381
} else {
7482
repeatMultiplier = 5 - 52 / task.repeatOften; //4x XP multiplier for yearly tasks (approximately 52 weeks) to 5x XP multiplier for one-time tasks
7583
}
76-
} else if (task.repeatFrequency === 3) {
84+
} else if (Number(task.repeatFrequency) === 3) {
7785
//if task repetition is monthly
7886
if (task.repeatOften < 12) {
7987
//12 months is 1 year
8088
repeatMultiplier = 3 + (task.repeatOften - 1) / (12 - 1); //3x XP multiplier for monthly tasks (1 month) to 4x XP multiplier for yearly tasks (12 months)
8189
} else {
8290
repeatMultiplier = 5 - 12 / task.repeatOften; //4x XP multiplier for yearly tasks (12 months) to 5x XP multiplier for one-time tasks
8391
}
84-
} else if (task.repeatFrequency === 4) {
92+
} else if (Number(task.repeatFrequency) === 4) {
8593
//if task repetition is yearly
8694
repeatMultiplier = 5 - 1 / task.repeatOften; //4x XP multiplier for yearly tasks (1 year) to 5x XP multiplier for one-time tasks
8795
} else {
@@ -385,12 +393,12 @@ export default createStore({
385393
const item = state.todos.find(
386394
(todo: { newId: number }) => todo.newId === payload
387395
);
388-
if (item.repeatFrequency === 5) {
396+
if (Number(item.repeatFrequency) === 5) {
389397
//if task is a one-time only
390-
item.completed = !item.completed; //complete task item
398+
item.completed = !item.completed; //complete task item (set completed task to true)
391399
} else {
392400
item.timesCompleted++; //increment number of times task has been completed by 1
393-
if (item.repeatFrequency === 1) {
401+
if (Number(item.repeatFrequency) === 1) {
394402
//if task repeat frequency is daily
395403
const newDueDate: Date = new Date(
396404
new Date(item.originalDueDate + " 23:59:59.999").setDate(
@@ -404,7 +412,7 @@ export default createStore({
404412
)
405413
); //convert to local timezone
406414
item.dueDate = adjustedNewDueDate.toISOString().split("T")[0]; //convert due date to YYYY-MM-DD string
407-
} else if (item.repeatFrequency === 2) {
415+
} else if (Number(item.repeatFrequency) === 2) {
408416
//if task repeat frequency is weekly
409417
const newDueDate: Date = new Date(
410418
new Date(item.originalDueDate + " 23:59:59.999").setDate(
@@ -418,7 +426,7 @@ export default createStore({
418426
)
419427
);
420428
item.dueDate = adjustedNewDueDate.toISOString().split("T")[0];
421-
} else if (item.repeatFrequency === 3) {
429+
} else if (Number(item.repeatFrequency) === 3) {
422430
//if task repeat frequency is monthly
423431
const monthsAfter: Date = new Date(
424432
new Date(item.originalDueDate + " 23:59:59.999").setMonth(
@@ -468,7 +476,7 @@ export default createStore({
468476
);
469477
item.dueDate = adjustedNewDueDate.toISOString().split("T")[0];
470478
}
471-
} else if (item.repeatFrequency === 4) {
479+
} else if (Number(item.repeatFrequency) === 4) {
472480
//if task repeat frequency is yearly
473481
const yearsAfter: Date = new Date(
474482
new Date(item.originalDueDate + " 23:59:59.999").setFullYear(

0 commit comments

Comments
 (0)