From 9c2ad9bee21ea2bc92ee0eac4d12bb7878fa8bdb Mon Sep 17 00:00:00 2001 From: Ibrahim Mkusa Date: Mon, 1 May 2023 22:17:46 -0400 Subject: ex2.11 use data from json-server, employ axios lib --- part2/phonebook/src/App.js | 95 +++++++++++++++++++++++++++------------------- 1 file changed, 55 insertions(+), 40 deletions(-) (limited to 'part2/phonebook/src') 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 (
  • {person.name} {person.phoneNumber}
  • )}) - } else { - const searchedList = persons.filter( (person) => - {return person.name.includes(props.searchTerm)}); - console.log(searchedList) - return searchedList.map( (searched) => { - return (
  • {searched.name} {searched.phoneNumber}
  • ) - } ) - } + const searchTerm = props.searchTerm + const persons = props.persons + if (searchTerm === undefined) { + return persons.map((person) => { + return (
  • {person.name} {person.number}
  • ) + }) + } else { + const searchedList = persons.filter((person) => + { return person.name.includes(props.searchTerm) + }); + console.log(searchedList) + return searchedList.map( (searched) => { + return (
  • {searched.name} {searched.number}
  • ) + }) } +} const Filter = (props) => { return ( -

    filter shown with - props.setSearchTerm(event.target.value)} />

    +

    filter shown with + props.setSearchTerm(event.target.value)} + /> +

    ) } 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 (

    Phonebook

    - - +

    add new contact

    name:

    -

    number:

    +

    number:

    - +

    Numbers

    - +
    ) } -- cgit v1.2.3