diff --git a/src/App.js b/src/App.js new file mode 100644 index 00000000..abe3f4ae --- /dev/null +++ b/src/App.js @@ -0,0 +1,56 @@ +import logo from './logo.svg'; +import './App.css'; +import React, {useState} from "react"; +import Form from "./components/Form"; + +//takım listesini tutacağınız bir state oluşturun. + +function App() { + + const [memberList, setMemberList] = useState([]); + const [oldMember, setOldMember] = useState(null); + + const addMember = (newMember) => { + newMember.id = new Date(); + setMemberList([...memberList, newMember]); + }; + const handleEditClick = (member) => { + setOldMember(member); + }; + const editMember = (formData) => { + const updatedTeamList = memberList.map((item)=>{ + if(item.id === oldMember.id){ + formData.id = oldMember.id; + return formData; + }else { + return item; + } + }) + setMemberList(updatedTeamList); + setOldMember(null); + }; +//GOREV:**** +//İlave sayfa router, güncellenen elemanın bilgilerini yeni sayfaya bastır. "Emre güncellendi" ++ Emrenin bilgileri + + return ( +
+
+

Team List

+
+ {memberList.map((member) => ( +
+ {member.isim} + +
+ )) + } +
+
+
+
+ ); +} + +export default App; diff --git a/src/components/Form.js b/src/components/Form.js new file mode 100644 index 00000000..28a12691 --- /dev/null +++ b/src/components/Form.js @@ -0,0 +1,73 @@ +import { eventWrapper } from "@testing-library/user-event/dist/utils"; +import React, {useState, useEffect} from "react"; +//control c ile baştan start verebilirsin! +const initialData = { + isim: "", + eposta:"", + rol:"", +}; +const Form = (props) => { + const {addMember, oldMember, editMember } = props; + const [formData, setFormData] = useState(initialData); + const [editMode, setEditMode] = useState(false); + +//Sadece oldmember güncellendiğinde editmodu çalıştıracağımız için altına [oldMember] dedik + useEffect(() => { + if(oldMember){ + setEditMode(true); + setFormData(oldMember); + }else { + setEditMode(false); + } + + }, [oldMember]); +//hangi elemandan veri geldiğini bu event.target ile anlayıp alıyoruz, aşağıda name alanını dinamik şekilde eklemiş olduk; buradaki name-> inputların name'i yani id'leri, burası zaten dinamik olarak değişiyor olacak, isim, eposta ve rol için, her bir input id'si için ayrı ayrı handler yazmak yerine tek seferde bu şekilde name alanını dinamik yapabiliyoruz + const handlerChange = (event) => { + const {name, value, type} = event.target; + setFormData({...formData, [name]: value}) + }; +//biz şu an single page olduğu için defaultunda da sayfayı yenilediğinden burada preventDefault dersek bu yenileme durumunu kaldırmış oluruz(çünkü sayfayı yenileyince baştan komple render ediyor,bunu istemediğimiz için engelliyoruz)(render etmeden memberı ekledik, ve bu değişikliği de set ile güncelledik, formu sıfırladı aşağıda) + const handleSubmit =(event) => { + event.preventDefault(); + if(editMode){ + editMember(formData); + }else{ + addMember(formData); + } + setFormData(initialData); + //console.log(formData.isim); + }; + +//input alanı için bir nickname gibi bir isim (burada "isim" dedik) veriyoruz, isim'i aslında bu inputa id olarak atıyoruz (burada atadığımız idlerin yukarıdaki initial dataya refer edeceği için oradaki tanımlarla uyuşması lazım!)(label kullanmazsak isim üzerine tıkladığında direk yazmaya başlayamayız) + return ( + handleSubmit(event)}> + + + + + + ) +}; + +export default Form; \ No newline at end of file