import React from 'react'; import Task, { ITask } from '../Task/Task' import { TaskState } from '../../constants/task-state'; import { connect } from 'react-redux'; import { archiveTask, pinTask, TaskActionsTypes } from '../../lib/redux' import { Dispatch } from 'redux'; export interface TaskListProps { loading?: boolean; tasks: ITask[]; onPinTask: (id: string) => void; onArchiveTask: (id: string) => void; } export const PureTaskList: React.FC = ({ loading = false, tasks, onPinTask, onArchiveTask }) => { const events = { onPinTask, onArchiveTask }; const LoadingRow = (
Loading cool state
); if (loading) { return
{LoadingRow} {LoadingRow} {LoadingRow} {LoadingRow} {LoadingRow} {LoadingRow}
; } if (tasks.length === 0) { return
No tasks
Sit back
; } const tasksInOrder = [ ...tasks.filter(t => t.state === TaskState.TASK_PINNED), ...tasks.filter(t => t.state !== TaskState.TASK_PINNED), ] return (
{tasksInOrder.map((task, id) => ( ))}
); }; export default connect( ({ tasks }: { tasks: ITask[] }) => ({ tasks: tasks.filter( t => t.state === TaskState.TASK_INBOX || t.state === TaskState.TASK_PINNED ), }), (dispatch: Dispatch) => ({ onArchiveTask: (id: string) => dispatch(archiveTask(id)), onPinTask: (id: string) => dispatch(pinTask(id)) }) )(PureTaskList);