From c7a8f2e5a18310c5e5be419b6ab60c60bf56cb7c Mon Sep 17 00:00:00 2001 From: Andrzej Stepien Date: Wed, 27 Sep 2023 11:14:45 +0200 Subject: [PATCH] handle 'save' imperatively --- src/routes/editStory.jsx | 57 +++++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/src/routes/editStory.jsx b/src/routes/editStory.jsx index 4b92420..48ddf83 100644 --- a/src/routes/editStory.jsx +++ b/src/routes/editStory.jsx @@ -1,4 +1,4 @@ -import { Form, useLoaderData, useParams, redirect, useNavigate } from "react-router-dom"; +import { Form, useLoaderData, useParams, redirect, useNavigate, useSubmit } from "react-router-dom"; import PageHeader from "../Components/PageHeader"; import { requestEdit } from "../APIcalls.mjs"; import Checkboxes from "../Components/Checkboxes" @@ -6,48 +6,55 @@ import { useState,useEffect } from "react"; import { forIn } from "lodash"; export async function action({request,params}){ - const formData = await request.formData() - console.dir(formData) - let data = Object.fromEntries(formData) - data.id=parseInt(params.storyId) - data = packageGenres(data) + const data = await request.formData() console.dir(data) + data.id=params.storyId await requestEdit(data,'story') return redirect(`/story/${params.storyId}`) } -export const packageGenres = (data) => { - const array = [] - for (const key in data) { - if(/genres/.test(key)){ - array.push(key.slice(6)) - delete data[key] - } - } - data.genres=array - return data -} + export default function EditStory(){ + const submit = useSubmit() const navigate = useNavigate() const { storyId } = useParams() const { stories, genres } = useLoaderData() const storyData = stories.find(row=>row.id==storyId) - const [toggledGenres,setToggledGenres]=useState({}) + const [data,setData] = useState({ + genres:{} + }) const handleToggle = (target) => { - setToggledGenres(prev => { + setData(prev => { return { ...prev, - [target]: !prev[target] + genres:{ + ...prev.genres, + [target]: !prev.genres[target] + } + } }) } + const handleChange = (event) => { + const value = event.target.value + setData({ + ...data, + [event.target.name]: value + }) + } + const handleSave = (event) =>{ + submit(data,{ + method:"post", + action: `/story/${storyId}/edit` + }) + } useEffect(()=>{ - console.dir(toggledGenres) - },[toggledGenres]) + console.dir(data) + },[data]) return(
@@ -59,6 +66,7 @@ export default function EditStory(){ type="text" name="title" defaultValue={storyData.title} + onChange={handleChange} />
- +