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') && ( + +