From da2a1db61b09cf798e6d22736acf7c4184ed00c6 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Mon, 11 Mar 2019 20:52:41 +0200 Subject: [PATCH] Improve admin page layout --- .../AdminCommonPage/AdminCommonPage.scss | 11 +++ src/pages/AdminEventPage/AdminEventPage.tsx | 69 ++++++++++----- src/pages/AdminFeedPage/AdminFeedPage.tsx | 87 ++++++++++++------- src/pages/AdminFrontPage/AdminFrontPage.scss | 5 ++ src/pages/AdminFrontPage/AdminFrontPage.tsx | 3 +- 5 files changed, 118 insertions(+), 57 deletions(-) diff --git a/src/pages/AdminCommonPage/AdminCommonPage.scss b/src/pages/AdminCommonPage/AdminCommonPage.scss index d0c8a1a..a1e50ee 100644 --- a/src/pages/AdminCommonPage/AdminCommonPage.scss +++ b/src/pages/AdminCommonPage/AdminCommonPage.scss @@ -23,4 +23,15 @@ padding: 0.5rem 1rem; color: $white; } + + h1 { + margin-top: 0; + } + + .error { + border: 1px solid $orange2; + padding: 8px 16px; + color: $orange2; + display: inline-block; + } } diff --git a/src/pages/AdminEventPage/AdminEventPage.tsx b/src/pages/AdminEventPage/AdminEventPage.tsx index 52f8922..aaeacb7 100644 --- a/src/pages/AdminEventPage/AdminEventPage.tsx +++ b/src/pages/AdminEventPage/AdminEventPage.tsx @@ -13,6 +13,7 @@ export interface AdminEventPageProps { } export interface AdminEventPageState { events: Event[]; + error?: string; } class AdminEventPage extends React.Component { @@ -45,42 +46,62 @@ class AdminEventPage extends React.Component { + fetchEvents = async () => { const getEventsPromise = getEvents(); - getEventsPromise.then(events => { + try { + const events = await getEventsPromise; this.setState({ events, }); - }); - return getEventsPromise; + return getEventsPromise; + } catch (err) { + this.setState({ + error: String(err), + }); + } + } + + renderData = () => { + const { events, error } = this.state; + + if (error) { + return
{ error }
; + } + + if (!events || events.length === 0) { + return
No events.
; + } + + return ( + + + + + + + + + + {events.map(event => ( + + + + + + ))} + +
TitleStart timeEnd time
{event.title}{formatRelative(new Date(event.start_time), new Date())}{formatRelative(new Date(event.end_time), new Date())}
+ ); } render() { - const { events } = this.state; - return (
- - - - - - - - - - {events.map(event => ( - - - - - - ))} - -
TitleStart timeEnd time
{event.title}{formatRelative(new Date(event.start_time), new Date())}{formatRelative(new Date(event.end_time), new Date())}
+

Events

+ { this.renderData() }
); } diff --git a/src/pages/AdminFeedPage/AdminFeedPage.tsx b/src/pages/AdminFeedPage/AdminFeedPage.tsx index 314547a..b535780 100644 --- a/src/pages/AdminFeedPage/AdminFeedPage.tsx +++ b/src/pages/AdminFeedPage/AdminFeedPage.tsx @@ -6,12 +6,14 @@ import { StaticContext } from "../../server/StaticContext"; import{Feed, getFeed} from "../../models/Feed"; import { getEvents } from "../../models/Event"; import { formatRelative } from "date-fns"; +import { th } from "date-fns/esm/locale"; export interface AdminFeedPageProps { staticContext: StaticContext; } export interface AdminFeedPageState { - feeds: Feed[]; + feed: Feed[]; + error?: string; } class AdminFeedPage extends React.Component { @@ -25,61 +27,82 @@ class AdminFeedPage extends React.Component { - const getFeedsPromise = getFeed(); - getFeedsPromise.then(feeds => { + fetchFeed = async () => { + const getFeedPromise = getFeed(); + try { + const feed = await getFeedPromise; this.setState({ - feeds, + feed, }); - }); - return getFeedsPromise; + return getFeedPromise; + } catch (err) { + this.setState({ + error: String(err), + }); + } + } + + renderData = () => { + const { feed, error } = this.state; + + if (error) { + return
{error}
; + } + + if (!feed || feed.length === 0) { + return
No posts.
; + } + + return ( + + + + + + + + + + {feed.map(post => ( + + + + + + ))} + +
TitleDescriptionPublish time
{post.title}{post.description}{formatRelative(new Date(post.publish_time), new Date())}
+ ); } render() { - const { feeds } = this.state; return (
- - - - - - - - - - {feeds.map(feed => ( - - - - - - ))} - -
TitleDescriptionPublish time
{feed.title}{feed.description}{formatRelative(new Date(feed.publish_time), new Date())}
+

Feed

+ { this.renderData() }
); } diff --git a/src/pages/AdminFrontPage/AdminFrontPage.scss b/src/pages/AdminFrontPage/AdminFrontPage.scss index 28fc775..a00e37d 100644 --- a/src/pages/AdminFrontPage/AdminFrontPage.scss +++ b/src/pages/AdminFrontPage/AdminFrontPage.scss @@ -1,3 +1,8 @@ .admin-front-page { margin: 0 1rem; + + a { + text-decoration: underline; + display: block; + } } diff --git a/src/pages/AdminFrontPage/AdminFrontPage.tsx b/src/pages/AdminFrontPage/AdminFrontPage.tsx index 0a17f35..e0e9253 100644 --- a/src/pages/AdminFrontPage/AdminFrontPage.tsx +++ b/src/pages/AdminFrontPage/AdminFrontPage.tsx @@ -13,8 +13,9 @@ class AdminFrontPage extends React.Component -
Admin Front Page
+

SIK Admin

Events + Feed ); }