perf(renderer): lazy mount closed menu controls

This commit is contained in:
777genius 2026-05-31 02:59:56 +03:00
parent f06a50f859
commit 808e5f73e4
4 changed files with 194 additions and 184 deletions

View file

@ -68,12 +68,12 @@ export const MoreMenu = ({
openTeamsTab,
} = useStore(
useShallow((s) => ({
openCommandPalette: () => s.openCommandPalette(),
openExtensionsTab: () => s.openExtensionsTab(),
openSessionReport: (tabId: string) => s.openSessionReport(tabId),
openSchedulesTab: () => s.openSchedulesTab(),
openSettingsTab: () => s.openSettingsTab(),
openTeamsTab: () => s.openTeamsTab(),
openCommandPalette: s.openCommandPalette,
openExtensionsTab: s.openExtensionsTab,
openSessionReport: s.openSessionReport,
openSchedulesTab: s.openSchedulesTab,
openSettingsTab: s.openSettingsTab,
openTeamsTab: s.openTeamsTab,
}))
);

View file

@ -1,4 +1,4 @@
import { useMemo } from 'react';
import { useMemo, useState } from 'react';
import { useAppTranslation } from '@features/localization/renderer';
import { Button } from '@renderer/components/ui/button';
@ -46,6 +46,7 @@ export const KanbanFilterPopover = ({
onFilterChange,
}: KanbanFilterPopoverProps): React.JSX.Element => {
const { t } = useAppTranslation('team');
const [open, setOpen] = useState(false);
const activeCount = useMemo(() => {
let count = 0;
if (filter.sessionId !== null) count += 1;
@ -83,7 +84,7 @@ export const KanbanFilterPopover = ({
};
return (
<Popover>
<Popover open={open} onOpenChange={setOpen}>
<Tooltip>
<TooltipTrigger asChild>
<PopoverTrigger asChild>
@ -104,6 +105,7 @@ export const KanbanFilterPopover = ({
</TooltipTrigger>
<TooltipContent side="bottom">{t('kanban.filter.title')}</TooltipContent>
</Tooltip>
{open ? (
<PopoverContent align="end" className="w-72 p-0">
{/* Session section */}
<div className="border-b border-[var(--color-border)] p-3">
@ -209,6 +211,7 @@ export const KanbanFilterPopover = ({
</Button>
</div>
</PopoverContent>
) : null}
</Popover>
);
};

View file

@ -1,3 +1,5 @@
import { useState } from 'react';
import { useAppTranslation } from '@features/localization/renderer';
import { Button } from '@renderer/components/ui/button';
import { Popover, PopoverContent, PopoverTrigger } from '@renderer/components/ui/popover';
@ -53,10 +55,11 @@ export const KanbanSortPopover = ({
onSortChange,
}: KanbanSortPopoverProps): React.JSX.Element => {
const { t } = useAppTranslation('team');
const [open, setOpen] = useState(false);
const isNonDefault = sort.field !== 'updatedAt';
return (
<Popover>
<Popover open={open} onOpenChange={setOpen}>
<Tooltip>
<TooltipTrigger asChild>
<PopoverTrigger asChild>
@ -77,6 +80,7 @@ export const KanbanSortPopover = ({
</TooltipTrigger>
<TooltipContent side="bottom">{t('kanban.sort.title')}</TooltipContent>
</Tooltip>
{open ? (
<PopoverContent align="end" className="w-56 p-0">
<div className="p-3">
<p className="mb-2 text-[11px] font-medium uppercase tracking-wider text-[var(--color-text-muted)]">
@ -137,6 +141,7 @@ export const KanbanSortPopover = ({
</div>
)}
</PopoverContent>
) : null}
</Popover>
);
};

View file

@ -206,6 +206,7 @@ const CancelTaskButton = ({
</TooltipTrigger>
<TooltipContent side="top">{t('kanban.taskCard.cancel')}</TooltipContent>
</Tooltip>
{open ? (
<PopoverContent
className="w-56 p-3"
side="top"
@ -232,6 +233,7 @@ const CancelTaskButton = ({
</Button>
</div>
</PopoverContent>
) : null}
</Popover>
);
};