Skip to content

Conversation

@m-bert
Copy link
Contributor

@m-bert m-bert commented May 10, 2024

Description

Currently our components (BaseButton, RectButton and BorderlessButton) don't support refs, so it is impossible to use methods like measure.

This PR adds wrapper to these components, so that they are now exported as ForwardRef.

Fixes #2894

Test plan

Tested on slightly modified code from issue
import React, { useRef } from 'react';
import { Text, StyleSheet } from 'react-native';

import {
  BaseButton,
  BorderlessButton,
  GestureHandlerRootView,
  RectButton,
} from 'react-native-gesture-handler';

export default function App() {
  const rectButtonRef = useRef(null);
  const borderlessButtonRef = useRef(null);
  const baseButtonRef = useRef(null);

  const handlePress = () => {
    try {
      baseButtonRef.current?.measure?.((x, y, width, height) => {
        console.log('baseButtonRef', x, y, width, height);
      });

      rectButtonRef.current?.measure?.((x, y) => {
        console.log('rectButtonRef', x, y);
      });

      borderlessButtonRef.current?.measure?.((x, y) => {
        console.log('borderlessButtonRef', x, y);
      });
    } catch (e) {
      console.error(e);
    }
  };

  return (
    <GestureHandlerRootView style={styles.container}>
      <RectButton onPress={handlePress} style={styles.button}>
        <Text style={styles.text}>Press me</Text>
      </RectButton>

      <BaseButton ref={baseButtonRef} style={styles.button}>
        <Text style={styles.text}>Test</Text>
      </BaseButton>
      <BorderlessButton ref={borderlessButtonRef} style={styles.button}>
        <Text style={styles.text}>Test</Text>
      </BorderlessButton>
      <RectButton ref={rectButtonRef} style={styles.button}>
        <Text style={styles.text}>Test</Text>
      </RectButton>
    </GestureHandlerRootView>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    gap: 20,
  },
  button: {
    justifyContent: 'center',
    alignItems: 'center',
    borderRadius: 5,
    backgroundColor: 'grey',
    paddingHorizontal: 20,
    paddingVertical: 10,
  },
  text: {
    color: 'white',
  },
});

@m-bert m-bert requested a review from j-piasecki May 10, 2024 10:20
@m-bert m-bert requested a review from j-piasecki May 14, 2024 07:54
@m-bert m-bert marked this pull request as ready for review May 15, 2024 09:23
Copy link
Member

@j-piasecki j-piasecki left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Assuming that this doesn't break types, it looks ok to me.

@m-bert m-bert merged commit 93533fd into main May 17, 2024
@m-bert m-bert deleted the @mbert/add-ref-to-buttons branch May 17, 2024 10:09
github-merge-queue bot referenced this pull request in valora-inc/wallet Jun 26, 2024
…5575)

