Compare commits
2 Commits
bothoneypot
...
Web-2.1
| Author | SHA1 | Date | |
|---|---|---|---|
| a4a3da7b44 | |||
| 1287a232a9 |
@@ -0,0 +1,46 @@
|
||||
import React from "react";
|
||||
import { NextPage, GetStaticProps } from "next";
|
||||
import Head from "next/head";
|
||||
import useSWR from "swr";
|
||||
import EventsPageView from "@views/EventsPage/EventsPageView";
|
||||
import PageWrapper from "@views/common/PageWrapper";
|
||||
import { fetcher, API, APIPath } from "@api/backend";
|
||||
import Event from "@models/Event";
|
||||
|
||||
const eventApi: API = {
|
||||
path: APIPath.EVENTS,
|
||||
queryParams: {
|
||||
limit: 10,
|
||||
},
|
||||
};
|
||||
|
||||
interface InitialProps {
|
||||
initialEvents: Event[];
|
||||
}
|
||||
|
||||
const EventsPage: NextPage<InitialProps> = ({ initialEvents }) => {
|
||||
const { data: events } = useSWR<Event[]>(eventApi, fetcher, { fallbackData: initialEvents });
|
||||
|
||||
return (
|
||||
<>
|
||||
<Head>
|
||||
<link rel="canonical" href={`${process.env.NEXT_PUBLIC_SITE_URL}/toiminta/tapahtumat`} />
|
||||
</Head>
|
||||
<PageWrapper>
|
||||
<EventsPageView events={events} />
|
||||
</PageWrapper>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export const getStaticProps: GetStaticProps<InitialProps> = async () => {
|
||||
const initialEvents = fetcher<Event[]>(eventApi);
|
||||
return {
|
||||
props: {
|
||||
initialEvents: await initialEvents,
|
||||
},
|
||||
revalidate: 10,
|
||||
};
|
||||
};
|
||||
|
||||
export default EventsPage;
|
||||
@@ -0,0 +1,46 @@
|
||||
import React from "react";
|
||||
import { NextPage, GetStaticProps } from "next";
|
||||
import Head from "next/head";
|
||||
import useSWR from "swr";
|
||||
import NewsFeedPageView from "@views/NewsFeedPage/NewsFeedPageView";
|
||||
import PageWrapper from "@views/common/PageWrapper";
|
||||
import { fetcher, API, APIPath } from "@api/backend";
|
||||
import Post from "@models/Feed";
|
||||
|
||||
const feedApi: API = {
|
||||
path: APIPath.FEED,
|
||||
queryParams: {
|
||||
limit: 10,
|
||||
},
|
||||
};
|
||||
|
||||
interface InitialProps {
|
||||
initialPosts: Post[];
|
||||
}
|
||||
|
||||
const NewsFeedPage: NextPage<InitialProps> = ({ initialPosts }) => {
|
||||
const { data: posts } = useSWR<Post[]>(feedApi, fetcher, { fallbackData: initialPosts });
|
||||
|
||||
return (
|
||||
<>
|
||||
<Head>
|
||||
<link rel="canonical" href={`${process.env.NEXT_PUBLIC_SITE_URL}/toiminta/uutiset`} />
|
||||
</Head>
|
||||
<PageWrapper>
|
||||
<NewsFeedPageView posts={posts} />
|
||||
</PageWrapper>
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
export const getStaticProps: GetStaticProps<InitialProps> = async () => {
|
||||
const initialPosts = fetcher<Post[]>(feedApi);
|
||||
return {
|
||||
props: {
|
||||
initialPosts: await initialPosts,
|
||||
},
|
||||
revalidate: 10,
|
||||
};
|
||||
};
|
||||
|
||||
export default NewsFeedPage;
|
||||
@@ -0,0 +1,63 @@
|
||||
import React from "react";
|
||||
|
||||
import {
|
||||
Card,
|
||||
CardSection,
|
||||
} from "@components/index";
|
||||
|
||||
import Event from "@models/Event";
|
||||
import noop from "@utils/noop";
|
||||
import { getTranslateFunc } from "../../i18n";
|
||||
|
||||
interface EventsPageViewProps {
|
||||
events: Event[];
|
||||
}
|
||||
|
||||
const cardTimeOpts: Intl.DateTimeFormatOptions = {
|
||||
day: "numeric",
|
||||
month: "numeric",
|
||||
year: "numeric",
|
||||
hour: "numeric",
|
||||
minute: "2-digit",
|
||||
};
|
||||
|
||||
const EventsPageView: React.FC<EventsPageViewProps> = ({ events }) => {
|
||||
const isFi = true;
|
||||
const t = getTranslateFunc("fi");
|
||||
|
||||
const buttonText = `${t("Lue lisää")}\xa0›`;
|
||||
|
||||
const locale = isFi ? "fi-FI" : "en-GB";
|
||||
|
||||
const filteredEvents = events.map((e) => ({
|
||||
...e,
|
||||
title: isFi ? e.title_fi : e.title_en,
|
||||
description: isFi ? e.description_fi : e.description_en,
|
||||
content: isFi ? e.content_fi : e.content_en,
|
||||
location: isFi ? e.location_fi : e.location_en,
|
||||
startDate: new Date(e.start_time).toLocaleString(locale, cardTimeOpts),
|
||||
endDate: new Date(e.end_time).toLocaleString(locale, cardTimeOpts),
|
||||
}));
|
||||
return (
|
||||
<CardSection id="#events">
|
||||
{filteredEvents.map((event) => (
|
||||
<Card
|
||||
key={event.id}
|
||||
title={event.title}
|
||||
startTime={new Date(event.start_time).toLocaleString(locale, cardTimeOpts)}
|
||||
text={event.description}
|
||||
link={`/events/${event.id}`}
|
||||
image={{
|
||||
src: event.image || event.tags[0].icon,
|
||||
alt: event.title,
|
||||
}}
|
||||
buttonOnClick={noop}
|
||||
buttonText={buttonText}
|
||||
data-e2e="event-card"
|
||||
/>
|
||||
))}
|
||||
</CardSection>
|
||||
);
|
||||
};
|
||||
|
||||
export default EventsPageView;
|
||||
@@ -0,0 +1,56 @@
|
||||
import React from "react";
|
||||
|
||||
import {
|
||||
Card,
|
||||
CardSection,
|
||||
} from "@components/index";
|
||||
|
||||
import Post from "@models/Feed";
|
||||
import noop from "@utils/noop";
|
||||
import { getTranslateFunc } from "../../i18n";
|
||||
|
||||
interface NewsFeedPageViewProps {
|
||||
posts: Post[];
|
||||
}
|
||||
|
||||
const cardTimeOpts: Intl.DateTimeFormatOptions = {
|
||||
day: "numeric",
|
||||
month: "numeric",
|
||||
year: "numeric",
|
||||
hour: "numeric",
|
||||
minute: "2-digit",
|
||||
};
|
||||
|
||||
const NewsFeedPageView: React.FC<NewsFeedPageViewProps> = ({ posts }) => {
|
||||
const isFi = true;
|
||||
const t = getTranslateFunc("fi");
|
||||
|
||||
const buttonText = `${t("Lue lisää")}\xa0›`;
|
||||
|
||||
const locale = isFi ? "fi-FI" : "en-GB";
|
||||
|
||||
const filteredFeed = posts.map((post) => ({
|
||||
...post,
|
||||
title: isFi ? post.title_fi : post.title_en,
|
||||
description: isFi ? post.description_fi : post.description_en,
|
||||
content: isFi ? post.content_fi : post.content_en,
|
||||
publish_time: new Date(post.publish_time).toLocaleString(locale, cardTimeOpts),
|
||||
}));
|
||||
return (
|
||||
<CardSection>
|
||||
{filteredFeed.map((post) => (
|
||||
<Card
|
||||
key={post.id}
|
||||
title={post.title}
|
||||
text={post.description}
|
||||
startTime={post.publish_time}
|
||||
link={`/feed/${post.id}`}
|
||||
buttonOnClick={noop}
|
||||
buttonText={buttonText}
|
||||
/>
|
||||
))}
|
||||
</CardSection>
|
||||
);
|
||||
};
|
||||
|
||||
export default NewsFeedPageView;
|
||||
Reference in New Issue
Block a user