From 7e833b1d701c41c680749889eea08d05ad48612d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20B=C3=BCchele?= Date: Wed, 11 Sep 2019 03:01:18 -0700 Subject: [PATCH] ShareSheet Summary: _typescript_ Reviewed By: jknoxville Differential Revision: D17282355 fbshipit-source-id: 37c47c068c5f49d10da949e628f6e9b397aabf7b --- src/chrome/SelectPluginSheet.tsx | 2 +- src/chrome/ShareSheet.tsx | 55 ++++++++++++++++------------- src/chrome/ShareSheetExportFile.tsx | 2 +- 3 files changed, 32 insertions(+), 27 deletions(-) diff --git a/src/chrome/SelectPluginSheet.tsx b/src/chrome/SelectPluginSheet.tsx index af7c20986..4a86e8af6 100644 --- a/src/chrome/SelectPluginSheet.tsx +++ b/src/chrome/SelectPluginSheet.tsx @@ -116,7 +116,7 @@ export default class SelectPluginSheet extends Component { } onSubmit(plugins: PluginSelection) { - const selectedArray = Array.from(plugins.entries()).reduce( + const selectedArray = Array.from(plugins.entries()).reduce( (acc, [plugin, selected]) => { if (selected) { acc.push(plugin); diff --git a/src/chrome/ShareSheet.tsx b/src/chrome/ShareSheet.tsx index f3b00f72c..88d6213dd 100644 --- a/src/chrome/ShareSheet.tsx +++ b/src/chrome/ShareSheet.tsx @@ -20,14 +20,17 @@ import React, {Component} from 'react'; import {setExportStatusComponent, unsetShare} from '../reducers/application'; import {Logger} from '../fb-interfaces/Logger'; import {Idler} from '../utils/Idler'; -import {shareFlipperData, DataExportResult} from '../fb-stubs/user'; +import { + shareFlipperData, + DataExportResult, + DataExportError, +} from '../fb-stubs/user'; import {exportStore, EXPORT_FLIPPER_TRACE_EVENT} from '../utils/exportData'; import PropTypes from 'prop-types'; import {clipboard} from 'electron'; import ShareSheetErrorList from './ShareSheetErrorList'; import {reportPlatformFailures} from '../utils/metrics'; import CancellableExportStatus from './CancellableExportStatus'; -// $FlowFixMe: Missing type defs for node built-in. import {performance} from 'perf_hooks'; export const SHARE_FLIPPER_TRACE_EVENT = 'share-flipper-link'; @@ -72,19 +75,11 @@ type Props = { onHide: () => any; logger: Logger; }; + type State = { runInBackground: boolean; errorArray: Array; - result: - | { - error_class: string; - error: string; - } - | { - flipperUrl: string; - } - | null - | undefined; + result: DataExportError | DataExportResult | null | undefined; statusUpdate: string | null | undefined; }; @@ -93,7 +88,7 @@ export default class ShareSheet extends Component { store: PropTypes.object.isRequired, }; - state = { + state: State = { errorArray: [], result: null, statusUpdate: null, @@ -149,13 +144,19 @@ export default class ShareSheet extends Component { this.props.logger.trackTimeSince(mark, 'export:url-success'); } catch (e) { if (!this.state.runInBackground) { - const str = e instanceof Error ? e.toString() : e; - this.setState({ - result: { - error_class: 'EXPORT_ERROR', - error: str, - }, - }); + const result: DataExportError = { + error_class: 'EXPORT_ERROR', + error: '', + stacktrace: '', + }; + + if (e instanceof Error) { + result.error = e.message; + result.stacktrace = e.stack || ''; + } else { + result.error = e; + } + this.setState({result}); } this.props.logger.trackTimeSince(mark, 'export:url-error'); } @@ -210,14 +211,15 @@ export default class ShareSheet extends Component { this.idler.cancel(); }; const {result, statusUpdate, errorArray} = this.state; - if (!result || !result.flipperUrl) { + if (!result || !(result as DataExportResult).flipperUrl) { return this.renderTheProgessState(onHide, statusUpdate); } + return ( <> - {result.flipperUrl ? ( + {(result as DataExportResult).flipperUrl ? ( <> Data Upload Successful @@ -225,7 +227,7 @@ export default class ShareSheet extends Component { to share with other Flipper users. Opening it will import the data from your trace. - + When sharing your Flipper link, consider that the captured data might contain sensitve information like access tokens @@ -235,9 +237,12 @@ export default class ShareSheet extends Component { ) : ( <> - {result.error_class || 'Error'} + + {(result as DataExportError).error_class || 'Error'} + - {result.error || 'The data could not be uploaded'} + {(result as DataExportError).error || + 'The data could not be uploaded'} )} diff --git a/src/chrome/ShareSheetExportFile.tsx b/src/chrome/ShareSheetExportFile.tsx index 58f088e56..8e7eb808d 100644 --- a/src/chrome/ShareSheetExportFile.tsx +++ b/src/chrome/ShareSheetExportFile.tsx @@ -84,7 +84,7 @@ export default class ShareSheetExportFile extends Component { store: PropTypes.object.isRequired, }; - state = { + state: State = { errorArray: [], result: null, statusUpdate: null,