From 3b0cf502ab35790efb8f36453021f53afbdf474d Mon Sep 17 00:00:00 2001 From: zikaeroh <48577114+zikaeroh@users.noreply.github.com> Date: Mon, 25 May 2020 12:32:53 -0700 Subject: [PATCH] Add change nickname button --- frontend/src/common/index.ts | 5 ++ frontend/src/components/about.tsx | 10 +-- frontend/src/components/loginForm.tsx | 13 ++-- frontend/src/pages/gameView.tsx | 103 +++++++++++++++++++++++++- 4 files changed, 115 insertions(+), 16 deletions(-) diff --git a/frontend/src/common/index.ts b/frontend/src/common/index.ts index 27a81ad..a756a32 100644 --- a/frontend/src/common/index.ts +++ b/frontend/src/common/index.ts @@ -35,3 +35,8 @@ export function reloadOutdatedPage() { console.log('Frontend version appears to be outdated; reloading to allow the browser to update.'); window.location.reload(true); } + +export const noComplete = { + autoComplete: 'off', + 'data-lpignore': 'true', +}; diff --git a/frontend/src/components/about.tsx b/frontend/src/components/about.tsx index 54dc185..8969520 100644 --- a/frontend/src/components/about.tsx +++ b/frontend/src/components/about.tsx @@ -38,14 +38,8 @@ const NewPageLink = (props: LinkProps) => ( export const AboutButton = (props: { style?: React.CSSProperties }) => { const classes = useStyles(); const [open, setOpen] = React.useState(false); - - const handleOpen = () => { - setOpen(true); - }; - - const handleClose = () => { - setOpen(false); - }; + const handleOpen = () => setOpen(true); + const handleClose = () => setOpen(false); return ( diff --git a/frontend/src/components/loginForm.tsx b/frontend/src/components/loginForm.tsx index e2076ec..818ca16 100644 --- a/frontend/src/components/loginForm.tsx +++ b/frontend/src/components/loginForm.tsx @@ -2,7 +2,7 @@ import { Button, ButtonGroup, createStyles, makeStyles, TextField, Theme } from import * as React from 'react'; import { Controller, useForm } from 'react-hook-form'; -import { nameofFactory } from '../common'; +import { nameofFactory, noComplete } from '../common'; export interface LoginFormData { nickname: string; @@ -13,16 +13,14 @@ export interface LoginFormData { const formName = nameofFactory(); -const noComplete = { - autoComplete: 'off', - 'data-lpignore': 'true', -}; - const useStyles = makeStyles((theme: Theme) => createStyles({ padBottom: { marginBottom: theme.spacing(2), }, + label: { + color: theme.palette.text.secondary + ' !important', + }, }) ); @@ -59,6 +57,7 @@ export function LoginForm(props: LoginFormProps) { fullWidth={true} inputProps={noComplete} autoFocus + InputLabelProps={{ classes: { focused: classes.label } }} /> @@ -75,6 +74,7 @@ export function LoginForm(props: LoginFormProps) { rules={{ required: true, minLength: 1, maxLength: 20 }} fullWidth={true} inputProps={noComplete} + InputLabelProps={{ classes: { focused: classes.label } }} /> @@ -90,6 +90,7 @@ export function LoginForm(props: LoginFormProps) { rules={{ required: true, minLength: 1 }} fullWidth={true} inputProps={noComplete} + InputLabelProps={{ classes: { focused: classes.label } }} /> diff --git a/frontend/src/pages/gameView.tsx b/frontend/src/pages/gameView.tsx index ef4e7a3..92a0952 100644 --- a/frontend/src/pages/gameView.tsx +++ b/frontend/src/pages/gameView.tsx @@ -1,12 +1,16 @@ import { + Backdrop, Button, ButtonGroup, createStyles, + Fade, Grid, IconButton, makeStyles, + Modal, Paper, Slider, + TextField, Theme, Typography, useTheme, @@ -29,8 +33,9 @@ import isArray from 'lodash/isArray'; import range from 'lodash/range'; import { DropzoneDialog } from 'material-ui-dropzone'; import * as React from 'react'; +import { Controller, useForm } from 'react-hook-form'; -import { isDefined } from '../common'; +import { isDefined, nameofFactory, noComplete } from '../common'; import { Board } from '../components/board'; import { ClipboardButton } from '../components/clipboard'; import { useServerTime } from '../hooks/useServerTime'; @@ -242,6 +247,99 @@ const TimerSlider = ({ version, timer, onCommit }: TimerSliderProps) => { ); }; +const useChangeNicknameStyles = makeStyles((theme: Theme) => + createStyles({ + modal: { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + }, + paper: { + border: '2px solid #000', + boxShadow: theme.shadows[5], + padding: theme.spacing(2, 4, 3), + maxWidth: '500px', + }, + label: { + color: theme.palette.text.secondary + ' !important', + }, + }) +); + +interface ChangeNicknameFormData { + nickname: string; +} + +const ChangeNicknameButton = ({ send }: { send: Sender }) => { + const classes = useChangeNicknameStyles(); + const [open, setOpen] = React.useState(false); + const handleOpen = () => setOpen(true); + const handleClose = () => setOpen(false); + + const formName = React.useMemo(() => nameofFactory(), []); + const { control, handleSubmit, errors } = useForm({}); + const doSubmit = handleSubmit((data) => { + handleClose(); + send.changeNickname(data.nickname); + }); + + return ( + <> + + + + +
+
+ +
+
+ +
+
+
+
+
+ + ); +}; + const useSidebarStyles = makeStyles((_theme: Theme) => createStyles({ dropzone: { @@ -323,11 +421,12 @@ const Sidebar = ({ send, state, pState, pTeam }: GameViewProps) => { type="button" variant="outlined" size="small" - style={{ width: '100%', marginTop: '0.5rem' }} + style={{ width: '100%', marginTop: '1.5rem' }} onClick={send.randomizeTeams} > Randomize teams +

Packs