Skip to content

Commit e801c20

Browse files
committed
feat: add support for auto apply filter in filter select picker
1 parent 096bd9a commit e801c20

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

src/Shared/Components/SelectPicker/FilterSelectPicker.tsx

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import { IS_PLATFORM_MAC_OS } from '@Common/Constants'
2323
import { SupportedKeyboardKeysType } from '@Common/Hooks/UseRegisterShortcut/types'
2424
import SelectPicker from './SelectPicker.component'
2525
import { FilterSelectPickerProps, SelectPickerOptionType, SelectPickerProps } from './type'
26-
import { Button } from '../Button'
26+
import { Button, ButtonProps, useTriggerAutoClickTimestamp } from '../Button'
2727

2828
const APPLY_FILTER_SHORTCUT_KEYS: SupportedKeyboardKeysType[] = [IS_PLATFORM_MAC_OS ? 'Meta' : 'Control', 'Enter']
2929

@@ -34,6 +34,8 @@ const FilterSelectPicker = ({
3434
...props
3535
}: FilterSelectPickerProps) => {
3636
const [isMenuOpen, setIsMenuOpen] = useState(false)
37+
const { triggerAutoClickTimestamp, setTriggerAutoClickTimestampToNow, resetTriggerAutoClickTimestamp } =
38+
useTriggerAutoClickTimestamp()
3739

3840
const [selectedOptions, setSelectedOptions] = useState<SelectPickerOptionType[]>(
3941
structuredClone(appliedFilterOptions ?? []),
@@ -57,10 +59,12 @@ const FilterSelectPicker = ({
5759
}
5860

5961
const closeMenu = () => {
62+
resetTriggerAutoClickTimestamp()
6063
setIsMenuOpen(false)
6164
}
6265

6366
const handleSelectOnChange: SelectPickerProps<number | string, true>['onChange'] = (selectedOptionsToUpdate) => {
67+
setTriggerAutoClickTimestampToNow()
6468
setSelectedOptions(structuredClone(selectedOptionsToUpdate) as SelectPickerOptionType[])
6569
}
6670

@@ -69,9 +73,15 @@ const FilterSelectPicker = ({
6973
setSelectedOptions(structuredClone(appliedFilterOptions ?? []))
7074
}
7175

72-
const handleApplyClick = () => {
76+
const handleApplyClick: ButtonProps['onClick'] = (e) => {
7377
handleApplyFilter(selectedOptions)
74-
closeMenu()
78+
resetTriggerAutoClickTimestamp()
79+
80+
// If true, depicts the click event is triggered by the user
81+
// Added !e to ensure it works for both click and keyboard shortcut event
82+
if (!e || e.isTrusted) {
83+
closeMenu()
84+
}
7585
}
7686

7787
const renderApplyButton = () => (
@@ -89,13 +99,14 @@ const FilterSelectPicker = ({
8999
combo: APPLY_FILTER_SHORTCUT_KEYS,
90100
},
91101
}}
102+
triggerAutoClickTimestamp={triggerAutoClickTimestamp}
92103
/>
93104
</div>
94105
)
95106

96107
useEffect(() => {
97108
if (isMenuOpen) {
98-
registerShortcut({ keys: APPLY_FILTER_SHORTCUT_KEYS, callback: handleApplyClick })
109+
registerShortcut({ keys: APPLY_FILTER_SHORTCUT_KEYS, callback: handleApplyClick as () => void })
99110
}
100111

101112
return () => {

0 commit comments

Comments
 (0)