();
-
- useEffect(() => {
- switch (status?.[0]) {
- case 'logs': {
- setStatusMessage(Exporting Flipper logs...
);
- return;
- }
- case 'files': {
- let sheepCount = 0;
- const setFileExportMessage = () => {
- setStatusMessage(
- <>
- Exporting Flipper debug files from all devices...
- It could take a long time!
- Let's count sheep while we wait: {sheepCount++}.
- We'll skip it automatically if it exceeds 3 minutes.
- >,
- );
- };
-
- setFileExportMessage();
-
- const interval = setInterval(setFileExportMessage, 3000);
- return () => clearInterval(interval);
- }
- case 'state': {
- let dinosaursCount = 0;
- const setStateExportMessage = () => {
- setStatusMessage(
- <>
- Exporting Flipper state...
- It also could take a long time!
- This time we could count dinosaurs: {dinosaursCount++}.
- We'll skip it automatically if it exceeds 2 minutes.
- >,
- );
- };
-
- setStateExportMessage();
-
- const interval = setInterval(setStateExportMessage, 2000);
- return () => clearInterval(interval);
- }
- case 'archive': {
- setStatusMessage(Creating an archive...
);
- return;
- }
- case 'upload': {
- setStatusMessage(Uploading the archive...
);
- return;
- }
- case 'support': {
- setStatusMessage(Creating a support request...
);
- return;
- }
- case 'error': {
- setStatusMessage(
- <>
- Oops! Something went wrong.
- {status[1]}
- >,
- );
- return;
- }
- case 'done': {
- setStatusMessage(Done!
);
- return;
- }
- case 'cancelled': {
- setStatusMessage(Cancelled! Why? 😱🤯👏
);
- return;
- }
- }
- }, [status]);
-
- return (
- {
- setStatus(undefined);
- }}
- title="Exporting everything everywhere all at once"
- footer={null}>
- {statusMessage}
-
- );
-}
-
-function ExportEverythingEverywhereAllAtOnceButton() {
- const store = useStore();
- const [status, setStatus] = useState<
- ExportEverythingEverywhereAllAtOnceStatus | undefined
- >();
-
- const exportEverythingEverywhereAllAtOnceTracked = useTrackedCallback(
- 'Debug data export',
- () =>
- exportEverythingEverywhereAllAtOnce(
- store,
- (...args) => setStatus(args),
- config.isFBBuild,
- ),
- [store, setStatus],
- );
-
- return (
- <>
-
-
- }
- title="Export Flipper debug data"
- onClick={() => {
- exportEverythingEverywhereAllAtOnceTracked();
- }}
- small
- />
-
- >
- );
-}
diff --git a/desktop/flipper-ui-core/src/sandy-chrome/Navbar.tsx b/desktop/flipper-ui-core/src/sandy-chrome/Navbar.tsx
index af468f436..af23b3adb 100644
--- a/desktop/flipper-ui-core/src/sandy-chrome/Navbar.tsx
+++ b/desktop/flipper-ui-core/src/sandy-chrome/Navbar.tsx
@@ -10,23 +10,32 @@
import {
Dialog,
Layout,
+ NUX,
styled,
theme,
useMemoize,
+ useTrackedCallback,
useValue,
withTrackingScope,
} from 'flipper-plugin';
import {getRenderHostInstance} from 'flipper-frontend-core';
-import React, {cloneElement, useCallback, useMemo, useState} from 'react';
+import React, {
+ cloneElement,
+ useCallback,
+ useEffect,
+ useMemo,
+ useState,
+} from 'react';
import {useDispatch, useStore} from '../utils/useStore';
import config from '../fb-stubs/config';
import {isConnected, currentUser, logoutUser} from '../fb-stubs/user';
import {showLoginDialog} from '../chrome/fb-stubs/SignInSheet';
-import {Avatar, Badge, Button, Popover, Tooltip} from 'antd';
+import {Avatar, Badge, Button, Modal, Popover, Tooltip} from 'antd';
import {
ApiOutlined,
AppstoreAddOutlined,
BellOutlined,
+ BugOutlined,
CameraOutlined,
EllipsisOutlined,
FileExclamationOutlined,
@@ -52,6 +61,10 @@ import FpsGraph from '../chrome/FpsGraph';
import NetworkGraph from '../chrome/NetworkGraph';
import {errorCounterAtom} from '../chrome/ConsoleLogs';
import {filterNotifications} from './notification/notificationUtils';
+import {
+ exportEverythingEverywhereAllAtOnce,
+ ExportEverythingEverywhereAllAtOnceStatus,
+} from '../utils/exportData';
import {css} from '@emotion/css';
export const Navbar = withTrackingScope(function Navbar({
@@ -114,6 +127,7 @@ export const Navbar = withTrackingScope(function Navbar({
setToplevelSelection={setToplevelSelection}
/>
+
@@ -123,6 +137,140 @@ export const Navbar = withTrackingScope(function Navbar({
);
});
+function ExportEverythingEverywhereAllAtOnceButton() {
+ const store = useStore();
+ const [status, setStatus] = useState<
+ ExportEverythingEverywhereAllAtOnceStatus | undefined
+ >();
+
+ const exportEverythingEverywhereAllAtOnceTracked = useTrackedCallback(
+ 'Debug data export',
+ () =>
+ exportEverythingEverywhereAllAtOnce(
+ store,
+ (...args) => setStatus(args),
+ config.isFBBuild,
+ ),
+ [store, setStatus],
+ );
+
+ return (
+ <>
+
+
+ {
+ exportEverythingEverywhereAllAtOnceTracked();
+ }}
+ />
+
+ >
+ );
+}
+function ExportEverythingEverywhereAllAtOnceStatusModal({
+ status,
+ setStatus,
+}: {
+ status: ExportEverythingEverywhereAllAtOnceStatus | undefined;
+ setStatus: (
+ newStatus: ExportEverythingEverywhereAllAtOnceStatus | undefined,
+ ) => void;
+}) {
+ const [statusMessage, setStatusMessage] = useState();
+
+ useEffect(() => {
+ switch (status?.[0]) {
+ case 'logs': {
+ setStatusMessage(Exporting Flipper logs...
);
+ return;
+ }
+ case 'files': {
+ let sheepCount = 0;
+ const setFileExportMessage = () => {
+ setStatusMessage(
+ <>
+ Exporting Flipper debug files from all devices...
+ It could take a long time!
+ Let's count sheep while we wait: {sheepCount++}.
+ We'll skip it automatically if it exceeds 3 minutes.
+ >,
+ );
+ };
+
+ setFileExportMessage();
+
+ const interval = setInterval(setFileExportMessage, 3000);
+ return () => clearInterval(interval);
+ }
+ case 'state': {
+ let dinosaursCount = 0;
+ const setStateExportMessage = () => {
+ setStatusMessage(
+ <>
+ Exporting Flipper state...
+ It also could take a long time!
+ This time we could count dinosaurs: {dinosaursCount++}.
+ We'll skip it automatically if it exceeds 2 minutes.
+ >,
+ );
+ };
+
+ setStateExportMessage();
+
+ const interval = setInterval(setStateExportMessage, 2000);
+ return () => clearInterval(interval);
+ }
+ case 'archive': {
+ setStatusMessage(Creating an archive...
);
+ return;
+ }
+ case 'upload': {
+ setStatusMessage(Uploading the archive...
);
+ return;
+ }
+ case 'support': {
+ setStatusMessage(Creating a support request...
);
+ return;
+ }
+ case 'error': {
+ setStatusMessage(
+ <>
+ Oops! Something went wrong.
+ {status[1]}
+ >,
+ );
+ return;
+ }
+ case 'done': {
+ setStatusMessage(Done!
);
+ return;
+ }
+ case 'cancelled': {
+ setStatusMessage(Cancelled! Why? 😱🤯👏
);
+ return;
+ }
+ }
+ }, [status]);
+
+ return (
+ {
+ setStatus(undefined);
+ }}
+ title="Exporting everything everywhere all at once"
+ footer={null}>
+ {statusMessage}
+
+ );
+}
+
function ConnectionTroubleshootButton({
toplevelSelection,
setToplevelSelection,
@@ -130,7 +278,7 @@ function ConnectionTroubleshootButton({
return (
{
setToplevelSelection('connectivity');