@@ -3,11 +3,13 @@ import React, { Component } from 'react';
33import Move from 'react-flip-move' ;
44import { hot } from 'react-hot-loader' ;
55import { v4 } from 'uuid' ;
6+ import { fromJS , Map } from "immutable" ;
67
78// Instruments
89import Styles from './styles.m.css' ;
910import Checkbox from '../../theme/assets/Checkbox' ;
1011import initialTasksData from './tasks.json' ;
12+ import { sortTasksByGroup } from "../../instruments" ;
1113
1214// Components
1315import { Task } from '../Task' ;
@@ -17,7 +19,7 @@ export class Scheduler extends Component {
1719 state = {
1820 newTaskMessage : '' ,
1921 tasksFilter : '' ,
20- tasks : initialTasksData ,
22+ tasks : fromJS ( initialTasksData ) ,
2123 } ;
2224
2325 _updateTasksFilter = ( event ) => {
@@ -32,7 +34,7 @@ export class Scheduler extends Component {
3234 } ) ;
3335 } ;
3436
35- _getAllCompleted = ( ) => this . state . tasks . every ( ( task ) => task . completed ) ;
37+ _getAllCompleted = ( ) => this . state . tasks . every ( ( task ) => task . get ( " completed" ) ) ;
3638
3739 _createTask = ( event ) => {
3840 event . preventDefault ( ) ;
@@ -42,38 +44,38 @@ export class Scheduler extends Component {
4244 return null ;
4345 }
4446
45- const newTask = {
47+ const newTask = Map ( {
4648 id : v4 ( ) ,
4749 completed : false ,
4850 favorite : false ,
4951 message : newTaskMessage ,
50- } ;
52+ } ) ;
5153
5254 this . setState ( ( { tasks } ) => ( {
53- tasks : [ newTask , ... tasks ] ,
55+ tasks : sortTasksByGroup ( tasks . unshift ( newTask ) ) ,
5456 newTaskMessage : '' ,
5557 } ) ) ;
5658 } ;
5759
5860 _updateTask = ( updatedTask ) => {
5961 this . setState ( ( { tasks } ) => {
60- const indexToReplace = tasks . indexOf (
61- tasks . find ( ( task ) => task . id === updatedTask . id ) ,
62+ const indexToReplace = tasks . findIndex (
63+ ( task ) => task . get ( "id" ) === updatedTask . id ,
6264 ) ;
6365
6466 const newTasks = [ ...tasks . filter ( ( task ) => task . id !== updatedTask . id ) ] ;
6567
6668 newTasks . splice ( indexToReplace , 0 , updatedTask ) ;
6769
6870 return {
69- tasks : newTasks ,
71+ tasks : sortTasksByGroup ( tasks . update ( indexToReplace , ( ) => Map ( updatedTask ) ) ) ,
7072 } ;
7173 } ) ;
7274 } ;
7375
7476 _removeTask = ( taskId ) => {
7577 this . setState ( ( { tasks } ) => ( {
76- tasks : tasks . filter ( ( task ) => task . id !== taskId ) ,
78+ tasks : tasks . filter ( ( task ) => task . get ( "id" ) !== taskId ) ,
7779 } ) ) ;
7880 } ;
7981
@@ -83,7 +85,7 @@ export class Scheduler extends Component {
8385 }
8486
8587 this . setState ( ( { tasks } ) => ( {
86- tasks : tasks . map ( ( task ) => ( { ... task , completed : true } ) ) ,
88+ tasks : tasks . map ( ( task ) => task . set ( "completed" , true ) ) ,
8789 } ) ) ;
8890 } ;
8991
@@ -92,12 +94,16 @@ export class Scheduler extends Component {
9294
9395 const allCompleted = this . _getAllCompleted ( ) ;
9496 const todoList = tasks
95- . filter ( ( task ) => task . message . toLowerCase ( ) . includes ( tasksFilter ) )
97+ . filter ( ( task ) => task . get ( " message" ) . toLowerCase ( ) . includes ( tasksFilter ) )
9698 . map ( ( task ) => (
9799 < Task
98100 _removeTask = { this . _removeTask }
99101 _updateTask = { this . _updateTask }
100- key = { task . id }
102+ key = { task . get ( "id" ) }
103+ id = { task . get ( "id" ) }
104+ message = { task . get ( "message" ) }
105+ completed = { task . get ( "completed" ) }
106+ favorite = { task . get ( "favorite" ) }
101107 { ...task }
102108 />
103109 ) ) ;
0 commit comments