mirror of
				https://github.com/reduxjs/redux-devtools.git
				synced 2025-11-04 01:47:25 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			64 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import {
 | 
						|
  ADD_TODO,
 | 
						|
  DELETE_TODO,
 | 
						|
  EDIT_TODO,
 | 
						|
  MARK_TODO,
 | 
						|
  MARK_ALL,
 | 
						|
  CLEAR_MARKED,
 | 
						|
} from '../constants/ActionTypes';
 | 
						|
import { TodoAction } from '../actions/TodoActions';
 | 
						|
 | 
						|
export interface Todo {
 | 
						|
  text: string;
 | 
						|
  marked: boolean;
 | 
						|
  id: number;
 | 
						|
}
 | 
						|
 | 
						|
const initialState: Todo[] = [
 | 
						|
  {
 | 
						|
    text: 'Use Redux',
 | 
						|
    marked: false,
 | 
						|
    id: 0,
 | 
						|
  },
 | 
						|
];
 | 
						|
 | 
						|
export default function todos(state = initialState, action: TodoAction) {
 | 
						|
  switch (action.type) {
 | 
						|
    case ADD_TODO:
 | 
						|
      return [
 | 
						|
        {
 | 
						|
          id: state.length === 0 ? 0 : state[0].id + 1,
 | 
						|
          marked: false,
 | 
						|
          text: action.text,
 | 
						|
        },
 | 
						|
        ...state,
 | 
						|
      ];
 | 
						|
 | 
						|
    case DELETE_TODO:
 | 
						|
      return state.filter((todo) => todo.id !== action.id);
 | 
						|
 | 
						|
    case EDIT_TODO:
 | 
						|
      return state.map((todo) =>
 | 
						|
        todo.id === action.id ? { ...todo, text: action.text } : todo
 | 
						|
      );
 | 
						|
 | 
						|
    case MARK_TODO:
 | 
						|
      return state.map((todo) =>
 | 
						|
        todo.id === action.id ? { ...todo, marked: !todo.marked } : todo
 | 
						|
      );
 | 
						|
 | 
						|
    case MARK_ALL: {
 | 
						|
      const areAllMarked = state.every((todo) => todo.marked);
 | 
						|
      return state.map((todo) => ({
 | 
						|
        ...todo,
 | 
						|
        marked: !areAllMarked,
 | 
						|
      }));
 | 
						|
    }
 | 
						|
    case CLEAR_MARKED:
 | 
						|
      return state.filter((todo) => !todo.marked);
 | 
						|
 | 
						|
    default:
 | 
						|
      return state;
 | 
						|
  }
 | 
						|
}
 |