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

93 lines
2.6 KiB
React
Raw Normal View History

2023-09-13 12:26:38 +00:00
import { Form, useLoaderData, useParams, redirect, useNavigate } 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}){
const formData = await request.formData()
2023-09-18 17:32:04 +00:00
console.dir(formData)
let data = Object.fromEntries(formData)
data.id=parseInt(params.storyId)
2023-09-18 17:32:04 +00:00
data = packageGenres(data)
console.dir(data)
await requestEdit(data,'story')
return redirect(`/story/${params.storyId}`)
}
2023-09-18 17:32:04 +00:00
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(){
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-18 17:32:04 +00:00
const [toggledGenres,setToggledGenres]=useState({})
const handleToggle = (target) => {
setToggledGenres(prev => {
return {
...prev,
[target]: !prev[target]
}
})
}
useEffect(()=>{
console.dir(toggledGenres)
},[toggledGenres])
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-12 09:38:45 +00:00
</label>
<label> Wordcount:
<input
placeholder='1000'
aria-label="Wordcount"
type="number"
step="1"
name="word_count"
2023-09-11 12:44:24 +00:00
defaultValue={storyData.word_count}
/>
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}
values={genres}
legend="Genres:"
/>
</label>
2023-09-12 09:38:45 +00:00
<div id="bottom-button-container">
<button type="submit">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>
)
}