Admin page routing

This commit is contained in:
Aarni Halinen
2020-12-30 23:27:58 +02:00
parent ee29ed096a
commit fc5e519e59
18 changed files with 234 additions and 294 deletions
@@ -1,6 +1,7 @@
import React, { useEffect, useState } from "react";
import { Helmet } from "react-helmet";
import { RouteComponentProps } from "react-router-dom";
import { NextPage } from "next";
import Head from "next/head";
import { useRouter } from "next/router";
import AdminCreateCommon from "@views/admin/AdminCreateCommon";
import { Tag, getTags } from "@models/Tag";
import { SignupForm, getForms } from "@models/SignupForm";
@@ -157,19 +158,21 @@ const buildUISchema = () => {
return uiSchema;
}
interface MatchParams {
id?: string;
}
type EventCreatePageProps = RouteComponentProps<MatchParams>;
const EventCreatePage: React.FC<EventCreatePageProps> = ({ match: { params: { id } } }) => {
const EventCreatePage: NextPage = () => {
const [formData, setFormData] = useState<Event>(null);
const [tags, setTags] = useState<Tag[]>([]);
const [signupForms, setSignupForms] = useState<SignupForm[]>([]);
const [error, setError] = useState<string>(null);
const [statusMessage, setStatusMessage] = useState<string>(null);
const router = useRouter();
let id: string;
if (router.query?.id && router.query.id !== "create") {
id = router.query.id as string;
}
useEffect(() => {
getTags()
@@ -233,9 +236,9 @@ const EventCreatePage: React.FC<EventCreatePageProps> = ({ match: { params: { id
return (
<>
<Helmet>
<Head>
<link rel="canonical" href="https://sik.ayy.fi/admin/events/create" />
</Helmet>
</Head>
<AdminCreateCommon
title={title}
formData={formData}
+12 -9
View File
@@ -1,5 +1,6 @@
import React, { useEffect, useState } from "react";
import { Helmet } from "react-helmet";
import { NextPage } from "next";
import Head from "next/head";
import { formatRelative } from "date-fns";
import AdminListCommon from "@views/admin/AdminListCommon";
import { Link } from "@components/index";
@@ -34,7 +35,7 @@ const renderData = (events: Event[]) => {
</table>
);
}
const AdminEventPage: React.FC = () => {
const AdminEventPage: NextPage= () => {
const [events, setEvents] = useState<Event[]>(null);
useEffect(() => {
@@ -43,14 +44,16 @@ const AdminEventPage: React.FC = () => {
}, []);
return (
<AdminListCommon>
<Helmet>
<>
<Head>
<link rel="canonical" href={`https://sik.ayy.fi/${URL}`} />
</Helmet>
<h1>Events</h1>
<AddLink text="Create event" to={`${URL}/create`} />
{renderData(events)}
</AdminListCommon>
</Head>
<AdminListCommon>
<h1>Events</h1>
<AddLink text="Create event" to={`${URL}/create`} />
{renderData(events)}
</AdminListCommon>
</>
);
}
@@ -1,6 +1,7 @@
import React, { useEffect, useState } from "react";
import { Helmet } from "react-helmet";
import { RouteComponentProps } from "react-router-dom";
import { NextPage } from "next";
import Head from "next/head";
import { useRouter } from "next/router";
import AdminCreateCommon from "@views/admin/AdminCreateCommon";
import { Tag, getTags } from "@models/Tag";
import { Post, createPost, getPost, updatePost } from "@models/Feed";
@@ -127,18 +128,20 @@ const buildUISchema = (formData: Post) => {
return uiSchema;
}
interface MatchParams {
id?: string;
}
type FeedCreatePageProps = RouteComponentProps<MatchParams>;
const FeedCreatePage: React.FC<FeedCreatePageProps> = ({ match: { params: { id } } }) => {
const FeedCreatePage: NextPage = () => {
const [formData, setFormData] = useState<Post>(null);
const [tags, setTags] = useState<Tag[]>([]);
const [error, setError] = useState<string>(null);
const [statusMessage, setStatusMessage] = useState<string>(null);
const router = useRouter();
let id: string;
if (router.query?.id && router.query.id !== "create") {
id = router.query.id as string;
}
useEffect(() => {
getTags()
@@ -187,9 +190,9 @@ const FeedCreatePage: React.FC<FeedCreatePageProps> = ({ match: { params: { id }
return (
<>
<Helmet>
<Head>
<link rel="canonical" href="https://sik.ayy.fi/admin/feed/create" />
</Helmet>
</Head>
<AdminCreateCommon
title={title}
formData={formData}
+12 -9
View File
@@ -1,5 +1,6 @@
import React, { useEffect, useState } from "react";
import { Helmet } from "react-helmet";
import { NextPage } from "next";
import Head from "next/head";
import { formatRelative } from "date-fns";
import AdminListCommon from "@views/admin/AdminListCommon";
import { Link } from "@components/index";
@@ -35,7 +36,7 @@ const renderData = (feed: Post[]) => {
);
}
const AdminFeedPage: React.FC = () => {
const AdminFeedPage: NextPage = () => {
const [forms, setForms] = useState<Post[]>(null);
useEffect(() => {
@@ -44,14 +45,16 @@ const AdminFeedPage: React.FC = () => {
}, []);
return (
<AdminListCommon>
<Helmet>
<>
<Head>
<link rel="canonical" href={`https://sik.ayy.fi/${URL}`} />
</Helmet>
<h1>Feed</h1>
<AddLink text="Create news post" to={`${URL}/create`} />
{renderData(forms)}
</AdminListCommon>
</Head>
<AdminListCommon>
<h1>Feed</h1>
<AddLink text="Create news post" to={`${URL}/create`} />
{renderData(forms)}
</AdminListCommon>
</>
);
}
+10 -10
View File
@@ -1,20 +1,20 @@
import React from "react";
import { NextPage } from "next";
import Head from "next/head";
import PageWrapper from "@views/common/AdminPageWrapper";
import AdminPageWrapper from "@views/common/AdminPageWrapper";
const AdminFrontPage: NextPage = () => {
return (
<>
<Head>
<link rel="canonical" href="https://sik.ayy.fi/admin" />
</Head>
<PageWrapper requiresAuthentication>
<div data-e2e="admin-front-page">
<h1>SIK Admin</h1>
</div>
</PageWrapper>
</>
<Head>
<link rel="canonical" href="https://sik.ayy.fi/admin" />
</Head>
<AdminPageWrapper requiresAuthentication>
<div data-e2e="admin-front-page">
<h1>SIK Admin</h1>
</div>
</AdminPageWrapper>
</>
)
};
@@ -1,6 +1,7 @@
import React, { useEffect, useState } from "react";
import { Helmet } from "react-helmet";
import { RouteComponentProps } from "react-router-dom";
import { NextPage } from "next";
import Head from "next/head";
import { useRouter } from "next/router";
import AdminCreateCommon from "@views/admin/AdminCreateCommon";
import { JobAd, getJobAd, createJobAd, updateJobAd } from "@models/JobAd";
import DatetimeWidget from "@components/Widgets/DatetimeWidget";
@@ -104,16 +105,20 @@ const buildUISchema = (formData: JobAd) => ({
},
});
interface MatchParams {
id?: string;
}
type JobAdCreatePageProps = RouteComponentProps<MatchParams>;
const JobAdCreatePage: React.FC<JobAdCreatePageProps> = ({ match: { params: { id } } }) => {
const JobAdCreatePage: NextPage = () => {
const [formData, setFormData] = useState<JobAd>(null);
const [error, setError] = useState<string>(null);
const [statusMessage, setStatusMessage] = useState<string>(null);
const router = useRouter();
let id: string;
if (router.query?.id && router.query.id !== "create") {
id = router.query.id as string;
}
useEffect(() => {
const jobId = id && Number(id);
if (jobId !== undefined) {
@@ -150,9 +155,9 @@ const JobAdCreatePage: React.FC<JobAdCreatePageProps> = ({ match: { params: { id
return (
<>
<Helmet>
<Head>
<link rel="canonical" href="https://sik.ayy.fi/admin/jobads/create" />
</Helmet>
</Head>
<AdminCreateCommon
title={title}
formData={formData}
+12 -9
View File
@@ -1,5 +1,6 @@
import React from "react";
import { Helmet } from "react-helmet";
import { NextPage } from "next";
import Head from "next/head";
import { formatRelative } from "date-fns";
import AdminListCommon from "@views/admin/AdminListCommon";
import { Link } from "@components/index";
@@ -40,17 +41,19 @@ const renderData = (jobAds: JobAd[]) => {
);
}
const AdminJobAdPage: React.FC = () => {
const AdminJobAdPage: NextPage = () => {
// const { data, error } = useFetchJobAds({ options: { auth: true } );
return (
<AdminListCommon>
<Helmet>
<>
<Head>
<link rel="canonical" href={`https://sik.ayy.fi/${URL}`} />
</Helmet>
<h1>Job advertisements</h1>
<AddLink text="Create job ad" to={`${URL}/create`} />
{/* {renderData(jobAds)} */}
</AdminListCommon>
</Head>
<AdminListCommon>
<h1>Job advertisements</h1>
<AddLink text="Create job ad" to={`${URL}/create`} />
{/* {renderData(jobAds)} */}
</AdminListCommon>
</>
)
}
+46 -43
View File
@@ -1,9 +1,10 @@
import React, { useState, useEffect } from "react";
import styled from "styled-components";
import { Helmet } from "react-helmet";
import { NextPage } from "next";
import Head from "next/head";
import { useRouter } from "next/router";
import styled from "styled-components";
import { generateToken, setTokenCookie, isAuthenticated } from "@utils/auth";
import PageWrapper from "@views/common/AdminPageWrapper";
import AdminPageWrapper from "@views/common/AdminPageWrapper";
const Main = styled.div`
input {
@@ -12,7 +13,7 @@ const Main = styled.div`
`;
const DEFAULT_REDIRECT = "/admin";
const AdminLoginPage: React.FC = () => {
const AdminLoginPage: NextPage = () => {
const [username, setUsername] = useState("");
const [password, setPassword] = useState("");
const [error, setError] = useState("");
@@ -39,45 +40,47 @@ const AdminLoginPage: React.FC = () => {
}
return (
<PageWrapper requiresAuthentication={false}>
<Main>
<Helmet>
<link rel="canonical" href="https://sik.ayy.fi/admin/login" />
</Helmet>
<h1>Log in to SIK Admin</h1>
{next && next !== DEFAULT_REDIRECT && (
<div className="error">You have to log in first.</div>
)}
<form className="admin-login-form" onSubmit={handleSubmit}>
<label>Username
<input
id="login-username"
type="text"
name="username"
value={username}
onChange={(e) => {
setUsername(e.target.value);
}} />
</label>
<label>Password
<input
id="login-password"
type="password"
name="password"
value={password}
onChange={(e) => {
setPassword(e.target.value);
}} />
</label>
<input id="login-submit" type="submit" value="Log in" />
</form>
{error && (
<div className="error">
{error}
</div>
)}
</Main>
</PageWrapper>
<>
<Head>
<link rel="canonical" href="https://sik.ayy.fi/admin/login" />
</Head>
<AdminPageWrapper requiresAuthentication={false}>
<Main>
<h1>Log in to SIK Admin</h1>
{next && next !== DEFAULT_REDIRECT && (
<div className="error">You have to log in first.</div>
)}
<form className="admin-login-form" onSubmit={handleSubmit}>
<label>Username
<input
id="login-username"
type="text"
name="username"
value={username}
onChange={(e) => {
setUsername(e.target.value);
}} />
</label>
<label>Password
<input
id="login-password"
type="password"
name="password"
value={password}
onChange={(e) => {
setPassword(e.target.value);
}} />
</label>
<input id="login-submit" type="submit" value="Log in" />
</form>
{error && (
<div className="error">
{error}
</div>
)}
</Main>
</AdminPageWrapper>
</>
);
}
+7 -4
View File
@@ -1,11 +1,14 @@
import React from "react";
import { NextPage } from "next";
import { useRouter } from "next/router";
import { deleteTokenCookie } from "@utils/auth";
const AdminLogoutPage: React.FC = () => {
deleteTokenCookie();
const AdminLogoutPage: NextPage = () => {
const router = useRouter();
router.push("/admin/login");
// client-side-only code
if (typeof window !== "undefined") {
deleteTokenCookie();
router.push("/admin/login");
}
return null;
}
@@ -1,6 +1,7 @@
import React, { useEffect, useState } from "react";
import { Helmet } from "react-helmet";
import { RouteComponentProps } from "react-router-dom";
import { NextPage } from "next";
import Head from "next/head";
import { useRouter } from "next/router";
import AdminCreateCommon from "@views/admin/AdminCreateCommon";
import { SignupForm, createForm, getForm, updateForm } from "@models/SignupForm";
import DatetimeWidget from "@components/Widgets/DatetimeWidget";
@@ -96,16 +97,19 @@ const buildUISchema = () => {
return uiSchema;
}
interface MatchParams {
id?: string;
}
type SignupCreatePageProps = RouteComponentProps<MatchParams>;
const SignupCreatePage: React.FC<SignupCreatePageProps> = ({ match: { params: { id } } }) => {
const SignupCreatePage: NextPage = () => {
const [formData, setFormData] = useState<SignupForm>(null);
const [error, setError] = useState<string>(null);
const [statusMessage, setStatusMessage] = useState<string>(null);
const router = useRouter();
let id: string;
if (router.query?.id && router.query.id !== "create") {
id = router.query.id as string;
}
useEffect(() => {
const suId = id && Number(id);
if (suId !== undefined) {
@@ -158,9 +162,9 @@ const SignupCreatePage: React.FC<SignupCreatePageProps> = ({ match: { params: {
return (
<>
<Helmet>
<Head>
<link rel="canonical" href="https://sik.ayy.fi/admin/signups/create" />
</Helmet>
</Head>
<AdminCreateCommon
title={title}
formData={formData}
+19 -26
View File
@@ -1,6 +1,6 @@
import React, { useEffect, useState } from "react";
import { Helmet } from "react-helmet";
import { RouteComponentProps } from "react-router-dom";
import { NextPage } from "next";
import { useRouter } from "next/router";
import AdminCreateCommon from "@views/admin/AdminCreateCommon";
import MarkdownEditorWidget from "@components/Widgets/MarkdownEditorWidget";
import { SignupForm, getForm, signupFormSendEmail } from "@models/SignupForm";
@@ -45,15 +45,13 @@ const buildUISchema = () => ({
},
});
interface MatchParams {
id?: string;
}
type SignupEmailPageProps = RouteComponentProps<MatchParams>;
const SignupEmailPage: React.FC<SignupEmailPageProps> = ({ match: { params: { id } } }) => {
const SignupEmailPage: NextPage = () => {
const [signupForm, setSignupForm] = useState<SignupForm>(null);
const router = useRouter();
const { id } = router.query;
useEffect(() => {
const formId = Number(id);
if (formId !== undefined) {
@@ -83,23 +81,18 @@ const SignupEmailPage: React.FC<SignupEmailPageProps> = ({ match: { params: { id
const title = signupForm ? signupForm.title_fi : "Loading..."
return (
<>
<Helmet>
<link rel="canonical" href="https://sik.ayy.fi/admin/jobads/create" />
</Helmet>
<AdminCreateCommon
title={title}
// formData={formData}
schema={buildSchema(title)}
UISchema={buildUISchema()}
// onChange={onChange}
onFocus={onFocus}
onSubmit={onSubmit}
statusMessage={statusMessage}
error={error}
widgets={widgets}
/>
</>
<AdminCreateCommon
title={title}
// formData={formData}
schema={buildSchema(title)}
UISchema={buildUISchema()}
// onChange={onChange}
onFocus={onFocus}
onSubmit={onSubmit}
statusMessage={statusMessage}
error={error}
widgets={widgets}
/>
)};
export default SignupEmailPage;
+9 -13
View File
@@ -1,26 +1,25 @@
import React, { useEffect, useState } from "react";
import { Helmet } from "react-helmet";
import { RouteComponentProps } from "react-router-dom";
import { NextPage } from "next";
import { useRouter } from "next/router";
import styled from "styled-components";
import { CSVLink } from "react-csv";
import AdminListCommon from "@views/admin/AdminListCommon";
import { SignupForm, getForm, getSignups } from "@models/SignupForm";
import { Signup, deleteSignup } from "@models/Signup";
import { Button } from "@components/index";
interface MatchParams {
id?: string;
}
type SignupEmailPageProps = RouteComponentProps<MatchParams>;
import noop from "@utils/noop";
const StyledButton = styled(Button)<{ colorOverride: "red" | "green" }>`
background-color: ${(p: any) => p.colorOverride};
`;
const SignupEmailPage: React.FC<SignupEmailPageProps> = ({ match: { params: { id } } }) => {
const SignupEmailPage: NextPage = () => {
const [signupForm, setSignupForm] = useState<SignupForm>(null);
const [signups, setSignups] = useState<Signup[]>([]);
const router = useRouter();
const { id } = router.query;
useEffect(() => {
const formId = Number(id);
getForm(formId, true)
@@ -58,9 +57,6 @@ const SignupEmailPage: React.FC<SignupEmailPageProps> = ({ match: { params: { id
return (
<AdminListCommon>
<Helmet>
<link rel="canonical" href="https://sik.ayy.fi/admin/jobads/create" />
</Helmet>
<h1>{title}: Sign-ups</h1>
<table>
<thead>
@@ -70,7 +66,7 @@ const SignupEmailPage: React.FC<SignupEmailPageProps> = ({ match: { params: { id
))}
<th>
<CSVLink data={CSVData} headers={questions.map(q => q.title)} separator=";">
<StyledButton colorOverride="green" buttonStyle="filled">
<StyledButton colorOverride="green" buttonStyle="filled" onClick={noop}>
Download CSV
</StyledButton>
</CSVLink>
+12 -9
View File
@@ -1,5 +1,6 @@
import React, { useEffect, useState } from "react";
import { Helmet } from "react-helmet";
import { NextPage } from "next";
import Head from "next/head";
import { formatRelative } from "date-fns";
import AdminListCommon from "@views/admin/AdminListCommon";
import { Link } from "@components/index";
@@ -39,7 +40,7 @@ const renderData = (signupForms: SignupForm[]) => {
);
}
const AdminSignupPage: React.FC = () => {
const AdminSignupPage: NextPage = () => {
const [forms, setForms] = useState<SignupForm[]>(null);
useEffect(() => {
@@ -48,14 +49,16 @@ const AdminSignupPage: React.FC = () => {
}, []);
return (
<AdminListCommon>
<Helmet>
<>
<Head>
<link rel="canonical" href={`https://sik.ayy.fi/${URL}`} />
</Helmet>
<h1>Sign-up forms</h1>
<AddLink text="Create signup form" to={`${URL}/create`} />
{renderData(forms)}
</AdminListCommon>
</Head>
<AdminListCommon>
<h1>Sign-up forms</h1>
<AddLink text="Create signup form" to={`${URL}/create`} />
{renderData(forms)}
</AdminListCommon>
</>
);
}
-95
View File
@@ -1,95 +0,0 @@
import React from "react";
import { Switch, Route } from "react-router-dom";
import { Helmet } from "react-helmet";
import JsonLD from "@components/JsonLD";
import "./index.scss";
import FrontPage from "./pages";
import GuildPage from "./pages/kilta";
import NotFoundPage from "./pages/404";
import AdminFrontPage from "./pages/admin";
import AdminEventPage from "./pages/admin/events";
import AdminFeedPage from "./pages/admin/feed";
import AdminSignupPage from "./pages/admin/signups";
import AdminLoginPage from "./pages/admin/login";
import AdminLogoutPage from "./pages/admin/logout";
import EventCreatePage from "./pages/admin/events/create";
import FeedCreatePage from "./pages/admin/feed/create";
import ContactsPage from "./pages/yhteystiedot";
import SignupCreatePage from "./pages/admin/signups/create";
import SignupEmailPage from "./pages/admin/signups/[id]/email";
import SignupListPage from "./pages/admin/signups/[id]/list";
import SignUpPage from "./pages/signup/[...params]";
import ActualPage from "./pages/kilta/toiminta";
import FreshmenPage from "./pages/kilta/fuksi";
import HonoraryPage from "./pages/kilta/kunnia";
import StudiesPage from "./pages/opinnot_ja_ura";
import CorporatePage from "./pages/yritysyhteistyo";
import InEnglishPage from "./pages/in_english";
import EventPage from "./pages/events/[id]";
import AdminJobAdPage from "@pages/admin/jobads";
import JobAdCreatePage from "@pages/admin/jobads/create";
import commonPageWrapper from "@views/common/PageWrapper";
import adminPageWrapper from "@views/common/AdminPageWrapper";
const commonRoutes = [
{ path: "/", page: FrontPage },
{ path: "/signup/:formId", page: SignUpPage },
{ path: "/signup/edit/:signupId/:uuid", page: SignUpPage },
{ path: "/events/:id", page: EventPage },
{ path: "/kilta", page: GuildPage },
{ path: "/kilta/toiminta", page: ActualPage },
{ path: "/kilta/fuksi", page: FreshmenPage },
{ path: "/kilta/kunnia", page: HonoraryPage},
{ path: "/opinnot_ja_ura", page: StudiesPage },
{ path: "/yritysyhteistyo", page: CorporatePage },
{ path: "/yhteystiedot", page: ContactsPage },
{ path: "/in_english", page: InEnglishPage },
];
const adminLoginRoutes = [
{ path: "/admin/login", page: AdminLoginPage },
];
const adminRoutes = [
{ path: "/admin/feed", page: AdminFeedPage },
{ path: "/admin/feed/create", page: FeedCreatePage },
{ path: "/admin/feed/:id", page: FeedCreatePage },
{ path: "/admin/events", page: AdminEventPage },
{ path: "/admin/events/create", page: EventCreatePage },
{ path: "/admin/events/:id", page: EventCreatePage },
{ path: "/admin/signups", page: AdminSignupPage },
{ path: "/admin/signups/create", page: SignupCreatePage },
{ path: "/admin/signups/:id", page: SignupCreatePage },
{ path: "/admin/signups/:id/list", page: SignupListPage },
{ path: "/admin/signups/:id/email", page: SignupEmailPage },
{ path: "/admin/jobads", page: AdminJobAdPage },
{ path: "/admin/jobads/create", page: JobAdCreatePage },
{ path: "/admin/jobads/:id", page: JobAdCreatePage },
{ path: "/admin/logout", page: AdminLogoutPage },
{ path: "/admin", page: AdminFrontPage },
];
const Routes: React.FC = () => (
<>
<Helmet>
<title>Aalto-yliopiston Sähköinsinoorikilta ry</title>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="Aalto-yliopiston Sähköinsinoorikillan verkkosivut" />
<link rel="canonical" href="https://sik.ayy.fi" />
</Helmet>
<JsonLD data={{
"@context": "http://schema.org",
"@type": "WebSite",
"url": "https://sik.ayy.fi",
}} />
<Switch>
{commonRoutes.map(r => <Route key={r.path} exact path={r.path} render={commonPageWrapper(r.page)} />)}
{adminLoginRoutes.map(r => <Route key={r.path} exact path={r.path} render={adminPageWrapper(r.page, false)} />)}
{adminRoutes.map(r => <Route key={r.path} exact path={r.path} render={adminPageWrapper(r.page, true)} />)}
<Route component={NotFoundPage} />
</Switch>
</>
);
export default Routes;
View File
+23 -20
View File
@@ -7,6 +7,7 @@ import { Post } from "@models/Feed";
import { SignupForm } from "@models/SignupForm";
import { JobAd } from "@models/JobAd";
import FormWrapper from "@views/common/FormWrapper";
import AdminPageWrapper from "@views/common/AdminPageWrapper";
const Common = styled.div`
legend {
@@ -71,26 +72,28 @@ const AdminCreateCommon: React.FC<AdminCreateCommonProps> = ({
}
return (
<Common>
<h1>{title}</h1>
{statusMessage && (
<SuccessMsg>{statusMessage}</SuccessMsg>
)}
<FormWrapper
schema={schema}
uiSchema={UISchema}
formData={formData}
idPrefix="rjsf"
widgets={widgets}
onChange={onChange}
onSubmit={onSubmit}
onError={onError}
onFocus={onFocus}
/>
{error && (
<ErrorMsg>{error}</ErrorMsg>
)}
</Common>
<AdminPageWrapper requiresAuthentication>
<Common>
<h1>{title}</h1>
{statusMessage && (
<SuccessMsg>{statusMessage}</SuccessMsg>
)}
<FormWrapper
schema={schema}
uiSchema={UISchema}
formData={formData}
idPrefix="rjsf"
widgets={widgets}
onChange={onChange}
onSubmit={onSubmit}
onError={onError}
onFocus={onFocus}
/>
{error && (
<ErrorMsg>{error}</ErrorMsg>
)}
</Common>
</AdminPageWrapper>
)
}
+11 -1
View File
@@ -1,5 +1,7 @@
import React from "react";
import styled from "styled-components";
import { colors } from "@theme/colors";
import AdminPageWrapper from "@views/common/AdminPageWrapper";
const Main = styled.div`
table {
@@ -19,4 +21,12 @@ const Main = styled.div`
}
`;
export default Main;
const AdminListCommon: React.FC = ({ children }) => (
<AdminPageWrapper requiresAuthentication>
<Main>
{children}
</Main>
</AdminPageWrapper>
)
export default AdminListCommon;
+2 -2
View File
@@ -61,7 +61,7 @@ type PageProps = {
requiresAuthentication: boolean;
}
const PageWrapper: React.FC<PageProps> = ({ requiresAuthentication, children }) => {
const AdminPageWrapper: React.FC<PageProps> = ({ requiresAuthentication, children }) => {
const router = useRouter();
const { completed, redirecting } = useShouldRedirect(requiresAuthentication);
@@ -88,4 +88,4 @@ const PageWrapper: React.FC<PageProps> = ({ requiresAuthentication, children })
)
}
export default PageWrapper;
export default AdminPageWrapper;