diff --git a/src/APIcalls.mjs b/src/APIcalls.mjs index dba111f..f744e9c 100644 --- a/src/APIcalls.mjs +++ b/src/APIcalls.mjs @@ -31,6 +31,14 @@ export const getPublications = async () => { console.error(error) } } +export const getResponses = async () => { + try { + const res = await API.get("responses") + return res + } catch (error) { + console.error(error) + } +} export const requestEdit = async (data,type) => { try { const res = await API.post(`/${type}/edit`,data) diff --git a/src/Components/Dropdown.jsx b/src/Components/Dropdown.jsx index 83af3f8..08e1fd1 100644 --- a/src/Components/Dropdown.jsx +++ b/src/Components/Dropdown.jsx @@ -1,12 +1,11 @@ export default (props) => { - console.log('options') - console.dir(props.options) + const optionsRendered = props.options?.map((e,i)=>{ - return + return }) - return {optionsRendered} } \ No newline at end of file diff --git a/src/loaders.mjs b/src/loaders.mjs index 9b52f30..a7cf323 100644 --- a/src/loaders.mjs +++ b/src/loaders.mjs @@ -1,4 +1,4 @@ -import {getStories,getPublications,getSubmissions} from './APIcalls.mjs' +import {getStories,getPublications,getSubmissions, getResponses} from './APIcalls.mjs' export async function publicationsLoader (){ let publications = await getPublications() @@ -14,4 +14,13 @@ export async function submissionsLoader(){ let submissions = await getSubmissions() submissions=submissions.data return { submissions } - } \ No newline at end of file + } + +export async function editSubmissionLoader(){ + const {stories} = await storiesLoader() + const {publications} = await publicationsLoader() + const {submissions} = await submissionsLoader() + let responses = await getResponses() + responses = responses.data + return { stories, publications, submissions, responses} +} \ No newline at end of file diff --git a/src/main.jsx b/src/main.jsx index 1817fd1..138fdf1 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -7,13 +7,14 @@ import Story from './routes/story'; import Stories from './routes/stories'; import Publication from './routes/publication'; import Publications from './routes/publications'; -import { storiesLoader,publicationsLoader,submissionsLoader } from './loaders.mjs'; +import { storiesLoader,publicationsLoader,submissionsLoader, editSubmissionLoader } from './loaders.mjs'; import EditStory, {action as editStoryAction } from './routes/editStory'; import EditPublication, {action as editPublicationAction} from './routes/editPublication'; import CreateStory, {action as createStoryAction} from './routes/createStory'; import CreatePublication, {action as createPublicationAction} from './routes/createPublication'; import { action as deleteStoryAction } from './routes/deleteStory'; import { action as deletePublicationAction } from './routes/deletePublication'; +import EditSubmission, {action as editSubmissionAction} from './routes/editSubmission'; import './styles/index.css' import { createBrowserRouter, @@ -29,6 +30,7 @@ const router = createBrowserRouter([ { path: "/stories", element: , + id:"stories", loader: storiesLoader }, { @@ -38,6 +40,7 @@ const router = createBrowserRouter([ }, { path: "/publications", + id:"publications", element: , loader: publicationsLoader }, @@ -63,6 +66,12 @@ const router = createBrowserRouter([ loader: publicationsLoader, action: editPublicationAction }, + { + path:"/submission/:submissionId/edit", + element: , + loader: editSubmissionLoader, + action: editSubmissionAction + }, { path:"/story/create", element: , diff --git a/src/routes/editPublication.jsx b/src/routes/editPublication.jsx index 58ac255..d7c4816 100644 --- a/src/routes/editPublication.jsx +++ b/src/routes/editPublication.jsx @@ -23,6 +23,7 @@ export default function EditPublication(){ <>
+ + +
+ + +
+
diff --git a/src/routes/editStory.jsx b/src/routes/editStory.jsx index 751c4c3..0b4eb7a 100644 --- a/src/routes/editStory.jsx +++ b/src/routes/editStory.jsx @@ -23,6 +23,7 @@ export default function EditStory(){ <>
+ + +
+
+
diff --git a/src/routes/editSubmission.jsx b/src/routes/editSubmission.jsx new file mode 100644 index 0000000..08a2435 --- /dev/null +++ b/src/routes/editSubmission.jsx @@ -0,0 +1,75 @@ +import { Form, useLoaderData, useParams, redirect } from "react-router-dom"; +import PageHeader from "../Components/PageHeader"; +import { requestEdit } from "../APIcalls.mjs"; +import Dropdown from "../Components/Dropdown"; +import { useEffect,useState } from "react"; + +export async function action({request,params}){ + const formData = await request.formData() + const data = Object.fromEntries(formData) + data.id=parseInt(params.submissionId) + console.dir(data) + await requestEdit(data,'submission') + return redirect(`/submissions`) +} + + + + +export default function EditSubmission(){ + const { submissionId } = useParams() + const { submissions, stories, publications, responses } = useLoaderData() + const submissionData = submissions.find(row=>row.id==submissionId) + const [data,setData] = useState({ + story_id:submissionData.story_id, + pub_id:submissionData.pub_id, + date_submitted:submissionData.date_submitted, + date_responded:submissionData.date_responded, + response_id:submissionData.response_id + }) + + + const storiesOptions = stories?.map(row=>[row.id,row.title]) + const publicationsOptions = publications?.map(row=>[row.id,row.title]) + const responsesOptions = responses?.map(row=>[row.id,row.response]) + + const handleChange = (event) => { + const value = event.target.value + setData({ + ...data, + [event.target.name]: value + }) + } + + + + return( + <> + +
+ + + + + +
+ + +
+ +
+ + + ) + +} \ No newline at end of file diff --git a/src/routes/story.jsx b/src/routes/story.jsx index e5a1d13..3885e3c 100644 --- a/src/routes/story.jsx +++ b/src/routes/story.jsx @@ -1,45 +1,48 @@ -import { useLoaderData, useParams, Link,Form } from "react-router-dom"; +import { useLoaderData, useParams, Link, Form } from "react-router-dom"; import Table from "../Components/Table"; import PageHeader from "../Components/PageHeader"; import { submissionsTableOptions } from "./submissions.jsx"; import { useState, useEffect } from "react"; -const { filterList=[...filterList],highlights,clickables } = submissionsTableOptions -export default function Story(){ - const { storyId } = useParams() - const { stories } = useLoaderData() - const storyData = stories.find(row=>row.id==storyId) - - return( - <> -
- -
Wordcount: {storyData.word_count}
-
- EDIT -
{ - if ( - !confirm( - "Please confirm you want to delete this record." - ) - ) { - event.preventDefault(); - } - }} -> - -
-
- - ) +const { filterList = [...filterList], highlights, clickables } = submissionsTableOptions +export default function Story() { + const { storyId } = useParams() + const { stories } = useLoaderData() + const storyData = stories.find(row => row.id == storyId) + + return ( + <> +
+ +
Wordcount: {storyData.word_count}
+
+ +
{ + if ( + !confirm( + "Please confirm you want to delete this record." + ) + ) { + event.preventDefault(); + } + }} + > + +
+
+ EDIT +
+
+ + ) } \ No newline at end of file diff --git a/src/routes/submissions.jsx b/src/routes/submissions.jsx index 9783b03..0690828 100644 --- a/src/routes/submissions.jsx +++ b/src/routes/submissions.jsx @@ -32,8 +32,11 @@ export function Submissions(){ const clickables = [ ['story',(row)=>{ return `../../story/${row.story_id}`}], - ['publication',(row)=>{return `../../publication/${row.pub_id}`}] + ['publication',(row)=>{return `../../publication/${row.pub_id}`}], + ['id',(row)=>{return `../../submission/${row.id}/edit`}] ] + + return( <> diff --git a/src/styles/Form.css b/src/styles/Form.css new file mode 100644 index 0000000..b7cace7 --- /dev/null +++ b/src/styles/Form.css @@ -0,0 +1,70 @@ +form{ + --bg-color: hsl(var(--color-2),var(--lightest)); + --fg-color: hsl(var(--color-3),var(--off-white)); + font-size: 2rem; + background-color: var(--bg-color); + box-shadow: var(--box-shadow); + border-radius: 2rem; + padding:2rem; + width:max-content; + margin:auto; + +} + +fieldset{ + width: fit-content; + padding:8px; +} + +label{ + border-radius: 1rem; + padding:1rem; + width:100%; + display:flex; + gap:3rem; + justify-content:space-between; + align-items: center; + font-weight: bold; +} +fieldset > label{ + justify-content: flex-start; + font-weight: normal; +} +legend{ + font-weight: bold; +} +input,select { + max-width: 30rem; + float:right; + font-size: 2rem; + padding:1rem; + border-radius: 1rem; + margin:1rem; + margin-left:2rem; + background-color: var(--fg-color); + box-shadow: var(--box-shadow-light); +} +form button, form a{ + float:right; + font-size: 3.2rem; + padding: 1rem; + border-radius: 2rem; + box-shadow: var(--box-shadow); + margin:1rem; + margin-top: 4rem; + background-color: hsl(var(--color-3),var(--light)); +} +form button:hover{ + background-color: hsl(var(--color-3),var(--lightest)); +} + +#bottom-button-container{ + width:fit-content; + margin:auto; +} +input[type=date]{ + font-family: inherit; +} +input[type=text]{ + width:fit-content; +} \ No newline at end of file diff --git a/src/styles/index.css b/src/styles/index.css index 1e6f7a5..ca14813 100644 --- a/src/styles/index.css +++ b/src/styles/index.css @@ -1,5 +1,6 @@ @import 'Table.css'; @import 'Variables.css'; +@import 'Form.css'; *, *::before, *::after {