Skip to content

Focus a Searchbar in a Menu component hides the modal in expo-web #4606

@abelbordonado

Description

@abelbordonado

Current behaviour

I have a search bar into a menu tag, clicking on it makes the full menu modal disappear.
This is an issue happening on 5.13.1.

On the version5.12.5 we had a similar issue where the dismiss of the modal was fired after clicking on the SearchBar, but we had added a flag to check if the search bar was focused or not and that made the job.

Expected behavior

Clicking on the search bar shall not fire onBlur and not hide the modal at all

How to reproduce?

This is the relevant part of the code, not the full file

  const [showCountryPicker, setShowCountryPicker] = useState(false)
  const [isSearchFocused, setIsSearchFocused] = useState(false)
  console.log('showCountryPicker', showCountryPicker)
  return (
    <Menu
              visible={showCountryPicker}
              anchorPosition={'bottom'}
              style={{
                flex: 1,
                // width: windowWidth - 2 * theme.spacing(4),
              }}
              onDismiss={() => {
                console.log('dismiss', { isSearchFocused, showCountryPicker })

                // Only dismiss if search isn't focused
                if (!isSearchFocused) {
                  setShowCountryPicker(false)
                }
              }}
              anchor={
                <TextInput
                  disabled={disabled}
                  style={{ top: -2 }}
                  value={value}
                  autoComplete="tel-country-code"
                  editable={false}
                  onTouchStart={
                    !disabled
                      ? () => {
                          console.log('touchStart')
                          setShowCountryPicker(true)
                        }
                      : undefined
                  }
                  right={
                    <TextInput.Icon
                      icon={showCountryPicker ? 'menu-up' : 'menu-down'}
                      disabled={disabled}
                      onPress={() => {
                        console.log('onPress')
                        setShowCountryPicker(!showCountryPicker)
                      }}
                    />
                  }
                  dense
                  mode="outlined"
                />
              }>
              <Searchbar
                placeholder={t('country-code-placeholder')}
                onChangeText={setSearchQuery}
                value={searchQuery}
                  console.log('onBlur')
                  setIsSearchFocused(false)
                }}
                onFocus={() => {
                  console.log('onFocus')
                  setIsSearchFocused(true)
                }}
              />
            


            </Menu>
)

Preview

What have you tried so far?

Trying to prevent the events on blur.

Your Environment

I can reproduce this in my local machine and in the staging server

software version
react-native-web ~0.19.13
react-native 0.73.6
react-native-paper 5.13.1
node v21.6.2
pnpm 8.11.0
expo sdk ~50.0.21

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions