Skip to content

Commit 5aaa40f

Browse files
committed
refactor split panel
1 parent d45bd09 commit 5aaa40f

File tree

4 files changed

+75
-52
lines changed

4 files changed

+75
-52
lines changed

services/app/apps/codebattle/assets/js/widgets/pages/RoomWidget.jsx

Lines changed: 5 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
import React, { useEffect, useState } from 'react';
1+
import React from 'react';
22

33
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
44
import cn from 'classnames';
5-
import Split from 'react-split';
65
import { CSSTransition, SwitchTransition } from 'react-transition-group';
76

87
import FeedbackAlertNotification from '../components/FeedbackAlertNotification';
@@ -27,52 +26,6 @@ import NetworkAlert from './game/NetworkAlert';
2726
import TimeoutGameInfo from './game/TimeoutGameInfo';
2827
import WaitingOpponentInfo from './game/WaitingOpponentInfo';
2928

30-
const disableSplit = true;
31-
32-
function getWindowDimensions() {
33-
const { innerWidth: width, innerHeight: height } = window;
34-
return {
35-
width,
36-
height,
37-
};
38-
}
39-
40-
export function useWindowDimensions() {
41-
const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());
42-
43-
useEffect(() => {
44-
function handleResize() {
45-
setWindowDimensions(getWindowDimensions());
46-
}
47-
48-
window.addEventListener('resize', handleResize);
49-
return () => window.removeEventListener('resize', handleResize);
50-
}, []);
51-
52-
return windowDimensions;
53-
}
54-
55-
function PanelsSplitPane({ children, viewMode }) {
56-
const dimensions = useWindowDimensions();
57-
58-
if (viewMode !== 'duel' || dimensions.width < 992 || disableSplit) return children;
59-
60-
return (
61-
<Split
62-
style={{ maxHeight: 'calc(100vh - 77px)' }}
63-
sizes={[35, 60]}
64-
className="d-flex flex-column w-100"
65-
direction="vertical"
66-
gutterSize={5}
67-
gutterAlign="center"
68-
cursor="row-resize"
69-
>
70-
<div style={{ minHeight: 100 }} className="d-flex w-100">{children[0]}</div>
71-
<div style={{ minHeight: 200 }} className="d-flex w-100 cb-overflow-y-hidden">{children[1]}</div>
72-
</Split>
73-
);
74-
}
75-
7629
function RoomWidget({
7730
pageName,
7831
mainMachine,
@@ -140,16 +93,16 @@ function RoomWidget({
14093
>
14194
<div className="row no-gutter cb-game">
14295
{showTaskBuilder && (
143-
<PanelsSplitPane viewMode={viewMode}>
96+
<>
14497
<BuilderSettingsWidget />
14598
<BuilderEditorsWidget />
146-
</PanelsSplitPane>
99+
</>
147100
)}
148101
{showBattleRoom && (
149-
<PanelsSplitPane viewMode={viewMode}>
102+
<>
150103
<InfoWidget viewMode={viewMode} />
151104
<GameWidget viewMode={viewMode} editorMachine={editorMachine} />
152-
</PanelsSplitPane>
105+
</>
153106
)}
154107
{mute && (
155108
<div className="rounded p-2 bg-dark cb-mute-icon">
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import React from 'react';
2+
3+
import Split from 'react-split';
4+
5+
import { useWindowDimensions } from '@/utils/useWindowDimensions';
6+
7+
function PanelsSplitPane({ children, viewMode }) {
8+
const dimensions = useWindowDimensions();
9+
10+
if (viewMode !== 'duel' || dimensions.width < 992) return children;
11+
12+
return (
13+
<Split
14+
style={{ maxHeight: 'calc(100vh - 77px)' }}
15+
sizes={[35, 60]}
16+
className="d-flex flex-column w-100"
17+
direction="vertical"
18+
gutterSize={5}
19+
gutterAlign="center"
20+
cursor="row-resize"
21+
>
22+
<div style={{ minHeight: 100 }} className="d-flex w-100">{children[0]}</div>
23+
<div style={{ minHeight: 200 }} className="d-flex w-100 cb-overflow-y-hidden">{children[1]}</div>
24+
</Split>
25+
);
26+
}
27+
28+
export default PanelsSplitPane;
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { useEffect, useState } from 'react';
2+
3+
function getWindowDimensions() {
4+
const { innerWidth: width, innerHeight: height } = window;
5+
return {
6+
width,
7+
height,
8+
};
9+
}
10+
11+
function useWindowDimensions() {
12+
const [windowDimensions, setWindowDimensions] = useState(getWindowDimensions());
13+
14+
useEffect(() => {
15+
function handleResize() {
16+
setWindowDimensions(getWindowDimensions());
17+
}
18+
19+
window.addEventListener('resize', handleResize);
20+
return () => window.removeEventListener('resize', handleResize);
21+
}, []);
22+
23+
return windowDimensions;
24+
}
25+
26+
export default useWindowDimensions;

services/app/apps/codebattle/lib/codebattle_web/channels/game_channel.ex

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,22 @@ defmodule CodebattleWeb.GameChannel do
122122
{:noreply, socket}
123123
end
124124

125+
def handle_in("like", %{"liked_user_id" => user_id}, socket) do
126+
broadcast_from!(socket, "like", %{
127+
user_id: user_id
128+
})
129+
130+
{:noreply, socket}
131+
end
132+
133+
def handle_in("dislike", %{"disliked_user_id" => user_id}, socket) do
134+
broadcast_from!(socket, "dislike", %{
135+
user_id: user_id
136+
})
137+
138+
{:noreply, socket}
139+
end
140+
125141
def handle_in("give_up", _, socket) do
126142
game_id = socket.assigns.game_id
127143
user = socket.assigns.current_user

0 commit comments

Comments
 (0)