From 8ab459c8b6c517086eab9be6b2953368738f651b Mon Sep 17 00:00:00 2001 From: lonkaars Date: Tue, 27 Apr 2021 09:44:56 +0200 Subject: edit username/email in settings page --- api/api.ts | 1 + api/user/info.py | 7 ++-- pages/settings.tsx | 98 +++++++++++++++++++++++++++++++++++++++++++++--------- 3 files changed, 88 insertions(+), 18 deletions(-) diff --git a/api/api.ts b/api/api.ts index 0949139..f8eda07 100644 --- a/api/api.ts +++ b/api/api.ts @@ -8,6 +8,7 @@ export interface userInfo { friends: number; relation?: 'none' | 'friends' | 'incoming' | 'outgoing' | 'blocked'; rating: number; + email?: string; } export type ruleset = { diff --git a/api/user/info.py b/api/user/info.py index fc303a6..9eaed22 100644 --- a/api/user/info.py +++ b/api/user/info.py @@ -30,7 +30,7 @@ def count_friends(user_id): # get user/info of `user_id` as `viewer` (id) -def format_user(user_id, viewer=''): +def format_user(user_id, viewer='', private_details=False): user = cursor.execute( "select " + ", ".join( [ @@ -39,6 +39,7 @@ def format_user(user_id, viewer=''): "country", "registered", "status", + "email", ] ) + " from users where user_id = ?", [user_id] ).fetchone() @@ -51,8 +52,10 @@ def format_user(user_id, viewer=''): "friends": count_friends(user_id), "rating": get_rating(user_id), #TODO: calculate rating based on game analysis + "email": None } if viewer: formatted_user["relation"] = get_relation_to(viewer, user_id) + if private_details: formatted_user["email"] = user[5] return formatted_user @@ -64,7 +67,7 @@ info = Blueprint('info', __name__) @info.route('/info', methods=['GET', 'POST']) @one_person def index(user_id, viewer): - user = format_user(user_id, viewer) + user = format_user(user_id, viewer, user_id == viewer) return user, 200 diff --git a/pages/settings.tsx b/pages/settings.tsx index f52b332..0574b8e 100644 --- a/pages/settings.tsx +++ b/pages/settings.tsx @@ -1,6 +1,6 @@ import axios from 'axios'; import reduce from 'image-blob-reduce'; -import { useContext, useEffect } from 'react'; +import { useContext, useEffect, useState } from 'react'; import * as cookie from 'react-cookies'; import { AccountAvatar } from '../components/account'; @@ -10,7 +10,9 @@ import { NavBar } from '../components/navbar'; import { CenteredPage, PageTitle } from '../components/page'; import PreferencesContext from '../components/preferencesContext'; import ThemePicker from '../components/themes'; -import { CheckBox, ColorPicker, IconLabelButton, Vierkant } from '../components/ui'; +import { CheckBox, ColorPicker, IconLabelButton, Vierkant, Input, Button } from '../components/ui'; +import { userInfo } from '../api/api'; +import { DialogBox } from '../components/dialogBox'; import EditOutlinedIcon from '@material-ui/icons/EditOutlined'; import PublishOutlinedIcon from '@material-ui/icons/PublishOutlined'; @@ -41,6 +43,45 @@ async function uploadNewProfileImage() { }; } +function EditImportantThingDialog(props: { + thing: "username" | "email"; + hidden?: boolean; + setHidden?: () => void; +}) { + var lang = { + "username": { + name: "Gebruikersnaam", + new: "Nieuwe gebruikersnaam", + }, + "email": { + name: "Email", + new: "Nieuw email-adres", + }, + }[props.thing] + var title = lang.name + " aanpassen" + return !props.hidden && + +
+ +
+