react-native-xenon
Version:
A powerful in-app debugging tool for React Native.
47 lines (46 loc) • 1.43 kB
JavaScript
;
import { useCallback, useEffect, useState } from 'react';
import { useImmer } from 'use-immer';
import { ConsoleInterceptor } from "../interceptors/index.js";
const consoleInterceptor = new ConsoleInterceptor();
export default function useConsoleInterceptor({
autoEnabled
}) {
const [isInterceptorEnabled, setIsInterceptorEnabled] = useState(autoEnabled);
const [logMessages, setLogMessages] = useImmer([]);
const clearAllLogMessages = () => {
setLogMessages([]);
};
const isEnabled = () => consoleInterceptor.isInterceptorEnabled;
const enableInterception = useCallback(() => {
if (isEnabled()) return;
consoleInterceptor.set('callback', (type, args) => {
setLogMessages(draft => {
draft.push({
type,
values: args
});
});
}).enableInterception();
setIsInterceptorEnabled(true);
}, [setLogMessages]);
const disableInterception = useCallback(() => {
if (!isEnabled()) return;
consoleInterceptor.disableInterception();
setIsInterceptorEnabled(false);
}, []);
useEffect(() => {
if (autoEnabled) {
enableInterception();
return disableInterception;
}
}, [autoEnabled, disableInterception, enableInterception]);
return {
isInterceptorEnabled,
enableInterception,
disableInterception,
clearAllLogMessages,
logMessages
};
}
//# sourceMappingURL=useConsoleInterceptor.js.map