handle 'save' imperatively
This commit is contained in:
parent
688c3ef6be
commit
c7a8f2e5a1
|
@ -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 PageHeader from "../Components/PageHeader";
|
||||||
import { requestEdit } from "../APIcalls.mjs";
|
import { requestEdit } from "../APIcalls.mjs";
|
||||||
import Checkboxes from "../Components/Checkboxes"
|
import Checkboxes from "../Components/Checkboxes"
|
||||||
|
@ -6,48 +6,55 @@ import { useState,useEffect } from "react";
|
||||||
import { forIn } from "lodash";
|
import { forIn } from "lodash";
|
||||||
|
|
||||||
export async function action({request,params}){
|
export async function action({request,params}){
|
||||||
const formData = await request.formData()
|
const data = await request.formData()
|
||||||
console.dir(formData)
|
|
||||||
let data = Object.fromEntries(formData)
|
|
||||||
data.id=parseInt(params.storyId)
|
|
||||||
data = packageGenres(data)
|
|
||||||
console.dir(data)
|
console.dir(data)
|
||||||
|
data.id=params.storyId
|
||||||
await requestEdit(data,'story')
|
await requestEdit(data,'story')
|
||||||
return redirect(`/story/${params.storyId}`)
|
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(){
|
export default function EditStory(){
|
||||||
|
const submit = useSubmit()
|
||||||
const navigate = useNavigate()
|
const navigate = useNavigate()
|
||||||
const { storyId } = useParams()
|
const { storyId } = useParams()
|
||||||
const { stories, genres } = useLoaderData()
|
const { stories, genres } = useLoaderData()
|
||||||
const storyData = stories.find(row=>row.id==storyId)
|
const storyData = stories.find(row=>row.id==storyId)
|
||||||
const [toggledGenres,setToggledGenres]=useState({})
|
const [data,setData] = useState({
|
||||||
|
genres:{}
|
||||||
|
})
|
||||||
const handleToggle = (target) => {
|
const handleToggle = (target) => {
|
||||||
setToggledGenres(prev => {
|
setData(prev => {
|
||||||
return {
|
return {
|
||||||
...prev,
|
...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(()=>{
|
useEffect(()=>{
|
||||||
console.dir(toggledGenres)
|
console.dir(data)
|
||||||
},[toggledGenres])
|
},[data])
|
||||||
return(
|
return(
|
||||||
<div id="page-container">
|
<div id="page-container">
|
||||||
<PageHeader super={`Story #${storyData.id}`} heading="EDIT" url="/story" id={storyId}/>
|
<PageHeader super={`Story #${storyData.id}`} heading="EDIT" url="/story" id={storyId}/>
|
||||||
|
@ -59,6 +66,7 @@ export default function EditStory(){
|
||||||
type="text"
|
type="text"
|
||||||
name="title"
|
name="title"
|
||||||
defaultValue={storyData.title}
|
defaultValue={storyData.title}
|
||||||
|
onChange={handleChange}
|
||||||
/>
|
/>
|
||||||
</label>
|
</label>
|
||||||
<label> Wordcount:
|
<label> Wordcount:
|
||||||
|
@ -69,6 +77,7 @@ export default function EditStory(){
|
||||||
step="1"
|
step="1"
|
||||||
name="word_count"
|
name="word_count"
|
||||||
defaultValue={storyData.word_count}
|
defaultValue={storyData.word_count}
|
||||||
|
onChange={handleChange}
|
||||||
/>
|
/>
|
||||||
</label>
|
</label>
|
||||||
<label>
|
<label>
|
||||||
|
@ -81,7 +90,7 @@ export default function EditStory(){
|
||||||
/>
|
/>
|
||||||
</label>
|
</label>
|
||||||
<div id="bottom-button-container">
|
<div id="bottom-button-container">
|
||||||
<button type="submit">SAVE</button>
|
<button type="button" onClick={handleSave}>SAVE</button>
|
||||||
<button type="button" onClick={()=>{navigate("/stories")}}>CANCEL</button>
|
<button type="button" onClick={()=>{navigate("/stories")}}>CANCEL</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue