SWR for Data fetching on Front, Actual & Corporate pages
This commit is contained in:
Generated
+13
@@ -5545,6 +5545,11 @@
|
||||
"resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
|
||||
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
|
||||
},
|
||||
"dequal": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.2.tgz",
|
||||
"integrity": "sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug=="
|
||||
},
|
||||
"des.js": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
|
||||
@@ -14237,6 +14242,14 @@
|
||||
"integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=",
|
||||
"dev": true
|
||||
},
|
||||
"swr": {
|
||||
"version": "0.3.11",
|
||||
"resolved": "https://registry.npmjs.org/swr/-/swr-0.3.11.tgz",
|
||||
"integrity": "sha512-ya30LuRGK2R7eDlttnb7tU5EmJYJ+N6ytIOM2j0Hqs0qauJcDjVLDOGy7KmFeH5ivOwLHalFaIyYl2K+SGa7HQ==",
|
||||
"requires": {
|
||||
"dequal": "2.0.2"
|
||||
}
|
||||
},
|
||||
"symbol-observable": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
|
||||
|
||||
+2
-1
@@ -96,6 +96,7 @@
|
||||
"react-markdown": "4.3.1",
|
||||
"react-mde": "11.0.0",
|
||||
"shortid": "2.2.14",
|
||||
"styled-components": "5.1.1"
|
||||
"styled-components": "5.1.1",
|
||||
"swr": "0.3.11"
|
||||
}
|
||||
}
|
||||
|
||||
+36
-19
@@ -1,29 +1,46 @@
|
||||
import React from "react";
|
||||
import { NextPage, GetServerSideProps } from "next";
|
||||
import { getEvents } from "@models/Event";
|
||||
import { getFeed } from "@models/Feed";
|
||||
import Head from "next/head";
|
||||
import useSWR from "swr";
|
||||
import { Event, getEvents } from "@models/Event";
|
||||
import { Post, getFeed } from "@models/Feed";
|
||||
import FrontPageView from "@views/FrontPage/FrontPageView";
|
||||
import Header from "@components/Header";
|
||||
import Footer from "@components/Footer/Footer";
|
||||
import PageWrapper from "@views/common/PageWrapper";
|
||||
|
||||
const FrontPage: NextPage<React.ComponentProps<typeof FrontPageView>> = (props) => (
|
||||
<>
|
||||
<Header />
|
||||
<FrontPageView {...props} />
|
||||
<Footer />
|
||||
</>
|
||||
);
|
||||
const eventFetcher = () => getEvents({
|
||||
onlyNonPast: true,
|
||||
limit: 4,
|
||||
});
|
||||
|
||||
export const getServerSideProps: GetServerSideProps = async () => {
|
||||
const events = await getEvents({
|
||||
onlyNonPast: true,
|
||||
limit: 4,
|
||||
});
|
||||
const feed = await getFeed();
|
||||
const feedFetcher = () => getFeed();
|
||||
|
||||
interface InitialProps {
|
||||
initialEvents: Event[];
|
||||
initialFeed: Post[];
|
||||
}
|
||||
|
||||
const FrontPage: NextPage<InitialProps> = ({ initialEvents, initialFeed }) => {
|
||||
const eventResult = useSWR("allEvents", eventFetcher, { initialData: initialEvents });
|
||||
const feedResult = useSWR("feed", feedFetcher, { initialData: initialFeed });
|
||||
|
||||
return (
|
||||
<>
|
||||
<Head>
|
||||
<link rel="canonical" href="https://sik.ayy.fi/" />
|
||||
</Head>
|
||||
<PageWrapper>
|
||||
<FrontPageView events={eventResult.data} feed={feedResult.data} />
|
||||
</PageWrapper>
|
||||
</>
|
||||
)};
|
||||
|
||||
export const getServerSideProps: GetServerSideProps<InitialProps> = async () => {
|
||||
const initialEvents = await eventFetcher();
|
||||
const initialFeed = await getFeed();
|
||||
return {
|
||||
props: {
|
||||
events,
|
||||
feed,
|
||||
initialEvents,
|
||||
initialFeed,
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,89 +1,48 @@
|
||||
import React from "react";
|
||||
import { Helmet } from "react-helmet";
|
||||
import { StaticContext } from "@server/StaticContext";
|
||||
import ActualPageView from "@views/ActualPage/ActualPageView";
|
||||
import { NextPage, GetServerSideProps } from "next";
|
||||
import Head from "next/head";
|
||||
import useSWR from "swr";
|
||||
import { Event, getEvents } from "@models/Event";
|
||||
import { Post, getFeed } from "@models/Feed";
|
||||
import ActualPageView from "@views/ActualPage/ActualPageView";
|
||||
import PageWrapper from "@views/common/PageWrapper";
|
||||
|
||||
interface ActualPageProps {
|
||||
staticContext: StaticContext;
|
||||
const eventFetcher = () => getEvents({
|
||||
onlyNonPast: true
|
||||
});
|
||||
|
||||
const feedFetcher = () => getFeed();
|
||||
|
||||
interface InitialProps {
|
||||
initialEvents: Event[];
|
||||
initialFeed: Post[];
|
||||
}
|
||||
|
||||
interface ActualPageState {
|
||||
events: Event[];
|
||||
feed: Post[];
|
||||
const ActualPage: NextPage<InitialProps> = ({ initialEvents, initialFeed }) => {
|
||||
const eventResult = useSWR("4events", eventFetcher, { initialData: initialEvents });
|
||||
const feedResult = useSWR("feed", feedFetcher, { initialData: initialFeed });
|
||||
|
||||
return (
|
||||
<>
|
||||
<Head>
|
||||
<link rel="canonical" href="https://sik.ayy.fi/kilta/toiminta" />
|
||||
</Head>
|
||||
<PageWrapper>
|
||||
<ActualPageView events={eventResult.data} feed={feedResult.data} />
|
||||
</PageWrapper>
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
class ActualPage extends React.Component<ActualPageProps, ActualPageState> {
|
||||
constructor(props: ActualPageProps) {
|
||||
super(props);
|
||||
const { staticContext } = props;
|
||||
|
||||
if (staticContext) {
|
||||
/* The static context is an object that manages promises when
|
||||
rendering on the server. If staticContext exists, that means
|
||||
we have to store all promises in it. Otherwise, operate
|
||||
normally. See server/index.ts. */
|
||||
if (staticContext.resolutions.getEvents) {
|
||||
const events = staticContext.resolutions.getEvents as Event[];
|
||||
const feed = staticContext.resolutions.getFeed as Post[];
|
||||
this.state = {
|
||||
events,
|
||||
feed,
|
||||
};
|
||||
} else {
|
||||
this.state = {
|
||||
events: [],
|
||||
feed: [],
|
||||
};
|
||||
const promiseEvents = this.fetchEvents();
|
||||
const promiseFeed = this.fetchFeed();
|
||||
staticContext.promises.getEvents = promiseEvents;
|
||||
staticContext.promises.getFeed = promiseFeed;
|
||||
}
|
||||
} else {
|
||||
this.state = {
|
||||
events: [],
|
||||
feed: [],
|
||||
};
|
||||
this.fetchEvents();
|
||||
this.fetchFeed();
|
||||
}
|
||||
}
|
||||
|
||||
fetchEvents = () => {
|
||||
const getEventsPromise = getEvents({
|
||||
onlyNonPast: true,
|
||||
});
|
||||
getEventsPromise.then(events => {
|
||||
this.setState({
|
||||
events,
|
||||
});
|
||||
});
|
||||
return getEventsPromise;
|
||||
}
|
||||
|
||||
fetchFeed = () => {
|
||||
const getFeedPromise = getFeed();
|
||||
getFeedPromise.then(feed => {
|
||||
this.setState({
|
||||
feed,
|
||||
});
|
||||
});
|
||||
return getFeedPromise;
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<>
|
||||
<Helmet>
|
||||
<link rel="canonical" href="https://sik.ayy.fi/kilta/toiminta" />
|
||||
</Helmet>
|
||||
<ActualPageView events={this.state.events} feed={this.state.feed} />
|
||||
</>
|
||||
)
|
||||
}
|
||||
}
|
||||
export const getServerSideProps: GetServerSideProps<InitialProps> = async () => {
|
||||
const initialEvents = await eventFetcher();
|
||||
const initialFeed = await getFeed();
|
||||
return {
|
||||
props: {
|
||||
initialEvents,
|
||||
initialFeed,
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export default ActualPage;
|
||||
|
||||
@@ -1,18 +1,38 @@
|
||||
import React from "react";
|
||||
import { Helmet } from "react-helmet";
|
||||
import { NextPage, GetServerSideProps } from "next";
|
||||
import Head from "next/head";
|
||||
import useSWR from "swr";
|
||||
import { JobAd, getJobAds } from "@models/JobAd";
|
||||
import CorporatePageView from "@views/CorporatePage/CorporatePageView";
|
||||
import useFetchJobAds from "@hooks/useFetchJobAds";
|
||||
import PageWrapper from "@views/common/PageWrapper";
|
||||
|
||||
const CorporatePage: React.FC = () => {
|
||||
const jobAds = useFetchJobAds();
|
||||
const jobAdFetcher = () => getJobAds();
|
||||
|
||||
interface InitialProps {
|
||||
initialJobAds: JobAd[];
|
||||
}
|
||||
|
||||
const CorporatePage: NextPage<InitialProps> = ({ initialJobAds }) => {
|
||||
const { data, error } = useSWR("allJobAds", jobAdFetcher, { initialData: initialJobAds })
|
||||
return (
|
||||
<>
|
||||
<Helmet>
|
||||
<Head>
|
||||
<link rel="canonical" href="https://sik.ayy.fi/yritysyhteistyo" />
|
||||
</Helmet>
|
||||
<CorporatePageView jobAds={jobAds} />
|
||||
</Head>
|
||||
<PageWrapper>
|
||||
<CorporatePageView jobAds={data} />
|
||||
</PageWrapper>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
export const getServerSideProps: GetServerSideProps<InitialProps> = async () => {
|
||||
const initialJobAds = await jobAdFetcher();
|
||||
return {
|
||||
props: {
|
||||
initialJobAds
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default CorporatePage;
|
||||
|
||||
Reference in New Issue
Block a user