sub-manager-frontend/src/routes/editStory.jsx

111 lines
3.0 KiB
React
Raw Normal View History

2023-09-27 09:14:45 +00:00
import { Form, useLoaderData, useParams, redirect, useNavigate, useSubmit } from "react-router-dom";
import PageHeader from "../Components/PageHeader";
import { requestEdit } from "../APIcalls.mjs";
2023-09-18 17:32:04 +00:00
import Checkboxes from "../Components/Checkboxes"
import { useState,useEffect } from "react";
import { forIn } from "lodash";
export async function action({request,params}){
2023-09-27 09:44:28 +00:00
const data = await request.json()
console.dir(data)
2023-09-27 09:14:45 +00:00
data.id=params.storyId
await requestEdit(data,'story')
return redirect(`/story/${params.storyId}`)
}
2023-09-27 09:14:45 +00:00
2023-09-18 17:32:04 +00:00
export default function EditStory(){
2023-09-27 09:14:45 +00:00
const submit = useSubmit()
2023-09-13 12:26:38 +00:00
const navigate = useNavigate()
const { storyId } = useParams()
2023-09-18 17:32:04 +00:00
const { stories, genres } = useLoaderData()
const storyData = stories.find(row=>row.id==storyId)
2023-09-27 09:14:45 +00:00
const [data,setData] = useState({
genres:{}
})
2023-09-18 17:32:04 +00:00
const handleToggle = (target) => {
2023-09-27 09:14:45 +00:00
setData(prev => {
2023-09-18 17:32:04 +00:00
return {
...prev,
2023-09-27 09:14:45 +00:00
genres:{
...prev.genres,
[target]: !prev.genres[target]
}
2023-09-18 17:32:04 +00:00
}
})
}
2023-09-27 09:14:45 +00:00
const handleChange = (event) => {
const value = event.target.value
setData({
...data,
[event.target.name]: value
})
}
const handleSave = (event) =>{
submit(data,{
method:"post",
2023-09-27 09:44:28 +00:00
action: `/story/${storyId}/edit`,
encType: "application/json"
2023-09-27 09:14:45 +00:00
})
}
2023-09-18 17:32:04 +00:00
useEffect(()=>{
2023-09-27 09:14:45 +00:00
console.dir(data)
},[data])
2023-09-27 09:44:28 +00:00
useEffect(()=>{
setData(prev=>{
return {
...prev,
genres:storyData.genres
}
})
},[storyData])
return(
2023-09-12 14:27:51 +00:00
<div id="page-container">
<PageHeader super={`Story #${storyData.id}`} heading="EDIT" url="/story" id={storyId}/>
<Form method="post" id="story-form">
2023-09-12 09:38:45 +00:00
<label> Title:
<input
placeholder='title'
aria-label="Title"
type="text"
name="title"
defaultValue={storyData.title}
2023-09-27 09:14:45 +00:00
onChange={handleChange}
/>
2023-09-12 09:38:45 +00:00
</label>
<label> Wordcount:
<input
placeholder='1000'
aria-label="Wordcount"
type="number"
step="1"
name="word_count"
2023-09-27 09:14:45 +00:00
defaultValue={storyData.word_count}
onChange={handleChange}
/>
2023-09-12 09:38:45 +00:00
</label>
2023-09-18 17:32:04 +00:00
<label>
<Checkboxes
name="genres"
options={genres}
onChange={handleToggle}
2023-09-27 09:44:28 +00:00
values={data.genres}
2023-09-18 17:32:04 +00:00
legend="Genres:"
/>
</label>
2023-09-12 09:38:45 +00:00
<div id="bottom-button-container">
2023-09-27 09:14:45 +00:00
<button type="button" onClick={handleSave}>SAVE</button>
2023-09-13 12:26:38 +00:00
<button type="button" onClick={()=>{navigate("/stories")}}>CANCEL</button>
2023-09-12 09:38:45 +00:00
</div>
</Form>
2023-09-12 14:27:51 +00:00
</div>
)
}