Commit Graph

32 Commits

Author SHA1 Message Date
Michel Weststrate
c43049d881 Preserve device state after disconnect
Summary:
This diff stack introduces support for keeping devices and clients around after they have disconnected. This is a pretty important debugging improvement, that will allow inspecting a device / app after it crashed for example.

This feature existed partially before, but only supported Android, and only support plugins with persisted state; as it replace the current device with an archived version of the same device. In practice this didn't work really well, as most plugins would not be available, and all non-persisted state would be lost.

This diff makes sure we can keep devices around after disconnecting, the next one will keep the clients around as well. And explain some code choices in more detail.

Note that `Device.isArchived` was an overloaded term before, and even more now (both representing imported and disconnected devices), will address that in a later diff.

https://github.com/facebook/flipper/issues/1460
https://github.com/facebook/flipper/issues/812
https://github.com/facebook/flipper/issues/1487

Changelog: iOS and Android devices will preserve their state after being disconnected

Reviewed By: nikoant

Differential Revision: D26224310

fbshipit-source-id: 7dfc93c2a109a51c2880ec212a00463bc8d32041
2021-02-09 04:16:24 -08:00
Michel Weststrate
e1daa449ba Unify computation of available plugins
Summary:
While trying to change something, discovered we have 3 different mechanisms in our code base to compute active plugins; the plugin list component, support form, and export flipper trace form had all their own, subtly different implementations of computing which plugins are available to the user.

Also removed some hardcoded exceptions for e.g. Logs plugin, which in the next diff and onward will be just a vanilla plugin without special casing

Unified that, which some how went a bit deeper than hoped, trough some hoops in in circular deps. Also unified to use the same testing utils, to avoid some gobbling objects manually together, with resulted in a bunch of unexpected NPEs. Found out that we actually still have unit tests using Flow in the process :-P. Converted one to TS.

Reviewed By: nikoant

Differential Revision: D26103172

fbshipit-source-id: 2fce2577d97d98543cb9312b3d013f24faee43aa
2021-02-01 11:43:29 -08:00
Michel Weststrate
18ff69bacd Clean up home screen
Summary: The default screen without any devices or magic GK's was a bit noisy, this diffs cleans it up

Reviewed By: jknoxville

Differential Revision: D25946004

fbshipit-source-id: 76b7eec16b433544e9872e726e8f57dd1ce02b0f
2021-01-19 11:37:24 -08:00
Anton Nikolaev
97d37abbb2 Install plugins from sidebar
Summary:
This diff adds "download" button to the plugins shown in "Detected in App" section, so they can be downloaded, installed and enabled just in one click.

For now UI is very simple - there is no progress indication and no error handling for failed downloads. I'll add them in next diffs.

Please note that we are explicitly "star" every installed plugin to enable it straight away without additional clicks in "disabled" section.

Reviewed By: mweststrate

Differential Revision: D25393472

fbshipit-source-id: 0a224ea6d03db0ee9a70b7fa35ede9616c03d824
2020-12-15 09:31:55 -08:00
Michel Weststrate
08b5644253 Killed Flipper headless
Reviewed By: nikoant

Differential Revision: D24160480

