Skip to content

Commit 6dea774

Browse files
authored
Merge pull request #1 from oslabs-beta/liz-clearcanvas
Add Sync of Clear Canvas for All Users in the Collaborative Room
2 parents 193d965 + 59c5904 commit 6dea774

File tree

4 files changed

+24
-9
lines changed

4 files changed

+24
-9
lines changed

app/src/components/left/RoomsContainer.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import {
2828
addPassedInProps,
2929
deletePassedInProps,
3030
deleteElement,
31+
resetAllState,
3132
updateStylesheet
3233
} from '../../redux/reducers/slice/appStateSlice';
3334
import {
@@ -132,6 +133,11 @@ const RoomsContainer = () => {
132133
}
133134
);
134135

136+
// dispatch clear canvas action to local state when the host of the room has clear canvas
137+
socket.on('clear canvas from server', () => {
138+
store.dispatch(resetAllState());
139+
});
140+
135141
// dispatch all updates to local state when another user has saved from Bottom Panel
136142
socket.on('update data from server', (updateData: BottomPanelObj) => {
137143
// console.log('update data received from server', updateData);

app/src/components/top/NavBarButtons.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { resetAllState } from '../../redux/reducers/slice/appStateSlice';
2121
import { setStyle } from '../../redux/reducers/slice/styleSlice';
2222
import store from '../../redux/store';
2323
import withStyles from '@mui/styles/withStyles';
24+
import { emitEvent } from '../../helperFunctions/socket';
2425

2526
const { API_BASE_URL } = config;
2627

@@ -97,6 +98,8 @@ function navbarDropDown(props) {
9798
// state: store.appState
9899
// }));
99100
const state = useSelector((store: RootState) => store.appState);
101+
const roomCode = useSelector((store: RootState) => store.roomSlice.roomCode);
102+
const userName = useSelector((store: RootState) => store.roomSlice.userName);
100103

101104
const closeModal = () => setModal('');
102105
const handleClick = (event) => {
@@ -106,7 +109,8 @@ function navbarDropDown(props) {
106109
const clearWorkspace = () => {
107110
// Reset state for project to initial state
108111
const resetState = () => {
109-
dispatch(resetAllState());
112+
if (roomCode) emitEvent('clearCanvasAction', roomCode, userName);
113+
else dispatch(resetAllState());
110114
};
111115
// Set modal options
112116
const children = (
@@ -129,6 +133,7 @@ function navbarDropDown(props) {
129133
</ListItem>
130134
</List>
131135
);
136+
132137
// Create modal
133138
setModal(
134139
createModal({

app/src/redux/store.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,6 @@ import { configureStore } from '@reduxjs/toolkit';
33
// Import of combined reducers in rootReducer
44
import rootReducer from './reducers/rootReducer';
55

6-
/*
7-
// Define the root state type based on the rootReducer
8-
export type RootState = ReturnType<typeof rootReducer>;
9-
10-
// Define the type of the Redux store
11-
export type AppStore = Store<RootState>;
12-
*/
13-
146
const store = configureStore({
157
reducer: rootReducer,
168
middleware: (getDefaultMiddleware) => {

server/server.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,18 @@ io.on('connection', (client) => {
191191
}
192192
});
193193

194+
client.on('clearCanvasAction', async (roomCode: string, userName: string) => {
195+
if (roomCode) {
196+
// server send clear canvas to everyone in the room if action is from the host
197+
if (userName === Object.values(roomLists[roomCode])[0]) {
198+
io.to(roomCode).emit(
199+
'clear canvas from server',
200+
Object.values(roomLists[roomCode])
201+
);
202+
}
203+
}
204+
});
205+
194206
client.on(
195207
'deleteElementAction',
196208
(roomCode: string, deleteElementData: object) => {

0 commit comments

Comments
 (0)