Skip to content

Commit 0f249c3

Browse files
authored
chore(components): refactor InteractivePopover to take a type argument for the trigger element (#6495)
* Make InteractivePopover take a type argument of the trigger HTMLElement * Update existing usage
1 parent 0c5d2f3 commit 0f249c3

File tree

5 files changed

+10
-10
lines changed

5 files changed

+10
-10
lines changed

packages/compass-aggregations/src/components/pipeline-toolbar/pipeline-header/index.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ const containedElements = [
7171
const SavedPipelinesButton: React.FunctionComponent = () => {
7272
const [isVisible, setIsVisible] = useState(false);
7373
return (
74-
<InteractivePopover
74+
<InteractivePopover<HTMLButtonElement>
7575
className={savedAggregationsPopoverStyles}
7676
// To prevent popover from closing when confirmation modal is shown
7777
containedElements={containedElements}

packages/compass-components/src/components/interactive-popover.tsx

+6-6
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ const closeButtonStyles = css({
4141
right: spacing[2],
4242
});
4343

44-
type InteractivePopoverProps = {
44+
type InteractivePopoverProps<TriggerElement extends HTMLElement> = {
4545
className?: string;
4646
children: React.ReactNode;
4747
trigger: (triggerProps: {
48-
onClick: React.MouseEventHandler<HTMLButtonElement>;
49-
ref: React.LegacyRef<HTMLButtonElement>;
48+
onClick: React.MouseEventHandler<TriggerElement>;
49+
ref: React.Ref<TriggerElement>;
5050
children: React.ReactNode;
5151
}) => React.ReactElement;
5252
hideCloseButton?: boolean;
@@ -64,7 +64,7 @@ type InteractivePopoverProps = {
6464
'align' | 'justify' | 'spacing' | 'popoverZIndex'
6565
>;
6666

67-
function InteractivePopover({
67+
function InteractivePopover<TriggerElement extends HTMLElement>({
6868
className,
6969
children,
7070
trigger,
@@ -79,9 +79,9 @@ function InteractivePopover({
7979
popoverZIndex,
8080
containerClassName,
8181
closeButtonClassName,
82-
}: InteractivePopoverProps): React.ReactElement {
82+
}: InteractivePopoverProps<TriggerElement>): React.ReactElement {
8383
const darkMode = useDarkMode();
84-
const triggerRef = useRef<HTMLButtonElement>(null);
84+
const triggerRef = useRef<TriggerElement>(null);
8585
const closeButtonRef = useRef<HTMLButtonElement>(null);
8686
const popoverContentContainerRef = useRef<HTMLDivElement>(null);
8787

packages/compass-components/src/components/signal-popover.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,7 @@ const SignalPopover: React.FunctionComponent<SignalPopoverProps> = ({
524524
`calc(14px + ${' insight'.length}ch)`;
525525

526526
return (
527-
<InteractivePopover
527+
<InteractivePopover<HTMLButtonElement>
528528
className={cx(
529529
popoverStyles,
530530
// If trigger is not visible, we are in this weird state where trigger

packages/compass-query-bar/src/components/query-history-button-popover.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ const QueryHistoryButtonPopover = ({
7373
}, [setIsOpen]);
7474

7575
return (
76-
<InteractivePopover
76+
<InteractivePopover<HTMLButtonElement>
7777
className={queryHistoryPopoverStyles}
7878
trigger={({ onClick, ref, children }) => (
7979
<>

packages/compass-sidebar/src/components/connections-filter-popover.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ export default function ConnectionsFilterPopover({
102102
onMouseLeave={handleButtonMouseLeave}
103103
active={open}
104104
aria-label="Filter connections"
105-
ref={ref as React.Ref<unknown>}
105+
ref={ref}
106106
>
107107
<Icon glyph="Filter" />
108108
{isActivated && (

0 commit comments

Comments
 (0)