Admin page routing
This commit is contained in:
@@ -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}
|
||||
@@ -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}
|
||||
@@ -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
@@ -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}
|
||||
@@ -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
@@ -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>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -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}
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
@@ -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>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
Reference in New Issue
Block a user