react-native-xenon
Version:
A powerful in-app debugging tool for React Native.
51 lines (50 loc) • 1.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useConsoleInterceptor;
var _react = require("react");
var _useImmer = require("use-immer");
var _interceptors = require("../interceptors");
const consoleInterceptor = new _interceptors.ConsoleInterceptor();
function useConsoleInterceptor({
autoEnabled
}) {
const [isInterceptorEnabled, setIsInterceptorEnabled] = (0, _react.useState)(autoEnabled);
const [logMessages, setLogMessages] = (0, _useImmer.useImmer)([]);
const clearAllLogMessages = () => {
setLogMessages([]);
};
const isEnabled = () => consoleInterceptor.isInterceptorEnabled;
const enableInterception = (0, _react.useCallback)(() => {
if (isEnabled()) return;
consoleInterceptor.set('callback', (type, args) => {
setLogMessages(draft => {
draft.push({
type,
values: args
});
});
}).enableInterception();
setIsInterceptorEnabled(true);
}, [setLogMessages]);
const disableInterception = (0, _react.useCallback)(() => {
if (!isEnabled()) return;
consoleInterceptor.disableInterception();
setIsInterceptorEnabled(false);
}, []);
(0, _react.useEffect)(() => {
if (autoEnabled) {
enableInterception();
return disableInterception;
}
}, [autoEnabled, disableInterception, enableInterception]);
return {
isInterceptorEnabled,
enableInterception,
disableInterception,
clearAllLogMessages,
logMessages
};
}
//# sourceMappingURL=useConsoleInterceptor.js.map