[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[react-native-gesture-handler](https://togithub.com/software-mansion/react-native-gesture-handler)
| [`^2.16.2` ->
`^2.17.1`](https://renovatebot.com/diffs/npm/react-native-gesture-handler/2.16.2/2.17.1)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/react-native-gesture-handler/2.17.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-native-gesture-handler/2.17.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-native-gesture-handler/2.16.2/2.17.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-native-gesture-handler/2.16.2/2.17.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>software-mansion/react-native-gesture-handler
(react-native-gesture-handler)</summary>

###
[`v2.17.1`](https://togithub.com/software-mansion/react-native-gesture-handler/releases/tag/2.17.1)

[Compare
Source](https://togithub.com/software-mansion/react-native-gesture-handler/compare/2.17.0...2.17.1)

#### 🐛 Bug fixes

- Don't register `checkIntegrityBetweenArchitectures` task when
installed as a dependency by
[@&#8203;j-piasecki](https://togithub.com/j-piasecki) in
[#&#8203;2953](https://togithub.com/software-mansion/react-native-gesture-handler/issues/2953)

**Full Changelog**:
software-mansion/react-native-gesture-handler@2.17.0...2.17.1

###
[`v2.17.0`](https://togithub.com/software-mansion/react-native-gesture-handler/releases/tag/2.17.0)

[Compare
Source](https://togithub.com/software-mansion/react-native-gesture-handler/compare/2.16.2...2.17.0)

#### ❗ Important changes

- Add `ref` property to `Buttons` by
[@&#8203;m-bert](https://togithub.com/m-bert) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2903](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2903)
- Unify touch events callbacks on `web` with respect to `Android` by
[@&#8203;m-bert](https://togithub.com/m-bert) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2923](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2923)
- Add `touchType` to `TouchEvent` by
[@&#8203;latekvo](https://togithub.com/latekvo) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2941](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2941)

#### 👍 Improvements

- Refactor `GestureDetector` by
[@&#8203;j-piasecki](https://togithub.com/j-piasecki) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2901](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2901)
- Remove lodash by [@&#8203;m-bert](https://togithub.com/m-bert) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2916](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2916)
- `PointerTracker` refactor. by
[@&#8203;m-bert](https://togithub.com/m-bert) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2931](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2931)
- Change `offsetX` and `offsetY` calculations in `PointerEventManager`
by [@&#8203;m-bert](https://togithub.com/m-bert) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2938](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2938)

#### 🐛 Bug fixes

- Make `RootViewGestureHandler` handler cancel awaiting gestures by
[@&#8203;j-piasecki](https://togithub.com/j-piasecki) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2900](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2900)
- Get right bridge by
[@&#8203;piaskowyk](https://togithub.com/piaskowyk) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2886](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2886)
- Fix buttons getting stuck after scrolling on them by
[@&#8203;j-piasecki](https://togithub.com/j-piasecki) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2693](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2693)
- Fix Detector creating and attaching all gestures twice on first mount
by [@&#8203;j-piasecki](https://togithub.com/j-piasecki) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2914](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2914)
- Fix GestureDetector not working when its children change by
[@&#8203;j-piasecki](https://togithub.com/j-piasecki) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2921](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2921)
- Fix GestureDetector not working correctly with suspense and recycling
by [@&#8203;j-piasecki](https://togithub.com/j-piasecki) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2925](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2925)
- Fix nested buttons on the new architecture by
[@&#8203;j-piasecki](https://togithub.com/j-piasecki) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2926](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2926)
- Unify scaled coordinates between `web` and `native` side. by
[@&#8203;m-bert](https://togithub.com/m-bert) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2943](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2943)
- \[Web] Send relative coords in event. by
[@&#8203;m-bert](https://togithub.com/m-bert) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2944](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2944)

#### 🔢 Miscellaneous

- Add information about `GestureHandlerRootView` area and change
component name in quick start section in docs. by
[@&#8203;m-bert](https://togithub.com/m-bert) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2899](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2899)
- Add Hire us section to docs by
[@&#8203;patrycjakalinska](https://togithub.com/patrycjakalinska) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2904](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2904)
- Bump ejs from 3.1.7 to 3.1.10 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2888](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2888)
- Bump tar from 6.2.0 to 6.2.1 in /e2e/web-tests by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2859](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2859)
- docs: add
[@&#8203;swmansion/t-rex-ui](https://togithub.com/swmansion/t-rex-ui) by
[@&#8203;kacperkapusciak](https://togithub.com/kacperkapusciak) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2895](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2895)
- Change navbar and footer to a reusable component by
[@&#8203;patrycjakalinska](https://togithub.com/patrycjakalinska) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2902](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2902)
- Add dark mode to button in `Hire us` section by
[@&#8203;patrycjakalinska](https://togithub.com/patrycjakalinska) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2908](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2908)
- Setup example app to use Expo by
[@&#8203;bohdanprog](https://togithub.com/bohdanprog) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2905](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2905)
- Revert "docs: add
[@&#8203;swmansion/t-rex-ui](https://togithub.com/swmansion/t-rex-ui)"
by [@&#8203;kacperkapusciak](https://togithub.com/kacperkapusciak) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2909](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2909)
- Bump [@&#8203;sideway/formula](https://togithub.com/sideway/formula)
from 3.0.0 to 3.0.1 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2910](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2910)
- docs: add
[@&#8203;swmansion/t-rex-ui](https://togithub.com/swmansion/t-rex-ui) by
[@&#8203;patrycjakalinska](https://togithub.com/patrycjakalinska) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2911](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2911)
- Fix symlink loop during pods installation by
[@&#8203;j-piasecki](https://togithub.com/j-piasecki) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2917](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2917)
- Bump rexml from 3.2.6 to 3.2.8 in /FabricExample by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2915](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2915)
- Add animated header to the example app by
[@&#8203;j-piasecki](https://togithub.com/j-piasecki) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2913](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2913)
- Add option to auto-open last example in the example app by
[@&#8203;j-piasecki](https://togithub.com/j-piasecki) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2918](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2918)
- Replace current theme components with `@swmansion/t-rex-ui` by
[@&#8203;patrycjakalinska](https://togithub.com/patrycjakalinska) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2906](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2906)
- Bump rexml from 3.2.6 to 3.2.8 in /MacOSExample by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2924](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2924)
- Bump rexml from 3.2.6 to 3.2.8 in /example by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2930](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2930)
- feat: automatically copy codegen artifacts to paper by
[@&#8203;maciekstosio](https://togithub.com/maciekstosio) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2933](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2933)
- Add swipeable example rewritten to new API by
[@&#8203;latekvo](https://togithub.com/latekvo) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2934](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2934)
- Fix new swipeable using useMemo with incomplete dependency list by
[@&#8203;latekvo](https://togithub.com/latekvo) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2937](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2937)
- docs: update Hire us links to directly lead to contact form by
[@&#8203;kacperkapusciak](https://togithub.com/kacperkapusciak) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2935](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2935)
- chore(types): add missing pointerType to GestureTouchEvent by
[@&#8203;mgcrea](https://togithub.com/mgcrea) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2928](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2928)
- Bump braces from 3.0.2 to 3.0.3 in /example by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2945](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2945)
- Bump braces from 3.0.2 to 3.0.3 in /e2e/web-tests by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2946](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2946)
- Bump ws from 6.2.2 to 6.2.3 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2947](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2947)
- Bump ws from 6.2.2 to 6.2.3 in /e2e/web-tests by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2948](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2948)
- Add `relativeCoords` average to `PointerTracker` by
[@&#8203;m-bert](https://togithub.com/m-bert) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2939](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2939)
- Add missing import in docs by
[@&#8203;piaskowyk](https://togithub.com/piaskowyk) in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2950](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2950)

#### New Contributors

- [@&#8203;bohdanprog](https://togithub.com/bohdanprog) made their first
contribution in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2905](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2905)
- [@&#8203;maciekstosio](https://togithub.com/maciekstosio) made their
first contribution in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2933](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2933)
- [@&#8203;mgcrea](https://togithub.com/mgcrea) made their first
contribution in
[https://github.com/software-mansion/react-native-gesture-handler/pull/2928](https://togithub.com/software-mansion/react-native-gesture-handler/pull/2928)

**Full Changelog**:
software-mansion/react-native-gesture-handler@2.16.2...2.17.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 5pm,every weekend" in timezone
America/Los_Angeles, Automerge - "after 5pm,every weekend" in timezone
America/Los_Angeles.

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/valora-inc/wallet).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MTMuMiIsInVwZGF0ZWRJblZlciI6IjM3LjQxMy4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJucG0iLCJyZW5vdmF0ZSJdfQ==-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: valora-bot <[email protected]>
m-bert added a commit that referenced this pull request Mar 17, 2025
## Description

Currently `activeOpacity` property in `BorderlessButton` doesn't work. It seems like it was broken by #2903. In this PR, `AnimatedBaseButton` is created from `InnerBaseButton` instead of `BaseButton` (which is a wrapper), so that props are correctly passed into animated view.

Fixes #3426 

## Test plan

<details>
<summary>Tested on the following example:</summary>

```jsx
import React, { useEffect, useRef } from 'react';
import { StyleSheet } from 'react-native';
import {
  BorderlessButton,
  GestureHandlerRootView,
} from 'react-native-gesture-handler';

export default function EmptyExample() {
  const buttonRef = useRef(null);

  useEffect(() => {
    console.log(buttonRef);
  }, [buttonRef]);

  return (
    <GestureHandlerRootView style={styles.container}>
      <BorderlessButton
        activeOpacity={0.7}
        ref={buttonRef}
        style={{ width: 100, height: 25, backgroundColor: 'crimson' }}
      />
    </GestureHandlerRootView>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
});
```

</details>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

RectButton, BorderlessButton and BaseButton don't have support for View ref methods

4 participants