Skip to content

Commit 9bc5fb2

Browse files
committed
Merge branch 'dev' of https://github.com/oslabs-beta/ReacType-v15 into garrett/websockets
2 parents 0000203 + 41e7144 commit 9bc5fb2

File tree

7 files changed

+105
-49
lines changed

7 files changed

+105
-49
lines changed

app/src/components/App.tsx

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -52,30 +52,38 @@ export const App = (): JSX.Element => {
5252
});
5353
}
5454
}, []);
55-
useEffect(() => {
56-
// provide config properties to legacy projects so new edits can be auto saved
55+
// useEffect(() => {
56+
// // provide config properties to legacy projects so new edits can be auto saved
57+
// // if (state.config === undefined) {
58+
// // state.config = { saveFlag: true, saveTimer: false };
59+
// // }
60+
// // New project save configuration to optimize server load and minimize Ajax requests
61+
// if (state.config.saveFlag) {
62+
// // state.config.saveFlag = false;
63+
// // state.config.saveTimer = true;
64+
// // dispatch(configToggle())
5765

58-
// New project save configuration to optimize server load and minimize Ajax requests
59-
if (state.config.saveFlag) {
60-
dispatch(configToggle())
61-
let userId;
62-
if (Cookies.get('ssid')) {
63-
userId = Cookies.get('ssid');
64-
} else {
65-
userId = window.localStorage.getItem('ssid');
66-
}
67-
if (!state.isLoggedIn) {
68-
localforage.setItem('guestProject', state);
69-
} else if (state.name !== '') {
70-
saveProject(state.name, state);
71-
localforage.setItem(userId, state);
72-
}
73-
}
74-
if (!state.config.saveTimer) {
75-
setTimeout(() => {
76-
}, 15000);
77-
}
78-
}, [state]);
66+
// let userId;
67+
// if (Cookies.get('ssid')) {
68+
// userId = Cookies.get('ssid');
69+
// } else {
70+
// userId = window.localStorage.getItem('ssid');
71+
// }
72+
// // if (state.isLoggedIn === false) {
73+
// if (!state.isLoggedIn) {
74+
// localforage.setItem('guestProject', state);
75+
// } else if (state.name !== '') {
76+
// saveProject(state.name, state);
77+
// localforage.setItem(userId, state);
78+
// }
79+
// }
80+
// if (!state.config.saveTimer) {
81+
// state.config.saveTimer = false;
82+
// setTimeout(() => {
83+
// state.config.saveFlag = true;
84+
// }, 15000);
85+
// }
86+
// }, [state]);
7987
// uncomment below to log state
8088

8189
return (
@@ -92,5 +100,6 @@ export const App = (): JSX.Element => {
92100
</DndProvider>
93101
</div>
94102
);
95-
};
103+
}
104+
96105
export default App;

app/src/index.js

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ import Tutorial from './tutorial/Tutorial.tsx';
1919
import TutorialPage from './tutorial/TutorialPage.tsx';
2020
import ProjectDashboard from './Dashboard/ProjectContainer.tsx';
2121

