completed 2.9

This commit is contained in:
counterweight 2025-05-25 12:04:02 +02:00
parent 5b33d34f0a
commit fe840d486f
Signed by: counterweight
GPG key ID: 883EDBAA726BD96C
2 changed files with 21 additions and 5 deletions

View file

@ -7,5 +7,5 @@ Exercises:
* [X] 2.6 * [X] 2.6
* [X] 2.7 * [X] 2.7
* [X] 2.8 * [X] 2.8
* [ ] 2.9 * [X] 2.9
* [ ] 2.10 * [ ] 2.10

View file

@ -5,6 +5,7 @@ const App = () => {
const [persons, setPersons] = useState([ const [persons, setPersons] = useState([
{ name: "Arto Hellas", number: 123 }, { name: "Arto Hellas", number: 123 },
]); ]);
const [searchString, setSearchString] = useState("");
const [newName, setNewName] = useState(""); const [newName, setNewName] = useState("");
const [newNumber, setNewNumber] = useState(""); const [newNumber, setNewNumber] = useState("");
@ -19,6 +20,9 @@ const App = () => {
return; return;
} }
setPersons(persons.concat({ name: newName, number: newNumber })); setPersons(persons.concat({ name: newName, number: newNumber }));
setNewName("");
setNewNumber("");
}; };
const handleNameChange = (event) => { const handleNameChange = (event) => {
@ -29,22 +33,34 @@ const App = () => {
setNewNumber(event.target.value); setNewNumber(event.target.value);
}; };
const handleSearchChange = (event) => {
setSearchString(event.target.value);
};
return ( return (
<div> <div>
<h2>Phonebook</h2> <h2>Phonebook</h2>
<div>
search name: <input onChange={handleSearchChange} />
</div>
<h3>Add new</h3>
<form onSubmit={handleOnSubmit}> <form onSubmit={handleOnSubmit}>
<div> <div>
name: <input onChange={handleNameChange} /> name: <input value={newName} onChange={handleNameChange} />
</div> </div>
<div> <div>
number: <input onChange={handleNumberChange} /> number: <input value={newNumber} onChange={handleNumberChange} />
</div> </div>
<div> <div>
<button type="submit">add</button> <button type="submit">add</button>
</div> </div>
</form> </form>
<h2>Numbers</h2> <h3>Numbers</h3>
<PersonList persons={persons} /> <PersonList
persons={persons.filter((person) =>
person.name.toUpperCase().includes(searchString.toUpperCase())
)}
/>
</div> </div>
); );
}; };