zamarrowski / Curso-React-Testing-GraphQL

Curso React, testing y GraphQL
36 stars 21 forks source link

Ejercicio TODO list #2

Closed zamarrowski closed 4 years ago

zamarrowski commented 5 years ago
import React from 'react'

const List = props => 
    <ul>
        {props.children}
    </ul>

const ListItem = props => 
    <li>
        <InputText onChange={(e) => props.onChange(e, props.task.id)} value={props.task.text} /> 
        <BasicButton onClick={() => props.onDelete(props.task.text)} label="Borrar" />
    </li>

const InputText = props => 
    <input type="text" value={props.value} onChange={props.onChange} />

const Button = props => 
    <button onClick={props.onClick}>{props.label}</button>

const AddTaskButton = props => 
    <Button onClick={props.onClick} label={'Añadir boton'}/>

const BasicButton = props => 
    <button style={{backgroundColor: props.action ? 'green' : 'orange'}} onClick={props.onClick}>{props.label}</button>

export default class ListContainer extends React.Component {
    state = {
        tasks: [{
            id: 1,
            text: 'zamarro'
        }],
        text: '',
    }

    addTask = () => {
        this.setState({ tasks: [...this.state.tasks, this.state.text] })
    }

    deleteTask = (text) => {
        let newTasks = this.state.tasks.filter(el => el !== text)
        this.setState({ tasks: newTasks })
    }

    onChangeTask = (e, id) => {
        let tasks = this.state.tasks.map(element => {
            if (element.id === id) element.text = e.target.value
            return element
        })
        this.setState({ tasks: tasks })
    }

    render() {
        return(
            <>
                <List>
                    {this.state.tasks.map((element) => (
                        <ListItem 
                            onDelete={this.deleteTask}
                            onChange={this.onChangeTask}
                            task={element}
                            key={element}
                        />
                    ))}
                </List>
                <InpuText type="text" onChange={e => this.setState({ text: e.target.value })} />
                <BasicButton onClick={this.addTask} label="Añadir tarea" action="success"  />
            </>
        )
    }
}