diff --git a/src/renderer/components/layout/MoreMenu.tsx b/src/renderer/components/layout/MoreMenu.tsx index 5069b98c..bc7ac872 100644 --- a/src/renderer/components/layout/MoreMenu.tsx +++ b/src/renderer/components/layout/MoreMenu.tsx @@ -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, })) ); diff --git a/src/renderer/components/team/kanban/KanbanFilterPopover.tsx b/src/renderer/components/team/kanban/KanbanFilterPopover.tsx index 765baf7d..d8a393df 100644 --- a/src/renderer/components/team/kanban/KanbanFilterPopover.tsx +++ b/src/renderer/components/team/kanban/KanbanFilterPopover.tsx @@ -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 ( - + @@ -104,111 +105,113 @@ export const KanbanFilterPopover = ({ {t('kanban.filter.title')} - - {/* Session section */} -
-

- {t('kanban.filter.session')} -

-
- - {sessions.map((session) => { - const isLead = session.id === leadSessionId; - const isSelected = filter.sessionId === session.id; - const label = formatSessionLabel(session.firstMessage) || session.id.slice(0, 8); - return ( - + {sessions.map((session) => { + const isLead = session.id === leadSessionId; + const isSelected = filter.sessionId === session.id; + const label = formatSessionLabel(session.firstMessage) || session.id.slice(0, 8); + return ( + + ); + })} +
+
+ + {/* Teammate section */} +
+

+ {t('kanban.filter.teammate')} +

+
+ {members.map((member) => ( +
-
- - {/* Teammate section */} -
-

- {t('kanban.filter.teammate')} -

-
- {members.map((member) => ( - + ))} + {/* eslint-disable-next-line jsx-a11y/label-has-associated-control -- Radix Checkbox renders a button, not a native input */} + - ))} - {/* eslint-disable-next-line jsx-a11y/label-has-associated-control -- Radix Checkbox renders a button, not a native input */} - +
- - {/* Column section */} -
-

- {t('kanban.filter.column')} -

-
- {KANBAN_COLUMNS.map((col) => ( - - ))} + {/* Column section */} +
+

+ {t('kanban.filter.column')} +

+
+ {KANBAN_COLUMNS.map((col) => ( + + ))} +
-
- {/* Footer */} -
- -
- + {/* Footer */} +
+ +
+ + ) : null} ); }; diff --git a/src/renderer/components/team/kanban/KanbanSortPopover.tsx b/src/renderer/components/team/kanban/KanbanSortPopover.tsx index 2178a90e..f6a2f7ca 100644 --- a/src/renderer/components/team/kanban/KanbanSortPopover.tsx +++ b/src/renderer/components/team/kanban/KanbanSortPopover.tsx @@ -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 ( - + @@ -77,66 +80,68 @@ export const KanbanSortPopover = ({ {t('kanban.sort.title')} - -
-

- {t('kanban.sort.sortBy')} -

-
- {SORT_OPTIONS.map((option) => { - const isSelected = sort.field === option.field; - return ( - - ); - })} + {isSelected && ( + + )} + + ); + })} +
-
- {isNonDefault && ( -
- -
- )} -
+ {isNonDefault && ( +
+ +
+ )} + + ) : null}
); }; diff --git a/src/renderer/components/team/kanban/KanbanTaskCard.tsx b/src/renderer/components/team/kanban/KanbanTaskCard.tsx index c2084c37..d3d03fcb 100644 --- a/src/renderer/components/team/kanban/KanbanTaskCard.tsx +++ b/src/renderer/components/team/kanban/KanbanTaskCard.tsx @@ -206,32 +206,34 @@ const CancelTaskButton = ({ {t('kanban.taskCard.cancel')} - e.stopPropagation()} - > -

- {t('kanban.taskCard.moveBackToTodoConfirm')} -

-
- - -
-
+ {open ? ( + e.stopPropagation()} + > +

+ {t('kanban.taskCard.moveBackToTodoConfirm')} +

+
+ + +
+
+ ) : null}
); };