hover updates

This commit is contained in:
Nate Kelley 2025-09-09 11:03:06 -06:00
parent f6b19d08ab
commit dfbfb53d14
No known key found for this signature in database
GPG Key ID: FD90372AB8D98B4F
4 changed files with 68 additions and 44 deletions

View File

@ -9,6 +9,7 @@ import { useMemoizedFn } from '@/hooks/useMemoizedFn';
import { inputHasText } from '@/lib/text';
import { cn } from '@/lib/utils';
import { MetricViewChartContent } from './MetricViewChartContent';
import { MetricViewChartProvider } from './MetricViewChartContext';
import { MetricViewChartHeader } from './MetricViewChartHeader';
export type MetricChartCardProps = {
@ -152,6 +153,7 @@ const MetricViewChartCardContainer = React.forwardRef<
}, [isTable, loadingData, hasData, errorData]);
return (
<MetricViewChartProvider>
<div
ref={ref}
className={cn(
@ -162,6 +164,7 @@ const MetricViewChartCardContainer = React.forwardRef<
>
{children}
</div>
</MetricViewChartProvider>
);
});

View File

@ -0,0 +1,17 @@
import { useCallback, useState } from 'react';
import { createContext, useContextSelector } from 'use-context-selector';
export const useMetricViewChartContext = () => {
return {};
};
export const MetricViewChartContext = createContext<ReturnType<typeof useMetricViewChartContext>>(
{} as ReturnType<typeof useMetricViewChartContext>
);
export const MetricViewChartProvider = ({ children }: { children: React.ReactNode }) => {
const value = useMetricViewChartContext();
return (
<MetricViewChartContext.Provider value={value}>{children}</MetricViewChartContext.Provider>
);
};

View File

@ -83,9 +83,7 @@ export const MetricViewChartHeader: React.FC<MetricViewChartHeaderProps> = React
</>
) : null}
</div>
{headerSecondaryContent && (
<div className="group-hover:block hidden">{headerSecondaryContent}</div>
)}
{headerSecondaryContent}
</div>
</LinkWrapper>
);

View File

@ -1,15 +1,16 @@
import { useState } from 'react';
import React, { useState } from 'react';
import { Button } from '@/components/ui/buttons/Button';
import { Dropdown, type IDropdownItems } from '@/components/ui/dropdown';
import { DotsVertical } from '@/components/ui/icons';
import { useDebounce } from '@/hooks/useDebounce';
import { cn } from '@/lib/classMerge';
export const MetricHeaderSecondaryWrapperDropdown = ({
dropdownItems,
}: {
dropdownItems: IDropdownItems;
}) => {
export const MetricHeaderSecondaryWrapperDropdown = React.memo(
({ dropdownItems }: { dropdownItems: IDropdownItems }) => {
const [isOpen, setIsOpen] = useState(false);
const debouncedIsOpen = useDebounce(isOpen, { wait: 60 });
return (
<div
onClick={(e) => {
@ -19,7 +20,9 @@ export const MetricHeaderSecondaryWrapperDropdown = ({
className={cn(
'mt-1.5 mr-1.5 opacity-0 group-hover:opacity-100',
'group-hover:pointer-events-auto',
isOpen && 'pointer-events-auto block opacity-100'
'group-hover:block hidden',
isOpen && 'pointer-events-auto !block opacity-100',
debouncedIsOpen && 'block!'
)}
>
<Dropdown
@ -34,4 +37,7 @@ export const MetricHeaderSecondaryWrapperDropdown = ({
</Dropdown>
</div>
);
};
}
);
MetricHeaderSecondaryWrapperDropdown.displayName = 'MetricHeaderSecondaryWrapperDropdown';