Skip to content

Commit 9455347

Browse files
committed
Use hook in app wrapper for readability
1 parent c85a178 commit 9455347

File tree

1 file changed

+2
-72
lines changed

1 file changed

+2
-72
lines changed

src/commons/application/Application.tsx

Lines changed: 2 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
11
import React from 'react';
22
import { useDispatch } from 'react-redux';
33
import { Outlet } from 'react-router';
4-
import Messages, {
5-
MessageType,
6-
MessageTypeNames,
7-
sendToWebview
8-
} from 'src/features/vscode/messages';
94

105
import NavigationBar from '../navigationBar/NavigationBar';
116
import Constants from '../utils/Constants';
127
import { useLocalStorageState, useSession } from '../utils/Hooks';
13-
import WorkspaceActions from '../workspace/WorkspaceActions';
8+
import { useVscodeIntegration } from '../utils/hooks/useVscodeIntegration';
149
import { defaultWorkspaceSettings, WorkspaceSettingsContext } from '../WorkspaceSettingsContext';
1510
import SessionActions from './actions/SessionActions';
16-
import VscodeActions from './actions/VscodeActions';
1711

1812
const Application: React.FC = () => {
1913
const dispatch = useDispatch();
@@ -77,71 +71,7 @@ const Application: React.FC = () => {
7771
};
7872
}, [isPWA, isMobile]);
7973

80-
// Effect to handle messages from VS Code
81-
React.useEffect(() => {
82-
if (!window.confirm) {
83-
// Polyfill confirm() to instead show as VS Code notification
84-
// TODO: Pass text as a new Message to the webview
85-
window.confirm = text => {
86-
console.log(`Confirmation automatically accepted: ${text ?? 'No text provided'}`);
87-
return true;
88-
};
89-
}
90-
91-
const message = Messages.ExtensionPing(window.origin);
92-
sendToWebview(message);
93-
94-
window.addEventListener('message', event => {
95-
const message: MessageType = event.data;
96-
// Only accept messages from the vscode webview
97-
if (!event.origin.startsWith('vscode-webview://')) {
98-
return;
99-
}
100-
// console.log(`FRONTEND: Message from ${event.origin}: ${JSON.stringify(message)}`);
101-
switch (message.type) {
102-
case MessageTypeNames.ExtensionPong:
103-
console.log('Received WebviewStarted message, will set vsc');
104-
dispatch(VscodeActions.setVscode());
105-
106-
if (message.token) {
107-
const token = JSON.parse(message.token.trim());
108-
console.log(`FRONTEND: WebviewStarted: ${token}`);
109-
dispatch(
110-
SessionActions.setTokens({
111-
accessToken: token.accessToken,
112-
refreshToken: token.refreshToken
113-
})
114-
);
115-
dispatch(SessionActions.fetchUserAndCourse());
116-
}
117-
break;
118-
case MessageTypeNames.Text:
119-
const { workspaceLocation, code } = message;
120-
console.log(`FRONTEND: TextMessage: ${code}`);
121-
dispatch(WorkspaceActions.updateEditorValue(workspaceLocation, 0, code));
122-
break;
123-
case MessageTypeNames.EvalEditor:
124-
dispatch(WorkspaceActions.evalEditor(message.workspaceLocation));
125-
break;
126-
case MessageTypeNames.Navigate:
127-
window.location.pathname = message.route;
128-
// TODO: Figure out why this doesn't work, this is faster in theory
129-
// navigate(message.route);
130-
break;
131-
case MessageTypeNames.McqQuestion:
132-
dispatch(WorkspaceActions.showMcqPane(message.workspaceLocation, message.options));
133-
break;
134-
case MessageTypeNames.McqAnswer:
135-
console.log(`FRONTEND: MCQAnswerMessage: ${message}`);
136-
dispatch(SessionActions.submitAnswer(message.questionId, message.choice));
137-
break;
138-
case MessageTypeNames.AssessmentAnswer:
139-
dispatch(SessionActions.submitAnswer(message.questionId, message.answer));
140-
break;
141-
}
142-
});
143-
// eslint-disable-next-line react-hooks/exhaustive-deps
144-
}, []);
74+
useVscodeIntegration();
14575

14676
return (
14777
<WorkspaceSettingsContext.Provider value={[workspaceSettings, setWorkspaceSettings]}>

0 commit comments

Comments
 (0)