fbshipit-source-id: 221e60473dddc0a49cea674e210beb6f85b1b03c
2020-12-15 01:46:44 -08:00
dependabot[bot]
91b501d0ed Bump antd from 4.6.6 to 4.9.1 in /desktop (#1734)
Summary:
allow-large-files

Bumps [antd](https://github.com/ant-design/ant-design) from 4.6.6 to 4.9.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/ant-design/ant-design/releases">antd's releases</a>.</em></p>
<blockquote>
<h2>4.9.1</h2>
<ul>
<li>TypeScript
<ul>
<li>� Fix Collapse.Panel <code>collapsible</code> property to optional. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28092">#28092</a> <a href="https://github.com/sammarks">sammarks</a></li>
</ul>
</li>
</ul>
<hr />
<ul>
<li>TypeScript
<ul>
<li>� 修复 Collapse.Panel 可折叠属性 <code>collapsible</code> 为可选。<a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28092">#28092</a> <a href="https://github.com/sammarks">sammarks</a></li>
</ul>
</li>
</ul>
<h2>4.9.0</h2>
<ul>
<li>Modal
<ul>
<li>{emoji:1f195} Modal support <code>focusTriggerAfterClose</code> to disable auto focus back. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27985">#27985</a> <a href="https://github.com/molokovev">molokovev</a></li>
<li>{emoji:1f41e} Fix Modal hooks not trigger <code>onCancel</code>. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28063">#28063</a> <a href="https://github.com/JuniorTour">JuniorTour</a></li>
<li>{emoji:1f41e} Fix Modal sometime not popup from the click position. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28037">#28037</a></li>
<li>{emoji:1f195} Support <code>closable</code> and <code>closeIcon</code> api for Modal.method. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27909">#27909</a> <a href="https://github.com/MrHeer">MrHeer</a></li>
</ul>
</li>
<li>{emoji:1f484} Reduce Table selection column width to <code>32px</code>. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28073">#28073</a></li>
<li>Image
<ul>
<li>{emoji:1f525} Image add PreviewGroup component to support multiple images preview. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28069">#28069</a></li>
<li>{emoji:1f41e} Fix Image style prop not acting on img element. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27446">#27446</a></li>
</ul>
</li>
<li>Collapse
<ul>
<li>{emoji:1f525} Collapse support <code>collapsible</code> to customize trigger region and deprecated Panel <code>disabled</code> prop. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27790">#27790</a></li>
<li>{emoji:1f41e} Fix Collapse cannot contains <code>&lt;Table sticky /&gt;</code>. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28039">#28039</a></li>
</ul>
</li>
<li>{emoji:1f41e} Fix Cascader bug that empty data can be selected. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28062">#28062</a> <a href="https://github.com/n0ruSh">n0ruSh</a></li>
<li>{emoji:1f195} Alert support <code>action</code> prop. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/25892">#25892</a> <a href="https://github.com/jesse3mh9a">jesse3mh9a</a></li>
<li>{emoji:1f525} Tree refactor drag behavior. Add <code>dropIndicatorRender</code> and <code>allowDrop</code> prop. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/26462">#26462</a> <a href="https://github.com/07akioni">07akioni</a></li>
<li>{emoji:1f195} Space support <code>wrap</code> for auto break line. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27910">#27910</a></li>
<li>{emoji:1f195} Descriptions.Item support <code>labelStyle</code> &amp; <code>contentStyle</code> props. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27897">#27897</a></li>
<li>{emoji:1f195} Form.List support <code>initialValue</code>. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27872">#27872</a></li>
<li>{emoji:1f195} Menu supports <code>expandIcon</code>, and optimize default expand icon style. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27565">#27565</a></li>
<li>{emoji:1f195} Input and TextArea add <code>setSelectionRange</code> of <code>ref</code>. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27584">#27584</a> <a href="https://github.com/appleshell">appleshell</a></li>
<li>{emoji:1f195} Select support <code>filterSort</code> to order the filtered options. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27523">#27523</a> <a href="https://github.com/n0ruSh">n0ruSh</a></li>
<li>{emoji:1f1f0_1f1ff} Add Kazakh locale. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27589">#27589</a> <a href="https://github.com/nodkz">nodkz</a></li>
</ul>
<hr />
<ul>
<li>Modal
<ul>
<li>{emoji:1f195} Modal 支持 <code>focusTriggerAfterClose</code> 以关闭自动恢复焦点的功能。<a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27985">#27985</a> <a href="https://github.com/molokovev">molokovev</a></li>
<li>{emoji:1f41e} 修复 Modal hooks 没有触发 <code>onCancel</code> 的问题。<a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28063">#28063</a> <a href="https://github.com/JuniorTour">JuniorTour</a></li>
<li>{emoji:1f41e} 修复 Modal 有时不在点击位置弹出的问题。<a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28037">#28037</a></li>
<li>{emoji:1f195} Modal.method 支持 <code>closable</code> 和 <code>closeIcon</code>。<a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27909">#27909</a> <a href="https://github.com/MrHeer">MrHeer</a></li>
</ul>
</li>
<li>{emoji:1f484} 减少 Table 选中列宽度至 <code>32px</code>。<a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28073">#28073</a></li>
<li>Image
<ul>
<li>{emoji:1f525} Image 增加 PreviewGroup 组件支持多张图片预览。<a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28069">#28069</a></li>
<li>{emoji:1f41e} 修复 Image style 属性未作用于 img 元素的问题。<a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27446">#27446</a></li>
</ul>
</li>
<li>Collapse
<ul>
<li>{emoji:1f525} Collapse 添加 <code>collapsible</code> 以支持指定可折叠触发区域并废弃 Panel 的 <code>disabled</code> 属性。<a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27790">#27790</a></li>
<li>{emoji:1f41e} 修复 Collapse 内使用 <code>&lt;Table sticky /&gt;</code> 时不生效的问题。<a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28039">#28039</a></li>
</ul>
</li>
</ul>

</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/ant-design/ant-design/blob/master/CHANGELOG.en-US.md">antd's changelog</a>.</em></p>
<blockquote>
<h2>4.9.1</h2>
<p><code>2020-12-01</code></p>
<ul>
<li>TypeScript
<ul>
<li>� Fix Collapse.Panel <code>collapsible</code> property to optional. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28092">#28092</a> <a href="https://github.com/sammarks">sammarks</a></li>
</ul>
</li>
</ul>
<h2>4.9.0</h2>
<p><code>2020-11-30</code></p>
<ul>
<li>Modal
<ul>
<li>{emoji:1f195} Modal support <code>focusTriggerAfterClose</code> to disable auto focus back. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27985">#27985</a> <a href="https://github.com/molokovev">molokovev</a></li>
<li>{emoji:1f41e} Fix Modal hooks not trigger <code>onCancel</code>. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28063">#28063</a> <a href="https://github.com/JuniorTour">JuniorTour</a></li>
<li>{emoji:1f41e} Fix Modal sometime not popup from the click position. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28037">#28037</a></li>
<li>{emoji:1f195} Support <code>closable</code> and <code>closeIcon</code> api for Modal.method. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27909">#27909</a> <a href="https://github.com/MrHeer">MrHeer</a></li>
</ul>
</li>
<li>{emoji:1f484} Reduce Table selection column width to <code>32px</code>. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28073">#28073</a></li>
<li>Image
<ul>
<li>{emoji:1f525} Image add PreviewGroup component to support multiple images preview. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28069">#28069</a></li>
<li>{emoji:1f41e} Fix Image style prop not acting on img element. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27446">#27446</a></li>
</ul>
</li>
<li>Collapse
<ul>
<li>{emoji:1f525} Collapse support <code>collapsible</code> to customize trigger region and deprecated Panel <code>disabled</code> prop. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27790">#27790</a></li>
<li>{emoji:1f41e} Fix Collapse cannot contains <code>&lt;Table sticky /&gt;</code>. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28039">#28039</a></li>
</ul>
</li>
<li>{emoji:1f41e} Fix Cascader bug that empty data can be selected. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28062">#28062</a> <a href="https://github.com/n0ruSh">n0ruSh</a></li>
<li>{emoji:1f195} Alert support <code>action</code> prop. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/25892">#25892</a> <a href="https://github.com/jesse3mh9a">jesse3mh9a</a></li>
<li>{emoji:1f525} Tree refactor drag behavior. Add <code>dropIndicatorRender</code> and <code>allowDrop</code> prop. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/26462">#26462</a> <a href="https://github.com/07akioni">07akioni</a></li>
<li>{emoji:1f195} Space support <code>wrap</code> for auto break line. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27910">#27910</a></li>
<li>{emoji:1f195} Descriptions.Item support <code>labelStyle</code> &amp; <code>contentStyle</code> props. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27897">#27897</a></li>
<li>{emoji:1f195} Form.List support <code>initialValue</code>. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27872">#27872</a></li>
<li>{emoji:1f195} Menu supports <code>expandIcon</code>, and optimize default expand icon style. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27565">#27565</a></li>
<li>{emoji:1f195} Input and TextArea add <code>setSelectionRange</code> of <code>ref</code>. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27584">#27584</a> <a href="https://github.com/appleshell">appleshell</a></li>
<li>{emoji:1f195} Select support <code>filterSort</code> to order the filtered options. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27523">#27523</a> <a href="https://github.com/n0ruSh">n0ruSh</a></li>
<li>{emoji:1f1f0_1f1ff} Add Kazakh locale. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27589">#27589</a> <a href="https://github.com/nodkz">nodkz</a></li>
</ul>
<h2>4.8.6</h2>
<p><code>2020-11-27</code></p>
<ul>
<li>{emoji:1f41e} Fix Badge style blink when mounted. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28003">#28003</a></li>
<li>{emoji:1f484} Reduce Modal style size. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27998">#27998</a></li>
<li>{emoji:1f41e} Fix Layout.Sider can not collapse when <code>width='0'</code>. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28000">#28000</a></li>
<li>{emoji:1f41e} Fix Menu style when using none Ant Design icons. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27983">#27983</a></li>
<li>Input
<ul>
<li>{emoji:1f41e} Fix Input.Search button height when customize less variables. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27986">#27986</a></li>
<li>{emoji:1f41e} Fix Input.Search <code>addonBefore</code> abnormal style. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27960">#27960</a></li>
</ul>
</li>
<li>{emoji:1f41e} Fix Typography.Link clicking copy button will redirect. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27982">#27982</a></li>
<li>{emoji:1f41e} Fix Carousel throws error <code>Unable to preventDefault inside passive event listener</code>. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/27957">#27957</a></li>
<li>{emoji:1f310} Improve data picker locale for <code>en_GB</code> and <code>zh_TW</code>. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28016">#28016</a> <a href="https://github.com/abz53378">abz53378</a></li>
<li>RTL
<ul>
<li>{emoji:1f484} Optimize the border style of Descriptions in RTL model. <a href="https://github-redirect.dependabot.com/ant-design/ant-design/pull/28010">#28010</a></li>
</ul>
</li>
</ul>

</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="dda1f2b09c"><code>dda1f2b</code></a> refactor: &lt;Timeline/&gt; move defaultProps into single destructuring (<a href="https://github-redirect.dependabot.com/ant-design/ant-design/issues/28094">#28094</a>)</li>
<li><a href="511c8510fb"><code>511c851</code></a> chore: allow run compressed size from outside PR</li>
<li><a href="2cc6b0ca05"><code>2cc6b0c</code></a> refactor: optimize &lt;Timeline/&gt; bundle size (<a href="https://github-redirect.dependabot.com/ant-design/ant-design/issues/28095">#28095</a>)</li>
<li><a href="6e040bbd98"><code>6e040bb</code></a> docs: 4.9.1 changelog (<a href="https://github-redirect.dependabot.com/ant-design/ant-design/issues/28102">#28102</a>)</li>
<li><a href="30cc31af7e"><code>30cc31a</code></a> chore: Fix site deploy script</li>
<li><a href="16bc4bcdab"><code>16bc4bc</code></a> fix: Collapse.Panel collapsible should be optional (<a href="https://github-redirect.dependabot.com/ant-design/ant-design/issues/28092">#28092</a>)</li>
<li><a href="682b55d6b6"><code>682b55d</code></a> docs: 4.9.0 changelog (<a href="https://github-redirect.dependabot.com/ant-design/ant-design/issues/28088">#28088</a>)</li>
<li><a href="98ddb8d8da"><code>98ddb8d</code></a> chore: RM circle ci (<a href="https://github-redirect.dependabot.com/ant-design/ant-design/issues/28080">#28080</a>)</li>
<li><a href="6bb9701e23"><code>6bb9701</code></a> Merge pull request <a href="https://github-redirect.dependabot.com/ant-design/ant-design/issues/28081">#28081</a> from ant-design/feature</li>
<li><a href="ac3142acf6"><code>ac3142a</code></a> docs: fix site warning message</li>
<li>Additional commits viewable in <a href="https://github.com/ant-design/ant-design/compare/4.6.6...4.9.1">compare view</a></li>
</ul>
</details>
<br />

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=antd&package-manager=npm_and_yarn&previous-version=4.6.6&new-version=4.9.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/configuring-github-dependabot-security-updates)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

 ---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `dependabot rebase` will rebase this PR
- `dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `dependabot merge` will merge this PR after your CI passes on it
- `dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `dependabot cancel merge` will cancel a previously requested merge and block automerging
- `dependabot reopen` will reopen this PR if it is closed
- `dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

</details>

Pull Request resolved: https://github.com/facebook/flipper/pull/1734

Test Plan:
Imported from GitHub, without a `Test Plan:` line.

Did some exploratory testing and styling simplifications

{F350178586}

Reviewed By: nikoant

Differential Revision: D25461255

Pulled By: mweststrate

fbshipit-source-id: 2f2948664f302829d8fc4bc954b910ff4d033b4c
2020-12-11 06:48:08 -08:00
Michel Weststrate
52862f6083 Introduce isPluginAvailable and selectPlugin
Summary:
Introduced API to replace the deprecated `selectPlugin` in Sandy.

The API can be used to navigate from `device plugin -> device plugin`, or` client plugin -> device / client plugin`

Introduced `isPluginAvailable` as well, so that the user interaction an be fine tuned in case the plugin is not disabled.

Reviewed By: jknoxville

Differential Revision: D25422370

fbshipit-source-id: c6c603f1c68e6291280b3d0883e474448754ded1
2020-12-09 14:36:18 -08:00
Michel Weststrate
d8832aa78e Fix AdsManager plugin not loading
Summary:
FluxStores plugin of AdsManager didn't open on Sandy. The underlying reason is that in Sandy the list was based on the plugin id's as exposed in the `package.json`, while in the old left sidebar it was based on the `id` stored on the Plugin class. And apparently they can differ (will fix that in the next diff)

We can release an update of this plugin after it landed

Reviewed By: passy

Differential Revision: D25302357

fbshipit-source-id: 874aab263fad6a83f63edc4a8f7fa7ceceaef70f
2020-12-03 04:51:17 -08:00
Michel Weststrate
966d748ace Some fixes in rendering legacy plugins
Summary:
Some exploratory testing on all iOS and Android plugins, to see how they behave inside Sandy, and fixed some layout glitches (some were also present without Sandy)

General fixes:
* Introduced some niceties like searchbox resizing properly, and toolbars wrapping automatically in Sandy, rather than buttons becoming invisible
* Containers don't grow anymore by default, but take size of contents
* ScrollContainer child is now a Layout.Vertical. Layout.Vertical should be used as default container everywhere (e.g. Tabs, Panels) in the future
* Fixed layout issue if a split container had only 1 visible child
* DetailsSidebar now scrolls vertically by default
* Details sidebar would sometimes render content in-place rather than in the reserved area
* AppSelector dropdown and Plugin list will now properly ellipse (...) if there is not enough space

Plugin fixes:
* Long database / table names in Database plugin would break layout

Also fixes https://github.com/facebook/flipper/issues/1611

Reviewed By: passy

Differential Revision: D24454188

fbshipit-source-id: c60c867270900a1d4f28587d47067c6ec1072ede
2020-10-22 09:41:11 -07:00
Michel Weststrate
c55be74426 Be able to select Metro plugins
Summary:
This adds the ability in AppInspect to work with Metro and plugins.

Metro remains a weird and hardcoded edge case, as we show it as part of another device. So a few things to notice:
- Metro does not have it's own entry in the device/app dropdown
- When selecting a metro plugin, the surrounding context (selected main device / app) remains, but you will notice that the device dropdown switches to 'React Native'. This is intentional to reflect that we are talking to React Native in general, and not necessarily to the device / app shown in the context.

Reviewed By: nikoant

Differential Revision: D24422267

fbshipit-source-id: 239aa71b5c01e19bdda53a930ad9fa8af13b8d4a
2020-10-22 09:41:11 -07:00
Anton Nikolaev
bc39e72fd9 Automatically select plugin after auto-update
Summary: Select reloaded plugin automatically

Reviewed By: mweststrate

Differential Revision: D23987545

fbshipit-source-id: bf54ca54e4aa46b987d57e76fbc4f3e9e5fc336e
2020-09-29 04:26:25 -07:00
Anton Nikolaev
0982dc06a0 Reload single plugin on auto-update
Summary: Implemented a way for re-loading single plugin on auto-update. This make it possible to apply update without full Flipper restart.

Reviewed By: mweststrate

Differential Revision: D23729972

fbshipit-source-id: ed30f7cde5a0537945db0b5bb6969ae8fde42cb6
2020-09-28 02:51:47 -07:00
Michel Weststrate
81eb09e7b0 Unify error notifications (#1483)
Summary:
Note: this is to be stacked upon https://github.com/facebook/flipper/pull/1479

Note: this PR will probably not succeed against FB internal flipper, as I'm pretty sure there are more call sites that need to be updated. So consider this WIP

Currently connection errors are managed in the connection reducers, and are displayed through their own means, the error bar. Showing console.errors is also hooked up to this mechanism in FB internal flipper, but not at all in the OSS version, which means that some connection errors are never shown to the user.

Besides that there is a notification system that is used by for example the crash reporter and plugin updater.

Having effectively (at least) two notifications mechanisms is confusing and error prone. This PR unifies both approaches, and rather than having the connection reducer manage it's own errors, it leverages the more generic notifications reducer. Since, in the previous PR, console errors and warnings have become user facing (even in OSS and production builds, which wasn't the case before), there is no need anymore for a separate error bar.

I left the notifications mechanism itself as-is, but as discussed in the Sandy project the notification screen will probably be overhauled, and the system wide notifications will become in-app notifications.

## Changelog

Pull Request resolved: https://github.com/facebook/flipper/pull/1483

Test Plan: Only updated the unit tests at this point. Manual tests still need to be done.

Reviewed By: passy

Differential Revision: D23220896

Pulled By: mweststrate

fbshipit-source-id: 8ea37cf69ce9605dc232ca90afe9e2f70da26652
2020-08-21 10:08:21 -07:00
Michel Weststrate
685cc09b3b DeviceLogs plugin to Sandy
Summary:
Converted the DeviceLogs plugin to sandy.

Kept logic and UI the same (so same batching, localstorage mechanisms etc). But used sandy api's for log subscribing, state, and separating the logical part of the component from the UI.

Note that some mechanisms work slightly different, like deeplinking and scrollToBottom handling, to reflect the fact that plugins are now long lived

Reviewed By: jknoxville

Differential Revision: D22845466

fbshipit-source-id: 7c98b2ddd9121dc730768ee1bece7e71bb5bec16
2020-08-20 13:32:47 -07:00
Michel Weststrate
dd15cffa64 Introduced first class console to help users debugging issues (#1479)
Summary:
Handling issues typically start with: did you look at the Electron logs? Since Flipper is such an extensible tool, running in varying environments I think the console should be support as first class concept. Many errors are currently not shown to the user. This PR is a first attempt to fix that.

The implementation is based on https://github.com/samdenty/console-feed, which is used by quite some web based IDE like tools (like codesandbox), and offers a lot of goodies out of the box, like collapsing errors, objects, etc.

Edit: also added a counter keeping track of the amount of errors

N.B. no need to immediately review this diff, I'll import it to phabricator as soon as I can :)

## Changelog

changelog: Introduce 'Debug Logs' section to help users to troubleshoot issues or to provide more accurate reports.

Pull Request resolved: https://github.com/facebook/flipper/pull/1479

Test Plan: ![Screenshot from 2020-08-18 15-29-55](https://user-images.githubusercontent.com/1820292/90526011-c9b22d80-e167-11ea-88cf-7b4e07918a96.png)

Reviewed By: jknoxville

Differential Revision: D23198103

Pulled By: passy

fbshipit-source-id: a2505f9fa59e10676a44ffa33312efe83c7be55d
2020-08-20 13:27:48 -07:00
Michel Weststrate
9c202a4a10 Introduce menu entry support
Summary:
[interesting] since it shows how Flipper APIs are exposed through sandy. However, the next diff is a much simpler example of that

This diff adds support for adding menu entries for sandy plugin (renamed keyboard actions to menus, as it always creates a menu entry, but not necessarily a keyboard shortcut)

```

  client.addMenuEntry(
    // custom entry
    {
      label: 'Reset Selection',
      topLevelMenu: 'Edit',
      handler: () => {
        selectedID.set(null);
      },
    },
    // based on built-in action (sets standard label, shortcut)
    {
      action: 'createPaste',
      handler: () => {
        console.log('creating paste');
      },
    },
  );
```

Most of this diff is introducing the concept of FlipperUtils, a set of static Flipper methods (not related to a device or client) that can be used from Sandy. This will for example be used to implement things as `createPaste` as well

Reviewed By: nikoant

Differential Revision: D22766990

fbshipit-source-id: ce90af3b700e6c3d9a779a3bab4673ba356f3933
2020-08-04 07:47:14 -07:00
Michel Weststrate
642261c0d0 Cleanup and some code reuse between Device- and normal Plugins
Summary: Introducing a base abstract class (blegh) to share some life cycle management between Device- and normal plugins. Cleaned up the test utils a bit as well + some old TODO's that now have been taken care of

Reviewed By: nikoant

Differential Revision: D22727089

fbshipit-source-id: 507816f1bfdbc6e7e71d4bd365b881b6710ca917
2020-08-04 07:08:32 -07:00
Michel Weststrate
489dd1521e Make sure Sandy Devices Plugins are loaded in Flipper devices
Summary:
This diff makes sure that devices will actually instantiate applicable sandy device plugins. Similar to how client plugins are owned by Client, device plugins are directly owned by BaseDevice, which significantly simplifies life cycle management and doesn't dispatch updates to all Redux connect components whenever something irrelevant changes.

Also made sure `device.teardown()` is called. That API already existed, but wasn't used or implemented before.

Updated Flipper test utils to support testing device plugins as well (both Sandy and classic ones)

Reviewed By: passy, nikoant

Differential Revision: D22693929

fbshipit-source-id: 73b2b8666ef7a0e748ea89360db84734d37eb5be
2020-08-04 07:08:31 -07:00
Michel Weststrate
f0c54667e0 Support handling deeplinks in plugins
Summary:
This adds support for handling incoming deeplinks in a Sandy plugin, which can be done by using a `client.onDeepLink(deepLink => { } )` listener

Also generalized deeplinks to not just support strings, but also richer objects, which is beneficial to plugin to plugin linking.

Reviewed By: jknoxville

Differential Revision: D22524749

fbshipit-source-id: 2cbe8d52f6eac91a1c1c8c8494706952920b9181
2020-07-22 04:13:59 -07:00
Michel Weststrate
952e929699 Fix disabling a plugin nog clearing the message queue
Summary:
While writing unit tests discovered a bug that disabling a plugin doesn't guarantee cleaning the messagequeues (both the buffer in client and the messagequeue reducer).

Fixed that. That was thanks to @#%@#$@#%@ Redux a lot harder than it should be; as 'STAR_PLUGIN' reasons about a plugin + app name, while the message queue reducer would need to deduct the plugin keys from that, but it can't because that mapping is stored in the connections reducers. So I moved the `STAR_PLUGIN` action handling to the root reducer, sot that it can reason about the state of multiple reducers, which looked like the least of all evils. For more ranting about that and possible alternative solutions: https://twitter.com/mweststrate/status/1277556309706117122

Reviewed By: nikoant

Differential Revision: D22284043

fbshipit-source-id: 35d0a8ba3a21a5959d2bb6ef17da3ff5077f48fd
2020-07-01 09:12:36 -07:00
Michel Weststrate
04a29315e2 Remove instanceof checks
Summary: Replaced `instanceof` checks with `isSandyPlugin` utility. That is cleaner to read and makes it easier to find places where we make exceptions for Sandy plugins

Reviewed By: jknoxville

Differential Revision: D22206707

fbshipit-source-id: b44a1b585424f3b9bf0d7ce200c34107f03ed55e
2020-07-01 09:12:35 -07:00
Michel Weststrate
1dc9e899b8 Make sure Sandy plugis can be initialized
Summary:
This diff makes sure sandy plugins are initialized.

Sandy plugins are stored directly in the client for two reasons
1. we want to decouple any plugin state updates from our central redux store, as redux is particularly bad in handling high frequency updates.
2. The lifecycle of a plugin is now bound to the lifecycle of a client. This means that we don't need 'persistedStore' to make sure state is preserved; that is now the default. Switching plugins will no longer reinitialize them (but only run specific hooks, see later diffs).
3. PersistedState will be introduced for sandy plugins as well later, but primarily for import / export / debug reasons.

A significant difference with the current persistent state, is that if a client crashes and reconnects, plugins will loose their state. We can prevent this (again, since state persisting will be reintroduced), but I'm not sure we need that for the specific reconnect scenario. Because
1. we should fix reconnecting clients anyway, and from stats it looks to happen less already
2. reconnects are usually caused by plugins that aggregate a lot of data and get slower over time. Restoring old state also restores those unstabilites.

For the overview bringing back the archi picture of earlier diff:
{F241508042}

Also fixed a bug where enabling background plugins didn't enable them on all devices with that app.

Reviewed By: jknoxville

Differential Revision: D22186276

fbshipit-source-id: 3fd42b577f86920e5280aa8cce1a0bc4d5564ed9
2020-07-01 09:12:35 -07:00
Michel Weststrate
1029a6c97c Introduce types for Sandy plugins through code base
Summary:
So far there were 2 types of plugins: `FlipperPlugin` and `FlipperDevicePlugin`. This introduces a third kind: `SandyPluginDefinition`.

Unlike with the old plugins, the export of the module is not directly exposed as the plugin definition. Rather, we use class `SandyPluginDefinition` (instance) that holds a loaded definition and its meta data separately (`PluginDetails`). This means that we don't have to mix in and mutate loaded definitions, and that for unit tests we can avoid needing to provide a bunch of meta data. This also prevents a bunch of meta data existing on two places: on the loaded classes as static fields, and in the meta data field of the loaded class as well. Finally, we can now freely extends the `PluginDetails` interface in flipper, without needing to store it on the loaded classes and we are sure that no naming conflicts are caused by this in the future.

For compatibility with the existing code base, common fields are delegated from the `SandyPluginDefinition` class to the meta data.

Also cleaned up types around plugins a little bit and removed some unnecessary casts.

For all features that reason about plugins in general (such as exports), sandy plugins are ignored for now.

`SandyPluginInstance` is worked out in further diffs

The `instanceof` calls are replaced by a utility function in later diffs.

{F241363645}

Reviewed By: jknoxville

Differential Revision: D22091432

fbshipit-source-id: 3aa6b12fda5925268913779f3c3c9e84494438f8
2020-07-01 09:12:35 -07:00
John Knox
ec6310dc3b Use configurable idb installation path
Summary:
Part of https://github.com/facebook/flipper/issues/262

Use the user-configured idb install location instead of a hardcoded one.

Reviewed By: passy

Differential Revision: D21860236

fbshipit-source-id: 5c604d7b6361e7c93ab49d8a03a437dfce880ac1
2020-06-04 03:04:50 -07:00
John Knox
5723553fba Open-source idb interaction code
Summary:
I've outlined the tasks required to get iOS device support working for open source users [here](https://github.com/facebook/flipper/issues/262).

This is the first step. It publishes the same code we use internally to GitHub, but in a state where it is only "available" for non-public builds. This will not change any behavior, but means that together with the community, we can start adapting it to suit everyone, and then eventually flip "available" to true for everyone.

Reviewed By: passy

Differential Revision: D21740193

fbshipit-source-id: 586c79ad850f67da330c10a007605ff25a187544
2020-05-29 06:04:39 -07:00
Michel Weststrate
dba480ce74 Preserve Navigation plugin as background plugin eevn when disabled
Summary:
This diff fixes an issue where we don't want to have the Navigation plugin be disabled as background plugins like all other plugins, so that the breadcrumb navigation keeps working.

Yet another hack concerning the super useful Navigation plugin. On a positive note, since connection management for background is not entirely managed by the Desktop and not the native said, these kind of exceptions are fairly easy to make :)

Reviewed By: passy

Differential Revision: D21089537

fbshipit-source-id: 209954ff35c95e066fe688a60ad46ccfc3835c44
2020-04-27 09:46:14 -07:00
Michel Weststrate
b9c3d99f44 Stop connecting disabled background plugins
Summary:
Background for this diff: https://fb.quip.com/KqEfAlKYlgme

Some plugins don't respect that stuff (livefeed and graphql), but for others it seems to work fine.

This is just a PoC, there are some present bugs concerning the combination of selecting and bg plugins

Questions to investigate:

- [x] make sure that LiveFeed and GraphQL disconnect properly. There might be more plugins that need that
- [x] verifiy that we don't loose one of the original goals of background plugins, e.g. QPL collecting and sending data from device start. Does this still work as intended after this change?
- [x] how can we observe / measure improvements? Are dev builds more responsive after this? Is the layout inspector smoother for example because no QPL plugins are interweaved?
- [x] how is forward and backward compatibility?
   - If Flipper is updated, but device not: No change I think, as getBackgroundPlugins() will return an empty set, and background plugins are initiated as usual, so old behavior
  - If device is updated, but Flipper not, background plugins won't be started until they are selected. This is a degradation, but hopefully explainable.
- [x] Verify QPL buffer is not unbounded
- [x] Share architecutre changes with team

For Graphql updates: D20943455

Added runtime stats to monitor network traffic (sadly had to redo that since scuba couldn't handle the data format used at first, so probably will hold of landing this diff a week to make sure we can see some effects)

Follow up work:

[x] wait until we released the stat tracking before we release this, to be able to measure the effect?
[x] make sure graphql fix lands
[ ] use side effects abstraction
[ ] fix other background plugins (android only) or fix it in a generic way:

{F234394286}

Changelog: Background plugins will no longer receive a Flipper connection if they are disabled. This should significantly reduce the overall load of Flipper both on the device and desktop when unused plugins are disabled used, which could otherwise generate 10MB/s of network traffic certain scenarios. All plugins *should* be able to handle to this gracefully, but since this is quite a fundamental change, reach out to the Flipper team when in doubt!

Reviewed By: jknoxville

Differential Revision: D20942453

fbshipit-source-id: b699199cb95c1b3e4c36e026b6dfaee7d1652e1f
2020-04-27 09:46:13 -07:00
Michel Weststrate
60ddad7e08 Fix deeplink parsing issue and device plugin highlighting
Summary:
This diff fixes an issue where the selected device was not correctly updated when selecting a device plugin, causing the wrong plugin, or none at all, to be highlighted.

This diff fixes an issue where deeplinks were not correctly parsed if formatted as shown in the test plan of D20920587 (it was a different format in the recording, but after looking into it, using `plugin?params` instead of `plugin/?params` is the natural thing to do, so we now support both)

Reviewed By: jknoxville

Differential Revision: D21154190

fbshipit-source-id: c31132aaf7213ee1c3c188a6a1cf2b6bcc7b5b00
2020-04-21 06:33:25 -07:00
Pascal Hartig
98bb392d78 Allow device specification for plugin deep-link
Summary: Allow optionally to provide the device title to select a plugin in. Currently, there's only support for `flipper://<app>/<plugin_id>`. This allows to add a `?device=<specifier>`.

Reviewed By: mweststrate

Differential Revision: D20920587

fbshipit-source-id: e7df4b510f1adfa9c2c9d072f6aebca1edb89cc0
2020-04-09 06:38:18 -07:00
Pascal Hartig
fc9ed65762 prettier 2
Summary:
Quick notes:

- This looks worse than it is. It adds mandatory parentheses to single argument lambdas. Lots of outrage on Twitter about it, personally I'm {emoji:1f937_200d_2642} about it.
- Space before function, e.g. `a = function ()` is now enforced. I like this because both were fine before.
- I added `eslint-config-prettier` to the config because otherwise a ton of rules conflict with eslint itself.

Close https://github.com/facebook/flipper/pull/915

Reviewed By: jknoxville

Differential Revision: D20594929

fbshipit-source-id: ca1c65376b90e009550dd6d1f4e0831d32cbff03
2020-03-24 09:38:11 -07:00
Michel Weststrate
f2da075acc Fixed circular dependencies
Summary: Fixed circular dependency warnings and removed some dead code while at it.

Reviewed By: jknoxville

Differential Revision: D20557313

fbshipit-source-id: 856c42113a9abe36d3e14f9d538eb40705ceb87f
2020-03-23 06:45:59 -07:00
Anton Nikolaev
863f89351e Yarn workspaces
Summary:
1) moved "sonar/desktop/src" to "sonar/desktop/app/src", so "app" is now a separate package containing the core Flipper app code
2) Configured yarn workspaces with the root in "sonar/desktop": app, static, pkg, doctor, headless-tests. Plugins are not included for now, I plan to do this later.

Reviewed By: jknoxville

Differential Revision: D20535782

fbshipit-source-id: 600b2301960f37c7d72166e0d04eba462bec9fc1
2020-03-20 13:37:41 -07:00