move loaders to own module

This commit is contained in:
Andrzej Stepien 2023-09-07 10:07:38 +02:00
parent 3f2da991b4
commit e483e39c5d
8 changed files with 79 additions and 28 deletions

16
src/loaders.mjs Normal file
View File

@ -0,0 +1,16 @@
import {getStories,getPublications,getSubmissions} from './APIcalls.mjs'
export async function publicationsLoader (){
let publications = await getPublications()
publications = publications.data
return {publications}
}
export async function storiesLoader(){
let stories = await getStories()
stories = stories.data
return {stories}
}export async function submissionsLoader(){
let submissions = await getSubmissions()
submissions=submissions.data
return { submissions }
}

View File

@ -1,12 +1,13 @@
import React from 'react' import React from 'react'
import ReactDOM from 'react-dom/client' import ReactDOM from 'react-dom/client'
import { Root, loader as rootLoader } from './routes/root'; import { Root } from './routes/root';
import ErrorPage from './error-page'; import ErrorPage from './error-page';
import Submissions from './routes/submissions'; import {Submissions} from './routes/submissions';
import Story from './routes/story'; import Story from './routes/story';
import Stories from './routes/stories'; import Stories from './routes/stories';
import Publication from './routes/publication'; import Publication from './routes/publication';
import Publications from './routes/publications'; import Publications from './routes/publications';
import { storiesLoader,publicationsLoader,submissionsLoader } from './loaders.mjs';
import './styles/index.css' import './styles/index.css'
import { import {
createBrowserRouter, createBrowserRouter,
@ -22,27 +23,27 @@ const router = createBrowserRouter([
{ {
path: "/stories", path: "/stories",
element: <Stories/>, element: <Stories/>,
loader: rootLoader loader: storiesLoader
}, },
{ {
path: "/submissions", path: "/submissions",
element: <Submissions/>, element: <Submissions/>,
loader: rootLoader loader: submissionsLoader
}, },
{ {
path: "/publications", path: "/publications",
element: <Publications/>, element: <Publications/>,
loader: rootLoader loader: publicationsLoader
}, },
{ {
path: "/story/:storyId", path: "/story/:storyId",
element: <Story/>, element: <Story/>,
loader: rootLoader loader: storiesLoader
}, },
{ {
path: "/publication/:publicationId", path: "/publication/:publicationId",
element: <Publication/>, element: <Publication/>,
loader: rootLoader loader: publicationsLoader
} }
] ]
}, },

View File

@ -1,15 +1,23 @@
import { useLoaderData, useParams } from "react-router-dom"; import { useLoaderData, useParams } from "react-router-dom";
import Table from "../Components/Table"; import Table from "../Components/Table";
import PageHeader from "../Components/PageHeader"; import PageHeader from "../Components/PageHeader";
export default function Publication(){ import { submissionsTableOptions } from "./submissions.jsx";
const { filterList, highlights, clickables } = submissionsTableOptions
export default function Publication() {
const { publicationId } = useParams() const { publicationId } = useParams()
const { publications } = useLoaderData() const { publications } = useLoaderData()
const publicationsData = publications.find(row=>row.id==publicationId) const publicationsData = publications.find(row => row.id == publicationId)
return( return (
<> <>
<PageHeader text={'Publication#'+publicationId}/> <PageHeader text={'Publication#' + publicationId} />
{JSON.stringify(publicationsData)} {JSON.stringify(publicationsData)}
<Table data={publicationsData.submissions}></Table> <Table data={publicationsData.submissions}
filterList={filterList}
highlights={highlights}
clickables={clickables}
sortByDefault='date_submitted'
></Table>
</> </>
) )
} }

View File

@ -4,6 +4,7 @@ import Table from "../Components/Table.jsx";
import PageHeader from "../Components/PageHeader.jsx"; import PageHeader from "../Components/PageHeader.jsx";
export default function Publications(){ export default function Publications(){
@ -25,6 +26,7 @@ export default function Publications(){
filterList={filterList} filterList={filterList}
links={links} links={links}
clickables={clickables} clickables={clickables}
sortByDefault='title'
/> />
</> </>
) )

View File

@ -1,15 +1,7 @@
import { Outlet, Link } from "react-router-dom" import { Outlet, Link } from "react-router-dom"
import { getStories, getPublications, getSubmissions } from "../APIcalls.mjs" import { getStories, getPublications, getSubmissions } from "../APIcalls.mjs"
export async function loader(){
let stories = await getStories()
stories = stories.data
let publications = await getPublications()
publications = publications.data
let submissions = await getSubmissions()
submissions=submissions.data
return { stories, publications, submissions }
}
export function Root() { export function Root() {

View File

@ -1,7 +1,7 @@
import { useLoaderData } from "react-router-dom" import { useLoaderData } from "react-router-dom"
import { getStories } from "../APIcalls.mjs";
import Table from "../Components/Table.jsx"; import Table from "../Components/Table.jsx";
import PageHeader from "../Components/PageHeader.jsx"; import PageHeader from "../Components/PageHeader.jsx";
import { getStories } from "../APIcalls.mjs";
@ -17,7 +17,12 @@ export default function Stories(){
return( return(
<> <>
<PageHeader text="Stories"/> <PageHeader text="Stories"/>
<Table data={stories} filterList={filterList} clickables={clickables}/> <Table
data={stories}
filterList={filterList}
clickables={clickables}
sortByDefault='title'
/>
</> </>
) )
} }

View File

@ -1,15 +1,28 @@
import { useLoaderData, useParams } from "react-router-dom"; import { useLoaderData, useParams } from "react-router-dom";
import Table from "../Components/Table"; import Table from "../Components/Table";
import PageHeader from "../Components/PageHeader"; import PageHeader from "../Components/PageHeader";
import { submissionsTableOptions } from "./submissions.jsx";
const { filterList=[...filterList],highlights,clickables } = submissionsTableOptions
export default function Story(){ export default function Story(){
const { storyId } = useParams() const { storyId } = useParams()
const { stories } = useLoaderData() const { stories } = useLoaderData()
const storyData = stories.find(row=>row.id==storyId) const storyData = stories.find(row=>row.id==storyId)
filterList.push(
'story',
)
return( return(
<> <>
<PageHeader text={'Story#'+storyId}/> <PageHeader text={'Story#'+storyId}/>
{JSON.stringify(storyData)} {JSON.stringify(storyData)}
<Table data={storyData.submissions}></Table> <Table
data={storyData.submissions}
filterList={filterList}
highlights={highlights}
clickables={clickables}
sortByDefault='date_submitted'
></Table>
</> </>
) )
} }

View File

@ -3,9 +3,23 @@ import { getSubmissions } from "../APIcalls.mjs";
import Table from "../Components/Table"; import Table from "../Components/Table";
import PageHeader from "../Components/PageHeader"; import PageHeader from "../Components/PageHeader";
export const submissionsTableOptions = {
filterList : [
'response_id',
'pub_id',
'story_id'
],
highlights : [
['response','Pending']
],
clickables : [
['story',(row)=>{
return `../../story/${row.story_id}`}],
['publication',(row)=>{return `../../publication/${row.pub_id}`}]
]
}
export function Submissions(){
export default function Submissions(){
const { submissions } = useLoaderData(); const { submissions } = useLoaderData();
const filterList = [ const filterList = [
'response_id', 'response_id',
@ -28,7 +42,7 @@ export default function Submissions(){
data={submissions} data={submissions}
filterList={filterList} filterList={filterList}
highlights={highlights} highlights={highlights}
sortByDefault="Submitted" sortByDefault="date_submitted"
clickables={clickables} clickables={clickables}
/> />
</> </>