1
0
Fork 0

Editing rows

This commit is contained in:
Tomas Balsys 2024-10-26 21:27:05 +03:00
parent 5a1260c369
commit 3c3a5b172d
4 changed files with 29 additions and 15 deletions

View File

@ -15,7 +15,6 @@ export function TaskForm({ tasks, setTasks, setExpanded }: { tasks: TodoTasks, s
status: data.status as TaskStatus, status: data.status as TaskStatus,
}; };
if (data.insert) { if (data.insert) {
setTasks([newTask, ...tasks]); setTasks([newTask, ...tasks]);
} else { } else {

View File

@ -2,11 +2,24 @@ import { useState } from 'react'
import { taskTypes, taskStatuses } from './consts'; import { taskTypes, taskStatuses } from './consts';
import { EnumSelect } from './enum-select'; import { EnumSelect } from './enum-select';
export function TaskRow({ task }: { task: TodoTask, updateTask: (task: TodoTask) => void }): JSX.Element { export function TaskRow({ task, updateTask }: { task: TodoTask, updateTask: (task: TodoTask) => void }): JSX.Element {
const [edit, setEdit] = useState(false); const [edit, setEdit] = useState(false);
return ( return (
<div className="tr"> <form className="tr" onSubmit={event => {
event.preventDefault();
const data = Object.fromEntries(new FormData(event.currentTarget));
updateTask({
id: task.id,
type: data.type as TaskType,
title: data.title as string,
status: data.status as TaskStatus,
});
setEdit(false)
}}>
<div className="td"> <div className="td">
{edit {edit
? <EnumSelect entries={taskTypes} name="type" defaultValue={task.type} /> ? <EnumSelect entries={taskTypes} name="type" defaultValue={task.type} />
@ -26,29 +39,28 @@ export function TaskRow({ task }: { task: TodoTask, updateTask: (task: TodoTask)
</div> </div>
<div className="td"> <div className="td">
{edit ? <> {edit ? <>
<button className="mr-3" onClick={() => { <button type="submit" className="mr-3">
//updateTask()
setEdit(false)
}}>
<svg className="w-4 h-4 fill-white" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 490 490"> <svg className="w-4 h-4 fill-white" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 490 490">
<polygon points="452.253,28.326 197.831,394.674 29.044,256.875 0,292.469 207.253,461.674 490,54.528 "></polygon> <polygon points="452.253,28.326 197.831,394.674 29.044,256.875 0,292.469 207.253,461.674 490,54.528 "></polygon>
</svg> </svg>
</button> </button>
<button onClick={() => setEdit(false)}> <button type="button" onClick={() => setEdit(false)}>
<svg className="w-4 h-4 fill-white" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 490 490"> <svg className="w-4 h-4 fill-white" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 490 490">
<polygon points="456.851,0 245,212.564 33.149,0 0.708,32.337 212.669,245.004 0.708,457.678 33.149,490 245,277.443 456.851,490 489.292,457.678 277.331,245.004 489.292,32.337 "> <polygon points="456.851,0 245,212.564 33.149,0 0.708,32.337 212.669,245.004 0.708,457.678 33.149,490 245,277.443 456.851,490 489.292,457.678 277.331,245.004 489.292,32.337 ">
</polygon> </polygon>
</svg> </svg>
</button> </button>
</> : <> </> : <>
<button onClick={() => setEdit(true)}> <button type="button" onClick={event => {
event.preventDefault()
setEdit(true)
}}>
<svg className="w-4 h-4 fill-white" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30"> <svg className="w-4 h-4 fill-white" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30">
<path d="M 22.828125 3 C 22.316375 3 21.804562 3.1954375 21.414062 3.5859375 L 19 6 L 24 11 L 26.414062 8.5859375 C 27.195062 7.8049375 27.195062 6.5388125 26.414062 5.7578125 L 24.242188 3.5859375 C 23.851688 3.1954375 23.339875 3 22.828125 3 z M 17 8 L 5.2597656 19.740234 C 5.2597656 19.740234 6.1775313 19.658 6.5195312 20 C 6.8615312 20.342 6.58 22.58 7 23 C 7.42 23.42 9.6438906 23.124359 9.9628906 23.443359 C 10.281891 23.762359 10.259766 24.740234 10.259766 24.740234 L 22 13 L 17 8 z M 4 23 L 3.0566406 25.671875 A 1 1 0 0 0 3 26 A 1 1 0 0 0 4 27 A 1 1 0 0 0 4.328125 26.943359 A 1 1 0 0 0 4.3378906 26.939453 L 4.3632812 26.931641 A 1 1 0 0 0 4.3691406 26.927734 L 7 26 L 5.5 24.5 L 4 23 z"></path> <path d="M 22.828125 3 C 22.316375 3 21.804562 3.1954375 21.414062 3.5859375 L 19 6 L 24 11 L 26.414062 8.5859375 C 27.195062 7.8049375 27.195062 6.5388125 26.414062 5.7578125 L 24.242188 3.5859375 C 23.851688 3.1954375 23.339875 3 22.828125 3 z M 17 8 L 5.2597656 19.740234 C 5.2597656 19.740234 6.1775313 19.658 6.5195312 20 C 6.8615312 20.342 6.58 22.58 7 23 C 7.42 23.42 9.6438906 23.124359 9.9628906 23.443359 C 10.281891 23.762359 10.259766 24.740234 10.259766 24.740234 L 22 13 L 17 8 z M 4 23 L 3.0566406 25.671875 A 1 1 0 0 0 3 26 A 1 1 0 0 0 4 27 A 1 1 0 0 0 4.328125 26.943359 A 1 1 0 0 0 4.3378906 26.939453 L 4.3632812 26.931641 A 1 1 0 0 0 4.3691406 26.927734 L 7 26 L 5.5 24.5 L 4 23 z"></path>
</svg> </svg>
</button> </button>
</> </>}
}
</div>
</div> </div>
</form>
); );
} }

View File

@ -1,7 +1,7 @@
import { } from 'react' import { } from 'react'
import { TaskRow } from './task-row'; import { TaskRow } from './task-row';
export function TaskTable({ tasks }: { tasks: TodoTasks }): JSX.Element { export function TaskTable({ tasks, updateTask }: { tasks: TodoTasks, updateTask: (task: TodoTask) => void }): JSX.Element {
return ( return (
<div className="w-full"> <div className="w-full">
<div className="tr"> <div className="tr">
@ -10,7 +10,7 @@ export function TaskTable({ tasks }: { tasks: TodoTasks }): JSX.Element {
<div className="td">Statusas</div> <div className="td">Statusas</div>
<div className="td">Veiksmai</div> <div className="td">Veiksmai</div>
</div> </div>
{tasks.map(task => <TaskRow key={task.id} task={task} updateTask={() => { }} />)} {tasks.map(task => <TaskRow key={task.id} task={task} updateTask={updateTask} />)}
</div> </div>
); );
} }

View File

@ -32,7 +32,10 @@ function App() {
return ( return (
<> <>
<AccordionItem title='Užduočių sąrašas' isOpen={expanded == 0} onClick={() => handleAccordion(0)}> <AccordionItem title='Užduočių sąrašas' isOpen={expanded == 0} onClick={() => handleAccordion(0)}>
<TaskTable tasks={tasks} /> <TaskTable tasks={tasks} updateTask={updated => {
const index = tasks.findIndex(t => t.id == updated.id);
setTasks([...tasks.slice(0, index), updated, ...tasks.slice(index + 1)]);
}} />
</AccordionItem> </AccordionItem>
<AccordionItem title='Nauja užduotis' isOpen={expanded == 1} onClick={() => handleAccordion(1)}> <AccordionItem title='Nauja užduotis' isOpen={expanded == 1} onClick={() => handleAccordion(1)}>
<TaskForm tasks={tasks} setTasks={setTasks} setExpanded={setExpanded} /> <TaskForm tasks={tasks} setTasks={setTasks} setExpanded={setExpanded} />