feat: add recoil debug observer (#1446)
* feat: add recoil debug observer * fix: convention
This commit is contained in:
@ -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>
|
||||
|
||||
45
front/src/modules/debug/components/RecoilDebugObserver.tsx
Normal file
45
front/src/modules/debug/components/RecoilDebugObserver.tsx
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user