From 403b0024ce442dd8fb63d403e8253cfe10fdf5d2 Mon Sep 17 00:00:00 2001 From: Gregory Schier Date: Mon, 5 Dec 2016 14:42:40 -0800 Subject: [PATCH] Track history, bug fixes, analytics --- app/analytics/__tests__/index.test.js | 20 +++++----- app/analytics/google.js | 37 +++++++++++++++--- app/analytics/index.js | 3 +- app/icons/icon.png | Bin 0 -> 7383 bytes app/main.development.js | 3 +- app/package.json | 4 +- app/ui/components/base/KeyValueEditor.js | 15 ++++--- app/ui/components/base/Link.js | 2 +- .../dropdowns/ResponseHistoryDropdown.js | 17 +++++--- .../modals/WorkspaceSettingsModal.js | 11 +++--- app/ui/containers/App.js | 25 +++++++++--- app/ui/redux/create.js | 4 +- package.json | 10 ++--- 13 files changed, 101 insertions(+), 50 deletions(-) create mode 100644 app/icons/icon.png diff --git a/app/analytics/__tests__/index.test.js b/app/analytics/__tests__/index.test.js index 6bb9aac0e0..5cd290792a 100644 --- a/app/analytics/__tests__/index.test.js +++ b/app/analytics/__tests__/index.test.js @@ -1,5 +1,5 @@ import * as analytics from '../index'; -import {GA_HOST} from '../../common/constants'; +import {GA_HOST, getAppVersion, getAppPlatform} from '../../common/constants'; import * as db from '../../common/database'; import * as models from '../../models'; @@ -30,7 +30,7 @@ describe('init()', () => { await analytics.init('acct_123'); // Verify that Google Analytics works - expect(window.ga.mock.calls.length).toBe(5); + expect(window.ga.mock.calls.length).toBe(7); expect(window.ga.mock.calls[0][0]).toBe('create'); expect(window.ga.mock.calls[0][1]).toBe('UA-86416787-1'); expect(window.ga.mock.calls[0][2].storage).toBe('none'); @@ -39,20 +39,22 @@ describe('init()', () => { expect(window.ga.mock.calls[1].slice(0, 2)).toEqual(['set', 'checkProtocolTask']); expect(window.ga.mock.calls[1][2]()).toBeNull(); expect(window.ga.mock.calls[2]).toEqual(['set', 'location', `https://${GA_HOST}/`]); - expect(window.ga.mock.calls[3]).toEqual(['send', 'pageview']); - expect(window.ga.mock.calls[4]).toEqual(['set', 'userId', 'acct_123']); + expect(window.ga.mock.calls[3]).toEqual(['set', 'userId', 'acct_123']); + expect(window.ga.mock.calls[4]).toEqual(['set', 'dimension1', getAppPlatform()]); + expect(window.ga.mock.calls[5]).toEqual(['set', 'dimension2', getAppVersion()]); + expect(window.ga.mock.calls[6]).toEqual(['send', 'pageview']); analytics.trackEvent('foo', 'bar', 'baz'); - expect(window.ga.mock.calls.length).toBe(6); - expect(window.ga.mock.calls[5]).toEqual(['send', 'event', 'foo', 'bar', 'baz']); + expect(window.ga.mock.calls.length).toBe(8); + expect(window.ga.mock.calls[7]).toEqual(['send', 'event', 'foo', 'bar', 'baz']); analytics.setAccountId('acct_456'); - expect(window.ga.mock.calls.length).toBe(7); - expect(window.ga.mock.calls[6]).toEqual(['set', 'userId', 'acct_456']); + expect(window.ga.mock.calls.length).toBe(9); + expect(window.ga.mock.calls[8]).toEqual(['set', 'userId', 'acct_456']); // Try reinitializing analytics.init(); - expect(window.ga.mock.calls.length).toBe(7); + expect(window.ga.mock.calls.length).toBe(9); // TODO: Verify that Segment works (although it's not that important) }); diff --git a/app/analytics/google.js b/app/analytics/google.js index 186cb0fa9f..fba3550dd6 100644 --- a/app/analytics/google.js +++ b/app/analytics/google.js @@ -2,7 +2,10 @@ import * as constants from '../common/constants'; let _sessionId = null; -export function init (userId = null) { +const DIMENSION_PLATFORM = 'dimension1'; +const DIMENSION_VERSION = 'dimension2'; + +export function init (userId, platform, version) { if (constants.isDevelopment()) { console.log(`[ga] Not initializing for dev`); return; @@ -29,18 +32,40 @@ export function init (userId = null) { // Set a fake location window.ga('set', 'location', `https://${constants.GA_HOST}/`); + setUserId(userId); + setPlatform(platform); + setVersion(version); + // Track the initial page view window.ga('send', 'pageview'); - if (userId) { - setUserId(userId); - } - console.log(`[ga] Initialized for ${_sessionId}`); } +export function setPlatform (platform) { + if (!window.ga || !platform) { + return; + } + + ga('set', DIMENSION_PLATFORM, platform); + console.log(`[ga] Set platform ${platform}`); +} + +export function setVersion (version) { + if (!window.ga || !version) { + return; + } + + ga('set', DIMENSION_VERSION, version); + console.log(`[ga] Set version ${version}`); +} + export function setUserId (userId) { - window.ga && window.ga('set', 'userId', userId); + if (!window.ga || !userId) { + return; + } + + window.ga('set', 'userId', userId); console.log(`[ga] Set userId ${userId}`); } diff --git a/app/analytics/index.js b/app/analytics/index.js index 1a47348ec9..adb4de70c7 100644 --- a/app/analytics/index.js +++ b/app/analytics/index.js @@ -1,6 +1,7 @@ import * as segment from './segment'; import * as google from './google'; import {ipcRenderer} from 'electron'; +import {getAppVersion, getAppPlatform} from '../common/constants'; let initialized = false; export async function init (accountId) { @@ -10,7 +11,7 @@ export async function init (accountId) { try { await segment.init(); - await google.init(accountId); + await google.init(accountId, getAppPlatform(), getAppVersion()); initialized = true; } catch (e) { diff --git a/app/icons/icon.png b/app/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f5d03f5550d0665c4aacf2c43b3037fde0daa834 GIT binary patch literal 7383 zcmYLubwE@>*Y~9xDd}86q?hjQh80O^SXk+jh6MpZ8WsdpdJzy8K>?*33F+>TmM-ac zectDLzd!E16K8&NV(!d2XW|U>)JX{G2>}2g(bQ0Zpug~c4?ZsX-63b&4*(c;Fe6i6 zQ(YY?dk;5$TL%w2NB#gePjo*3$jAqH+SFp!K?e;jAXb=zEXYJu7p&{4 z?C1>B2=aD(8l-1rALL>$=>U?KBa{h{LIb!t`r5JvxVgIfNCn7({(~!pF8^y50I~ju z#Mea@WU6bxs_fzI$STS&$`1y~5wgm7J3yr%Dr)~7jIPOooPB*gr33{0{r&mG10ztk3O zB}1wn`4@%=wp116SIQzPYGxX4$f$?pb~xwuBb${9dq=tCBh$k>%fk=M-#Eiid{=mp ztfeLR=0yeh9IJjPT&>?f=7Z%gf`=q87Jb^7f4z|WYD?yQ8A(onBQt_@)E^Vpqu(xO zGSLw}i}MV~tUnJ-*8SygmGP;0sbw-pBZq!EC%Q*;;R(Jz!H^rZZ&z@;J0GPsejd>U zgSX;}IOZaDWs+spz@vb?ZR-_L6Oy}&IZk927ePn zIzAg_Ko&HOH7tfUeI%KN1*^JHud$L*zNfzPh0uWb;DEoWCdyLPLlAU}|W7eou9CFrB~t~{{PU>7&#nH(E7 zkOFz}W;8GC3bxnBQ~5_k_e6)SQwwCSsiGa{OaOlgC8acs%@zfX0`P1mkT;+M(BgrA z4m1sfL}n*HK_;e5=S-2|@K)vBntAc=>NNnHgHSpmLo9l^6km4h|0CE-o(NB?ENTjzv(Cg3SDF zc{Xgi7`7B!+K!Hnuy3}N|!fdk>Mt2+g0j>M_gPemMkaMGb;qbQhrn}{del&( zOhlT>=oD7#RLh;8t=Xg_YIkvH;Pt1{!{>~~S_@9-7VFDClhI>BwkSlkJHBMrS^R_7 z9ouhij*`PG%reh#kmICKy@8tA(AWl4Lq~OmORdKe3i%sNWhP4{qgdO8c0)f9ZO zQ|o3uG%zImReEZc4|toMSLb#eAAJ5t^GsQ2Y0usRTbR2|L>DvVZpU(}$%w1Q2PJC8 ztyT5`wQH4gv=6#OiQ3}(7;Ys9&CShu?Tm8)%PT7@gBtAKugO*)11sJScj}3IY^Mom zQ2hpk25;Jkouw4VutgGCi!bhzgP0xJN)SPwAt5)-B_$O9bi`{1{%s^5*m=WTgs~^oRC9HH_3nq}x(K6JK=lQ0;xkzYD ze>EyE%sMjenqQ`>9;^=Zn~2z4Zrl3ulD2}ib0uU85wjp<2o+#%VbS&TCw>D;TGnzR zAwLHfjI6K$$M*JWV&-36Uo)WPY2k>PevWEiP3Nzjzmr-Fv&XMzQ^ZbTbxqF9l z!=)uQhTGxN4vRz>m@2C~0X#!4-8n?&Ugza%B6akt{UwOmm*^j-K}uR$9V6BT{4+g0 zeJuT17k;@T@U#yGgS8D0lL24c=3J17C62=We#@=h7RJudi$)A2)$zN*Je>0c#UI2- zS_t7cKB21fcCqKR%~+f7r?7<$zB}1$G@;i;;qH|pfH347)2ig10K>T)eSLjxY;52d zt+jg$NQ6aP=~qZ}xW_KJ%!QG@p;itFwDMqCim;yF>nfY%ySKeKe?v7^qHeUVjF3+Y zWXC0^kBcwX#P z7PWX#KzI&zg|JXXt;D_pBx_%-x4NBLhNEM;BZ=FLwL+D(evkn5_4TEdl^$w_>uG^f z86t45Kmm)|grJ}x$cLteXfg|K({rkqds|%>wahW@h&q?NxV3;^oiHBy!|Qt|Nz~ux zoFaVp#|X%U2G;>D+_671E;l!KTdOjb+^AfwF&{VzqvV1M3&P4vVF$Q&u7ME=F;X(&dJdMp@E&ZabDc49 ztwZyrLL^+%X{F=l&3>#->{5Bi#$&lmO?79g2n+>FIoc)1xl1~xhcu^?x zsR&JIIn!d{b3Z{WiY89G?+3ZBrmrF4`*;9anSP9$YJiNSq$Wg5N?_2t&kh0x#t%|7*zp%{?n-|AIl3O1bsxMO)M3LP zXzf_KCkeY7O|V_$-R}Ba>*j&k+AGDM$IBs?M_p1?MGlM~9(sO69OqJ;e5U2wgX+4r zk*6(75Z)grt9x$Q431#Ha$XLhX*hw5irv#Ct+b*jr!gENHn5ZwArPwq@<-Uqwm`67 zQFQSWXEKzLcdPN;oJ@8|h^Fi@YUO04YWyYzXqlLzv+C`UTjJc>lxS-|Mct47*2~R_ zRuHWr(x1W!T4d;Hk^4(J&-mdfTc>WO<7X^1mjc;#BsP6n^3?HV3l09eyQM z`!QCH&aWol2%~G!>I|uFCrSv%{cg3h z@cQuJ{)^0tA){rmbu2hpE74FG{7BGRz($L!1v{iTzOav*bq_Jf0wk#weOB>xtBN+E zgf7?I%ZX0e{f;gPwCJ~52p$z@BDa(l5gEsX$L|qSuVY9^CcSWWHq}>gqDfb;kqmQX zJZO}CLvgJ$@e2Mn_Zq1E5W4;*)>sXcdWNKWnuejlA+RYIvW4*-%%;|}3+L%!SQ+PPm=Qd3jAlw#8=D$PTtrQ@t`{&ZZPoOLje zv#;`pU7o!E)p~`d&;y3?6{*f5--J(azm-)c4b0;NiQvw=~^=SbG6&eoZ zQKL=(IzC_Tw<{I5HLpbUNi6wh`N^WJ5T<42rDk6RzNUn)=aZ?c)}2HK@xj^)p^pl;ypKE< z_z6Hd`Q5ifp!Vs~#N0K(7Kfl0G{yzmozYj_2$u30 zK5J>_gEr*{%|y6Ey=*Do%GeTOYf&v2to966ins8>!41k0NK1>b$$kG<3c|Vj+q!_A zs%Qh8D<^{NfO;03HDitGGMxVLA=JvW={2**KfOx5Smo@kA z&;=_tA9y|ZS8MNG)IlIF$UJDd6$2~d96-A{QjH1&UsvlBZd)XxKi0DJJTviMn`Owf z--Z<^#rMWfe}A>y57~PLHAI!?jB%z2)#QFA4_KcK21HrD=VmObj@HJK}y(7%tmzb+}k1 zh_6XxdI`Af>e2^`fzZ7q`=?_w!r)?qGx68A>la?p}jr<;sPr`3Vo<`a4!htI~&4J9$#_fECbUn`$HfWg;-c%xzxITl}i<8ks%$)ag7ddqg@G zzrN~A&M_aF!OPvirl8_;O;9{m;tK(26f1{;j1^o4({>YVTK1Jv& z39E}@43~_e%h739NVF{0p~WZ^s?Oy|lY@pJOYX5hbf3z3s7ndfAwXFu%-96H))6wY!96n@a(zA`0zS;y6_9(r2_-NGOuNa1kh#Wd8G531= znuGcehMJn1D`2)6h-4S3qutKvkV1A0IKxCkWC7tkdPYWGXKJ!1tIpFoqAnCb&@Dxc zKQ3WLQPKlqf$BI9`i({Xu;X-U!ub-DKee7qTWSm1N?kphmBLtxQK)?zltZBE`&e9X|}k;%68kZJ1_ApNo0CoAbi~9GeQdUKx)El+lpSv=c^zm z1|1E(mLRCN%!lO<0)xy@F~e#r6O0Rwi;F7)piRew0R1}>UNh!Fx|0$;cSQe|IlYp- z&p9j%D)%tHD~aRY+TiYzwl#tAVsCD0Xu!iU7>;jRQ%iRymhX$eG_G_T6vgv&-W>e! zRW;*h8N5)b^LgmmL=t32v_)kT8VZ%#Q@ykLG;Euy{mzmmIiIDTc-I&&iDL$OIdYYd!P@A;_K1J58-APJxgp2)G zgQm;iMV3VU$)L2g9rfr`=)Y&w;qQrFmrd9VJD-5k zY1#+{FLJrjp{;toS~s5l>gN32E7HHT^7gs~7EFyw3dD z1x=w#-2H6JZvB)?&N(}IoZaJaA+E~+-4~Z$L%Fg;;1m9qZ}C!C)2APu0_M7Rnc79l z)=tImX0jzSh6bel4;F8E0em(sR2M|9-6R<&F3hZ0yr>e^(=froTtp4<$U z@Zpj4x-diB_xPdPeTw;zp7Q6K_O))|gW!bF6;IPnyQ;M2uzVf1MNUpmI$*oLS)c37 z26Y<#_kOUmT$JzZ4ru(j%wr2b6VY^z-JvChh zPqoSpw(6Ui0FK@7u80m`6qAF3pqO7`e{ZiTKKo)L=N@z;0i~POGt1k_pG**TgT5&RSzTCNW!Zw-!~$L25vJQL*>Zu8%JhmxeG_Oe50q(?r^WR7QvJs0o)rM zDRHg0JW6g&^SF6||6uW6?CSb4&2wxro`Nr>!tne1vuEFz{kqf zu)K3qlw&9}c_z}D7QeniB!V#|vq0Q!4wVj{Y^Sx(M#8Qu*2l@lE2?9)v5;ZO2f zmHJ{wzrbl*HI=XBcm*3cm`Qel?7M3yXY&oGQ~p<;`}EO)#yxcOz9eyfbFzm*@$c;J zzDq5xz$~g357X%lo~d>m9~&!zx97Z~`j`H(PG;`0z>8^w7Q_&oIW-_Z6L?m{IC?sBmQ#bCf#DA>z>H{R0G<@-m9X>ZUd*+|QciI#SHbYeo3 zPyrhgBUfxtKmHl4d?7%OOJ6Ilq~!4%wW6}YmB(zIvQIh^*^3^D$!%q~zHUn2+KaQz zmrqJ%BPx1CT@e+z8(>|-dXOJqLK&$@vJx9J`I3?;{*~!GQ)k*b8}B}8AsZx;erYW+)=UeDK*^ui@M!3P}^8lu2 z2Bd+p=W>-upfTlzw9wLL)D1DzD3&a;eZ_N@LFRN=*&LMmU5%^eRrZ?CXG@kVU}DMHz!Y1F26iS zv$ul3`73HO#NJNk|*V&gf ziKzz<9@IJXdC+z@Uaq?6<+Gcu3lTr^qZL}PU}j|e>kZtgBVTQ^#L~LfO@EcqxDMzJ=X3ZFB@LL<5)&{>_D&dQ28j6cp$c_dmRiZZd zV*hTpvPJF$g`EaTgS?r!FMaxpOHTDOg973IUJht68-J*&UJ5zUEh;EzL#J2R#zYvR z$hI4jB?4!ZK&iAW3=HpRSy<`@r4Jfi1s@zgldA58Xb;d}{bU!&j(g&l>a9f(&Hd;Z zDY>CspPu1~){ui7y}}#w^iZpR6FsxzGP<_hK(>GUnnKK)uGKUZX>irUB)?`_%A)e$ h%Z~qd>wyK_6LpSQs50vj^8LGy)Kt||K`Gfp{tuQ#0V@Ci literal 0 HcmV?d00001 diff --git a/app/main.development.js b/app/main.development.js index e836c8ccf6..0aaab2f778 100644 --- a/app/main.development.js +++ b/app/main.development.js @@ -280,6 +280,7 @@ function createWindow () { minHeight: 500, minWidth: 500, acceptFirstMouse: true, + icon: path.resolve(__dirname, 'icons/icon.png'), webPreferences: { zoomFactor: zoomFactor } @@ -302,7 +303,7 @@ function createWindow () { clearTimeout(_moveTimeout); _moveTimeout = setTimeout(() => { trackEvent('Window', 'Move'); - }); + }, 1000); }); mainWindow.on('unresponsive', e => { showUnresponsiveModal(); diff --git a/app/package.json b/app/package.json index 9ef502d0c7..ad8665bb6d 100644 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "insomnia", - "version": "4.0.2", + "version": "4.0.4", "productName": "Insomnia", "longName": "Insomnia REST Client", "description": "A simple and beautiful REST API client", @@ -16,7 +16,7 @@ "electron-squirrel-startup": "^1.0.0", "hkdf": "0.0.2", "httpsnippet": "git@github.com:getinsomnia/httpsnippet.git#a3a2c0a0167fa844bf92df52a1442fa1d68a9053", - "insomnia-importers": "^1.2.0", + "insomnia-importers": "^1.2.5", "json-lint": "^0.1.0", "jsonpath-plus": "^0.15.0", "mime-types": "^2.1.12", diff --git a/app/ui/components/base/KeyValueEditor.js b/app/ui/components/base/KeyValueEditor.js index 80ba7b1138..f7c3a38ac3 100644 --- a/app/ui/components/base/KeyValueEditor.js +++ b/app/ui/components/base/KeyValueEditor.js @@ -3,6 +3,7 @@ import classnames from 'classnames'; import {DEBOUNCE_MILLIS} from '../../../common/constants'; import FileInputButton from '../base/FileInputButton'; import {Dropdown, DropdownItem, DropdownButton} from './dropdown/index'; +import PromptButton from '../base/PromptButton'; const NAME = 'name'; const VALUE = 'value'; @@ -202,7 +203,7 @@ class KeyValueEditor extends Component { const {maxPairs, className, valueInputType, multipart} = this.props; return ( -
    +
      {pairs.map((pair, i) => (
    • - +
    • ))} {!maxPairs || pairs.length < maxPairs ? ( diff --git a/app/ui/components/base/Link.js b/app/ui/components/base/Link.js index 078b1d5e0a..b0211546ff 100644 --- a/app/ui/components/base/Link.js +++ b/app/ui/components/base/Link.js @@ -15,7 +15,7 @@ class Link extends Component { if (href.match(/^http/i)) { const appName = isDevelopment() ? 'Insomnia Dev' : 'Insomnia'; - const qs = `utm_source=${appName}&utm_medium=App&utm_campaign=v${getAppVersion()}`; + const qs = `utm_source=${appName}&utm_medium=app&utm_campaign=v${getAppVersion()}`; const attributedHref = querystring.joinUrl(href, qs); shell.openExternal(attributedHref); } else { diff --git a/app/ui/components/dropdowns/ResponseHistoryDropdown.js b/app/ui/components/dropdowns/ResponseHistoryDropdown.js index a38b71141f..ecc823bed8 100644 --- a/app/ui/components/dropdowns/ResponseHistoryDropdown.js +++ b/app/ui/components/dropdowns/ResponseHistoryDropdown.js @@ -5,6 +5,7 @@ import StatusTag from '../tags/StatusTag'; import TimeTag from '../tags/TimeTag'; import * as models from '../../../models/index'; import PromptButton from '../base/PromptButton'; +import {trackEvent} from '../../../analytics/index'; class ResponseHistoryDropdown extends Component { state = { @@ -12,9 +13,15 @@ class ResponseHistoryDropdown extends Component { }; _handleDeleteResponses = () => { + trackEvent('History', 'Delete Responses'); this.props.handleDeleteResponses(this.props.requestId); }; + _handleSetActiveResponse = responseId => { + trackEvent('History', 'Activate Response'); + this.props.handleSetActiveResponse(responseId); + }; + async _load (requestId) { const responses = await models.response.findRecentForRequest(requestId); @@ -40,13 +47,13 @@ class ResponseHistoryDropdown extends Component { } renderDropdownItem = (response, i) => { - const {activeResponseId, handleSetActiveResponse} = this.props; + const {activeResponseId} = this.props; const active = response._id === activeResponseId; return ( + onClick={this._handleSetActiveResponse}> {active ? : } {" "} { const {workspace} = this.props; const certificates = workspace.certificates.filter(c => c.host !== certificate.host); models.workspace.update(workspace, {certificates}); + trackEvent('Certificates', 'Delete'); }; _handleToggleCertificate = certificate => { @@ -71,6 +74,7 @@ class WorkspaceSettingsModal extends Component { c => c === certificate ? Object.assign({}, c, {disabled: !c.disabled}) : c ); models.workspace.update(workspace, {certificates}); + trackEvent('Certificates', 'Toggle'); }; toggle (workspace) { @@ -303,7 +307,7 @@ class WorkspaceSettingsModal extends Component { {" "} @@ -320,11 +324,6 @@ class WorkspaceSettingsModal extends Component { {workspace ? this.renderModalHeader() : null} {workspace ? this.renderModalBody() : null} - {/**/} - {/**/} - {/**/} ) } diff --git a/app/ui/containers/App.js b/app/ui/containers/App.js index 0b54631475..0dd1dbc127 100644 --- a/app/ui/containers/App.js +++ b/app/ui/containers/App.js @@ -217,10 +217,21 @@ class App extends Component { }; _handleSendRequestWithEnvironment = async (requestId, environmentId) => { - this.props.handleStartLoading(requestId); + const request = await models.request.getById(requestId); + if (!request) { + return; + } - trackEvent('Request', 'Send'); - trackLegacyEvent('Request Send'); + // NOTE: Since request is by far the most popular event, we will throttle + // it so that we only track it if the request has changed since the last noe + const key = `${request._id}::${request.modified}`; + if (this._sendRequestTrackingKey !== key) { + trackEvent('Request', 'Send'); + trackLegacyEvent('Request Send'); + this._sendRequestTrackingKey = key; + } + + this.props.handleStartLoading(requestId); try { await network.send(requestId, environmentId); @@ -244,12 +255,12 @@ class App extends Component { }; _startDragSidebar = () => { - trackEvent('Sidebar', 'Drag Start'); + trackEvent('Sidebar', 'Drag'); this.setState({draggingSidebar: true}) }; _resetDragSidebar = () => { - trackEvent('Sidebar', 'Drag Reset'); + trackEvent('Sidebar', 'Drag'); // TODO: Remove setTimeout need be not triggering drag on double click setTimeout(() => this._handleSetSidebarWidth(DEFAULT_SIDEBAR_WIDTH), 50); }; @@ -260,7 +271,7 @@ class App extends Component { }; _resetDragPane = () => { - trackEvent('App Pane', 'Reset'); + trackEvent('App Pane', 'Drag Reset'); // TODO: Remove setTimeout need be not triggering drag on double click setTimeout(() => this._handleSetPaneWidth(DEFAULT_PANE_WIDTH), 50); }; @@ -329,6 +340,8 @@ class App extends Component { } else if (lastVersion !== getAppVersion()) { trackEvent('General', 'Updated', getAppVersion()); showModal(ChangelogModal); + } else { + trackEvent('General', 'Launched', getAppVersion()); } db.onChange(changes => { diff --git a/app/ui/redux/create.js b/app/ui/redux/create.js index 42614b6d00..5ce53c7f9f 100644 --- a/app/ui/redux/create.js +++ b/app/ui/redux/create.js @@ -6,8 +6,8 @@ export default function configureStore () { const middleware = [thunkMiddleware]; if (__DEV__) { - const createLogger = require('redux-logger'); - middleware.push(createLogger({collapsed: true})); + // const createLogger = require('redux-logger'); + // middleware.push(createLogger({collapsed: true})); } const store = createStore(reducer, applyMiddleware(...middleware)); diff --git a/package.json b/package.json index 5f0e55647c..c1f8ec09b7 100644 --- a/package.json +++ b/package.json @@ -24,8 +24,8 @@ "build:copy": "cp -r ./app/package.json ./app/static ./app/icons/* ./build/", "build:install": "cd build && npm install", "build": "npm run build:clean && npm run build:renderer && npm run build:main && npm run build:copy && npm run build:install", - "package:mac": "rm -rf dist/mac && node node_modules/electron-builder/out/build-cli.js --publish=never --x64 --mac", - "package:win": "rm -rf dist/win* && node node_modules/electron-builder/out/build-cli.js --publish=never --x64 --win", + "package:mac": "rm -rf dist/mac && node node_modules/electron-builder/out/cli/build-cli.js --publish=never --x64 --mac", + "package:win": "rm -rf dist/win* && node node_modules/electron-builder/out/cli/build-cli.js --publish=never --x64 --win", "package:linux": "rm -rf dist/linux && rm -f dist/*.AppImage && rm -f dist/*.deb && node node_modules/electron-builder/out/build-cli.js --publish=never --x64 --linux", "package": "npm test && rm -rf dist && npm run package:mac && npm run package:win && npm run package:linux", "build-n-package": "npm run build && npm run package", @@ -101,7 +101,7 @@ "electron-squirrel-startup": "^1.0.0", "hkdf": "0.0.2", "httpsnippet": "git@github.com:getinsomnia/httpsnippet.git#a3a2c0a0167fa844bf92df52a1442fa1d68a9053", - "insomnia-importers": "^1.2.0", + "insomnia-importers": "^1.2.5", "json-lint": "^0.1.0", "jsonpath-plus": "^0.15.0", "mime-types": "^2.1.12", @@ -149,8 +149,8 @@ "concurrently": "^2.0.0", "cross-env": "^2.0.0", "css-loader": "^0.23.1", - "electron": "^1.4.7", - "electron-builder": "^8.6.0", + "electron": "^1.4.10", + "electron-builder": "^10.5.0", "electron-devtools-installer": "^2.0.1", "express": "^4.14.0", "file-loader": "^0.9.0",