@@ -43,6 +43,7 @@ import Badge from '../widgets/badges/badge';
43
43
import { ChangeEvent , trackDotMenuEvent } from './utils' ;
44
44
45
45
import './dot_menu.scss' ;
46
+ import { PostReminderSubmenu } from './post_reminder_submenu' ;
46
47
47
48
type ShortcutKeyProps = {
48
49
shortcutKey : string ;
@@ -75,6 +76,8 @@ type Props = {
75
76
teamUrl ?: string ; // TechDebt: Made non-mandatory while converting to typescript
76
77
isMobileView : boolean ;
77
78
showForwardPostNewLabel : boolean ;
79
+ timezone ?: string ;
80
+ isMilitaryTime : boolean ;
78
81
79
82
/**
80
83
* Components for overriding provided by plugins
@@ -203,7 +206,18 @@ export class DotMenuClass extends React.PureComponent<Props, State> {
203
206
this . disableCanEditPostByTime ( ) ;
204
207
}
205
208
209
+ componentDidUpdate ( prevProps : Props ) : void {
210
+ if ( ! prevProps . isMenuOpen && this . props . isMenuOpen ) {
211
+ window . addEventListener ( 'keydown' , this . onShortcutKeyDown ) ;
212
+ }
213
+
214
+ if ( prevProps . isMenuOpen && ! this . props . isMenuOpen ) {
215
+ window . removeEventListener ( 'keydown' , this . onShortcutKeyDown ) ;
216
+ }
217
+ }
218
+
206
219
componentWillUnmount ( ) : void {
220
+ window . removeEventListener ( 'keydown' , this . onShortcutKeyDown ) ;
207
221
this . editDisableAction . cancel ( ) ;
208
222
}
209
223
@@ -338,11 +352,11 @@ export class DotMenuClass extends React.PureComponent<Props, State> {
338
352
this . props . handleCommentClick ?.( e ) ;
339
353
}
340
354
341
- isKeyboardEvent = ( e : React . KeyboardEvent ) : any => {
355
+ isKeyboardEvent = ( e : KeyboardEvent ) : any => {
342
356
return ( e ) . getModifierState !== undefined ;
343
357
}
344
358
345
- onShortcutKeyDown = ( e : React . KeyboardEvent ) : void => {
359
+ onShortcutKeyDown = ( e : KeyboardEvent ) : void => {
346
360
e . preventDefault ( ) ;
347
361
if ( ! this . isKeyboardEvent ( e ) ) {
348
362
return ;
@@ -556,7 +570,6 @@ export class DotMenuClass extends React.PureComponent<Props, State> {
556
570
leadingElement = { < ReplyOutlineIcon size = { 18 } /> }
557
571
trailingElements = { < ShortcutKey shortcutKey = 'R' /> }
558
572
onClick = { this . handleCommentClick }
559
- onKeyDown = { this . onShortcutKeyDown }
560
573
/>
561
574
}
562
575
{ this . canPostBeForwarded &&
@@ -566,7 +579,6 @@ export class DotMenuClass extends React.PureComponent<Props, State> {
566
579
leadingElement = { < ArrowRightBoldOutlineIcon size = { 18 } /> }
567
580
trailingElements = { < ShortcutKey shortcutKey = 'Shift + F' /> }
568
581
onClick = { this . handleForwardMenuItemActivated }
569
- onKeyDown = { this . onShortcutKeyDown }
570
582
/>
571
583
}
572
584
< ChannelPermissionGate
@@ -585,7 +597,6 @@ export class DotMenuClass extends React.PureComponent<Props, State> {
585
597
}
586
598
leadingElement = { < EmoticonPlusOutlineIcon size = { 18 } /> }
587
599
onClick = { this . handleAddReactionMenuItemActivated }
588
- onKeyDown = { this . onShortcutKeyDown }
589
600
/>
590
601
}
591
602
</ ChannelPermissionGate >
@@ -604,7 +615,6 @@ export class DotMenuClass extends React.PureComponent<Props, State> {
604
615
labels = { followPostLabel ( ) }
605
616
leadingElement = { isFollowingThread ? < MessageMinusOutlineIcon size = { 18 } /> : < MessageCheckOutlineIcon size = { 18 } /> }
606
617
onClick = { this . handleSetThreadFollow }
607
- onKeyDown = { this . onShortcutKeyDown }
608
618
/>
609
619
}
610
620
{ Boolean ( ! isSystemMessage && ! this . props . channelIsArchived && this . props . location !== Locations . SEARCH ) &&
@@ -619,7 +629,14 @@ export class DotMenuClass extends React.PureComponent<Props, State> {
619
629
leadingElement = { < MarkAsUnreadIcon size = { 18 } /> }
620
630
trailingElements = { < ShortcutKey shortcutKey = 'U' /> }
621
631
onClick = { this . handleMarkPostAsUnread }
622
- onKeyDown = { this . onShortcutKeyDown }
632
+ />
633
+ }
634
+ { ! isSystemMessage &&
635
+ < PostReminderSubmenu
636
+ userId = { this . props . userId }
637
+ post = { this . props . post }
638
+ isMilitaryTime = { this . props . isMilitaryTime }
639
+ timezone = { this . props . timezone }
623
640
/>
624
641
}
625
642
{ ! isSystemMessage &&
@@ -629,7 +646,6 @@ export class DotMenuClass extends React.PureComponent<Props, State> {
629
646
leadingElement = { this . props . isFlagged ? < BookmarkIcon size = { 18 } /> : < BookmarkOutlineIcon size = { 18 } /> }
630
647
trailingElements = { < ShortcutKey shortcutKey = 'S' /> }
631
648
onClick = { this . handleFlagMenuItemActivated }
632
- onKeyDown = { this . onShortcutKeyDown }
633
649
/>
634
650
}
635
651
{ Boolean ( ! isSystemMessage && ! this . props . isReadOnly ) &&
@@ -639,7 +655,6 @@ export class DotMenuClass extends React.PureComponent<Props, State> {
639
655
leadingElement = { this . props . post . is_pinned ? < PinIcon size = { 18 } /> : < PinOutlineIcon size = { 18 } /> }
640
656
trailingElements = { < ShortcutKey shortcutKey = 'P' /> }
641
657
onClick = { this . handlePinMenuItemActivated }
642
- onKeyDown = { this . onShortcutKeyDown }
643
658
/>
644
659
}
645
660
{ ! isSystemMessage && ( this . state . canEdit || this . state . canDelete ) && < Menu . Separator /> }
@@ -654,7 +669,6 @@ export class DotMenuClass extends React.PureComponent<Props, State> {
654
669
leadingElement = { < LinkVariantIcon size = { 18 } /> }
655
670
trailingElements = { < ShortcutKey shortcutKey = 'K' /> }
656
671
onClick = { this . copyLink }
657
- onKeyDown = { this . onShortcutKeyDown }
658
672
/>
659
673
}
660
674
{ ! isSystemMessage && < Menu . Separator /> }
@@ -669,7 +683,6 @@ export class DotMenuClass extends React.PureComponent<Props, State> {
669
683
leadingElement = { < PencilOutlineIcon size = { 18 } /> }
670
684
trailingElements = { < ShortcutKey shortcutKey = 'E' /> }
671
685
onClick = { this . handleEditMenuItemActivated }
672
- onKeyDown = { this . onShortcutKeyDown }
673
686
/>
674
687
}
675
688
{ ! isSystemMessage &&
@@ -683,7 +696,6 @@ export class DotMenuClass extends React.PureComponent<Props, State> {
683
696
leadingElement = { < ContentCopyIcon size = { 18 } /> }
684
697
trailingElements = { < ShortcutKey shortcutKey = 'C' /> }
685
698
onClick = { this . copyText }
686
- onKeyDown = { this . onShortcutKeyDown }
687
699
/>
688
700
}
689
701
{ this . state . canDelete &&
@@ -698,7 +710,6 @@ export class DotMenuClass extends React.PureComponent<Props, State> {
698
710
/> }
699
711
onClick = { this . handleDeleteMenuItemActivated }
700
712
isDestructive = { true }
701
- onKeyDown = { this . onShortcutKeyDown }
702
713
/>
703
714
}
704
715
</ Menu . Container >
0 commit comments