diff options
Diffstat (limited to 'part2/phonebook/src')
| -rw-r--r-- | part2/phonebook/src/App.js | 95 | 
1 files changed, 55 insertions, 40 deletions
diff --git a/part2/phonebook/src/App.js b/part2/phonebook/src/App.js index fd79a34..7edf5a8 100644 --- a/part2/phonebook/src/App.js +++ b/part2/phonebook/src/App.js @@ -1,84 +1,99 @@ -// Extract form element into its own component -import { useState } from 'react' +/* eslint no-use-before-define: 0 */ // --> OFF +import { useEffect, useState } from 'react' +import axios from 'axios'  const ShowPerson = (props) => { -      const searchTerm = props.searchTerm -      const persons = props.persons -      if (searchTerm === undefined)  { -        return persons.map( (person) => { -          return (<li key={person.id}>{person.name} {person.phoneNumber}</li>)}) -      } else { -          const searchedList = persons.filter( (person) => -            {return person.name.includes(props.searchTerm)}); -          console.log(searchedList) -          return searchedList.map( (searched) => { -            return (<li key={searched.id}>{searched.name} {searched.phoneNumber}</li>) -          } ) -      } +  const searchTerm = props.searchTerm +  const persons = props.persons +  if (searchTerm === undefined) { +    return persons.map((person) => { +      return (<li key={person.id}>{person.name} {person.number}</li>) +    }) +  } else { +    const searchedList = persons.filter((person) => +    { return person.name.includes(props.searchTerm) +    }); +      console.log(searchedList) +      return searchedList.map( (searched) => { +        return (<li key={searched.id}>{searched.name} {searched.number}</li>) +    })    } +}  const Filter = (props) => {    return ( -    <p>filter shown with <input value={props.searchTerm} onChange={(event) => -      props.setSearchTerm(event.target.value)} /></p> +    <p>filter shown with <input +      value={props.searchTerm} onChange={(event) => +        props.setSearchTerm(event.target.value)} +                         /> +    </p>    )  }  const App = () => { -  const [persons, setPersons] = useState([ -    { name: 'Arto Hellas', phoneNumber: '000-000-0000', id: 1 }, -    { name: 'John F Kennedy', phoneNumber: '1-800-NASA', id: 2 }, -    { name: 'Julius K Nyerere', phoneNumber: '1-800-UHURU', id: 3 }, -  ]) +  //const [persons, setPersons] = useState([ +    //{ name: 'Arto Hellas', number: '000-000-0000', id: 1 }, +    //{ name: 'John F Kennedy', number: '1-800-NASA', id: 2 }, +    //{ name: 'Julius K Nyerere', number: '1-800-UHURU', id: 3 } +  //]) +  const [persons, setPersons] = useState([])    const [newName, setNewName] = useState('') -  const [phoneNumber, setPhoneNumber] = useState('') +  const [number, setPhoneNumber] = useState('')    const [searchTerm, setSearchTerm] = useState('') +  useEffect(() => { +    axios +      .get('http://localhost:3001/persons') +      .then(response => { +        console.log('promise fulfilled') +        setPersons(response.data) +        console.log(persons) +      }) +  }) +    const addContact = (event) => {      event.preventDefault()      console.log(newName, persons) -    if (persons.find(person => person.name === newName)) { +    if (persons.find(person => person.name === newName)) { // eslint-disable-next-line        alert(`${newName} is already added to phonebook`) -    } else  { +    } else {        const newPerson = {          name: newName, -        id: persons.length + 1, -        phoneNumber: phoneNumber, +        id: persons.length + 1, // eslint-disable-next-line +        number: number        } -    setPersons(persons.concat(newPerson)) -  }} +      setPersons(persons.concat(newPerson)) +    } +  }    const handleTypedName = (event) => { -    //console.log(event.target.value) +    //  console.log(event.target.value)      setNewName(event.target.value) -    //console.log(newName) +    //  console.log(newName)    }    const handlePhoneNo = (event) => {      setPhoneNumber(event.target.value)    } -   -     -    return (      <div>        <h2>Phonebook</h2> -      <Filter searchTerm={searchTerm} setSearchTerm={setSearchTerm}/> -       +      <Filter searchTerm={searchTerm} setSearchTerm={setSearchTerm} />        <h2> add new contact </h2>        <form onSubmit={addContact}>          <div>            <p>name: <input value={newName} onChange={handleTypedName} /></p> -          <p>number: <input value={phoneNumber} onChange={handlePhoneNo} /></p> +          <p>number: <input value={number} onChange={handlePhoneNo} /></p>          </div>          <div> -          <button  type="submit">add</button> +          <button type='submit'>add</button>          </div>        </form>        <h2>Numbers</h2> -      <ShowPerson searchTerm={searchTerm} persons={persons}  -        /> +      <ShowPerson +        searchTerm={searchTerm} persons={persons} +      />      </div>    )  }  | 
