An easy-to-use platform for EEG experimentation in the classroom
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

fixing some ts errors

+51 -29
+3 -3
src/main/index.ts
··· 128 128 'fs:storeExperimentState', 129 129 (_event, state: Record<string, unknown>) => { 130 130 fs.writeFileSync( 131 - path.join(getWorkspaceDir(state.title), 'appState.json'), 131 + path.join(getWorkspaceDir(state.title as string), 'appState.json'), 132 132 JSON.stringify(state) 133 133 ); 134 134 } ··· 139 139 (_event, state: Record<string, unknown>) => { 140 140 if (state.type !== 'NONE') { 141 141 const timestampedState = { ...state, subject: '', group: '', session: 1 }; 142 - if (!timestampedState.title) return; 142 + if (!state.title) return; 143 143 fs.writeFileSync( 144 - path.join(getWorkspaceDir(timestampedState.title), 'appState.json'), 144 + path.join(getWorkspaceDir(state.title as string), 'appState.json'), 145 145 JSON.stringify(timestampedState) 146 146 ); 147 147 }
+5 -3
src/renderer/components/CollectComponent/ConnectModal.tsx
··· 37 37 38 38 export default class ConnectModal extends Component<Props, State> { 39 39 static getDeviceName(device: Device | null) { 40 - if (!isNil(device)) { 41 - return isNil(device.name) ? device.id : device.name; 40 + if (device != null) { 41 + return device.name ?? device.id; 42 42 } 43 43 return ''; 44 44 } ··· 83 83 } 84 84 85 85 handleConnect() { 86 - this.props.DeviceActions.ConnectToDevice(this.state.selectedDevice); 86 + if (this.state.selectedDevice) { 87 + this.props.DeviceActions.ConnectToDevice(this.state.selectedDevice); 88 + } 87 89 } 88 90 89 91 handleinstructionProgress(progress: INSTRUCTION_PROGRESS) {
+2 -2
src/renderer/components/CollectComponent/index.tsx
··· 27 27 availableDevices: Array<Device>; 28 28 type: EXPERIMENTS; 29 29 experimentObject: ExperimentObject; 30 - signalQualityObservable: Observable<SignalQualityData>; 30 + signalQualityObservable: Observable<SignalQualityData> | null | undefined; 31 31 isRunning: boolean; 32 32 params: ExperimentParameters; 33 33 subject: string; ··· 102 102 open={this.state.isConnectModalOpen} 103 103 onClose={this.handleConnectModalClose} 104 104 connectedDevice={this.props.connectedDevice} 105 - signalQualityObservable={this.props.signalQualityObservable} 105 + signalQualityObservable={this.props.signalQualityObservable ?? undefined} 106 106 deviceType={this.props.deviceType} 107 107 deviceAvailability={this.props.deviceAvailability} 108 108 connectionStatus={this.props.connectionStatus}
+1 -1
src/renderer/components/EEGExplorationComponent.tsx
··· 56 56 } 57 57 58 58 handleStopConnect() { 59 - this.props.DeviceActions.DisconnectFromDevice(this.props.connectedDevice); 59 + this.props.DeviceActions.DisconnectFromDevice(); 60 60 this.setState({ isConnectModalOpen: false }); 61 61 this.props.DeviceActions.SetDeviceAvailability(DEVICE_AVAILABILITY.NONE); 62 62 }
+1 -1
src/renderer/components/HomeComponent/OverviewComponent.tsx
··· 16 16 17 17 // Generic curried enum type guard 18 18 function isEnum<T extends object>(en: T) { 19 - return (val: unknown): val is T[keyof T] => val in Object.values(en); 19 + return (val: unknown): val is T[keyof T] => Object.values(en).includes(val as T[keyof T]); 20 20 } 21 21 22 22 const OverviewComponent: React.FC<Props> = ({
+1 -1
src/renderer/components/InputModal.tsx
··· 45 45 this.props.onExit(); 46 46 } 47 47 48 - handleEnterSubmit(event: Record<string, unknown>) { 48 + handleEnterSubmit(event: React.KeyboardEvent<HTMLInputElement>) { 49 49 if (event.key === 'Enter') { 50 50 this.handleClose(); 51 51 }
+8 -5
src/renderer/components/SignalQualityIndicatorComponent.tsx
··· 6 6 import { SignalQualityData } from '../constants/interfaces'; 7 7 8 8 interface Props { 9 - signalQualityObservable: Observable<SignalQualityData>; 9 + signalQualityObservable: Observable<SignalQualityData> | null | undefined; 10 10 plottingInterval: number; 11 11 } 12 12 ··· 19 19 } 20 20 21 21 componentDidMount() { 22 - if (!isNil(this.props.signalQualityObservable)) { 23 - this.subscribeToObservable(this.props.signalQualityObservable); 22 + const { signalQualityObservable } = this.props; 23 + if (signalQualityObservable != null) { 24 + this.subscribeToObservable(signalQualityObservable); 24 25 } 25 26 } 26 27 27 28 componentDidUpdate(prevProps: Props) { 29 + const { signalQualityObservable } = this.props; 28 30 if ( 29 - this.props.signalQualityObservable !== prevProps.signalQualityObservable 31 + signalQualityObservable !== prevProps.signalQualityObservable && 32 + signalQualityObservable != null 30 33 ) { 31 - this.subscribeToObservable(this.props.signalQualityObservable); 34 + this.subscribeToObservable(signalQualityObservable); 32 35 } 33 36 } 34 37
+8 -5
src/renderer/components/ViewerComponent.tsx
··· 17 17 import Mousetrap from 'mousetrap'; 18 18 19 19 interface Props { 20 - signalQualityObservable: Observable<SignalQualityData>; 20 + signalQualityObservable: Observable<SignalQualityData> | null | undefined; 21 21 deviceType: DEVICES; 22 22 plottingInterval: number; 23 23 } ··· 58 58 channelColours: this.state.channels.map(() => '#66B0A9'), 59 59 }); 60 60 this.setKeyListeners(); 61 - if (!isNil(this.props.signalQualityObservable)) { 62 - this.subscribeToObservable(this.props.signalQualityObservable); 61 + const { signalQualityObservable } = this.props; 62 + if (signalQualityObservable != null) { 63 + this.subscribeToObservable(signalQualityObservable); 63 64 } 64 65 }); 65 66 } 66 67 67 68 componentDidUpdate(prevProps: Props, prevState: State) { 69 + const { signalQualityObservable } = this.props; 68 70 if ( 69 - this.props.signalQualityObservable !== prevProps.signalQualityObservable 71 + signalQualityObservable !== prevProps.signalQualityObservable && 72 + signalQualityObservable != null 70 73 ) { 71 - this.subscribeToObservable(this.props.signalQualityObservable); 74 + this.subscribeToObservable(signalQualityObservable); 72 75 } 73 76 if (this.props.deviceType !== prevProps.deviceType) { 74 77 this.setState({
+3
src/renderer/containers/AnalyzeContainer.ts
··· 11 11 deviceType: state.device.deviceType, 12 12 isEEGEnabled: state.experiment.isEEGEnabled, 13 13 ...state.pyodide, 14 + psdPlot: state.pyodide.psdPlot ?? {}, 15 + topoPlot: state.pyodide.topoPlot ?? {}, 16 + erpPlot: state.pyodide.erpPlot ?? {}, 14 17 }; 15 18 } 16 19
+4
src/renderer/containers/CollectContainer.ts
··· 3 3 import Collect from '../components/CollectComponent'; 4 4 import { DeviceActions, ExperimentActions } from '../actions'; 5 5 import { RootState } from '../store'; 6 + import { ExperimentParameters } from '../constants/interfaces'; 6 7 7 8 function mapStateToProps(state: RootState) { 8 9 return { 9 10 ...state.device, 10 11 ...state.experiment, 12 + connectedDevice: state.device.connectedDevice ?? {}, 13 + signalQualityObservable: state.device.signalQualityObservable ?? undefined, 14 + params: state.experiment.params as ExperimentParameters, 11 15 }; 12 16 } 13 17
+4 -1
src/renderer/containers/ExperimentDesignContainer.ts
··· 4 4 import { useNavigate } from 'react-router-dom'; 5 5 import Design from '../components/DesignComponent'; 6 6 import { ExperimentActions } from '../actions'; 7 + import { RootState } from '../store'; 8 + import { ExperimentParameters } from '../constants/interfaces'; 7 9 8 - function mapStateToProps(state) { 10 + function mapStateToProps(state: RootState) { 9 11 return { 10 12 ...state.experiment, 13 + params: state.experiment.params as ExperimentParameters, 11 14 }; 12 15 } 13 16
+5 -1
src/renderer/containers/HomeContainer.ts
··· 4 4 import { useNavigate } from 'react-router-dom'; 5 5 import Home from '../components/HomeComponent'; 6 6 import { DeviceActions, ExperimentActions, PyodideActions } from '../actions'; 7 + import { RootState } from '../store'; 7 8 8 - function mapStateToProps(state) { 9 + function mapStateToProps(state: RootState) { 9 10 return { 10 11 ...state.device, 11 12 ...state.pyodide, 13 + connectedDevice: state.device.connectedDevice ?? {}, 14 + topoPlot: state.pyodide.topoPlot ?? {}, 15 + signalQualityObservable: state.device.signalQualityObservable ?? undefined, 12 16 }; 13 17 } 14 18
+6 -6
src/renderer/epics/deviceEpics.ts
··· 130 130 filter(isActionOf(DeviceActions.ConnectToDevice)), 131 131 pluck('payload'), 132 132 map((device) => 133 - isNil(device.name) ? connectToEmotiv(device) : connectToMuse(device) 134 - ), 135 - mergeMap<Promise<DeviceInfo>, ObservableInput<DeviceInfo>>((promise) => 136 - promise.then((deviceInfo) => deviceInfo) 133 + (isNil(device.name) 134 + ? connectToEmotiv(device) 135 + : connectToMuse(device)) as Promise<DeviceInfo | null> 137 136 ), 137 + mergeMap((promise) => promise.then((deviceInfo) => deviceInfo)), 138 138 // eslint-disable-next-line @typescript-eslint/no-explicit-any 139 - mergeMap<DeviceInfo, ObservableInput<any>>((deviceInfo) => { 139 + mergeMap<DeviceInfo | null, ObservableInput<any>>((deviceInfo) => { 140 140 // returns union of several action types 141 - if (!isNil(deviceInfo) && !isNil(deviceInfo.samplingRate)) { 141 + if (deviceInfo != null && deviceInfo.samplingRate != null) { 142 142 console.log(deviceInfo); 143 143 return of( 144 144 DeviceActions.SetDeviceType(