Skip to content

Commit e15ef4c

Browse files
authored
Merge pull request #249 from coder13/fix-room-chat-layout
Fix normal room chat layout
2 parents f906f4e + f310fdb commit e15ef4c

3 files changed

Lines changed: 53 additions & 51 deletions

File tree

client/src/components/Room/Normal/index.jsx

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import clsx from 'clsx';
33
import PropTypes from 'prop-types';
44
import { makeStyles } from '@mui/styles';
55
import { connect } from 'react-redux';
6-
import Grid from '@mui/material/Grid';
76
import Paper from '@mui/material/Paper';
87
import BottomNavigation from '@mui/material/BottomNavigation';
98
import BottomNavigationAction from '@mui/material/BottomNavigationAction';
@@ -46,12 +45,30 @@ const useStyles = makeStyles((theme) => ({
4645
},
4746
},
4847
container: {
48+
display: 'flex',
4949
flexGrow: 1,
5050
flexWrap: 'nowrap',
51+
minHeight: 0,
5152
},
52-
panel: {
53-
flexGrow: 1,
54-
transition: `display 5s ${theme.transitions.easing.easeInOut}`,
53+
mainPanel: {
54+
display: 'flex',
55+
flex: '1 1 auto',
56+
minWidth: 0,
57+
},
58+
chatPanel: {
59+
display: 'flex',
60+
flex: '0 0 24rem',
61+
minWidth: 0,
62+
transition: theme.transitions.create('flex-basis'),
63+
[theme.breakpoints.down('sm')]: {
64+
flexBasis: '100%',
65+
},
66+
},
67+
chatPanelClosed: {
68+
flexBasis: '3rem',
69+
[theme.breakpoints.down('sm')]: {
70+
flexBasis: '100%',
71+
},
5572
},
5673
backdrop: {
5774
zIndex: theme.zIndex.drawer + 1,
@@ -73,6 +90,7 @@ const panels = [{
7390
export const NormalRoom = ({ room, user }) => {
7491
const classes = useStyles();
7592
const [currentPanel, setCurrentPanel] = useState(0);
93+
const [chatOpen, setChatOpen] = useState(true);
7694

7795
const isAdmin = () => room.admin && room.admin.id === user.id;
7896

@@ -91,27 +109,23 @@ export const NormalRoom = ({ room, user }) => {
91109
</Paper>
92110
<Divider />
93111

94-
<Grid container direction="row" className={classes.container}>
95-
<Grid
96-
item
97-
className={clsx(classes.panel, {
112+
<div className={classes.container}>
113+
<div
114+
className={clsx(classes.mainPanel, {
98115
[classes.hiddenOnMobile]: currentPanel !== 0,
99116
})}
100-
style={{
101-
flexGrow: 1,
102-
}}
103117
>
104118
<Main />
105-
</Grid>
106-
<Grid
107-
item
108-
className={clsx(classes.panel, {
119+
</div>
120+
<div
121+
className={clsx(classes.chatPanel, {
109122
[classes.hiddenOnMobile]: currentPanel !== 1,
123+
[classes.chatPanelClosed]: !chatOpen,
110124
})}
111125
>
112-
<Chat />
113-
</Grid>
114-
</Grid>
126+
<Chat open={chatOpen} onToggle={() => setChatOpen((isOpen) => !isOpen)} />
127+
</div>
128+
</div>
115129

116130
<BottomNavigation
117131
value={currentPanel}

client/src/components/Room/Panels/Chat.jsx

Lines changed: 20 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -33,21 +33,10 @@ const Icons = {
3333
const useStyles = makeStyles((theme) => ({
3434
root: {
3535
display: 'flex',
36-
flexGrow: 0,
37-
flexShrink: 1,
38-
width: '20rem',
36+
flexGrow: 1,
37+
minWidth: 0,
3938
flexDirection: 'column',
4039
height: '100%',
41-
[theme.breakpoints.down('sm')]: {
42-
width: '100%',
43-
flexGrow: 1,
44-
},
45-
},
46-
closed: {
47-
flexGrow: 0,
48-
width: 0,
49-
position: 'relative',
50-
border: 'none',
5140
},
5241
messages: {
5342
display: 'flex',
@@ -85,14 +74,8 @@ const useStyles = makeStyles((theme) => ({
8574
'user-select': 'text',
8675
},
8776
toolbarClosed: {
88-
position: 'absolute',
89-
width: '10em',
90-
right: 0,
91-
},
92-
hiddenOnMobile: {
93-
[theme.breakpoints.down('sm')]: {
94-
display: 'none',
95-
},
77+
justifyContent: 'center',
78+
padding: 0,
9679
},
9780
}));
9881

@@ -105,11 +88,10 @@ const UNKOWN_USER = {
10588
};
10689

10790
function Chat({
108-
dispatch, messages, users, user,
91+
dispatch, messages, users, user, open, onToggle,
10992
}) {
11093
const classes = useStyles();
11194
const [message, setMessage] = useState('');
112-
const [open, setOpen] = useState(true);
11395
const listRef = useRef();
11496

11597
const findUser = (id) => {
@@ -157,22 +139,24 @@ function Chat({
157139

158140
return (
159141
<Panel
160-
className={clsx(classes.root, {
161-
[classes.closed]: !open,
162-
})}
142+
className={classes.root}
163143
toolbar={(
164144
<Toolbar
165145
variant="dense"
166146
className={clsx({
167147
[classes.toolbarClosed]: !open,
168148
})}
169149
>
170-
<Typography variant="h6" style={{ flexGrow: 1 }}>
171-
Chat
172-
</Typography>
173-
<IconButton className={classes.hiddenOnMobile} onClick={() => setOpen(!open)}>
174-
{open ? <ArrowForwardIcon /> : <ArrowBackIcon /> }
175-
</IconButton>
150+
{open && (
151+
<Typography variant="h6" style={{ flexGrow: 1 }}>
152+
Chat
153+
</Typography>
154+
)}
155+
{onToggle && (
156+
<IconButton onClick={onToggle} aria-label={open ? 'Close chat' : 'Open chat'}>
157+
{open ? <ArrowForwardIcon /> : <ArrowBackIcon /> }
158+
</IconButton>
159+
)}
176160
</Toolbar>
177161
)}
178162
>
@@ -278,6 +262,8 @@ Chat.propTypes = {
278262
id: PropTypes.number,
279263
canJoinRoom: PropTypes.bool,
280264
}),
265+
open: PropTypes.bool,
266+
onToggle: PropTypes.func,
281267
};
282268

283269
Chat.defaultProps = {
@@ -287,6 +273,8 @@ Chat.defaultProps = {
287273
id: undefined,
288274
canJoinRoom: false,
289275
},
276+
open: true,
277+
onToggle: undefined,
290278
};
291279

292280
const mapStateToProps = (state) => ({

server/config/dev.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,6 @@
2222
"clientSecret": "example-secret"
2323
},
2424
"cors": {
25-
"origin": ["localhost", "192.168.1.18"]
25+
"origin": ["http://localhost:3000", "localhost", "192.168.1.18"]
2626
}
2727
}

0 commit comments

Comments
 (0)