-
Notifications
You must be signed in to change notification settings - Fork 19
/
reducer.ts
30 lines (28 loc) · 819 Bytes
/
reducer.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import Immutable = require('immutable');
import { IContactAction } from './actions';
import { Contact as ContactModel} from './contact-store';
export function reducer(state: Immutable.List<ContactModel> = Immutable.List<ContactModel>(), action: IContactAction) {
switch (action.type) {
case 'ADD':
return state.push({
id: action.id,
name: action.name,
star: false
});
case 'REMOVE':
return state.delete(findIndexById());
case 'STAR':
return (<any>state).update(findIndexById(), (contact) => {
return {
id: contact.id,
name: contact.name,
star: !contact.star
};
});
default:
return state;
}
function findIndexById() {
return state.findIndex((contact) => contact.id === action.id);
}
}