From 1bffe8bc6b70f46d3eeac5cf83083705a68f3b7e Mon Sep 17 00:00:00 2001 From: Luke De Feo Date: Mon, 21 Aug 2023 04:24:16 -0700 Subject: [PATCH] Improve framework event filters Reviewed By: lblasa Differential Revision: D48393422 fbshipit-source-id: 18d92b53bd56c100b6d4bb6adc07ede0b4a46732 --- .../shared/MultiSelectableDropDownItem.tsx | 51 ++++++ .../shared/SelectableDropDownItem.tsx | 37 ++++ .../inspector/FrameworkEventsInspector.tsx | 162 ++++++++++++------ .../components/tree/TreeControls.tsx | 41 +++-- .../visualizer/VisualizerControls.tsx | 26 +-- 5 files changed, 225 insertions(+), 92 deletions(-) create mode 100644 desktop/plugins/public/ui-debugger/components/shared/MultiSelectableDropDownItem.tsx create mode 100644 desktop/plugins/public/ui-debugger/components/shared/SelectableDropDownItem.tsx diff --git a/desktop/plugins/public/ui-debugger/components/shared/MultiSelectableDropDownItem.tsx b/desktop/plugins/public/ui-debugger/components/shared/MultiSelectableDropDownItem.tsx new file mode 100644 index 000000000..e499f89c4 --- /dev/null +++ b/desktop/plugins/public/ui-debugger/components/shared/MultiSelectableDropDownItem.tsx @@ -0,0 +1,51 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +import React from 'react'; +import {Checkbox, Typography} from 'antd'; +import {Layout, styled, theme} from 'flipper-plugin'; + +export function MultiSelectableDropDownItem({ + value, + selectedValues, + onSelect, + text, +}: { + value: T; + selectedValues: Set; + onSelect: (value: T, selected: boolean) => void; + text: string; +}) { + const isSelected = selectedValues.has(value); + return ( + { + e.stopPropagation(); + onSelect(value, !isSelected); + }}> + { + onSelect(value, !isSelected); + }} + /> + {text} + + ); +} + +export const StyledMultiSelectDropDownItem = styled(Layout.Horizontal)({ + ':hover': { + backgroundColor: theme.backgroundWash, + }, + height: 32, +}); diff --git a/desktop/plugins/public/ui-debugger/components/shared/SelectableDropDownItem.tsx b/desktop/plugins/public/ui-debugger/components/shared/SelectableDropDownItem.tsx new file mode 100644 index 000000000..e18e12558 --- /dev/null +++ b/desktop/plugins/public/ui-debugger/components/shared/SelectableDropDownItem.tsx @@ -0,0 +1,37 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @format + */ + +import {Menu} from 'antd'; +import {theme} from 'flipper-plugin'; +import React from 'react'; + +export function SelectableDropDownItem({ + value, + selectedValue, + onSelect, + text, +}: { + value: T; + selectedValue: T; + onSelect: (value: T) => void; + text: string; +}) { + return ( + { + onSelect(value); + }}> + {text} + + ); +} diff --git a/desktop/plugins/public/ui-debugger/components/sidebar/inspector/FrameworkEventsInspector.tsx b/desktop/plugins/public/ui-debugger/components/sidebar/inspector/FrameworkEventsInspector.tsx index 9d5310eef..1626dabd8 100644 --- a/desktop/plugins/public/ui-debugger/components/sidebar/inspector/FrameworkEventsInspector.tsx +++ b/desktop/plugins/public/ui-debugger/components/sidebar/inspector/FrameworkEventsInspector.tsx @@ -22,15 +22,20 @@ import { } from '../../../ClientTypes'; import React, {ReactNode, useState} from 'react'; import {StackTraceInspector} from './StackTraceInspector'; -import {Button, Collapse, Descriptions, Select, Tag} from 'antd'; -import {frameworkEventSeparator} from '../../shared/FrameworkEventsTreeSelect'; import { - buildTreeSelectData, - FrameworkEventsTreeSelect, -} from '../../shared/FrameworkEventsTreeSelect'; -import {uniqBy} from 'lodash'; -import {TableOutlined} from '@ant-design/icons'; + Badge, + Button, + Descriptions, + Dropdown, + Tag, + Tooltip, + Typography, +} from 'antd'; +import {frameworkEventSeparator} from '../../shared/FrameworkEventsTreeSelect'; +import {last, startCase, uniqBy} from 'lodash'; +import {FilterOutlined, TableOutlined} from '@ant-design/icons'; import {ViewMode} from '../../../DesktopTypes'; +import {MultiSelectableDropDownItem} from '../../shared/MultiSelectableDropDownItem'; type Props = { node: ClientNode; @@ -39,6 +44,7 @@ type Props = { frameworkEventMetadata: Map; onSetViewMode: (viewMode: ViewMode) => void; }; + export const FrameworkEventsInspector: React.FC = ({ node, events, @@ -68,54 +74,100 @@ export const FrameworkEventsInspector: React.FC = ({ return ( - {node.tags.includes('TreeRoot') && ( - - )} - - - - { - setFilteredEventTypes((cur) => - produce(cur, (draft) => { - if (selected) { - draft.add(eventType); - } else { - draft.delete(eventType); - } - }), - ); - }} - selected={[...filteredEventTypes]} + + Event timeline + + + {node.tags.includes('TreeRoot') && ( + +