Skip to content

Commit 63d38ac

Browse files
Merge #6822
2 parents 13ff8fd + 544ebd6 commit 63d38ac

File tree

10 files changed

+49
-28
lines changed

10 files changed

+49
-28
lines changed

stylesheets/components/NavSidebar.scss

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,15 @@
195195
}
196196
}
197197

198+
&:active {
199+
@include light-theme {
200+
background: $color-gray-20;
201+
}
202+
@include dark-theme {
203+
background: $color-gray-62;
204+
}
205+
}
206+
198207
&:focus {
199208
outline: none;
200209
@include keyboard-mode {

ts/components/CallsTab.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,10 +244,11 @@ export function CallsTab({
244244
}}
245245
portalToRoot
246246
>
247-
{({ openMenu, onKeyDown }) => {
247+
{({ onClick, onKeyDown, ref }) => {
248248
return (
249249
<NavSidebarActionButton
250-
onClick={openMenu}
250+
ref={ref}
251+
onClick={onClick}
251252
onKeyDown={onKeyDown}
252253
icon={<span className="CallsTab__MoreActionsIcon" />}
253254
label={i18n('icu:CallsTab__MoreActionsLabel')}

ts/components/ContextMenu.tsx

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export type ContextMenuOptionType<T> = Readonly<{
2525
}>;
2626

2727
type RenderButtonProps = Readonly<{
28-
openMenu: (ev: React.MouseEvent) => void;
28+
onClick: (ev: React.MouseEvent) => void;
2929
onKeyDown: (ev: KeyboardEvent) => void;
3030
isMenuShowing: boolean;
3131
ref: React.Ref<HTMLButtonElement> | null;
@@ -207,10 +207,15 @@ export function ContextMenu<T>({
207207
};
208208

209209
const handleClick = (ev: React.MouseEvent) => {
210-
closeCurrentOpenContextMenu?.();
211-
closeCurrentOpenContextMenu = () => setIsMenuShowing(false);
212-
virtualElement.current = generateVirtualElement(ev.clientX, ev.clientY);
213-
setIsMenuShowing(true);
210+
if (isMenuShowing && ev.type !== 'contextmenu') {
211+
setIsMenuShowing(false);
212+
closeCurrentOpenContextMenu = undefined;
213+
} else {
214+
closeCurrentOpenContextMenu?.();
215+
closeCurrentOpenContextMenu = () => setIsMenuShowing(false);
216+
virtualElement.current = generateVirtualElement(ev.clientX, ev.clientY);
217+
setIsMenuShowing(true);
218+
}
214219
ev.stopPropagation();
215220
ev.preventDefault();
216221
};
@@ -316,7 +321,7 @@ export function ContextMenu<T>({
316321
buttonNode = (
317322
<>
318323
{(children as (props: RenderButtonProps) => JSX.Element)({
319-
openMenu: onClick || handleClick,
324+
onClick: onClick || handleClick,
320325
onKeyDown: handleKeyDown,
321326
isMenuShowing,
322327
ref: setReferenceElement,

ts/components/LeftPane.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -671,10 +671,11 @@ export function LeftPane({
671671
}}
672672
portalToRoot
673673
>
674-
{({ openMenu, onKeyDown }) => {
674+
{({ onClick, onKeyDown, ref }) => {
675675
return (
676676
<NavSidebarActionButton
677-
onClick={openMenu}
677+
ref={ref}
678+
onClick={onClick}
678679
onKeyDown={onKeyDown}
679680
icon={<span className="module-left-pane__moreActionsIcon" />}
680681
label="More Actions"

ts/components/NavSidebar.tsx

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,23 @@ import {
1616
import { WidthBreakpoint, getNavSidebarWidthBreakpoint } from './_util';
1717
import type { UnreadStats } from '../util/countUnreadStats';
1818

19-
export function NavSidebarActionButton({
20-
icon,
21-
label,
22-
onClick,
23-
onKeyDown,
24-
}: {
19+
type NavSidebarActionButtonProps = {
2520
icon: ReactNode;
2621
label: ReactNode;
2722
onClick: MouseEventHandler<HTMLButtonElement>;
2823
onKeyDown?: KeyboardEventHandler<HTMLButtonElement>;
29-
}): JSX.Element {
24+
};
25+
26+
export const NavSidebarActionButton = React.forwardRef<
27+
HTMLButtonElement,
28+
NavSidebarActionButtonProps
29+
>(function NavSidebarActionButtonInner(
30+
{ icon, label, onClick, onKeyDown },
31+
ref
32+
): JSX.Element {
3033
return (
3134
<button
35+
ref={ref}
3236
type="button"
3337
className="NavSidebar__ActionButton"
3438
onClick={onClick}
@@ -38,7 +42,7 @@ export function NavSidebarActionButton({
3842
<span className="NavSidebar__ActionButtonLabel">{label}</span>
3943
</button>
4044
);
41-
}
45+
});
4246

4347
export type NavSidebarProps = Readonly<{
4448
actions?: ReactNode;

ts/components/NavTabs.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ export function NavTabs({
307307
}}
308308
portalToRoot
309309
>
310-
{({ openMenu, onKeyDown, ref }) => {
310+
{({ onClick, onKeyDown, ref }) => {
311311
return (
312312
<button
313313
type="button"
@@ -319,7 +319,7 @@ export function NavTabs({
319319
}}
320320
onClick={event => {
321321
if (hasPendingUpdate) {
322-
openMenu(event);
322+
onClick(event);
323323
} else {
324324
onShowSettings();
325325
}

ts/components/SendStoryModal.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -919,14 +919,14 @@ export function SendStoryModal({
919919
}}
920920
theme={theme === ThemeType.dark ? Theme.Dark : Theme.Light}
921921
>
922-
{({ openMenu, onKeyDown, ref, menuNode }) => (
922+
{({ onClick, onKeyDown, ref, menuNode }) => (
923923
<div>
924924
<Button
925925
ref={ref}
926926
className="SendStoryModal__new-story__button"
927927
variant={ButtonVariant.Secondary}
928928
size={ButtonSize.Small}
929-
onClick={openMenu}
929+
onClick={onClick}
930930
onKeyDown={onKeyDown}
931931
>
932932
{i18n('icu:SendStoryModal__new')}

ts/components/StoriesTab.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,10 +174,11 @@ export function StoriesTab({
174174
}}
175175
portalToRoot
176176
>
177-
{({ openMenu, onKeyDown }) => {
177+
{({ onClick, onKeyDown, ref }) => {
178178
return (
179179
<NavSidebarActionButton
180-
onClick={openMenu}
180+
ref={ref}
181+
onClick={onClick}
181182
onKeyDown={onKeyDown}
182183
icon={<span className="StoriesTab__MoreActionsIcon" />}
183184
label={i18n('icu:StoriesTab__MoreActionsLabel')}

ts/components/StoryViewsNRepliesModal.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -649,9 +649,9 @@ function ReplyOrReactionMessage({
649649

650650
return reply.author.isMe && !reply.deletedForEveryone ? (
651651
<ContextMenu i18n={i18n} key={reply.id} menuOptions={menuOptions}>
652-
{({ openMenu, menuNode }) => (
652+
{({ onClick, menuNode }) => (
653653
<>
654-
{renderContent(openMenu)}
654+
{renderContent(onClick)}
655655
{menuNode}
656656
</>
657657
)}

ts/components/conversation/conversation-details/ConversationDetails.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -539,12 +539,12 @@ export function ConversationDetails({
539539
},
540540
]}
541541
>
542-
{({ openMenu }) => {
542+
{({ onClick }) => {
543543
return (
544544
<button
545545
type="button"
546546
className="ConversationDetails--nickname-actions"
547-
onClick={openMenu}
547+
onClick={onClick}
548548
>
549549
<span className="ConversationDetails--nickname-actions-label">
550550
{i18n('icu:ConversationDetails--nickname-actions')}

0 commit comments

Comments
 (0)