Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 67be8c0

Browse files
committed
refactored with immutable.js
1 parent 3e404e7 commit 67be8c0

File tree

1 file changed

+18
-12
lines changed
  • source/app/components/Scheduler

1 file changed

+18
-12
lines changed

‎source/app/components/Scheduler/index.js‎

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ import React, { Component } from 'react';
33
import Move from 'react-flip-move';
44
import { hot } from 'react-hot-loader';
55
import { v4 } from 'uuid';
6+
import { fromJS, Map } from "immutable";
67

78
// Instruments
89
import Styles from './styles.m.css';
910
import Checkbox from '../../theme/assets/Checkbox';
1011
import initialTasksData from './tasks.json';
12+
import { sortTasksByGroup } from "../../instruments";
1113

1214
// Components
1315
import { 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

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /