-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
123 lines (91 loc) · 2.95 KB
/
script.js
File metadata and controls
123 lines (91 loc) · 2.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
const apiUrl = 'https://691f2fcebb52a1db22c0d353.mockapi.io/phonebook'
const contactForm = document.getElementById("addForm")
const contactList = document.getElementById("contactList")
const search = document.getElementById("search")
const getContacts = async() => {
try {
let response = await fetch(apiUrl);
let data = await response.json();
displayContacts(data);
} catch (error) {
console.log("Error fetching contacts", error);
}
}
getContacts();
// Display Contacts
const displayContacts = async(contacts) =>{
contactList.innerHTML = "";
contacts.forEach(contact => {
const li = document.createElement("li");
li.className = "list-group-item d-flex justify-content-between align-items-center";
li.innerHTML = `
<span class="text-primary">${contact.Name}</span>
<span class="text-secondary ">${contact.Phone}</span>
${contact.Name} - ${contact.Phone}
<button class="btn btn-sm btn-success" onclick="editContact(${contact.id})">Edit</button>
<button class="btn btn-sm btn-danger"onclick="deleteContact(${contact.id})">Delete</button>
`;
contactList.appendChild(li);
});
}
// Add new contact
contactForm.addEventListener("submit", async (e) => {
e.preventDefault();
const newContact = {
Name: document.getElementById("name").value,
Phone: document.getElementById("phone").value
};
try {
await fetch(apiUrl, {
method: "POST",
headers: {"Content-Type": "application/json"},
body: JSON.stringify(newContact)
});
contactForm.reset();
getContacts();
} catch (error) {
console.log("Error adding contact", error);
}
});
// Delete Contact
const deleteContact = async(id) =>{
try {
await fetch(`${apiUrl}/${id}`, { method: "DELETE" });
getContacts();
} catch (error) {
console.log("Error deleting contact", error);
}
}
// Edit Contact
const editContact = async(id)=>{
let response = await fetch(`${apiUrl}/${id}`);
let contact = await response.json();
let newName = prompt("Enter new name", contact.Name);
let newPhone = prompt("Enter new phone number", contact.Phone);
if (!newName || !newPhone) {
alert("Edit cancelled!");
return;
}
await fetch(`${apiUrl}/${id}`, {
method: "PUT",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
Name: newName,
Phone: newPhone
})
});
getContacts();
}
// Search Contact
search.addEventListener("keyup", async () => {
let query = search.value.toLowerCase();
let response = await fetch(apiUrl);
let data = await response.json();
let filtered = data.filter(item =>
item.Name.toLowerCase().includes(query) ||
item.Phone.includes(query)
);
displayContacts(filtered);
});