From 5a10498da7eb47f44510a1ecb0d09cd7d4b7589c Mon Sep 17 00:00:00 2001 From: Morten Olsen Date: Tue, 21 Aug 2018 07:10:22 +0200 Subject: [PATCH] Added storage view, and updated the UI in general --- demo/App.js | 7 ++ lib/package.json | 2 +- lib/src/components/DevTool/Console/Input.js | 65 ++++++++++++++++-- lib/src/components/DevTool/Console/Output.js | 4 +- lib/src/components/DevTool/Console/index.js | 21 +++++- lib/src/components/DevTool/Modal.js | 7 +- .../components/DevTool/Requests/Details.js | 36 ++++++++-- lib/src/components/DevTool/Requests/List.js | 2 + lib/src/components/DevTool/Requests/index.js | 20 ++++++ lib/src/components/DevTool/Storage/Keys.js | 41 +++++++++++ lib/src/components/DevTool/Storage/Value.js | 27 ++++++++ lib/src/components/DevTool/Storage/index.js | 64 +++++++++++++++++ lib/src/components/DevTool/Tab.js | 21 +++++- lib/src/components/DevTool/index.js | 8 ++- lib/src/components/base/Cell.js | 2 +- lib/src/components/base/Icon/close.png | Bin 0 -> 4257 bytes lib/src/components/base/Icon/download.png | Bin 0 -> 5301 bytes lib/src/components/base/Icon/index.js | 41 +++++++++++ lib/src/components/base/Icon/left.png | Bin 0 -> 3029 bytes lib/src/components/base/Icon/play.png | Bin 0 -> 8549 bytes lib/src/components/base/Icon/reload.png | Bin 0 -> 9791 bytes lib/src/components/base/Icon/return.png | Bin 0 -> 7091 bytes lib/src/components/base/Icon/right.png | Bin 0 -> 2851 bytes lib/src/components/base/Icon/trash.png | Bin 0 -> 6319 bytes lib/src/components/base/Row.js | 4 +- lib/src/components/base/Toolbar.js | 47 +++++++++++++ lib/src/components/data/Storage.js | 58 ++++++++++++++++ lib/src/log.js | 14 +++- lib/src/network.js | 5 ++ 29 files changed, 472 insertions(+), 24 deletions(-) create mode 100644 lib/src/components/DevTool/Storage/Keys.js create mode 100644 lib/src/components/DevTool/Storage/Value.js create mode 100644 lib/src/components/DevTool/Storage/index.js create mode 100644 lib/src/components/base/Icon/close.png create mode 100644 lib/src/components/base/Icon/download.png create mode 100644 lib/src/components/base/Icon/index.js create mode 100644 lib/src/components/base/Icon/left.png create mode 100644 lib/src/components/base/Icon/play.png create mode 100644 lib/src/components/base/Icon/reload.png create mode 100644 lib/src/components/base/Icon/return.png create mode 100644 lib/src/components/base/Icon/right.png create mode 100644 lib/src/components/base/Icon/trash.png create mode 100644 lib/src/components/base/Toolbar.js create mode 100644 lib/src/components/data/Storage.js diff --git a/demo/App.js b/demo/App.js index 6f0189f..4482578 100644 --- a/demo/App.js +++ b/demo/App.js @@ -6,6 +6,7 @@ import { Button, KeyboardAvoidingView, SafeAreaView, + AsyncStorage, } from 'react-native'; import { DevTool, @@ -26,12 +27,18 @@ xhr = new XMLHttpRequest(); xhr.open('GET', 'https://google.com/sdfsfsdfsfdf'); xhr.send(); +AsyncStorage.setItem('a', 'b'); +AsyncStorage.setItem('b', 'c'); +AsyncStorage.setItem('c', 'd'); + const t = new Promise((resolve, reject) => { setTimeout(() => { throw new Error('everything is broken'); }, 1000); }); + + export default class App extends React.Component { render() { return ( diff --git a/lib/package.json b/lib/package.json index 5145711..d23e95d 100644 --- a/lib/package.json +++ b/lib/package.json @@ -1,6 +1,6 @@ { "name": "react-native-debug-console", - "version": "1.0.0-beta.8", + "version": "1.0.0-beta.9", "main": "src/index.js", "repository": { "url": "https://github.com/morten-olsen/react-native-debugger" diff --git a/lib/src/components/DevTool/Console/Input.js b/lib/src/components/DevTool/Console/Input.js index 7de5007..b13daf2 100644 --- a/lib/src/components/DevTool/Console/Input.js +++ b/lib/src/components/DevTool/Console/Input.js @@ -3,21 +3,33 @@ import { StyleSheet, View, Text, - Button, TextInput, } from 'react-native'; +import styled from 'styled-components/native'; import State from '../../data/State'; import log from '../../../log'; +import Icon from '../../base/Icon'; + +const Button = styled.TouchableOpacity` + padding: 12px 8px; +`; const styles = StyleSheet.create({ container: { borderColor: '#ccc', borderTopWidth: 1, flexDirection: 'row', + alignItems: 'center', + paddingLeft: 10, + paddingRight: 10, }, input: { flex: 1, fontFamily: 'Menlo-Regular', + borderColor: '#ccc', + borderRadius: 5, + margin: 10, + padding: 5, }, }); @@ -27,29 +39,70 @@ const Input = ({ {({ text = '', + history = [], + historyOffset, }, setState) => ( + + setState({ text })} /> )} diff --git a/lib/src/components/DevTool/Console/Output.js b/lib/src/components/DevTool/Console/Output.js index e19a926..badd7c2 100644 --- a/lib/src/components/DevTool/Console/Output.js +++ b/lib/src/components/DevTool/Console/Output.js @@ -73,13 +73,13 @@ const formatData = (data, options) => { /> ); } else { - return {data.toString()}; + return {data.toString()}; } } if (typeof data === 'object') { return } - return {data.toString()}; + return {data.toString()}; } const OutputList = ({ diff --git a/lib/src/components/DevTool/Console/index.js b/lib/src/components/DevTool/Console/index.js index 3a734bc..8509c8a 100644 --- a/lib/src/components/DevTool/Console/index.js +++ b/lib/src/components/DevTool/Console/index.js @@ -1,10 +1,13 @@ import React from 'react'; import { StyleSheet, + Clipboard, + Alert, View, - Text, } from 'react-native'; +import log from '../../../log'; import Log from '../../data/Log'; +import Toolbar from '../../base/Toolbar'; import Output from './Output'; import Input from './Input'; @@ -20,6 +23,22 @@ const Console = ({ {({ logs }) => ( + { + Clipboard.setString(JSON.stringify(logs, null, ' ')); + Alert.alert( + 'Copied to clipboard', + ); + }, + }, { + name: 'Clear', + icon: 'trash', + onPress: () => log.clear(), + }]} + /> diff --git a/lib/src/components/DevTool/Modal.js b/lib/src/components/DevTool/Modal.js index ec654dd..9285255 100644 --- a/lib/src/components/DevTool/Modal.js +++ b/lib/src/components/DevTool/Modal.js @@ -62,10 +62,9 @@ class Events extends Component { behavior="padding" enabled > - - + ))} + + +) + +export default Keys; \ No newline at end of file diff --git a/lib/src/components/DevTool/Storage/Value.js b/lib/src/components/DevTool/Storage/Value.js new file mode 100644 index 0000000..31bd6f9 --- /dev/null +++ b/lib/src/components/DevTool/Storage/Value.js @@ -0,0 +1,27 @@ +import React from 'react'; +import styled from 'styled-components/native'; +import { + Fixed, +} from '../../base/text'; + +const Scroll = styled.ScrollView` + flex: 1; + border-top-width: 1px; + border-color: #ccc; +`; + +const Wrapper = styled.View` + padding: 8px 16px; +`; + +const Value = ({ + value, +}) => ( + + + {value} + + +) + +export default Value; \ No newline at end of file diff --git a/lib/src/components/DevTool/Storage/index.js b/lib/src/components/DevTool/Storage/index.js new file mode 100644 index 0000000..eb942a3 --- /dev/null +++ b/lib/src/components/DevTool/Storage/index.js @@ -0,0 +1,64 @@ +import React from 'react'; +import styled from 'styled-components/native'; +import { + Clipboard, + Alert, +} from 'react-native'; +import Storage from '../../data/Storage'; +import State from '../../data/State'; +import Toolbar from '../../base/Toolbar'; +import Keys from './Keys'; +import Value from './Value'; + +const Wrapper = styled.View` + flex: 1; +`; + +const StorageView = ({ +}) => ( + + {({ selected }, setState) => ( + + {(data, update, removeItem, clear) => ( + + { + Clipboard.setString(JSON.stringify(data, null, ' ')); + Alert.alert( + 'Copied to clipboard', + ); + }, + }, { + name: 'Refresh', + icon: 'reload', + onPress: update, + }, { + name: 'Clear', + icon: 'trash', + onPress: clear, + }, { + name: 'Delete', + icon: 'remove', + disabled: !selected, + onPress: () => removeItem(selected), + }]} + /> + setState({ selected: key })} + keys={Object.keys(data)} + /> + {selected && data[selected] && ( + + )} + + )} + + )} + +); + +export default StorageView; diff --git a/lib/src/components/DevTool/Tab.js b/lib/src/components/DevTool/Tab.js index 22a49e3..563574c 100644 --- a/lib/src/components/DevTool/Tab.js +++ b/lib/src/components/DevTool/Tab.js @@ -1,4 +1,5 @@ import React, { Fragment } from 'react'; +import styled from 'styled-components/native'; import PropTypes from 'prop-types'; import { Text, @@ -7,6 +8,7 @@ import { View, } from 'react-native'; import State from '../data/State'; +import Icon from '../base/Icon'; const styles = StyleSheet.create({ container: { @@ -15,14 +17,15 @@ const styles = StyleSheet.create({ }, tabs: { flexDirection: 'row', + alignItems: 'center', + borderBottomWidth: 1, + borderColor: '#ccc', }, tabInactive: { flex: 1, alignItems: 'center', justifyContent: 'center', padding: 10, - borderBottomWidth: 1, - borderColor: '#ccc', }, tabActive: { flex: 1, @@ -34,8 +37,14 @@ const styles = StyleSheet.create({ }, }); +const Button = styled.TouchableOpacity` + padding: 10px 20px 10px 0; +`; + const Console = ({ tabs, + buttons = [], + onClose, }) => ( {name} ))} + + {onClose && ( + + )} {tabs[active] && tabs[active].view} diff --git a/lib/src/components/DevTool/index.js b/lib/src/components/DevTool/index.js index 3d3b801..ab5b845 100644 --- a/lib/src/components/DevTool/index.js +++ b/lib/src/components/DevTool/index.js @@ -6,6 +6,7 @@ import { import Tab from './Tab'; import Console from './Console'; import Requests from './Requests'; +import Storage from './Storage'; const styles = StyleSheet.create({ container: { @@ -15,7 +16,8 @@ const styles = StyleSheet.create({ const DevTool = ({ style, - includeStackTrace + includeStackTrace, + onClose, }) => ( , + }, { + name: 'Storage', + view: , }]} + onClose={onClose} /> ); diff --git a/lib/src/components/base/Cell.js b/lib/src/components/base/Cell.js index c9e270e..b324720 100644 --- a/lib/src/components/base/Cell.js +++ b/lib/src/components/base/Cell.js @@ -22,7 +22,7 @@ const Row = ({ {left}: - {right} + {right} ) diff --git a/lib/src/components/base/Icon/close.png b/lib/src/components/base/Icon/close.png new file mode 100644 index 0000000000000000000000000000000000000000..fc32246f70093887ba543dc115b6c2f4d69aae3d GIT binary patch literal 4257 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 literal 0 HcmV?d00001 diff --git a/lib/src/components/base/Icon/download.png b/lib/src/components/base/Icon/download.png new file mode 100644 index 0000000000000000000000000000000000000000..7d12d3acf597a599b67c6c8a2c38562e31c832b8 GIT binary patch literal 5301 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 height || '16'}px; + width: ${({ width }) => width || '16'}px; +`; + +const Icon = ({ + name, + width, + height +}) => ( + +); + +export default Icon; diff --git a/lib/src/components/base/Icon/left.png b/lib/src/components/base/Icon/left.png new file mode 100644 index 0000000000000000000000000000000000000000..c06a73a87baa830e85d19053416f3c3b7170caca GIT binary patch literal 3029 zcmbVO2~<;O7XA~^2$tgDLKP$`lsL)~K_CQ7s?j5qB~Ebx7ZOB>tU&^V6k;B>%2BE~ zIwkC};}NP11a$x@65^=RYz*57z~#dE#+W$>zalp1i!cDb zbOiwV8UO<#f_?@d6A!>Y=>QOm0kBUi|KU%8hyuMoWb0-CE}eAtLO83mpePoSso(sf zHmxqpMueD*;IJ*2C-WB1A-b-E;?@9QeLi^e#_idI&mRqUKW1|~UhJw%e(D(eq|g*- zxAR46Y2;4g=^c@>`wK6u4aitX&5|>1Cv6G6n42FrI^&MuZ(M4StaGOvBY)f|%Ub>5 zU{ulr>l;O>`wpH>!Zi6M3?4{H=Lw%yL<>7cNUMWC*XS*yd-t-_hlc}D2%O*bKq*8b z7o2ga87giX<*`x?D>D4OxKLuhqVl>YTUE3du2}?oRcnKs?taBdG^B}@LnWSy=D&Gr zvq}8rFbb zcvV8xRH>7|uGHgZMpfmB-g|LmKH|diU&mc4|J=Enc zsmC$PL{2RfP}C&T2X0$IQG*__s1&)FE&hH|k7HB`JI5A4ie!eV zQ>`wz5@1RHt-t08yKaZA5MyefX7%M`DN4mIb*YU9qq7v~ls)l1rMxX%59D@Kt{j zH-#Q=Ql*dU8uCi?g5LaUp-t#L*jd^?w+DNog!~UL-uH2)ZQaK2iu4qBZT@bhZ9@+> zaaxhtqNl8VSN6jOY6&?5aq;nn3y~Cf-s<=n&Ik-&-nAvg|2y(~DZRDufUW_h&ENlS z^0y|nu}a(8x0v3FXM#l(N%1DEK;%m|ZR?p)&+_gBZGQNy;b)11bfd4wNM6TH5gWfN z)>CR9_F#AaMz21I3uzT{k+ZdG_L`a$f6-HL?{*#OcLT$8ziS$m&wo(O4!lTzOA?S? zGCthh#FF+=wQ1oJQgU!~jh1kj#&MjR+-pSXw zrYBGOQT7=5BmK_9T*Eiw_FT_Nh3+U*v>xzI^O|qBSc*M3tHvcGnBi*+AO}tMVU{6T z+&+b8V~sW9H5hoxPn&N&-ZP9f{>Ym+1K%({)?I|$W!o2^wF``Q`c+dcl4S+{l~`<;##5Ek`U9D!7|<<+R^oQ*E7abAk{YdOs_F$FHS2>Uv{%iL zI5j6V^R>VtyLGqXj@lVe!fQ2TDFYlU->s0D9S~k%<^!*H4TlO)pQN`@=N{QvsOa0F z>GE6x7QNP(C>!B)gQK{wwYcq(t(dI%QGFHcdBxUW&OfrLnzmt4229C=onZpkiC$nz zgy(;~Ja^UoHSo84s(LMx@9?$NQ8>~1Pjt<<`Ex@mC0Nyvt`oA!SvBd@17AP|nS3Tk zkE*382VJYtbW~`QdkCBvAFT@{b2rf`BmsE{?ryX25^z; z1^-LOfoP|$lhW!rOIWUgP6mx+a^Z8F`jB?`}sL5ehx)D zNjhuc()t{Ua(iXZS$%?t*8n#*@gt&`Q_mx$Z7ea#3QDvCKe>QQ!C?DY@VzT)TNwIW zspV%r(~5YziB5Hr#T&%nkt^zc=({?ztVn7HT0iJLLopbNCLv!aUGO&i41@pXon6u4 z0!pWG`ksXfsWgWH+zh<4`%PE4ygOo6uni@axygpX-|WS7?3R7#b0r@tz+55m|E$pW z&ydy*^jrV>CQ@8c*bZlTSk4<=p?Hb>l66cti1yEeFHwqcK zZsvh{rPXq1J$FY|K5%2~v04C@ID?SEaP;FqZkSn?nwREN6eRv-|4`LiWw)P&X-&NqTN%O` zyCNkEu%i@G#8+Vf@2y>e^TB6m$_%GY3l5$dhCMYGot6@*IJTEB^$*}K_+6`>*$KL* zCo{)lb2e99zk#ryW^9SfI1rN&M~qF6Lk{4DUq^7q6WqPlZO8i%eF#Kv!dko+5sx3R zYH57WA%%G$A)fPLhl|@S%)9wgbA||Jd$N0Bvx!pTAT+nol!OxxC}7@ N!CS&N*KML7`4>8`U%CJQ literal 0 HcmV?d00001 diff --git a/lib/src/components/base/Icon/play.png b/lib/src/components/base/Icon/play.png new file mode 100644 index 0000000000000000000000000000000000000000..72e76e1598c6804bc952ace29e716dd9e089b05c GIT binary patch literal 8549 zcmZ`{-Vg5wjeF)bSrG!c57xPj@!0c*T7*~|!`(7gynL?N^cTM-ioos~!Eha*C283+maWmlW3 z!xwC)j_PS6bpP6J0<5_G$R`4U)8N_<=7>aAFl=(2(KpiJqOae|$tEjxai$s=DC%o# zS_FUi`PnT)fKvT>mW3D7uYVeCIjC}tU&jQSvD-7jlVsXhA7OATKi?%)#W_KE@MK@l zK{tyeX?>IK6ILg;YMWY|+3MOA^WL8{adY}s#gC8&KUUvz(flllpY3KocM~yjzxrHV zT9R(7HXU%`(3st#@%Q&ok>Qwk-7^t0@#(82T-FUr*
S|0gdqdw2BGCZ~U`r@ll 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�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 literal 0 HcmV?d00001 diff --git a/lib/src/components/base/Icon/return.png b/lib/src/components/base/Icon/return.png new file mode 100644 index 0000000000000000000000000000000000000000..af4009fe70000b4ebdddeed5de5d7b3f97ceb472 GIT binary patch literal 7091 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 Q;3QyU>1c8PpwGGg09bRikpKVy literal 0 HcmV?d00001 diff --git a/lib/src/components/base/Icon/right.png b/lib/src/components/base/Icon/right.png new file mode 100644 index 0000000000000000000000000000000000000000..642bd5c7ac24457b96be01bfcf7b7f81aaf02e81 GIT binary patch literal 2851 zcmbVOc~nzp7XPwX2#cXo1;I?91sumJVHaeHECq^)C4dM5!H9@41|cB|gghB7+A27u zl|>Y+R@Mh9Mr=@lV>ygR0$52R(L~gdErMVSni!IK)^ivaI5X3C&O6`z?!CX?{oQ;2 zc<=DW4Z)^HRz?5-)6kH>NC41?i3WyPiDu{L=Da<`#{M1}*9 z?EnCD000f*f<^#flK>c_0^n5&fJJ(R;2UowfZiGw90)+&(J!2l8!kO$b0$(r^5#YP z|MkRP#A(0^4G%JSWVm>Nm(xYc;5d>t6&koMYOi!$7JlSDo6t4&Y=dnO18da}cTQ3b zQwF|USL0)evBaTISM2|-7`G}S_^5?r`s7&W-z#i>NGIbqng?vn24@~p&r^5qHMBb` z`~5)dt}oBZ8VmN^F_3=Us@Lm1nkyxA$MGx|r^a5qyW$j-tr%T6#Q@5L?ztpSn8K78RySX6)wX4r+y>4&|vfYEF5w~k=U2B*6?u93T1sE#s))M6 ziRvy3*6{SH-7iLb65ec=yAdUiFntVa2m0YUTi;d>=e z4-UxGH7|3HL4}C5*>cd=u8M*tbG|i%u&l3<{2Yv|2-}V=SBx%4&9H3NALQ6m1$&Li zC0PsiCY>^DKQO9M0dFIy_W93Pa-((6bN8x6pkD5RF(9L<`CHsa^v1_PDM_iifP{0r zayS5K;KktJ1Ct*?sm(om@IxpFECz=hP-fw1n{q7K6$kBD1a8}bpJxMbIJ%L^9cV9o zH_8ub&%;5XwkR`30ha9iF^bVOh(b!+d_XpD6(k@HSOjjqTlu|YsU5XZm4c!DPlVIw z=M)78p_kYJhlB5SGTY~S)n;W(ADU&7+6@ZCC8kII3u4|`PS?y*&C<`CEdCtzdJd`d zVkjJTw6;WcHjOM~j=}$@4fEqrnLhKr8~>Nax}*FH?)_4+ew@1aiohM8S82?qk9*39 z6`nvbRw#|(h&3H}W7fC{ZVeZR#Wz%$cM77n@np{juobJpONluESQ{H35#C;l zLJlzo?!~=$l+J+LDqkHg#*pHBC7k%mPe+9R5WtC^x_joB^q^~zB`vdZ#-rS5eMI0EH*k=sAmiGyyEJnBs0Uf}vX1qE$Ms;K2j1mbE?9%}__ z-JvwMIxbuUTr;A8jf95<8C>r=*&o?OW#uKnkln;H!PXXv51y&ZzOM3wKFKOd`gFvD zed$fj8P+n0CoYB~&?ZlX*#qC_``4K#e#Sa|Y6sVfO6E04>I>Uk`qt0%ti_NIT~i(P zig^Ne*z~5!ts2HQ$|%H3zDxU>J2f58wGk#{(Q9_*3|}=0{e@5)U)bi6E-Ek9O>Xo_ z*p&S_sPBI$jchvk>abgNZpYS{>+;5D{q}H#5$h>cwuO00TkBS>z9>^EG@E2mNjtcS zRW7d;IsD=Nh@Oh6TM`k04^K3x;9k>)yZ$oGfVy%OpwV}RB}7}(X^a{^+=PnRUvGWY zqHF08-b8UB&Pq#5V(jD&KMBRIU4_%Cgy}X>4D}VN?AbtIEaj^f$)E7BCwH8 zir<~*TOE9v*7hfaZ;4Xhr%hf|`p#Am4ZSTN?_m!8cw}*c>Lo&=vry7CgfClN&k+(M zeQ3I4W8ZePsZ(_%r$kp?2w$YFzEz__#YRsMU&t5sGgMzG!ag}}s-EHTUf&2TbJ3?g zUV(hn9#UWatAiJeg(kLm_RW;?QW2|rVTR+-16x$p+5l|3cC9^NrE;IWr0NLfK%o4l zw}q)YiCE2j3it#MkK{j9OkEbXSs>p-xnlgdkmw+H@KYJwlsoB1AFTih(gF3V>`6T3 zj6#B$Z1G$FlSMZ%gE8@xfa)fm>!T2ayiA2Lsz>&V3K@3euUg zYY|3O(tI^#E{N^lCHHk;cbN^fzY50fsOvu{C@)^H_dYZ literal 0 HcmV?d00001 diff --git a/lib/src/components/base/Icon/trash.png b/lib/src/components/base/Icon/trash.png new file mode 100644 index 0000000000000000000000000000000000000000..ab13d6edbf8e20615fb3ecc8b0def09e8edec514 GIT binary patch literal 6319 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 AtN;K2 literal 0 HcmV?d00001 diff --git a/lib/src/components/base/Row.js b/lib/src/components/base/Row.js index 4425630..3aac458 100644 --- a/lib/src/components/base/Row.js +++ b/lib/src/components/base/Row.js @@ -5,7 +5,9 @@ const Wrapper = styled.View` flex-direction: row; padding: 10px; border-left-width: ${props => props.selected ? '10px' : '0'}; - border-color: #2980b9; + border-left-color: #2980b9; + border-bottom-width: 1px; + border-bottom-color: #efefef; `; const Left = styled.View` diff --git a/lib/src/components/base/Toolbar.js b/lib/src/components/base/Toolbar.js new file mode 100644 index 0000000..845d515 --- /dev/null +++ b/lib/src/components/base/Toolbar.js @@ -0,0 +1,47 @@ +import React from 'react'; +import styled from 'styled-components/native'; +import Icon from './Icon'; +import { + Body, +} from './text'; + +const Wrapper = styled.View` + flex-direction: row; + justify-content: flex-end; + align-items: center; + border-bottom-width: 1px; + border-color: #ccc; + padding: 0 10px; +`; + +const Item = styled.TouchableOpacity` + padding: 10px 10px; + opacity: ${({ disabled }) => disabled ? 0.3 : 1}; +` + +const Toolbar = ({ + items = [], +}) => ( + + {items.map(({ + name, + icon, + onPress, + disabled, + }) => ( + + {icon ? ( + + ) : ( + {name} + )} + + ))} + +) + +export default Toolbar; \ No newline at end of file diff --git a/lib/src/components/data/Storage.js b/lib/src/components/data/Storage.js new file mode 100644 index 0000000..3de7d0d --- /dev/null +++ b/lib/src/components/data/Storage.js @@ -0,0 +1,58 @@ +import { Component } from 'react'; +import { AsyncStorage } from 'react-native'; + +class Storage extends Component { + constructor() { + super(); + this.state = { + data: {}, + }; + this.update = this.update.bind(this); + this.removeItem = this.removeItem.bind(this); + this.clear = this.clear.bind(this); + } + + componentDidMount() { + this.update(); + } + + async removeItem(name) { + await AsyncStorage.removeItem(name); + await this.update(); + } + + async clear() { + await AsyncStorage.clear(); + await this.update(); + } + + async update() { + try { + const keys = await AsyncStorage.getAllKeys(); + const values = await Promise.all(keys.map(key => AsyncStorage.getItem(key))); + const data = {}; + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const value = values[i]; + data[key] = value; + } + this.setState({ + data, + }); + } catch (err) { + console.error(err); + } + } + + render() { + const { + children, + } = this.props; + const { + data, + } = this.state; + return children(data, this.update, this.removeItem, this.clear); + } +} + +export default Storage; diff --git a/lib/src/log.js b/lib/src/log.js index d2e4f52..29b0521 100644 --- a/lib/src/log.js +++ b/lib/src/log.js @@ -1,9 +1,16 @@ -const proxyConsole = window.console; +import { AsyncStorage } from 'react-native'; + +export const proxyConsole = window.console; class Log { constructor() { this.logs = []; this.listeners = []; + this.context = { + storage: AsyncStorage, + log: (...args) => console.log(...args), + clear: this.clear.bind(this), + }; } listen(fn) { @@ -15,6 +22,11 @@ class Log { this.listeners = this.listeners.filter(l => l !== fn); } + clear() { + this.logs = []; + this.listeners.forEach(l => l(this.logs)); + } + log(type, data, keep) { const entry = { type, diff --git a/lib/src/network.js b/lib/src/network.js index 270719d..b04703d 100644 --- a/lib/src/network.js +++ b/lib/src/network.js @@ -16,6 +16,11 @@ class Network { this.listeners = this.listeners.filter(l => l !== fn); } + clear() { + this.requests = []; + this.listeners.forEach(l => l(this.requests)); + } + addRequest(request) { this.requests.push({ id: this.currentId++,