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

View File

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

View File

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

View File

@ -1,15 +1,7 @@
import { Outlet, Link } from "react-router-dom"
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() {

View File

@ -1,7 +1,7 @@
import { useLoaderData } from "react-router-dom"
import { getStories } from "../APIcalls.mjs";
import Table from "../Components/Table.jsx";
import PageHeader from "../Components/PageHeader.jsx";
import { getStories } from "../APIcalls.mjs";
@ -17,7 +17,12 @@ export default function Stories(){
return(
<>
<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 Table from "../Components/Table";
import PageHeader from "../Components/PageHeader";
import { submissionsTableOptions } from "./submissions.jsx";
const { filterList=[...filterList],highlights,clickables } = submissionsTableOptions
export default function Story(){
const { storyId } = useParams()
const { stories } = useLoaderData()
const storyData = stories.find(row=>row.id==storyId)
filterList.push(
'story',
)
return(
<>
<PageHeader text={'Story#'+storyId}/>
{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 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 default function Submissions(){
export function Submissions(){
const { submissions } = useLoaderData();
const filterList = [
'response_id',
@ -28,7 +42,7 @@ export default function Submissions(){
data={submissions}
filterList={filterList}
highlights={highlights}
sortByDefault="Submitted"
sortByDefault="date_submitted"
clickables={clickables}
/>
</>