@@ -9,8 +9,9 @@ import MoreVertIcon from "@material-ui/icons/MoreVert";
99
1010import { UserContext } from "../context" ;
1111import firebase from "../firebase" ;
12- import { generateColor , generateName } from "../util" ;
12+ import { generateColor , generateName , parseDuration } from "../util" ;
1313import ElapsedTime from "./ElapsedTime" ;
14+ import PromptDialog from "./PromptDialog" ;
1415import User from "./User" ;
1516
1617const useStyles = makeStyles ( ( theme ) => ( {
@@ -35,8 +36,8 @@ function ProfileName({ userId }) {
3536 const theme = useTheme ( ) ;
3637 const user = useContext ( UserContext ) ;
3738 const classes = useStyles ( ) ;
38-
3939 const [ anchorEl , setAnchorEl ] = useState ( null ) ;
40+ const [ banUser , setBanUser ] = useState ( false ) ;
4041
4142 const handleClickVertIcon = ( event ) => {
4243 setAnchorEl ( event . currentTarget ) ;
@@ -52,9 +53,13 @@ function ProfileName({ userId }) {
5253 handleClose ( ) ;
5354 } ;
5455
55- const handleBan = ( minutes ) => {
56- const endTime = Date . now ( ) + minutes * 60000 ;
57- firebase . database ( ) . ref ( `users/${ userId } /banned` ) . set ( endTime ) ;
56+ const handleBan = ( duration ) => {
57+ setBanUser ( false ) ;
58+ const seconds = parseDuration ( ( duration || "" ) . trim ( ) ) ;
59+ if ( seconds ) {
60+ const endTime = Date . now ( ) + seconds * 1000 ;
61+ firebase . database ( ) . ref ( `users/${ userId } /banned` ) . set ( endTime ) ;
62+ }
5863 } ;
5964
6065 const handleUnban = ( ) => {
@@ -96,17 +101,7 @@ function ProfileName({ userId }) {
96101 { player . banned && Date . now ( ) < player . banned ? (
97102 < MenuItem onClick = { ( ) => handleUnban ( ) } > Unban</ MenuItem >
98103 ) : (
99- [
100- < MenuItem key = { 1 } onClick = { ( ) => handleBan ( 30 ) } >
101- Ban for 30 minutes
102- </ MenuItem > ,
103- < MenuItem key = { 2 } onClick = { ( ) => handleBan ( 24 * 60 ) } >
104- Ban for 1 day
105- </ MenuItem > ,
106- < MenuItem key = { 3 } onClick = { ( ) => handleBan ( 7 * 24 * 60 ) } >
107- Ban for 1 week
108- </ MenuItem > ,
109- ]
104+ < MenuItem onClick = { ( ) => setBanUser ( true ) } > Ban</ MenuItem >
110105 ) }
111106 </ Menu >
112107 </ div >
@@ -132,6 +127,14 @@ function ProfileName({ userId }) {
132127 ) }
133128 </ span >
134129 </ Typography >
130+ < PromptDialog
131+ open = { banUser }
132+ onClose = { handleBan }
133+ title = "Ban User"
134+ message = "Enter ban duration (examples: 1w, 3d, 1.5h, 1h20m, 30m)."
135+ label = "Duration"
136+ maxLength = { 25 }
137+ />
135138 </ section >
136139 ) ;
137140 } }
0 commit comments