import React, { Component } from 'react'; import { connect, ResolveThunks } from 'react-redux'; import { Button, Container, Divider, Toolbar } from '@redux-devtools/ui'; import { DevTools, Dispatcher, DispatcherButton, ExportButton, getActiveInstance, getReport, ImportButton, liftedDispatch, MonitorSelector, PrintButton, SliderButton, SliderMonitor, StoreState, TopButtons, } from '@redux-devtools/app'; import { GoBroadcast } from 'react-icons/go'; import { MdBorderBottom, MdBorderLeft, MdBorderRight } from 'react-icons/md'; import type { Position } from '../pageScript/api/openWindow'; import type { SingleMessage } from '../background/store/apiMiddleware'; type StateProps = ReturnType; type DispatchProps = ResolveThunks; interface OwnProps { readonly position: string; } type Props = StateProps & DispatchProps & OwnProps; declare global { interface Window { isElectron?: boolean; } } function sendMessage(message: SingleMessage) { chrome.runtime.sendMessage(message); } class Actions extends Component { openWindow = (position: Position) => { sendMessage({ type: 'OPEN', position }); }; openOptionsPage = () => { if (navigator.userAgent.indexOf('Firefox') !== -1) { sendMessage({ type: 'OPEN_OPTIONS' }); } else { chrome.runtime.openOptionsPage(); } }; render() { const { monitor, dispatcherIsOpen, sliderIsOpen, options, liftedState, liftedDispatch, position, stateTreeSettings, } = this.props; const { features } = options; return ( {sliderIsOpen && options.connectionId && options.features.jump && ( )} {dispatcherIsOpen && options.connectionId && options.features.dispatch && } {features.export && } {features.import && } {position && (position !== '#popup' || navigator.userAgent.indexOf('Firefox') !== -1) && } {features.jump && } {features.dispatch && ( )} {!window.isElectron && position !== '#left' && ( )} {!window.isElectron && position !== '#right' && ( )} {!window.isElectron && position !== '#bottom' && ( )} {!window.isElectron && ( )} ); } } const mapStateToProps = (state: StoreState) => { const instances = state.instances; const id = getActiveInstance(instances); return { liftedState: instances.states[id], monitorState: state.monitor.monitorState, options: instances.options[id], monitor: state.monitor.selected, dispatcherIsOpen: state.monitor.dispatcherIsOpen, sliderIsOpen: state.monitor.sliderIsOpen, reports: state.reports.data, stateTreeSettings: state.stateTreeSettings, }; }; const actionCreators = { liftedDispatch, getReport, }; export default connect(mapStateToProps, actionCreators)(Actions);