22+
// for websockets
23+
import debounce from 'lodash/debounce'
24+
2225
const client = new ApolloClient({
2326
uri: 'https://reactype-caret.herokuapp.com/graphql',
2427
cache: new InMemoryCache()
@@ -41,7 +44,12 @@ const PrivateRoute = ({ component: Component, ...rest }) => (
4144
// websocket front end starts here
4245
import { io } from 'socket.io-client'
4346
import { toggleDarkMode } from './redux/reducers/slice/darkModeSlice'
44-
import { addChild } from './redux/reducers/slice/appStateSlice.ts'
47+
48+
import { allCooperativeState } from './redux/reducers/slice/appStateSlice.ts'
49+
import { codePreviewCooperative } from './redux/reducers/slice/codePreviewSlice';
50+
import { allContextCooperative } from './redux/reducers/slice/contextReducer';
51+
import { cooperativeStyle } from './redux/reducers/slice/styleSlice';
52+
4553

4654
const socket = io('http://localhost:5656', {
4755
transports: ['websocket']
@@ -55,36 +63,51 @@ console.log(store.getState())
5563
let previousState = store.getState();
5664

5765
// sending info to backend whenever the redux store changes
58-
function handleStoreChange () {
59-
socket.connect();
66+
const handleStoreChange = debounce(() => {
6067
const newState = store.getState();
6168
if (newState !== previousState){
62-
socket.emit('custom-event', 'sent from front-end', store.getState())
69+
console.log('before sending to server: ', newState)
70+
socket.emit('custom-event', 'sent from front-end', JSON.stringify(newState))
6371
previousState = newState;
6472
}
65-
}
66-
67-
store.subscribe(handleStoreChange)
73+
}, 100);
6874

6975
// receiving the message from the back end
7076
socket.on('receive message', (event) => {
71-
console.log('message from server: ', event);
72-
const currentStore = store.getState();
77+
// console.log('message from server: ', event);
78+
let currentStore = JSON.stringify(store.getState())
7379
if (currentStore!==event){
80+
currentStore = JSON.parse(currentStore);
81+
event = JSON.parse(event);
7482
console.log('stores do not match')
7583
if (currentStore.darkMode.isDarkMode!==event.darkMode.isDarkMode){
7684
store.dispatch(toggleDarkMode())
85+
} else if (currentStore.appState!==event.appState) {
86+
store.dispatch(allCooperativeState(event.appState))
87+
} else if (currentStore.codePreviewSlice!==event.codePreviewCooperative){
88+
store.dispatch(codePreviewCooperative(event.codePreviewCooperative))
89+
} else if (currentStore.styleSlice!==event.styleSlice) {
90+
store.dispatch(cooperativeStyle(event.styleSlice))
7791
}
92+
<<<<<<< HEAD
7893

7994
console.log("eventstate from precooperative",event.appState.components[0].children[1])
8095
const {type, typeId, childId} = event.appState.components[0].children[1]
8196
store.dispatch(addChild({type, typeId, childId}))
8297

8398

99+
=======
100+
// else {
101+
// console.log('contextslice else if block is running: ', event.contextSlice.allContext[lastIndex])
102+
// store.dispatch(allContextCooperative(event.contextSlice))
103+
// }
104+
>>>>>>> 41e7144c6d708703d21ec0f269f012deb75d4aaf
84105
}
85106
console.log('updated user Store from another user: ', store.getState())
86107
})
87108

109+
store.subscribe(handleStoreChange)
110+
88111
ReactDOM.render(
89112
<ApolloProvider client={client}>
90113
<Provider store={store}>

app/src/redux/reducers/slice/appStateSlice.ts

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
// Main slice for all the component state.///
2+
<<<<<<< HEAD
23
import { createSlice, current } from '@reduxjs/toolkit';
4+
=======
5+
import { createSlice } from '@reduxjs/toolkit';
6+
import produce from 'immer';
7+
>>>>>>> 41e7144c6d708703d21ec0f269f012deb75d4aaf
38
// Import Interfaces for State, and HTML Types
49
import {
510
State,
@@ -14,7 +19,7 @@ import manageSeparators from '../../../helperFunctions/manageSeparators';
1419
export const initialState: State = {
1520
name: '',
1621
isLoggedIn: false,
17-
config: { saveFlag: true, saveTimer: false },
22+
// config: { saveFlag: true, saveTimer: false },
1823
components: [
1924
{
2025
id: 1,
@@ -1208,15 +1213,18 @@ const appStateSlice = createSlice({
12081213
toggleLoggedIn: (state) => {
12091214
state.isLoggedIn = !state.isLoggedIn;
12101215
},
1211-
configToggle: (state) => {
1212-
state.config = {
1213-
...state.config,
1214-
saveFlag: !state.config.saveFlag,
1215-
saveTimer: !state.config.saveTimer
1216-
};
1217-
},
1216+
// configToggle: (state) => {
1217+
// state.config = {
1218+
// ...state.config,
1219+
// saveFlag: !state.config.saveFlag,
1220+
// saveTimer: !state.config.saveTimer
1221+
// };
1222+
// },
12181223
snapShotAction: (state, action) => {
12191224
state.components[action.payload.focusIndex].past.push(action.payload.deepCopiedState.components[action.payload.focusIndex].children);
1225+
},
1226+
allCooperativeState: (state, action) => {
1227+
return Object.assign({}, state, action.payload)
12201228
}
12211229

12221230
}
@@ -1225,7 +1233,14 @@ const appStateSlice = createSlice({
12251233
// Exports the action creator function to be used with useDispatch
12261234

12271235

1228-
export const { addComponent, addChild, changeFocus, changeTailwind, changePosition, updateStateUsed, resetAllState, updateUseContext, updateCss, updateEvents, deleteEventAction, deletePage, deleteReusableComponent, setProjectName, changeProjectType, resetState, updateProjectName, deleteElement, updateAttributes, deleteChild, setInitialState, openProject, addElement, undo, redo, addState, addPassedInProps, deletePassedInProps, deleteState, toggleLoggedIn, configToggle, snapShotAction, cooperative } = appStateSlice.actions;
1236+
export const { addComponent, addChild, changeFocus,
1237+
changeTailwind, changePosition, updateStateUsed,
1238+
resetAllState, updateUseContext, updateCss, updateEvents,
1239+
deleteEventAction, deletePage, deleteReusableComponent,
1240+
setProjectName, changeProjectType, resetState, updateProjectName,
1241+
deleteElement, updateAttributes, deleteChild, setInitialState, openProject,
1242+
addElement, undo, redo, addState, addPassedInProps, deletePassedInProps,
1243+
deleteState, toggleLoggedIn, configToggle, snapShotAction, allCooperativeState } = appStateSlice.actions;
12291244

12301245

12311246
// Exports so we can combine in rootReducer

app/src/redux/reducers/slice/codePreviewSlice.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,14 @@ const codePreviewSlice = createSlice({
1414
},
1515
codePreviewInput: (state, action) => {
1616
state.input = action.payload
17-
}
17+
},
18+
codePreviewCooperative: (state, action) => {
19+
return Object.assign({}, state, action.payload)
20+
},
1821
}
1922
})
2023

2124

22-
export const { codePreviewSave, codePreviewInput } = codePreviewSlice.actions;
25+
export const { codePreviewSave, codePreviewInput, codePreviewCooperative } = codePreviewSlice.actions;
2326

2427
export default codePreviewSlice.reducer;

app/src/redux/reducers/slice/contextReducer.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,14 @@ const contextReducerSlice = createSlice({
4949
},
5050
getAllContext: (state, action) => {
5151
state = state;
52-
}
52+
},
53+
allContextCooperative: (state, action) => {
54+
return Object.assign({}, state, action.payload)
55+
},
5356

5457
}
5558
})
5659

57-
export const { addContext, addContextValues, deleteContext, getAllContext, addComponentToContext} = contextReducerSlice.actions
60+
export const { addContext, addContextValues, deleteContext, getAllContext, addComponentToContext, allContextCooperative } = contextReducerSlice.actions
5861
export default contextReducerSlice.reducer;
5962

app/src/redux/reducers/slice/styleSlice.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,13 @@ const initialState = {
1313
reducers: {
1414
setStyle: (state, action) => {
1515
state.style = action.payload;
16-
}
16+
},
17+
cooperativeStyle: (state, action) => {
18+
return Object.assign({}, state, action.payload)
19+
},
1720
}
1821
});
1922

20-
export const { setStyle } = styleSlice.actions;
23+
export const { setStyle, cooperativeStyle } = styleSlice.actions;
2124

2225
export default styleSlice.reducer;

server/server.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ io.on('connection', socket => {
8888
console.log(socket.id)
8989
socket.on('custom-event', (string, redux_store) => {
9090
console.log(string)
91-
console.log(redux_store)
91+
// console.log(redux_store)
9292
socket.broadcast.emit('receive message', redux_store)
9393
})
9494
})

0 commit comments

Comments
 (0)