mirror of
https://github.com/XFox111/TabsAsideExtension.git
synced 2026-04-22 07:58:01 +03:00
fix: collection context menus flickering in Firefox popup view
This commit is contained in:
@@ -12,6 +12,7 @@ import saveTabsToCollection from "@/utils/saveTabsToCollection";
|
|||||||
|
|
||||||
export default function CollectionHeader({ dragHandleRef, dragHandleProps }: CollectionHeaderProps): React.ReactElement
|
export default function CollectionHeader({ dragHandleRef, dragHandleProps }: CollectionHeaderProps): React.ReactElement
|
||||||
{
|
{
|
||||||
|
const [contextOpen, setContextOpen] = useState<boolean>(false);
|
||||||
const [listLocation] = useSettings("listLocation");
|
const [listLocation] = useSettings("listLocation");
|
||||||
const isTab: boolean = listLocation === "tab" || listLocation === "pinned";
|
const isTab: boolean = listLocation === "tab" || listLocation === "pinned";
|
||||||
const { updateCollection } = useCollections();
|
const { updateCollection } = useCollections();
|
||||||
@@ -53,7 +54,7 @@ export default function CollectionHeader({ dragHandleRef, dragHandleProps }: Col
|
|||||||
mergeClasses(
|
mergeClasses(
|
||||||
cls.toolbar,
|
cls.toolbar,
|
||||||
"CollectionView__toolbar",
|
"CollectionView__toolbar",
|
||||||
alwaysShowToolbars === true && cls.showToolbar
|
(alwaysShowToolbars === true || contextOpen) && cls.showToolbar
|
||||||
) }
|
) }
|
||||||
>
|
>
|
||||||
{ tabCount < 1 ?
|
{ tabCount < 1 ?
|
||||||
@@ -61,10 +62,10 @@ export default function CollectionHeader({ dragHandleRef, dragHandleProps }: Col
|
|||||||
{ isTab ? i18n.t("collections.menu.add_all") : i18n.t("collections.menu.add_selected") }
|
{ isTab ? i18n.t("collections.menu.add_all") : i18n.t("collections.menu.add_selected") }
|
||||||
</Button>
|
</Button>
|
||||||
:
|
:
|
||||||
<OpenCollectionButton />
|
<OpenCollectionButton onOpenChange={ (_, e) => setContextOpen(e.open) } />
|
||||||
}
|
}
|
||||||
|
|
||||||
<CollectionMoreButton onAddSelected={ handleAddSelected } />
|
<CollectionMoreButton onAddSelected={ handleAddSelected } onOpenChange={ (_, e) => setContextOpen(e.open) } />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
import { useDialog } from "@/contexts/DialogProvider";
|
import { useDialog } from "@/contexts/DialogProvider";
|
||||||
import { useDangerStyles } from "@/hooks/useDangerStyles";
|
import { useDangerStyles } from "@/hooks/useDangerStyles";
|
||||||
import useSettings from "@/hooks/useSettings";
|
import useSettings from "@/hooks/useSettings";
|
||||||
import { Button, Menu, MenuDivider, MenuItem, MenuList, MenuPopover, MenuTrigger, Tooltip } from "@fluentui/react-components";
|
import { Button, Menu, MenuDivider, MenuItem, MenuList, MenuOpenChangeData, MenuOpenEvent, MenuPopover, MenuTrigger, Tooltip } from "@fluentui/react-components";
|
||||||
import * as ic from "@fluentui/react-icons";
|
import * as ic from "@fluentui/react-icons";
|
||||||
import CollectionContext, { CollectionContextType } from "../../contexts/CollectionContext";
|
import CollectionContext, { CollectionContextType } from "../../contexts/CollectionContext";
|
||||||
import { useCollections } from "../../contexts/CollectionsProvider";
|
import { useCollections } from "../../contexts/CollectionsProvider";
|
||||||
import exportCollectionToBookmarks from "../../utils/exportCollectionToBookmarks";
|
import exportCollectionToBookmarks from "../../utils/exportCollectionToBookmarks";
|
||||||
import EditDialog from "../EditDialog";
|
import EditDialog from "../EditDialog";
|
||||||
|
|
||||||
export default function CollectionMoreButton({ onAddSelected }: CollectionMoreButtonProps): React.ReactElement
|
export default function CollectionMoreButton({ onAddSelected, onOpenChange }: CollectionMoreButtonProps): React.ReactElement
|
||||||
{
|
{
|
||||||
const [listLocation] = useSettings("listLocation");
|
const [listLocation] = useSettings("listLocation");
|
||||||
const isTab: boolean = listLocation === "tab" || listLocation === "pinned";
|
const isTab: boolean = listLocation === "tab" || listLocation === "pinned";
|
||||||
@@ -56,7 +56,7 @@ export default function CollectionMoreButton({ onAddSelected }: CollectionMoreBu
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Menu>
|
<Menu onOpenChange={ onOpenChange }>
|
||||||
<Tooltip relationship="label" content={ i18n.t("common.tooltips.more") }>
|
<Tooltip relationship="label" content={ i18n.t("common.tooltips.more") }>
|
||||||
<MenuTrigger>
|
<MenuTrigger>
|
||||||
<Button appearance="subtle" icon={ <ic.MoreVertical20Regular /> } />
|
<Button appearance="subtle" icon={ <ic.MoreVertical20Regular /> } />
|
||||||
@@ -94,4 +94,5 @@ export default function CollectionMoreButton({ onAddSelected }: CollectionMoreBu
|
|||||||
export type CollectionMoreButtonProps =
|
export type CollectionMoreButtonProps =
|
||||||
{
|
{
|
||||||
onAddSelected?: () => void;
|
onAddSelected?: () => void;
|
||||||
|
onOpenChange?: (e: MenuOpenEvent, data: MenuOpenChangeData) => void;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import { useDialog } from "@/contexts/DialogProvider";
|
import { useDialog } from "@/contexts/DialogProvider";
|
||||||
import useSettings from "@/hooks/useSettings";
|
import useSettings from "@/hooks/useSettings";
|
||||||
import browserLocaleKey from "@/utils/browserLocaleKey";
|
import browserLocaleKey from "@/utils/browserLocaleKey";
|
||||||
import { Menu, MenuButtonProps, MenuItem, MenuList, MenuPopover, MenuTrigger, SplitButton } from "@fluentui/react-components";
|
import { Menu, MenuButtonProps, MenuItem, MenuList, MenuOpenChangeData, MenuOpenEvent, MenuPopover, MenuTrigger, SplitButton } from "@fluentui/react-components";
|
||||||
import * as ic from "@fluentui/react-icons";
|
import * as ic from "@fluentui/react-icons";
|
||||||
import CollectionContext, { CollectionContextType } from "../../contexts/CollectionContext";
|
import CollectionContext, { CollectionContextType } from "../../contexts/CollectionContext";
|
||||||
import { useCollections } from "../../contexts/CollectionsProvider";
|
import { useCollections } from "../../contexts/CollectionsProvider";
|
||||||
import { openCollection } from "../../utils/opener";
|
import { openCollection } from "../../utils/opener";
|
||||||
|
|
||||||
export default function OpenCollectionButton(): React.ReactElement
|
export default function OpenCollectionButton({ onOpenChange }: OpenCollectionButtonProps): React.ReactElement
|
||||||
{
|
{
|
||||||
const [defaultAction] = useSettings("defaultRestoreAction");
|
const [defaultAction] = useSettings("defaultRestoreAction");
|
||||||
const { removeItem } = useCollections();
|
const { removeItem } = useCollections();
|
||||||
@@ -54,7 +54,7 @@ export default function OpenCollectionButton(): React.ReactElement
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Menu>
|
<Menu onOpenChange={ onOpenChange }>
|
||||||
<MenuTrigger disableButtonEnhancement>
|
<MenuTrigger disableButtonEnhancement>
|
||||||
{ (triggerProps: MenuButtonProps) => defaultAction === "restore" ?
|
{ (triggerProps: MenuButtonProps) => defaultAction === "restore" ?
|
||||||
<SplitButton
|
<SplitButton
|
||||||
@@ -95,3 +95,8 @@ export default function OpenCollectionButton(): React.ReactElement
|
|||||||
</Menu>
|
</Menu>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type OpenCollectionButtonProps =
|
||||||
|
{
|
||||||
|
onOpenChange?: (e: MenuOpenEvent, data: MenuOpenChangeData) => void;
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user