Skip to content

Commit b836756

Browse files
Merge pull request #156 from StackOverflowIsBetterThanAnyAI/150-only-focus-search-bar-if-filter-was-cleared-by-keyboard-input
only focus search bar if last input was by keyboard
2 parents 217d025 + d867bce commit b836756

File tree

4 files changed

+27
-9
lines changed

4 files changed

+27
-9
lines changed

src/components/UI/ButtonIcon.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ type ButtonIconProps = {
66
ariaPressed?: boolean
77
buttonIconRef?: RefObject<HTMLButtonElement>
88
onClick: () => void
9+
onKeyDown?: React.KeyboardEventHandler<HTMLButtonElement>
910
place: 'center' | 'left'
1011
secondary?: boolean
1112
title?: string
@@ -17,6 +18,7 @@ const ButtonIcon: FC<ButtonIconProps> = ({
1718
ariaPressed,
1819
buttonIconRef,
1920
onClick,
21+
onKeyDown,
2022
place,
2123
secondary = false,
2224
title,
@@ -99,6 +101,7 @@ const ButtonIcon: FC<ButtonIconProps> = ({
99101
type === 'Search' ? 'navigation' : ''
100102
}`}
101103
onClick={onClick}
104+
onKeyDown={onKeyDown || undefined}
102105
title={title || type}
103106
aria-label={ariaLabel}
104107
aria-pressed={ariaPressed}

src/components/streamFeed/StreamClearFilter.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
import ButtonIcon from '../UI/ButtonIcon'
22

33
type StreamClearFilterProps = {
4-
removeFilter: () => void
4+
onClick: () => void
5+
onKeyDown: React.KeyboardEventHandler<HTMLButtonElement>
56
}
67

7-
const StreamClearFilter = ({ removeFilter }: StreamClearFilterProps) => {
8+
const StreamClearFilter = ({ onClick, onKeyDown }: StreamClearFilterProps) => {
89
return (
910
<>
10-
<div className="flex items-center px-4 pt-1">
11+
<div className="flex items-center mx-0 lg:mx-4 py-2 border-b-2 border-slate-300/25">
1112
<h2 className="text-lg lg:text-xl text-slate-300 pr-2">
1213
Clear filter:
1314
</h2>
1415
<ButtonIcon
1516
ariaLabel="Remove filter."
16-
onClick={removeFilter}
17+
onClick={onClick}
18+
onKeyDown={onKeyDown}
1719
place="left"
1820
secondary
1921
type="Remove"

src/components/streamFeed/StreamFeed.tsx

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,17 @@ const StreamFeed = () => {
105105
const [prevLanguage, setPrevLanguage] = useState(language)
106106

107107
const removeFilter = () => {
108+
setSEOSearchText('')
109+
setSearchText('')
110+
setFilteredStreamData(streamData)
111+
setInputFocussed(false)
112+
}
113+
114+
const removeFilterFocus = (e: React.KeyboardEvent<HTMLButtonElement>) => {
115+
if (!['Enter', ' '].includes(e.key)) {
116+
return
117+
}
118+
e.preventDefault()
108119
setSEOSearchText('')
109120
setSearchText('')
110121
setFilteredStreamData(streamData)
@@ -192,7 +203,7 @@ const StreamFeed = () => {
192203
{filteredStreamData.data.length === 1 ? (
193204
<>
194205
<h2
195-
className="px-4 pt-2 text-xl lg:text-2xl"
206+
className="px-0 lg:px-4 pt-2 text-xl lg:text-2xl"
196207
data-testid="streamfeed-heading-2"
197208
>
198209
<span className="text-purple-400">
@@ -205,7 +216,8 @@ const StreamFeed = () => {
205216
</h2>
206217
{seoSearchText && (
207218
<StreamClearFilter
208-
removeFilter={removeFilter}
219+
onClick={removeFilter}
220+
onKeyDown={removeFilterFocus}
209221
/>
210222
)}
211223
<StreamHero
@@ -216,7 +228,7 @@ const StreamFeed = () => {
216228
) : (
217229
<>
218230
<h2
219-
className="px-4 pt-2 text-xl lg:text-2xl"
231+
className="px-0 lg:px-4 pt-2 text-xl lg:text-2xl"
220232
data-testid="streamfeed-heading-2"
221233
>
222234
<span className="text-purple-400">
@@ -233,7 +245,8 @@ const StreamFeed = () => {
233245
</h2>
234246
{seoSearchText && (
235247
<StreamClearFilter
236-
removeFilter={removeFilter}
248+
onClick={removeFilter}
249+
onKeyDown={removeFilterFocus}
237250
/>
238251
)}
239252
</>

src/hooks/useFocusTrap.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export const useFocusTrap = (
1616

1717
const focusableStreamButtons: HTMLButtonElement[] = Array.from(
1818
document.querySelectorAll(
19-
'button.streamfeed, .navigation, .footer'
19+
'button.streamfeed, .navigation, .footer, .remove-button'
2020
)
2121
)
2222

0 commit comments

Comments
 (0)