diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000..00fe6c27 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: Methuselah96 diff --git a/docs/Integrations/Remote.md b/docs/Integrations/Remote.md index f2c80d59..7a9bd8e3 100644 --- a/docs/Integrations/Remote.md +++ b/docs/Integrations/Remote.md @@ -1,6 +1,6 @@ ## Remote monitoring -By installing [`redux-devtools-cli`](https://github.com/reduxjs/redux-devtools/tree/master/packages/redux-devtools-cli#usage), starting the server server and launching the Redux DevTools app (`redux-devtools --open`), you can connect any remote application, even not javascript. There are some integrations for javascript like [remote-redux-devtools](https://github.com/zalmoxisus/remote-redux-devtools) and [remotedev](https://github.com/zalmoxisus/remotedev), but the plan is to deprecate them and support it out of the box from the extension without a websocket server. It is more useful for non-js apps. +By installing [`@redux-devtools/cli`](https://github.com/reduxjs/redux-devtools/tree/master/packages/redux-devtools-cli#usage), starting the server server and launching the Redux DevTools app (`redux-devtools --open`), you can connect any remote application, even not javascript. There are some integrations for javascript like [remote-redux-devtools](https://github.com/zalmoxisus/remote-redux-devtools) and [remotedev](https://github.com/zalmoxisus/remotedev), but the plan is to deprecate them and support it out of the box from the extension without a websocket server. It is more useful for non-js apps. ### WebSocket Clients diff --git a/docs/Walkthrough.md b/docs/Walkthrough.md index ad48cf38..8a2381b3 100644 --- a/docs/Walkthrough.md +++ b/docs/Walkthrough.md @@ -2,7 +2,7 @@ ## Browser Extension -If you don’t want to bother with installing Redux DevTools and integrating it into your project, consider using [Redux DevTools Extension](https://github.com/zalmoxisus/redux-devtools-extension) for Chrome and Firefox. It provides access to the most popular monitors, is easy to configure to filter actions, and doesn’t require installing any packages. +If you don’t want to bother with installing Redux DevTools and integrating it into your project, consider using [Redux DevTools Extension](https://github.com/reduxjs/redux-devtools/tree/master/extension) for Chrome and Firefox. It provides access to the most popular monitors, is easy to configure to filter actions, and doesn’t require installing any packages. ## Manual Integration @@ -12,14 +12,14 @@ It’s more steps, but you will have full control over monitors and their config ### Installation ``` -npm install --save-dev redux-devtools +npm install --save-dev @redux-devtools/core ``` You’ll also likely want to install some monitors: ``` -npm install --save-dev redux-devtools-log-monitor -npm install --save-dev redux-devtools-dock-monitor +npm install --save-dev @redux-devtools/log-monitor +npm install --save-dev @redux-devtools/dock-monitor ``` ### Usage @@ -34,11 +34,11 @@ Somewhere in your project, create a `DevTools` component by passing a `monitor` import React from 'react'; // Exported from redux-devtools -import { createDevTools } from 'redux-devtools'; +import { createDevTools } from '@redux-devtools/core'; // Monitors are separate packages, and you can make a custom one -import LogMonitor from 'redux-devtools-log-monitor'; -import DockMonitor from 'redux-devtools-dock-monitor'; +import LogMonitor from '@redux-devtools/log-monitor'; +import DockMonitor from '@redux-devtools/dock-monitor'; // createDevTools takes a monitor and produces a DevTools component const DevTools = createDevTools( @@ -113,7 +113,7 @@ If you’d like, you may add another store enhancer called `persistState()`. It ```js // ... -import { persistState } from 'redux-devtools'; +import { persistState } from '@redux-devtools/core'; const enhancer = compose( // Middleware you want to use in development: @@ -190,7 +190,7 @@ export default function configureStore(initialState) { ```js import { createStore, applyMiddleware, compose } from 'redux'; -import { persistState } from 'redux-devtools'; +import { persistState } from '@redux-devtools/core'; import rootReducer from '../reducers'; import DevTools from '../containers/DevTools'; diff --git a/extension/package.json b/extension/package.json index 31673212..197e00c4 100644 --- a/extension/package.json +++ b/extension/package.json @@ -1,6 +1,6 @@ { "name": "remotedev-redux-devtools-extension", - "version": "2.17.1", + "version": "2.17.2", "description": "Redux Developer Tools for debugging application state changes.", "homepage": "https://github.com/reduxjs/redux-devtools/tree/master/extension", "license": "MIT", @@ -17,8 +17,8 @@ "build:examples": "babel-node examples/buildAll.js", "precompress:extension": "npm run lint && npm run test:app && npm run build:extension && npm run test:chrome && npm run test:electron", "precompress:firefox": "npm run lint && npm run build:firefox && npm run test:app", - "compress:extension": "cd build/extension && bestzip ../extension.zip", - "compress:firefox": "cd build/firefox && bestzip ../firefox.zip", + "compress:extension": "bestzip build/extension.zip build/extension", + "compress:firefox": "bestzip build/extension.zip build/extension", "docs:clean": "rimraf _book", "docs:prepare": "gitbook install", "docs:build": "npm run docs:prepare && gitbook build", @@ -27,7 +27,7 @@ "clean": "rimraf build/ && rimraf dev/", "test:app": "cross-env BABEL_ENV=test jest test/app", "test:chrome": "jest test/chrome", - "test:electron": "jest test/electron && rimraf test/electron/tmp", + "test:electron": "jest test/electron", "test": "npm run test:app && npm run build:extension && npm run test:chrome && npm run test:electron" }, "dependencies": { @@ -64,7 +64,7 @@ "chromedriver": "^91.0.0", "copy-webpack-plugin": "^6.3.1", "cross-env": "^7.0.2", - "electron": "^2.0.2", + "electron": "^13.1.1", "enzyme": "^3.11.0", "enzyme-adapter-react-16": "^1.15.3", "eslint": "^7.6.0", @@ -81,10 +81,9 @@ "react-transform-catch-errors": "^1.0.0", "react-transform-hmr": "^1.0.1", "rimraf": "^3.0.2", - "selenium-webdriver": "^3.0.1", + "selenium-webdriver": "^3.6.0", "sinon-chrome": "^1.1.2", "style-loader": "^1.2.1", - "terser-webpack-plugin": "^1.1.0", "webpack": "^4.44.1", "webpack-cli": "^3.3.12" } diff --git a/extension/src/browser/extension/chromeAPIMock.js b/extension/src/browser/extension/chromeAPIMock.js index 78c74017..1081f37a 100644 --- a/extension/src/browser/extension/chromeAPIMock.js +++ b/extension/src/browser/extension/chromeAPIMock.js @@ -87,6 +87,6 @@ if (window.isElectron) { }; } -if (isFirefox) { +if (isFirefox || window.isElectron) { chrome.storage.sync = chrome.storage.local; } diff --git a/extension/src/browser/extension/manifest.json b/extension/src/browser/extension/manifest.json index c62ae5ab..33a5f74c 100644 --- a/extension/src/browser/extension/manifest.json +++ b/extension/src/browser/extension/manifest.json @@ -1,5 +1,5 @@ { - "version": "2.17.1", + "version": "2.17.2", "name": "Redux DevTools", "short_name": "Redux DevTools", "description": "Redux DevTools for debugging application's state changes.", @@ -63,7 +63,6 @@ "permissions": [ "notifications", "contextMenus", - "tabs", "storage", "file:///*", "http://*/*", diff --git a/extension/test/electron/devpanel.spec.js b/extension/test/electron/devpanel.spec.js index 0974d021..12110d4c 100644 --- a/extension/test/electron/devpanel.spec.js +++ b/extension/test/electron/devpanel.spec.js @@ -5,7 +5,8 @@ import chromedriver from 'chromedriver'; import { switchMonitorTests, delay } from '../utils/e2e'; const port = 9515; -const devPanelPath = 'chrome-extension://redux-devtools/devpanel.html'; +const devPanelPath = + 'chrome-extension://lmhkpmbekcpmknklioeibfkpmmfibljd/window.html'; describe('DevTools panel for Electron', function () { beforeAll(async () => { @@ -30,8 +31,19 @@ describe('DevTools panel for Electron', function () { }); it('should open Redux DevTools tab', async () => { + if (!(await this.driver.getCurrentUrl()).startsWith('devtools')) { + const originalWindow = await this.driver.getWindowHandle(); + const windows = await this.driver.getAllWindowHandles(); + for (const window of windows) { + if (window === originalWindow) continue; + await this.driver.switchTo().window(window); + if ((await this.driver.getCurrentUrl()).startsWith('devtools')) { + break; + } + } + } expect(await this.driver.getCurrentUrl()).toMatch( - /chrome-devtools:\/\/devtools\/bundled\/inspector.html/ + /devtools:\/\/devtools\/bundled\/devtools_app.html/ ); await this.driver.manage().timeouts().pageLoadTimeout(5000); @@ -42,19 +54,22 @@ describe('DevTools panel for Electron', function () { if (attempts === 0) { return callback('Redux panel not found'); } - const tabs = UI.inspectorView._tabbedPane._tabs; - const idList = tabs.map((tab) => tab.id); - const reduxPanelId = 'chrome-extension://redux-devtoolsRedux'; - if (idList.indexOf(reduxPanelId) !== -1) { - UI.inspectorView.showPanel(reduxPanelId); - return callback(reduxPanelId); + if (UI.inspectorView) { + const tabs = UI.inspectorView._tabbedPane._tabs; + const idList = tabs.map((tab) => tab.id); + const reduxPanelId = + 'chrome-extension://lmhkpmbekcpmknklioeibfkpmmfibljdRedux'; + if (idList.indexOf(reduxPanelId) !== -1) { + UI.inspectorView.showPanel(reduxPanelId); + return callback(reduxPanelId); + } } attempts--; setTimeout(showReduxPanel, 500); } showReduxPanel(); }); - expect(id).toBe('chrome-extension://redux-devtoolsRedux'); + expect(id).toBe('chrome-extension://lmhkpmbekcpmknklioeibfkpmmfibljdRedux'); const className = await this.driver .findElement(webdriver.By.className(id)) diff --git a/extension/test/electron/fixture/main.js b/extension/test/electron/fixture/main.js index 03a81908..9d56953c 100644 --- a/extension/test/electron/fixture/main.js +++ b/extension/test/electron/fixture/main.js @@ -1,18 +1,21 @@ const path = require('path'); -const { app, BrowserWindow } = require('electron'); - -app.setPath('userData', path.join(__dirname, '../tmp')); +const { app, BrowserWindow, session } = require('electron'); app.on('window-all-closed', app.quit); -app.on('ready', () => { - BrowserWindow.addDevToolsExtension( - path.join(__dirname, '../../../build/extension') +app.whenReady().then(async () => { + await session.defaultSession.loadExtension( + path.join(__dirname, '../../../build/extension'), + { allowFileAccess: true } ); const mainWindow = new BrowserWindow({ width: 150, height: 100, + webPreferences: { + nodeIntegration: true, + contextIsolation: false, + }, }); - mainWindow.loadURL(`file://${__dirname}/index.html`); - mainWindow.openDevTools({ mode: 'detach' }); + mainWindow.loadFile('index.html'); + mainWindow.webContents.openDevTools({ mode: 'detach' }); }); diff --git a/extension/webpack/base.config.js b/extension/webpack/base.config.js index 21559612..f2221bd9 100644 --- a/extension/webpack/base.config.js +++ b/extension/webpack/base.config.js @@ -1,6 +1,5 @@ import path from 'path'; import webpack from 'webpack'; -import TerserPlugin from 'terser-webpack-plugin'; import CopyPlugin from 'copy-webpack-plugin'; const extpath = path.join(__dirname, '../src/browser/extension/'); @@ -55,18 +54,7 @@ const baseConfig = (params) => ({ : [] ), optimization: { - minimizer: [ - new TerserPlugin({ - terserOptions: { - output: { - comments: false, - }, - }, - // sourceMap: true, - cache: true, - parallel: true, - }), - ], + minimize: false, }, performance: { hints: false, diff --git a/package.json b/package.json index cbfc41e1..f0156a34 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "eslint-plugin-react": "^7.20.5", "file-loader": "^6.0.0", "fork-ts-checker-webpack-plugin": "^5.1.0", + "html-loader": "^1.1.0", "html-webpack-plugin": "^4.3.0", "jest": "^26.2.2", "lerna": "^3.22.1", @@ -42,6 +43,7 @@ "ts-jest": "^26.2.0", "ts-node": "^9.0.0", "typescript": "^3.9.7", + "url-loader": "^4.1.0", "webpack": "^4.44.1", "webpack-cli": "^3.3.12", "webpack-dev-server": "^3.11.0" diff --git a/packages/d3-state-visualizer/CHANGELOG.md b/packages/d3-state-visualizer/CHANGELOG.md index 8a689588..aa07f9f2 100644 --- a/packages/d3-state-visualizer/CHANGELOG.md +++ b/packages/d3-state-visualizer/CHANGELOG.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.4.0](https://github.com/reduxjs/redux-devtools/compare/d3-state-visualizer@1.3.4...d3-state-visualizer@1.4.0) (2021-03-06) + +### Features + +- **d3-state-visualizer:** convert example to TypeScript ([#641](https://github.com/reduxjs/redux-devtools/issues/641)) ([300b60a](https://github.com/reduxjs/redux-devtools/commit/300b60a8b1f92a6d7c78510a1bea304490aa23be)) +- **d3-state-visualizer:** convert to TypeScript ([#640](https://github.com/reduxjs/redux-devtools/issues/640)) ([0c78a5a](https://github.com/reduxjs/redux-devtools/commit/0c78a5a9a76ee7eff37dcd8e39272d98c03e0869)) +- **redux-devtools-chart-monitor:** convert to TypeScript ([#642](https://github.com/reduxjs/redux-devtools/issues/642)) ([761baba](https://github.com/reduxjs/redux-devtools/commit/761baba0aa0f4dc672f8771f4b12bed3863557f7)) + ## [1.3.4](https://github.com/reduxjs/redux-devtools/compare/d3-state-visualizer@1.3.3...d3-state-visualizer@1.3.4) (2020-09-07) **Note:** Version bump only for package d3-state-visualizer diff --git a/packages/d3-state-visualizer/examples/tree/CHANGELOG.md b/packages/d3-state-visualizer/examples/tree/CHANGELOG.md index 924d357c..eab4a568 100644 --- a/packages/d3-state-visualizer/examples/tree/CHANGELOG.md +++ b/packages/d3-state-visualizer/examples/tree/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [0.1.0](https://github.com/reduxjs/redux-devtools/compare/d3-state-visualizer-tree-example@0.0.2...d3-state-visualizer-tree-example@0.1.0) (2021-03-06) + +### Features + +- **d3-state-visualizer:** convert example to TypeScript ([#641](https://github.com/reduxjs/redux-devtools/issues/641)) ([300b60a](https://github.com/reduxjs/redux-devtools/commit/300b60a8b1f92a6d7c78510a1bea304490aa23be)) + ## [0.0.2](https://github.com/reduxjs/redux-devtools/compare/d3-state-visualizer-tree-example@0.0.1...d3-state-visualizer-tree-example@0.0.2) (2020-09-07) **Note:** Version bump only for package d3-state-visualizer-tree-example diff --git a/packages/d3-state-visualizer/examples/tree/package.json b/packages/d3-state-visualizer/examples/tree/package.json index 56170c6b..0b8d671f 100644 --- a/packages/d3-state-visualizer/examples/tree/package.json +++ b/packages/d3-state-visualizer/examples/tree/package.json @@ -1,6 +1,6 @@ { "name": "d3-state-visualizer-tree-example", - "version": "0.0.2", + "version": "0.1.0", "description": "Visualize your app state as a tree", "keywords": [ "d3", @@ -21,8 +21,8 @@ "url": "https://github.com/reduxjs/redux-devtools.git" }, "dependencies": { - "d3-state-visualizer": "^1.3.4", - "map2tree": "^1.4.2" + "d3-state-visualizer": "^1.4.0", + "map2tree": "^1.5.0" }, "private": true } diff --git a/packages/d3-state-visualizer/package.json b/packages/d3-state-visualizer/package.json index 4ab6245f..8b714d16 100644 --- a/packages/d3-state-visualizer/package.json +++ b/packages/d3-state-visualizer/package.json @@ -1,6 +1,6 @@ { "name": "d3-state-visualizer", - "version": "1.3.4", + "version": "1.4.0", "description": "Visualize your app state with a range of reusable charts", "keywords": [ "d3", @@ -43,9 +43,9 @@ "dependencies": { "@types/d3": "^3.5.43", "d3": "^3.5.17", - "d3tooltip": "^1.2.3", + "d3tooltip": "^1.3.0", "deepmerge": "^4.2.2", - "map2tree": "^1.4.2", + "map2tree": "^1.5.0", "ramda": "^0.27.1" }, "devDependencies": { diff --git a/packages/d3tooltip/CHANGELOG.md b/packages/d3tooltip/CHANGELOG.md index 8313ac1f..0db9d05d 100644 --- a/packages/d3tooltip/CHANGELOG.md +++ b/packages/d3tooltip/CHANGELOG.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.3.0](https://github.com/reduxjs/redux-devtools/compare/d3tooltip@1.2.3...d3tooltip@1.3.0) (2021-03-06) + +### Features + +- **d3-state-visualizer:** convert to TypeScript ([#640](https://github.com/reduxjs/redux-devtools/issues/640)) ([0c78a5a](https://github.com/reduxjs/redux-devtools/commit/0c78a5a9a76ee7eff37dcd8e39272d98c03e0869)) +- **d3tooltip:** convert to TypeScript ([#639](https://github.com/reduxjs/redux-devtools/issues/639)) ([3b580da](https://github.com/reduxjs/redux-devtools/commit/3b580dad4cb36abc395f9be139b2c3f94e872d87)) + ## 1.2.3 (2020-08-14) **Note:** Version bump only for package d3tooltip diff --git a/packages/d3tooltip/package.json b/packages/d3tooltip/package.json index 27791a44..f5246d0e 100644 --- a/packages/d3tooltip/package.json +++ b/packages/d3tooltip/package.json @@ -1,6 +1,6 @@ { "name": "d3tooltip", - "version": "1.2.3", + "version": "1.3.0", "description": "A highly configurable tooltip for d3", "keywords": [ "d3", diff --git a/packages/devui/CHANGELOG.md b/packages/devui/CHANGELOG.md index 989d09c5..34624e27 100644 --- a/packages/devui/CHANGELOG.md +++ b/packages/devui/CHANGELOG.md @@ -3,6 +3,32 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +# [1.0.0-9](https://github.com/reduxjs/redux-devtools/compare/devui@1.0.0-8...devui@1.0.0-9) (2021-06-11) + +### Bug Fixes + +- fix Select types and usages ([#724](https://github.com/reduxjs/redux-devtools/issues/724)) ([07e409d](https://github.com/reduxjs/redux-devtools/commit/07e409de6a1c3d362929d854542df0c1d74ce18e)) +- **devui:** clean up after fixing UI bugs ([#728](https://github.com/reduxjs/redux-devtools/issues/728)) ([dbc08ab](https://github.com/reduxjs/redux-devtools/commit/dbc08ab1b4d6d7d8b77af9cece9e9b329a95b31e)) +- **devui:** Fix buggy UI behaviors with redux-devtools-app ([#709](https://github.com/reduxjs/redux-devtools/issues/709)) ([ed25a72](https://github.com/reduxjs/redux-devtools/commit/ed25a72e99d56c2141175cd0cb4306353e65e6ad)) +- **devui:** fix Select widget in Form ([#722](https://github.com/reduxjs/redux-devtools/issues/722)) ([a8d99ee](https://github.com/reduxjs/redux-devtools/commit/a8d99ee424b48974314b8b94e1b93f84924b4352)) +- **devui:** fix style of Select ([#721](https://github.com/reduxjs/redux-devtools/issues/721)) ([bb72311](https://github.com/reduxjs/redux-devtools/commit/bb72311e1ccb7a0425a02a1d9271c8534fcd90e0)) + +# [1.0.0-8](https://github.com/reduxjs/redux-devtools/compare/devui@1.0.0-7...devui@1.0.0-8) (2021-03-06) + +### Features + +- update peer dependencies to allow react@^17 ([#703](https://github.com/reduxjs/redux-devtools/issues/703)) ([2aaa9c1](https://github.com/reduxjs/redux-devtools/commit/2aaa9c10a383e3a7ab20b3ab14639781fd7bb2eb)) + +# [1.0.0-7](https://github.com/reduxjs/redux-devtools/compare/devui@1.0.0-6...devui@1.0.0-7) (2021-03-06) + +### Bug Fixes + +- **redux-devtools-test-generator:** fix devui's Select component ([#637](https://github.com/reduxjs/redux-devtools/issues/637)) ([f9f15a4](https://github.com/reduxjs/redux-devtools/commit/f9f15a41defab9c9ce6ba7491f75a7ce69aae152)) + +### Features + +- **redux-devtools-slider-monitor:** convert to TypeScript ([#631](https://github.com/reduxjs/redux-devtools/issues/631)) ([8991732](https://github.com/reduxjs/redux-devtools/commit/89917320e5ecf33dc3625b05daa1e9fe120a783d)) + # [1.0.0-6](https://github.com/reduxjs/redux-devtools/compare/devui@1.0.0-5...devui@1.0.0-6) (2020-09-07) **Note:** Version bump only for package devui diff --git a/packages/devui/package.json b/packages/devui/package.json index 36efc173..562d2570 100755 --- a/packages/devui/package.json +++ b/packages/devui/package.json @@ -1,6 +1,6 @@ { "name": "devui", - "version": "1.0.0-6", + "version": "1.0.0-9", "description": "Reusable React components for building DevTools monitors and apps.", "homepage": "https://github.com/reduxjs/redux-devtools/tree/master/packages/devui", "bugs": { @@ -40,7 +40,7 @@ "@types/base16": "^1.0.2", "@types/codemirror": "^0.0.97", "@types/prop-types": "^15.7.3", - "@types/react-select": "^3.0.19", + "@types/react-select": "^3.1.2", "@types/redux-devtools-themes": "^1.0.0", "@types/simple-element-resize-detector": "^1.3.0", "@types/styled-components": "^5.1.2", @@ -68,6 +68,6 @@ "react-is": "^16.13.1" }, "peerDependencies": { - "react": "^16.3.0" + "react": "^16.3.0 || ^17.0.0" } } diff --git a/packages/devui/src/Container/styles/index.ts b/packages/devui/src/Container/styles/index.ts index dab1ca8a..d8be6617 100644 --- a/packages/devui/src/Container/styles/index.ts +++ b/packages/devui/src/Container/styles/index.ts @@ -6,6 +6,7 @@ export const MainContainerWrapper = styled.div` height: 100%; width: 100%; flex-flow: column nowrap; + overflow: auto; background-color: ${(props) => color(props.theme.base00, 'lighten', 0.03)}; color: ${(props) => props.theme.base07}; font-size: 12px; @@ -30,7 +31,7 @@ export const MainContainerWrapper = styled.div` flex-grow: 1; display: flex; flex-flow: column nowrap; - height: 100%; + overflow: auto; > div { flex-grow: 1; @@ -43,4 +44,5 @@ export const ContainerWrapper = styled.div` height: 100%; width: 100%; flex-flow: column nowrap; + overflow: auto; `; diff --git a/packages/devui/src/Form/widgets.tsx b/packages/devui/src/Form/widgets.tsx index f4f5336b..87e69dfc 100644 --- a/packages/devui/src/Form/widgets.tsx +++ b/packages/devui/src/Form/widgets.tsx @@ -4,8 +4,26 @@ import Select from '../Select'; import Slider from '../Slider'; /* eslint-disable react/prop-types */ -const SelectWidget: Widget = ({ options, ...rest }) => ( - -
+ One +
+
+
+
; interface OwnProps { diff --git a/packages/redux-devtools-app/src/components/InstanceSelector.tsx b/packages/redux-devtools-app/src/components/InstanceSelector.tsx index debe8524..357351b7 100644 --- a/packages/redux-devtools-app/src/components/InstanceSelector.tsx +++ b/packages/redux-devtools-app/src/components/InstanceSelector.tsx @@ -23,9 +23,10 @@ class InstanceSelector extends Component { return ( this.selectActionCreator(option!.value)} + value={ + options.find((option) => option.value === this.state.selected) || + options.find((option) => option.value === 'default') + } options={options} />