Better seperation

This commit is contained in:
2019-07-05 13:55:13 +02:00
parent 41b4d3b115
commit adddc7f2a4
10 changed files with 50 additions and 36 deletions

View File

@@ -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();

View File

@@ -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]);
} }
}} }}
> >

View File

@@ -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>
); );
}; };

View File

@@ -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 (

View File

@@ -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} />,
}); });
} }

View File

@@ -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;

View File

@@ -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;

View File

@@ -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,
}; });

View File

@@ -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,
}; };

View File

@@ -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);
} }
} }