aboutsummaryrefslogtreecommitdiff
path: root/pages
diff options
context:
space:
mode:
Diffstat (limited to 'pages')
-rw-r--r--pages/login.tsx2
-rw-r--r--pages/register.tsx2
-rw-r--r--pages/search.tsx4
-rw-r--r--pages/user.tsx60
4 files changed, 52 insertions, 16 deletions
diff --git a/pages/login.tsx b/pages/login.tsx
index 9df9490..1cbacb1 100644
--- a/pages/login.tsx
+++ b/pages/login.tsx
@@ -49,7 +49,7 @@ export default function LoginPage() {
}}>
<Vierkant>
<form onSubmit={submitLogin}>
- <Input autocomplete="username" id="email" label="email of gebruikersnaam" style={{ marginBottom: 12 }}></Input>
+ <Input autofocus autocomplete="username" id="email" label="email of gebruikersnaam" style={{ marginBottom: 12 }}></Input>
<Input autocomplete="current-password" id="password" label="wachtwoord" type="password"></Input>
<div style={{
marginTop: 24,
diff --git a/pages/register.tsx b/pages/register.tsx
index 3616bb8..5426cbc 100644
--- a/pages/register.tsx
+++ b/pages/register.tsx
@@ -81,7 +81,7 @@ export default function RegisterPage() {
}}>
<Vierkant>
<form onSubmit={submitRegister}>
- <Input autocomplete="username" id="username" label="gebruikersnaam" style={{ marginBottom: 12 }}></Input>
+ <Input autofocus autocomplete="username" id="username" label="gebruikersnaam" style={{ marginBottom: 12 }}></Input>
<Input autocomplete="email" id="email" label="email" style={{ marginBottom: 12 }}></Input>
<Input autocomplete="new-password" id="password" label="wachtwoord" type="password"></Input>
<Button text="Registreren" style={{ marginTop: 24 }} onclick={submitRegister}></Button>
diff --git a/pages/search.tsx b/pages/search.tsx
index 963fcba..e2825e8 100644
--- a/pages/search.tsx
+++ b/pages/search.tsx
@@ -32,7 +32,7 @@ function SearchResults(props: { userList: Array<userInfo> }) {
function SearchResult(props: { user: userInfo }) {
return <Vierkant style={{
padding: 12
- }} fullwidth href={`/user?id=${props.user.id}`}>
+ }} fullwidth href={"/user?id=" + props.user.id}>
<div style={{ position: "relative" }}>
<AccountAvatar size={48} dummy/>
<div style={{
@@ -55,7 +55,7 @@ function SearchBar(props: {
marginBottom: 24
}}>
<form onSubmit={props.searchFunction}>
- <Input id="searchBar" label="Zoeken voor gebruikers..." autocomplete="off" dark style={{
+ <Input id="searchBar" label="Zoeken voor gebruikers..." autocomplete="off" dark autofocus style={{
backgroundColor: "var(--background)",
color: "var(--text)",
padding: 14,
diff --git a/pages/user.tsx b/pages/user.tsx
index fe27f6d..618ae9e 100644
--- a/pages/user.tsx
+++ b/pages/user.tsx
@@ -1,7 +1,7 @@
import { ReactNode, Children, useState, useEffect } from 'react';
import Icon from '@mdi/react';
-import { useRouter } from 'next/router';
import axios from 'axios';
+import useSWR from 'swr';
import { NavBar } from '../components/navbar';
import { CenteredPage, PageTitle } from '../components/page';
@@ -15,6 +15,8 @@ import AssignmentIndOutlinedIcon from '@material-ui/icons/AssignmentIndOutlined'
import ArrowDownwardOutlinedIcon from '@material-ui/icons/ArrowDownwardOutlined';
import ArrowUpwardOutlinedIcon from '@material-ui/icons/ArrowUpwardOutlined';
import PeopleOutlineOutlinedIcon from '@material-ui/icons/PeopleOutlineOutlined';
+import EditOutlinedIcon from '@material-ui/icons/EditOutlined';
+import SettingsOutlinedIcon from '@material-ui/icons/SettingsOutlined';
import {
mdiAccountCancelOutline,
mdiEqual,
@@ -68,9 +70,10 @@ function InfoSection(props: { children: ReactNode }) {
export default function AccountPage() {
var [gotData, setGotData] = useState(false);
var [user, setUser] = useState<userInfo>();
+ var [ownPage, setOwnPage] = useState(false);
typeof window !== "undefined" && console.log(new URLSearchParams(window.location.search).get("id"))
- useEffect(() => {
+ useEffect(() => {(async() => {
if (gotData) return;
if (typeof window === "undefined") return;
@@ -78,20 +81,33 @@ export default function AccountPage() {
var loggedIn = document.cookie.includes("token");
if (id || loggedIn) {
- axios.request<userInfo>({
- method: id ? "post" : "get",
+ var self_id = "";
+ if (loggedIn) {
+ var selfReq = await axios.request<userInfo>({
+ method: "get",
+ url: `/api/user/info`,
+ headers: {"content-type": "application/json"}
+ });
+
+ self_id = selfReq?.data.id;
+ }
+
+ if (id == self_id || !id) setOwnPage(true);
+
+ var userReq = await axios.request<userInfo>({
+ method: "post",
url: `/api/user/info`,
headers: {"content-type": "application/json"},
- data: id ? { id } : undefined
- })
- .then(request => setUser(request.data))
- .catch(() => {});
+ data: { "id": id || self_id }
+ });
+
+ setUser(userReq.data);
} else {
window.history.go(-1);
}
setGotData(true);
- })
+ })()})
return <div>
<NavBar/>
@@ -114,13 +130,33 @@ export default function AccountPage() {
height: "40px",
bottom: 24, left: 24 + 12 + 128, right: 24
}}>
- <IconLabelButton icon={<PersonAddOutlinedIcon/>} text="Vriendschapsverzoek"/>
- <IconLabelButton icon={<Icon size={1} path={mdiAccountCancelOutline}/>} text="Blokkeren"/>
+ {
+ ownPage ?
+ <div>
+ <IconLabelButton icon={<SettingsOutlinedIcon/>} text="Instellingen"/>
+ <IconLabelButton icon={<EditOutlinedIcon/>} text="Status bewerken"/>
+ </div> :
+ <div>
+ <IconLabelButton icon={<Icon size={1} path={mdiAccountCancelOutline}/>} text="Blokkeren"/>
+ <IconLabelButton icon={<PersonAddOutlinedIcon/>} text="Vriendschapsverzoek"/>
+ </div>
+ }
</div>
</Vierkant>
<InfoSection>
<InfoModule icon={<Icon size={1} path={mdiCheckboxBlankCircle} color="var(--disk-b-text)"/>} label="Online"/>
- <InfoModule icon={<AssignmentIndOutlinedIcon/>} label="Lid sinds 14 december 2020"/>
+ <InfoModule icon={<AssignmentIndOutlinedIcon/>} label={ (() => {
+ var memberSince = "Lid sinds";
+
+ var registered = new Date(user?.registered);
+ memberSince += " " + registered.toLocaleString("nl-nl", { month: "long", day: "numeric" });
+
+ var currentYear = new Date().getFullYear();
+ var memberYear = registered.getFullYear();
+ if (currentYear != memberYear) memberSince += " " + memberYear;
+
+ return memberSince;
+ })() }/>
<InfoModule icon={<PeopleOutlineOutlinedIcon/>} label="2 vrienden"/>
<InfoModule icon={<Icon size={1} path={mdiEarth}/>} label="Nederland"/>
</InfoSection>