'use client';
import React, { useState } from 'react';
const App = () => {
const [userInput, setUserInput] = useState('');
const [list, setList] = useState([]);
const [editIndex, setEditIndex] = useState(null); // Track index of item to edit
// Set a user input value
const updateInput = (value) => {
setUserInput(value);
};
// Add or edit item
const handleAction = () => {
if (userInput.trim() === '') return; // Avoid adding empty items
if (editIndex !== null) {
// Edit existing item
const updatedList = list.map((item, index) =>
index === editIndex ? { ...item, value: userInput } : item
);
setList(updatedList);
setEditIndex(null); // Reset edit mode
} else {
// Add new item
const newItem = {
id: Math.random(), // Consider using a more reliable ID generator
value: userInput,
};
setList([...list, newItem]);
}
setUserInput(''); // Clear input field
};
// Function to delete item from list using id to delete
const deleteItem = (id) => {
const updatedList = list.filter((item) => item.id !== id);
setList(updatedList);
};
// Function to enable editing mode
const startEdit = (index) => {
setUserInput(list[index].value);
setEditIndex(index); // Set the index of the item to be edited
};
return (
<div
style={{
fontFamily: 'Arial, sans-serif',
maxWidth: '600px',
margin: '0 auto',
padding: '20px',
}}
>
<div
style={{
textAlign: 'center',
fontSize: '2.5rem',
fontWeight: 'bold',
marginBottom: '20px',
color: 'green',
}}
>
Geeksforgeeks
</div>
<div
style={{
textAlign: 'center',
fontSize: '1.5rem',
fontWeight: 'bold',
marginBottom: '20px',
}}
>
TODO LIST
</div>
<div
style={{ display: 'flex', alignItems: 'center', marginBottom: '20px' }}
>
<input
style={{
fontSize: '1.2rem',
padding: '10px',
marginRight: '10px',
flexGrow: '1',
borderRadius: '4px',
border: '1px solid #ccc',
}}
placeholder={editIndex !== null ? "Edit item..." : "Add item..."}
value={userInput}
onChange={(e) => updateInput(e.target.value)}
/>
<button
style={{
fontSize: '1.2rem',
padding: '10px 20px',
backgroundColor: '#4caf50',
color: 'white',
border: 'none',
borderRadius: '8px',
cursor: 'pointer',
}}
onClick={handleAction}
>
{editIndex !== null ? 'Update' : 'ADD'}
</button>
</div>
<div
style={{ background: '#f9f9f9', padding: '20px', borderRadius: '8px' }}
>
{list.length > 0 ? (
list.map((item, index) => (
<div
key={item.id} // Use the unique id as the key
style={{
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
marginBottom: '10px',
}}
>
<span style={{ fontSize: '1.2rem', flexGrow: '1' }}>
{item.value}
</span>
<span>
<button
style={{
padding: '10px',
backgroundColor: '#f44336',
color: 'white',
border: 'none',
borderRadius: '8px',
marginRight: '10px',
cursor: 'pointer',
}}
onClick={() => deleteItem(item.id)}
>
Delete
</button>
<button
style={{
padding: '10px',
backgroundColor: '#2196f3',
color: 'white',
border: 'none',
borderRadius: '8px',
cursor: 'pointer',
}}
onClick={() => startEdit(index)}
>
Edit
</button>
</span>
</div>
))
) : (
<div
style={{ textAlign: 'center', fontSize: '1.2rem', color: '#777' }}
>
No items in the list
</div>
)}
</div>
</div>
);
};
export default App;