Merge branch 'master' of http://khuhub.khu.ac.kr/2020105578/nodejs-game into master
Showing
5 changed files
with
56 additions
and
16 deletions
web/src/components/common/Main.tsx
0 → 100644
1 | +import React from 'react'; | ||
2 | +import { Footer } from './Footer'; | ||
3 | + | ||
4 | +export const Main: React.FC = ({ children }) => { | ||
5 | + return ( | ||
6 | + <div className="flex flex-col items-center w-screen h-screen"> | ||
7 | + {children} | ||
8 | + <Footer/> | ||
9 | + </div> | ||
10 | + ); | ||
11 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
web/src/components/room/types.ts
0 → 100644
1 | -import React from 'react'; | 1 | +import React, { useContext } from 'react'; |
2 | +import { useHistory } from 'react-router'; | ||
3 | +import SocketContext from '../../contexts/SocketContext'; | ||
4 | +import { MessageResponse, MessageType } from '../common/types'; | ||
5 | +import { RoomData } from '../room/types'; | ||
2 | import { Room } from './types'; | 6 | import { Room } from './types'; |
3 | 7 | ||
4 | interface RoomProps { | 8 | interface RoomProps { |
... | @@ -6,16 +10,37 @@ interface RoomProps { | ... | @@ -6,16 +10,37 @@ interface RoomProps { |
6 | } | 10 | } |
7 | 11 | ||
8 | export const RoomInfo: React.FC<RoomProps> = ({ room }) => { | 12 | export const RoomInfo: React.FC<RoomProps> = ({ room }) => { |
13 | + const history = useHistory(); | ||
14 | + const socket = useContext(SocketContext); | ||
15 | + const joinRoom = () => { | ||
16 | + if (room.currentUsers < room.maxUsers) { | ||
17 | + socket.emit(MessageType.ROOM_JOIN, (response: MessageResponse<RoomData>) => { | ||
18 | + if (response.ok) { | ||
19 | + history.push({ | ||
20 | + pathname: '/' + room.uuid, | ||
21 | + state: {roomData: response.result!} | ||
22 | + }); | ||
23 | + } else { | ||
24 | + //TODO: 에러 MODAL을 어케띄우지? 하위컴포넌트에서 훅을 쓰면 어떻게 되는지 확인 | ||
25 | + } | ||
26 | + }) | ||
27 | + } else { | ||
28 | + //TODO: 자리 꽉찼다는 MODAL | ||
29 | + } | ||
30 | + } | ||
31 | + | ||
9 | return ( | 32 | return ( |
10 | - <div className={`flex items-center place-content-between m-2 w-5/6 | 33 | + <button className={`flex items-center place-content-between m-2 w-5/6 |
11 | ${room.currentUsers < room.maxUsers ? | 34 | ${room.currentUsers < room.maxUsers ? |
12 | 'bg-white active:bg-green-100' : | 35 | 'bg-white active:bg-green-100' : |
13 | 'bg-gray-200 active:bg-gray-200'} | 36 | 'bg-gray-200 active:bg-gray-200'} |
14 | - rounded shadow hover:shadow-md`}> | 37 | + rounded shadow hover:shadow-md |
38 | + outline-none focus:outline-none`} | ||
39 | + onClick={joinRoom}> | ||
15 | <span className='mt-2 mb-2 ml-3 text-gray-600 text-lg'>{room.name}</span> | 40 | <span className='mt-2 mb-2 ml-3 text-gray-600 text-lg'>{room.name}</span> |
16 | <span className='mt-2 mb-2 mr-3 text-gray-500 text-right'> | 41 | <span className='mt-2 mb-2 mr-3 text-gray-500 text-right'> |
17 | {room.currentUsers}/{room.maxUsers} | 42 | {room.currentUsers}/{room.maxUsers} |
18 | </span> | 43 | </span> |
19 | - </div> | 44 | + </button> |
20 | ); | 45 | ); |
21 | } | 46 | } | ... | ... |
1 | import React, { useContext, useState } from 'react'; | 1 | import React, { useContext, useState } from 'react'; |
2 | -import { RouteComponentProps } from 'react-router'; | 2 | +import { useHistory } from 'react-router'; |
3 | -import { Footer } from '../components/common/Footer'; | 3 | +import { Main } from '../components/common/Main'; |
4 | import { MessageResponse, MessageType } from '../components/common/types'; | 4 | import { MessageResponse, MessageType } from '../components/common/types'; |
5 | import SocketContext from '../contexts/SocketContext'; | 5 | import SocketContext from '../contexts/SocketContext'; |
6 | 6 | ||
7 | -export const Login: React.FC<RouteComponentProps> = ({ history }) => { | 7 | +export const Login: React.FC = () => { |
8 | + const history = useHistory(); | ||
8 | const socket = useContext(SocketContext); | 9 | const socket = useContext(SocketContext); |
9 | const [ username, setUsername ] = useState(""); | 10 | const [ username, setUsername ] = useState(""); |
10 | 11 | ||
... | @@ -19,7 +20,7 @@ export const Login: React.FC<RouteComponentProps> = ({ history }) => { | ... | @@ -19,7 +20,7 @@ export const Login: React.FC<RouteComponentProps> = ({ history }) => { |
19 | } | 20 | } |
20 | 21 | ||
21 | return ( | 22 | return ( |
22 | - <div className="flex flex-col items-center w-screen h-screen"> | 23 | + <Main> |
23 | <div className="mt-auto flex flex-col items-center"> | 24 | <div className="mt-auto flex flex-col items-center"> |
24 | <img className="m-7" src="./logo192.png"/> | 25 | <img className="m-7" src="./logo192.png"/> |
25 | <div> | 26 | <div> |
... | @@ -40,7 +41,6 @@ export const Login: React.FC<RouteComponentProps> = ({ history }) => { | ... | @@ -40,7 +41,6 @@ export const Login: React.FC<RouteComponentProps> = ({ history }) => { |
40 | onClick={() => login()}>Login</button> | 41 | onClick={() => login()}>Login</button> |
41 | </div> | 42 | </div> |
42 | </div> | 43 | </div> |
43 | - <Footer/> | 44 | + </Main> |
44 | - </div> | ||
45 | ) | 45 | ) |
46 | } | 46 | } | ... | ... |
1 | import React, { useContext, useEffect, useState } from 'react'; | 1 | import React, { useContext, useEffect, useState } from 'react'; |
2 | -import { RouteComponentProps } from 'react-router'; | 2 | +import { Main } from '../components/common/Main'; |
3 | -import { Footer } from '../components/common/Footer'; | ||
4 | import { MessageResponse, MessageType } from '../components/common/types'; | 3 | import { MessageResponse, MessageType } from '../components/common/types'; |
5 | import { RoomInfo } from '../components/rooms/RoomInfo'; | 4 | import { RoomInfo } from '../components/rooms/RoomInfo'; |
6 | import { Room } from '../components/rooms/types'; | 5 | import { Room } from '../components/rooms/types'; |
7 | import SocketContext from '../contexts/SocketContext'; | 6 | import SocketContext from '../contexts/SocketContext'; |
8 | 7 | ||
9 | -export const Rooms: React.FC<RouteComponentProps> = ({ history }) => { | 8 | +export const Rooms: React.FC = () => { |
10 | const socket = useContext(SocketContext); | 9 | const socket = useContext(SocketContext); |
11 | const [ rooms, setRooms ] = useState<Room[]>([]); | 10 | const [ rooms, setRooms ] = useState<Room[]>([]); |
12 | 11 | ||
... | @@ -42,11 +41,10 @@ export const Rooms: React.FC<RouteComponentProps> = ({ history }) => { | ... | @@ -42,11 +41,10 @@ export const Rooms: React.FC<RouteComponentProps> = ({ history }) => { |
42 | // useEffect(refreshRooms, []); | 41 | // useEffect(refreshRooms, []); |
43 | 42 | ||
44 | return ( | 43 | return ( |
45 | - <div className='flex flex-col items-center w-screen h-screen'> | 44 | + <Main> |
46 | <div className='mt-auto w-screen flex flex-col items-center'> | 45 | <div className='mt-auto w-screen flex flex-col items-center'> |
47 | {rooms.map((room) => (<RoomInfo key={room.uuid} room={room} />))} | 46 | {rooms.map((room) => (<RoomInfo key={room.uuid} room={room} />))} |
48 | </div> | 47 | </div> |
49 | - <Footer /> | 48 | + </Main> |
50 | - </div> | ||
51 | ) | 49 | ) |
52 | } | 50 | } | ... | ... |
-
Please register or login to post a comment