mirror of
https://github.com/morten-olsen/react-native-debug-console.git
synced 2026-02-08 00:36:26 +01:00
Better seperation
This commit is contained in:
@@ -14,12 +14,10 @@ import {
|
|||||||
log,
|
log,
|
||||||
network,
|
network,
|
||||||
show,
|
show,
|
||||||
context,
|
|
||||||
} from 'react-native-debug-console';
|
} from 'react-native-debug-console';
|
||||||
|
|
||||||
network.attach();
|
network.attach();
|
||||||
log.attach();
|
log.attach();
|
||||||
context.hello = () => 'earth';
|
|
||||||
|
|
||||||
console.log('fooo');
|
console.log('fooo');
|
||||||
let xhr = new XMLHttpRequest();
|
let xhr = new XMLHttpRequest();
|
||||||
|
|||||||
@@ -5,8 +5,7 @@ import {
|
|||||||
TextInput,
|
TextInput,
|
||||||
} from 'react-native';
|
} from 'react-native';
|
||||||
import styled from 'styled-components/native';
|
import styled from 'styled-components/native';
|
||||||
import { context } from '../../../console';
|
import { createContext } from '../../../console';
|
||||||
import log from '../../../log';
|
|
||||||
import Icon from '../../base/Icon';
|
import Icon from '../../base/Icon';
|
||||||
|
|
||||||
const Button = styled.TouchableOpacity`
|
const Button = styled.TouchableOpacity`
|
||||||
@@ -33,6 +32,7 @@ const styles = StyleSheet.create({
|
|||||||
});
|
});
|
||||||
|
|
||||||
const Input = ({
|
const Input = ({
|
||||||
|
provider,
|
||||||
logs,
|
logs,
|
||||||
}) => {
|
}) => {
|
||||||
const [text, setText] = useState('');
|
const [text, setText] = useState('');
|
||||||
@@ -79,6 +79,9 @@ const Input = ({
|
|||||||
<Button
|
<Button
|
||||||
onPress={() => {
|
onPress={() => {
|
||||||
const newHistory = [...history, text];
|
const newHistory = [...history, text];
|
||||||
|
const context = createContext({
|
||||||
|
logProvider: provider,
|
||||||
|
});
|
||||||
const contextKeys = Object.keys(context);
|
const contextKeys = Object.keys(context);
|
||||||
const contextValues = Object.values(context);
|
const contextValues = Object.values(context);
|
||||||
const fn = new Function(...contextKeys, text);
|
const fn = new Function(...contextKeys, text);
|
||||||
@@ -88,7 +91,7 @@ const Input = ({
|
|||||||
setHistoryOffset(undefined);
|
setHistoryOffset(undefined);
|
||||||
setHistory(newHistory);
|
setHistory(newHistory);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
log.error([err]);
|
provider.error([err]);
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import {
|
|||||||
StyleSheet,
|
StyleSheet,
|
||||||
View,
|
View,
|
||||||
} from 'react-native';
|
} from 'react-native';
|
||||||
import log from '../../../log';
|
|
||||||
import useLog from '../../data/log';
|
import useLog from '../../data/log';
|
||||||
import Toolbar, {
|
import Toolbar, {
|
||||||
Button,
|
Button,
|
||||||
@@ -32,8 +31,9 @@ const initFilters = [
|
|||||||
|
|
||||||
const Console = ({
|
const Console = ({
|
||||||
includeStackTrace,
|
includeStackTrace,
|
||||||
|
provider,
|
||||||
}) => {
|
}) => {
|
||||||
const logs = useLog();
|
const logs = useLog(provider);
|
||||||
const [filters, setFilters] = useState(initFilters);
|
const [filters, setFilters] = useState(initFilters);
|
||||||
return (
|
return (
|
||||||
<View style={styles.container}>
|
<View style={styles.container}>
|
||||||
@@ -51,11 +51,11 @@ const Console = ({
|
|||||||
<Button
|
<Button
|
||||||
name="Clear"
|
name="Clear"
|
||||||
icon="trash"
|
icon="trash"
|
||||||
onPress={() => log.clear()}
|
onPress={() => provider.clear()}
|
||||||
/>
|
/>
|
||||||
</Toolbar>
|
</Toolbar>
|
||||||
<Output filter={filters.filter(f => f.selected).map(f => f.name)} logs={logs} includeStackTrace={includeStackTrace} />
|
<Output filter={filters.filter(f => f.selected).map(f => f.name)} logs={logs} includeStackTrace={includeStackTrace} />
|
||||||
<Input />
|
<Input provider={provider} />
|
||||||
</View>
|
</View>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -26,8 +26,10 @@ const styles = StyleSheet.create({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
let i = 0;
|
let i = 0;
|
||||||
const Console = () => {
|
const Console = ({
|
||||||
const requests = useRequests();
|
provider,
|
||||||
|
}) => {
|
||||||
|
const requests = useRequests(provider);
|
||||||
const [active, setActive] = useState();
|
const [active, setActive] = useState();
|
||||||
const selected = active >= 0 ? requests[active] : undefined;
|
const selected = active >= 0 ? requests[active] : undefined;
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -22,33 +22,38 @@ const DevTool = ({
|
|||||||
style,
|
style,
|
||||||
includeStackTrace,
|
includeStackTrace,
|
||||||
onClose,
|
onClose,
|
||||||
showNetwork = true,
|
logProvider = log,
|
||||||
showConsole = true,
|
storageProvider,
|
||||||
|
requestProvider = network,
|
||||||
additionalTools = [],
|
additionalTools = [],
|
||||||
storage,
|
|
||||||
}) => {
|
}) => {
|
||||||
const views = [];
|
const views = [];
|
||||||
|
|
||||||
if (showConsole) {
|
if (logProvider) {
|
||||||
views.push({
|
views.push({
|
||||||
name: 'Console',
|
name: 'Console',
|
||||||
view: <Console includeStackTrace={includeStackTrace} />,
|
view: (
|
||||||
|
<Console
|
||||||
|
includeStackTrace={includeStackTrace}
|
||||||
|
provider={logProvider}
|
||||||
|
/>
|
||||||
|
),
|
||||||
getData: log.get,
|
getData: log.get,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (showNetwork) {
|
if (requestProvider) {
|
||||||
views.push({
|
views.push({
|
||||||
name: 'Network',
|
name: 'Network',
|
||||||
view: <Requests />,
|
view: <Requests provider={requestProvider} />,
|
||||||
getData: network.get,
|
getData: network.get,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (storage) {
|
if (storageProvider) {
|
||||||
views.push({
|
views.push({
|
||||||
name: 'Storage',
|
name: 'Storage',
|
||||||
view: <Storage provider={storage} />,
|
view: <Storage provider={storageProvider} />,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
import { useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import log from '../../log';
|
|
||||||
|
|
||||||
const useLog = () => {
|
const useLog = (provider) => {
|
||||||
const [logs, setLogs] = useState([]);
|
const [logs, setLogs] = useState([]);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const update = (newLogs) => {
|
const update = (newLogs) => {
|
||||||
setLogs([...newLogs]);
|
setLogs([...newLogs]);
|
||||||
}
|
}
|
||||||
log.listen(update);
|
provider.listen(update);
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
log.unlisten(update);
|
provider.unlisten(update);
|
||||||
}
|
}
|
||||||
}, []);
|
}, []);
|
||||||
return logs;
|
return logs;
|
||||||
|
|||||||
@@ -1,16 +1,15 @@
|
|||||||
import { useState, useEffect } from 'react';
|
import { useState, useEffect } from 'react';
|
||||||
import network from '../../network';
|
|
||||||
|
|
||||||
const useRequests = () => {
|
const useRequests = (provider) => {
|
||||||
const [requests, setRequests] = useState([]);
|
const [requests, setRequests] = useState([]);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const update = (newRequests) => {
|
const update = (newRequests) => {
|
||||||
setRequests(newRequests);
|
setRequests(newRequests);
|
||||||
};
|
};
|
||||||
|
|
||||||
network.listen(update);
|
provider.listen(update);
|
||||||
return () => {
|
return () => {
|
||||||
network.unlisten(update);
|
provider.unlisten(update);
|
||||||
};
|
};
|
||||||
}, []);
|
}, []);
|
||||||
return requests;
|
return requests;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import log from './log';
|
export const createContext = ({
|
||||||
|
logProvider,
|
||||||
export const context = {
|
}) => ({
|
||||||
log: (...args) => console.log(...args),
|
log: (...args) => logProvider.log(...args),
|
||||||
clear: log.clear,
|
clear: logProvider.clear,
|
||||||
};
|
});
|
||||||
@@ -3,7 +3,6 @@ import DevToolModal from './components/DevTool/Modal';
|
|||||||
import log from './log';
|
import log from './log';
|
||||||
import network from './network';
|
import network from './network';
|
||||||
import events from './events';
|
import events from './events';
|
||||||
import { context } from './console';
|
|
||||||
|
|
||||||
const show = () => events.publish('SHOW_DEVTOOLS');
|
const show = () => events.publish('SHOW_DEVTOOLS');
|
||||||
const hide = () => events.publish('HIDE_DEVTOOLS');
|
const hide = () => events.publish('HIDE_DEVTOOLS');
|
||||||
@@ -13,7 +12,6 @@ export {
|
|||||||
DevToolModal,
|
DevToolModal,
|
||||||
log,
|
log,
|
||||||
network,
|
network,
|
||||||
context,
|
|
||||||
show,
|
show,
|
||||||
hide,
|
hide,
|
||||||
};
|
};
|
||||||
@@ -6,6 +6,7 @@ class Log {
|
|||||||
this.listeners = [];
|
this.listeners = [];
|
||||||
this.clear = this.clear.bind(this);
|
this.clear = this.clear.bind(this);
|
||||||
this.get = this.get.bind(this);
|
this.get = this.get.bind(this);
|
||||||
|
this.handleError = this.handleError.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
listen(fn) {
|
listen(fn) {
|
||||||
@@ -57,6 +58,12 @@ class Log {
|
|||||||
this.log('debug', data, keep);
|
this.log('debug', data, keep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleError(err) {
|
||||||
|
if (err && err.error) {
|
||||||
|
this.error([err.error], true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
attach(keep) {
|
attach(keep) {
|
||||||
const redirected = Object.keys(proxyConsole).reduce((output, key) => ({
|
const redirected = Object.keys(proxyConsole).reduce((output, key) => ({
|
||||||
...output,
|
...output,
|
||||||
@@ -76,12 +83,15 @@ class Log {
|
|||||||
this.error([err], keep);
|
this.error([err], keep);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
window.addEventListener('error', this.handleError);
|
||||||
}
|
}
|
||||||
|
|
||||||
detach() {
|
detach() {
|
||||||
overrides.forEach((key) => {
|
overrides.forEach((key) => {
|
||||||
window.console[key] = proxies[key];
|
window.console[key] = proxies[key];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
window.removeEventListener('error', this.handleError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user