mirror of
https://github.com/reduxjs/redux-devtools.git
synced 2025-07-27 00:19:55 +03:00
chore(rtk-query-monitor): add option to select active devtools
This commit is contained in:
parent
76f00bd6ab
commit
1a482e78bb
|
@ -4,13 +4,17 @@ import { Box, Flex, Heading } from '@chakra-ui/react';
|
||||||
import { Link, UnorderedList, ListItem } from '@chakra-ui/react';
|
import { Link, UnorderedList, ListItem } from '@chakra-ui/react';
|
||||||
import { Code } from '@chakra-ui/react';
|
import { Code } from '@chakra-ui/react';
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
|
import { DevToolsSelector } from 'features/DevTools/DevToolsSelector';
|
||||||
|
|
||||||
export function App() {
|
export function App() {
|
||||||
return (
|
return (
|
||||||
<article>
|
<article>
|
||||||
<Heading as="h1">RTK Query inspector monitor demo</Heading>
|
<Heading as="h1" p="0">
|
||||||
|
RTK Query inspector monitor demo
|
||||||
|
</Heading>
|
||||||
<PokemonView />
|
<PokemonView />
|
||||||
<PostsView />
|
<PostsView />
|
||||||
|
<DevToolsSelector />
|
||||||
<Flex p="2" as="section" flexWrap="nowrap" flexDirection="column">
|
<Flex p="2" as="section" flexWrap="nowrap" flexDirection="column">
|
||||||
<Heading as="h2">Dock controls</Heading>
|
<Heading as="h2">Dock controls</Heading>
|
||||||
<Box as="pre" p="2" paddingX="4">
|
<Box as="pre" p="2" paddingX="4">
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { createDevTools } from '@redux-devtools/core';
|
import { createDevTools } from '@redux-devtools/core';
|
||||||
import DockMonitor from '@redux-devtools/dock-monitor';
|
import DockMonitor from '@redux-devtools/dock-monitor';
|
||||||
import RtkQueryMonitor from '../../src';
|
import RtkQueryMonitor from '../../../../src';
|
||||||
|
|
||||||
const largeScreenQuery = window.matchMedia('(min-width: 1024px)');
|
const largeScreenQuery = window.matchMedia('(min-width: 1024px)');
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
import * as React from 'react';
|
||||||
|
import { ButtonGroup, Button } from '@chakra-ui/react';
|
||||||
|
import { isExtensionEnabled, setIsExtensionEnabled } from './helpers';
|
||||||
|
import { Box, Heading } from '@chakra-ui/react';
|
||||||
|
|
||||||
|
export function DevToolsSelector() {
|
||||||
|
const handleClick = (evt: React.MouseEvent<HTMLButtonElement>) => {
|
||||||
|
setIsExtensionEnabled(evt.currentTarget.dataset.extension === '1');
|
||||||
|
window.location.reload();
|
||||||
|
};
|
||||||
|
|
||||||
|
const extensionEnabled = isExtensionEnabled();
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Box as="section" p="2">
|
||||||
|
<Heading as="h2">Set active devTools</Heading>
|
||||||
|
<ButtonGroup variant="outline" spacing="4" p="4">
|
||||||
|
<Button
|
||||||
|
aria-selected={!extensionEnabled}
|
||||||
|
colorScheme="blue"
|
||||||
|
selected={!extensionEnabled}
|
||||||
|
data-extension="0"
|
||||||
|
variant={!extensionEnabled ? 'solid' : 'outline'}
|
||||||
|
onClick={handleClick}
|
||||||
|
>
|
||||||
|
Dock
|
||||||
|
</Button>
|
||||||
|
<Button
|
||||||
|
aria-selected={extensionEnabled}
|
||||||
|
data-extension="1"
|
||||||
|
colorScheme="blue"
|
||||||
|
variant={extensionEnabled ? 'solid' : 'outline'}
|
||||||
|
onClick={handleClick}
|
||||||
|
>
|
||||||
|
Extension
|
||||||
|
</Button>
|
||||||
|
</ButtonGroup>
|
||||||
|
</Box>
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
export const isExtensionEnabledKey = 'prefer-extension';
|
|
@ -0,0 +1,22 @@
|
||||||
|
import { isExtensionEnabledKey } from './config';
|
||||||
|
|
||||||
|
export function isExtensionEnabled(): boolean {
|
||||||
|
let extensionEnabled = false;
|
||||||
|
|
||||||
|
try {
|
||||||
|
extensionEnabled =
|
||||||
|
window.sessionStorage.getItem(isExtensionEnabledKey) === '1';
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
return extensionEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function setIsExtensionEnabled(active: boolean): void {
|
||||||
|
try {
|
||||||
|
window.sessionStorage.setItem(isExtensionEnabledKey, active ? '1' : '0');
|
||||||
|
} catch (err) {
|
||||||
|
console.error(err);
|
||||||
|
}
|
||||||
|
}
|
|
@ -56,7 +56,12 @@ export function Pokemon({ name }: { name: PokemonName }) {
|
||||||
</Select>
|
</Select>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<Button onClick={refetch} disabled={isFetching}>
|
<Button
|
||||||
|
colorScheme="blue"
|
||||||
|
variant="outline"
|
||||||
|
onClick={refetch}
|
||||||
|
disabled={isFetching}
|
||||||
|
>
|
||||||
{isFetching ? 'Loading' : 'Manually refetch'}
|
{isFetching ? 'Loading' : 'Manually refetch'}
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -14,13 +14,19 @@ export default function PokemonView() {
|
||||||
<Heading as="h2">Pokemon polling demo</Heading>
|
<Heading as="h2">Pokemon polling demo</Heading>
|
||||||
<Flex p="2" gridGap="0.5em" flexDirection="row" flexWrap="wrap">
|
<Flex p="2" gridGap="0.5em" flexDirection="row" flexWrap="wrap">
|
||||||
<Button
|
<Button
|
||||||
|
colorScheme="blue"
|
||||||
|
variant="outline"
|
||||||
onClick={() =>
|
onClick={() =>
|
||||||
setPokemon((prev) => [...prev, getRandomPokemonName()])
|
setPokemon((prev) => [...prev, getRandomPokemonName()])
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
Add random pokemon
|
Add random pokemon
|
||||||
</Button>
|
</Button>
|
||||||
<Button onClick={() => setPokemon((prev) => [...prev, 'bulbasaur'])}>
|
<Button
|
||||||
|
colorScheme="blue"
|
||||||
|
variant="outline"
|
||||||
|
onClick={() => setPokemon((prev) => [...prev, 'bulbasaur'])}
|
||||||
|
>
|
||||||
Add bulbasaur
|
Add bulbasaur
|
||||||
</Button>
|
</Button>
|
||||||
</Flex>
|
</Flex>
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { Provider } from 'react-redux';
|
||||||
import { ChakraProvider } from '@chakra-ui/react';
|
import { ChakraProvider } from '@chakra-ui/react';
|
||||||
import './index.css';
|
import './index.css';
|
||||||
import { store } from './store';
|
import { store } from './store';
|
||||||
import DevTools from './DevTools';
|
import DevTools from './features/DevTools/DevTools';
|
||||||
import { BrowserRouter } from 'react-router-dom';
|
import { BrowserRouter } from 'react-router-dom';
|
||||||
import { App } from 'App';
|
import { App } from 'App';
|
||||||
import { worker } from './mocks/browser';
|
import { worker } from './mocks/browser';
|
||||||
|
|
|
@ -1,19 +1,22 @@
|
||||||
import { configureStore, Middleware } from '@reduxjs/toolkit';
|
import { configureStore, Middleware } from '@reduxjs/toolkit';
|
||||||
import { pokemonApi } from './services/pokemon';
|
import { pokemonApi } from './services/pokemon';
|
||||||
import { postsApi } from 'services/posts';
|
import { postsApi } from 'services/posts';
|
||||||
import DevTools from './DevTools';
|
import DevTools from './features/DevTools/DevTools';
|
||||||
|
import { isExtensionEnabled } from 'features/DevTools/helpers';
|
||||||
|
|
||||||
|
const devTools = isExtensionEnabled();
|
||||||
|
|
||||||
export const store = configureStore({
|
export const store = configureStore({
|
||||||
reducer: {
|
reducer: {
|
||||||
[pokemonApi.reducerPath]: pokemonApi.reducer,
|
[pokemonApi.reducerPath]: pokemonApi.reducer,
|
||||||
[postsApi.reducerPath]: postsApi.reducer,
|
[postsApi.reducerPath]: postsApi.reducer,
|
||||||
},
|
},
|
||||||
devTools: false,
|
devTools,
|
||||||
// adding the api middleware enables caching, invalidation, polling and other features of `rtk-query`
|
// adding the api middleware enables caching, invalidation, polling and other features of `rtk-query`
|
||||||
middleware: (getDefaultMiddleware) =>
|
middleware: (getDefaultMiddleware) =>
|
||||||
getDefaultMiddleware().concat([
|
getDefaultMiddleware().concat([
|
||||||
pokemonApi.middleware,
|
pokemonApi.middleware,
|
||||||
postsApi.middleware,
|
postsApi.middleware,
|
||||||
] as Middleware[]),
|
] as Middleware[]),
|
||||||
enhancers: [DevTools.instrument()],
|
enhancers: devTools ? [] : [DevTools.instrument()],
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue
Block a user