feat: add recoil debug observer (#1446)

* feat: add recoil debug observer

* fix: convention
This commit is contained in:
Jérémy M
2023-09-05 10:00:19 +02:00
committed by GitHub
parent 7bced2b49b
commit 0ec4b78aee
2 changed files with 47 additions and 0 deletions

View File

@ -6,6 +6,7 @@ import { RecoilRoot } from 'recoil';
import { ApolloProvider } from '@/apollo/components/ApolloProvider';
import { ClientConfigProvider } from '@/client-config/components/ClientConfigProvider';
import { RecoilDebugObserver } from '@/debug/components/RecoilDebugObserver';
import { DialogProvider } from '@/ui/dialog/components/DialogProvider';
import { SnackBarProvider } from '@/ui/snack-bar/components/SnackBarProvider';
import { AppThemeProvider } from '@/ui/theme/components/AppThemeProvider';
@ -26,6 +27,7 @@ const root = ReactDOM.createRoot(
root.render(
<RecoilRoot>
<RecoilDebugObserver />
<BrowserRouter>
<ApolloProvider>
<HelmetProvider>

View File

@ -0,0 +1,45 @@
import { useEffect } from 'react';
import { useRecoilSnapshot, useRecoilValue } from 'recoil';
import { isDebugModeState } from '@/client-config/states/isDebugModeState';
const formatTitle = (stateName: string) => {
const headerCss = [
'color: gray; font-weight: lighter',
'color: black; font-weight: bold;',
];
const parts = ['%c recoil', `%c${stateName}`];
return [parts.join(' '), ...headerCss];
};
export function RecoilDebugObserver() {
const snapshot = useRecoilSnapshot();
const isDebugMode = useRecoilValue(isDebugModeState);
useEffect(() => {
if (!isDebugMode) {
return;
}
for (const node of Array.from(
snapshot.getNodes_UNSTABLE({ isModified: true }),
)) {
const loadable = snapshot.getLoadable(node);
const titleArgs = formatTitle(node.key);
console.groupCollapsed(...titleArgs);
console.log('STATE', loadable.state);
console.log('CONTENTS', loadable.contents);
console.groupEnd();
}
}, [isDebugMode, snapshot]);
return null;
}