Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make useScrollviewOffset ref nullable and simplify its code #6009

Merged
merged 2 commits into from
May 14, 2024

Conversation

szydlovsky
Copy link
Contributor

Summary

#5942 needs useScrollViewOffset's ref to be nullable - hence the PR. I also checked and a lot of cleanup code in the hook was redundant.

Test plan

You can run the following code, it checks both switching between nullable and non-nullable ref, as well as two different scrolls: (add some logs in hook's registering/unregistering to see that cleanups work fine)

Code
import React from 'react';
import Animated, {
  useAnimatedRef,
  useDerivedValue,
  useScrollViewOffset,
} from 'react-native-reanimated';
import { Button, StyleSheet, Text, View } from 'react-native';

export default function EmptyExample() {
  const [refConnected, setRefConnected] = React.useState(false);
  const [refSwitched, setRefSwitched] = React.useState(false);
  const aref = useAnimatedRef<Animated.ScrollView>();
  const bref = useAnimatedRef<Animated.ScrollView>();
  const scrollHandler = useScrollViewOffset(
    refConnected ? (refSwitched ? bref : aref) : null
  );

  useDerivedValue(() => {
    console.log(scrollHandler.value);
  });

  const onButtonPress = () => {
    setRefConnected(!refConnected);
  };

  const onSwitchButtonPress = () => {
    setRefSwitched(!refSwitched);
  };

  return (
    <>
      <View style={styles.positionView}>
        <Text>Test</Text>
      </View>
      <View style={styles.divider} />
      <Button
        title={`${refConnected ? 'Disconnect' : 'Connect'} the hook`}
        onPress={onButtonPress}
      />
      <Button
        title={`Change ref to the ${refSwitched ? 'first' : 'second'} scroll`}
        onPress={onSwitchButtonPress}
      />
      <Animated.ScrollView
        ref={aref}
        style={[styles.scrollView, { backgroundColor: 'teal' }]}>
        {[...Array(100)].map((_, i) => (
          <Text key={i} style={styles.text}>
            {i}
          </Text>
        ))}
      </Animated.ScrollView>
      <Animated.ScrollView
        ref={bref}
        style={[styles.scrollView, { backgroundColor: 'pink' }]}>
        {[...Array(100)].map((_, i) => (
          <Text key={i} style={styles.text}>
            {i}
          </Text>
        ))}
      </Animated.ScrollView>
    </>
  );
}

const styles = StyleSheet.create({
  positionView: {
    margin: 20,
    alignItems: 'center',
  },
  scrollView: {
    flex: 1,
    width: '100%',
  },
  text: {
    fontSize: 50,
    textAlign: 'center',
  },
  divider: {
    backgroundColor: 'black',
    height: 1,
  },
});

@szydlovsky szydlovsky requested a review from tjzel May 13, 2024 10:18
Copy link
Collaborator

@tjzel tjzel left a comment

Choose a reason for hiding this comment

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

Please add a relevant typescript test case and we gucci 🙏

src/reanimated2/hook/useScrollViewOffset.ts Show resolved Hide resolved
@piaskowyk piaskowyk self-requested a review May 13, 2024 13:14
Copy link
Member

@piaskowyk piaskowyk left a comment

Choose a reason for hiding this comment

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

💪

@szydlovsky szydlovsky added this pull request to the merge queue May 14, 2024
Merged via the queue into main with commit 11006a9 May 14, 2024
7 checks passed
@szydlovsky szydlovsky deleted the @szydlovsky/useScrollViewOffset-nullable-ref branch May 14, 2024 09:27
renovate bot referenced this pull request in GSTJ/react-native-magic-modal Jun 3, 2024
[![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-reanimated](https://togithub.com/software-mansion/react-native-reanimated)
| [`~3.11.0` ->
`~3.12.0`](https://renovatebot.com/diffs/npm/react-native-reanimated/3.11.0/3.12.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/react-native-reanimated/3.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-native-reanimated/3.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-native-reanimated/3.11.0/3.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-native-reanimated/3.11.0/3.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

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

###
[`v3.12.0`](https://togithub.com/software-mansion/react-native-reanimated/releases/tag/3.12.0)

[Compare
Source](https://togithub.com/software-mansion/react-native-reanimated/compare/3.11.0...3.12.0)

#### What's Changed

- Give more meaningful warning when modifying a Shareable by
[@&#8203;tjzel](https://togithub.com/tjzel) in
[https://github.com/software-mansion/react-native-reanimated/pull/5548](https://togithub.com/software-mansion/react-native-reanimated/pull/5548)
- Make animated components use different tags for events by
[@&#8203;szydlovsky](https://togithub.com/szydlovsky) in
[https://github.com/software-mansion/react-native-reanimated/pull/5960](https://togithub.com/software-mansion/react-native-reanimated/pull/5960)
- Add `warning` and `failing` test decorators by
[@&#8203;Latropos](https://togithub.com/Latropos) in
[https://github.com/software-mansion/react-native-reanimated/pull/5929](https://togithub.com/software-mansion/react-native-reanimated/pull/5929)
- Update useAnimatedKeyboard docs by
[@&#8203;maciekstosio](https://togithub.com/maciekstosio) in
[https://github.com/software-mansion/react-native-reanimated/pull/5866](https://togithub.com/software-mansion/react-native-reanimated/pull/5866)
- Change the docs to mention, that `.springify()` works with
`.duration()` by [@&#8203;Latropos](https://togithub.com/Latropos) in
[https://github.com/software-mansion/react-native-reanimated/pull/5990](https://togithub.com/software-mansion/react-native-reanimated/pull/5990)
- \[Android]\[Keyboard] More consistent inequality check to compute
keyboard state by [@&#8203;antFrancon](https://togithub.com/antFrancon)
in
[https://github.com/software-mansion/react-native-reanimated/pull/5874](https://togithub.com/software-mansion/react-native-reanimated/pull/5874)
- fix typo on object key for `targetValues` in custom-animations.mdx by
[@&#8203;JDMathew](https://togithub.com/JDMathew) in
[https://github.com/software-mansion/react-native-reanimated/pull/5994](https://togithub.com/software-mansion/react-native-reanimated/pull/5994)
- Remove outdated code for unsupported React Native versions by
[@&#8203;tomekzaw](https://togithub.com/tomekzaw) in
[https://github.com/software-mansion/react-native-reanimated/pull/5979](https://togithub.com/software-mansion/react-native-reanimated/pull/5979)
- Remove REAInitializer by
[@&#8203;tomekzaw](https://togithub.com/tomekzaw) in
[https://github.com/software-mansion/react-native-reanimated/pull/5681](https://togithub.com/software-mansion/react-native-reanimated/pull/5681)
- Prevent crash on non-existent view updates in Android by
[@&#8203;thomas-rx](https://togithub.com/thomas-rx) in
[https://github.com/software-mansion/react-native-reanimated/pull/5767](https://togithub.com/software-mansion/react-native-reanimated/pull/5767)
- Fix location after shared element transition by
[@&#8203;piaskowyk](https://togithub.com/piaskowyk) in
[https://github.com/software-mansion/react-native-reanimated/pull/6010](https://togithub.com/software-mansion/react-native-reanimated/pull/6010)
- Make `useScrollviewOffset` ref nullable and simplify its code by
[@&#8203;szydlovsky](https://togithub.com/szydlovsky) in
[https://github.com/software-mansion/react-native-reanimated/pull/6009](https://togithub.com/software-mansion/react-native-reanimated/pull/6009)
- fix: use proper classes for bridgeless by
[@&#8203;WoLewicki](https://togithub.com/WoLewicki) in
[https://github.com/software-mansion/react-native-reanimated/pull/5997](https://togithub.com/software-mansion/react-native-reanimated/pull/5997)
- 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-reanimated/pull/6015](https://togithub.com/software-mansion/react-native-reanimated/pull/6015)
- Remove `CellRendererComponent` from Animated.FlatList props by
[@&#8203;Latropos](https://togithub.com/Latropos) in
[https://github.com/software-mansion/react-native-reanimated/pull/5951](https://togithub.com/software-mansion/react-native-reanimated/pull/5951)
- Add `useComposedEventHandler` hook by
[@&#8203;szydlovsky](https://togithub.com/szydlovsky) in
[https://github.com/software-mansion/react-native-reanimated/pull/5890](https://togithub.com/software-mansion/react-native-reanimated/pull/5890)
- Align handling colors with RN by
[@&#8203;maciekstosio](https://togithub.com/maciekstosio) in
[https://github.com/software-mansion/react-native-reanimated/pull/5825](https://togithub.com/software-mansion/react-native-reanimated/pull/5825)
- Add more tests - useSharedValue, useAnimatedStyle , useDerivedValue by
[@&#8203;Latropos](https://togithub.com/Latropos) in
[https://github.com/software-mansion/react-native-reanimated/pull/5981](https://togithub.com/software-mansion/react-native-reanimated/pull/5981)
- Make animation RollInLeft work with modifers by
[@&#8203;Latropos](https://togithub.com/Latropos) in
[https://github.com/software-mansion/react-native-reanimated/pull/6039](https://togithub.com/software-mansion/react-native-reanimated/pull/6039)
- Test predefined entering animation by
[@&#8203;Latropos](https://togithub.com/Latropos) in
[https://github.com/software-mansion/react-native-reanimated/pull/5995](https://togithub.com/software-mansion/react-native-reanimated/pull/5995)
- Tests: cancelAnimation, useFrameCallback, measure, withDecay by
[@&#8203;Latropos](https://togithub.com/Latropos) in
[https://github.com/software-mansion/react-native-reanimated/pull/6016](https://togithub.com/software-mansion/react-native-reanimated/pull/6016)
- docs: fix useAnimatedKeyboard page crash by
[@&#8203;patrycjakalinska](https://togithub.com/patrycjakalinska) in
[https://github.com/software-mansion/react-native-reanimated/pull/6056](https://togithub.com/software-mansion/react-native-reanimated/pull/6056)
- \[Web LA] Remove `existingTransform` by
[@&#8203;m-bert](https://togithub.com/m-bert) in
[https://github.com/software-mansion/react-native-reanimated/pull/6060](https://togithub.com/software-mansion/react-native-reanimated/pull/6060)

#### New Contributors

[@&#8203;antFrancon](https://togithub.com/antFrancon),
[@&#8203;JDMathew](https://togithub.com/JDMathew),
[@&#8203;thomas-rx](https://togithub.com/thomas-rx),
[@&#8203;exploIF](https://togithub.com/exploIF)

#### 🙌 Thank you for your contributions!

**Full Changelog**:
software-mansion/react-native-reanimated@3.11.0...3.12.0

Package build:
https://github.com/software-mansion/react-native-reanimated/actions/runs/9287839734

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, 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/GSTJ/react-native-magic-modal).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNzcuOCIsInVwZGF0ZWRJblZlciI6IjM3LjM3Ny44IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
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.

3 participants