Commit Graph

314 Commits

Author SHA1 Message Date
Satyajit Sahoo
509ca49b64 refactor: move more header stuff to elements package 2021-02-04 15:07:22 +01:00
Satyajit Sahoo
07ba7a9687 feat: initial implementation of @react-navigation/elements 2021-01-29 20:11:23 +01:00
Satyajit Sahoo
c345ef1d0b fix: fix transparent modal on web 2021-01-29 17:45:56 +01:00
Petra Daneva
52dbe4bd66 feat: add pressColor and pressOpacity props to drawerItem (#8834)
Co-authored-by: Petra Daneva <p.daneva@dineout.bg>
Co-authored-by: Satyajit Sahoo <satyajit.happy@gmail.com>
2021-01-29 17:45:00 +01:00
Satyajit Sahoo
79a85a431c refactor: don't use absolute position for header
BREAKING CHANGE: We now use flexbox for header elements which could break some existing style code which relied on absolute positioning.
2021-01-15 12:06:59 +01:00
Satyajit Sahoo
22a8afac74 feat: don't hardcode header back test ID
BREAKING CHANGE: Now the back button test ID can be customized using headerBackTestID option
2021-01-15 11:35:29 +01:00
Satyajit Sahoo
4954d6aae3 fix: enable detachInactiveScreens by default on web for better a11y 2021-01-14 14:53:35 +01:00
Satyajit Sahoo
e86ce7bcb7 chore: update Reactiflux instructions 2021-01-14 12:45:53 +01:00
youngjuning
6c3cccf877 feat: export TransitionPreset for custom TransitionPresets (#9173) 2021-01-14 12:39:15 +01:00
Satyajit Sahoo
802db004ae chore: upgrade dependencies 2021-01-08 13:59:24 +01:00
Satyajit Sahoo
69d333f6c2 fix: fix initial metrics on server 2020-12-03 02:19:54 +01:00
Satyajit Sahoo
12b893d7ca fix: drop usage of Dimensions in favor of metrics from safe-area-context 2020-12-03 01:40:00 +01:00
Satyajit Sahoo
14ac256af3 fix: force dismiss keyboard if there was no gesture
closes #9078
2020-11-21 05:28:25 +01:00
Satyajit Sahoo
c85f2ff47a feat: add an option to specify default options for the navigator 2020-11-17 20:25:49 +01:00
Satyajit Sahoo
6f326cf0c5 feat: add a slide animation for modals on Android 2020-11-16 18:09:58 +01:00
Satyajit Sahoo
ddf27bf41a refactor: don't use deprecated APIs from react-native-safe-area-context
BREAKING CHANGE: We now require newer versions of safe area context library.
2020-11-13 08:06:14 +01:00
Jesse Katsumata
8773dcb80f chore: replace community maskedview (#9058)
replaced `@react-native-community/masked-view` with `@react-native-masked-view/masked-view` due to namespace change.
2020-11-12 06:21:11 +01:00
Satyajit Sahoo
21a11543bf fix: add missing helper types in descriptors 2020-11-12 03:54:41 +01:00
Satyajit Sahoo
4cad132c2c refactor: simplify props for stack and drawer headers
BREAKING CHANGE: Previously, the stack header accepted scene and previous scene which contained things such as descriptor, navigation prop, progress etc. The commit simplifies them to pass `route`, `navigation`, `options` and `progress` directly to the header. Similaryly, the `previous` argument now contains `options`, `route` and `progress`.
2020-11-12 02:47:51 +01:00
Satyajit Sahoo
8a63f193bf feat: use modal presentation style for modals on iOS by default 2020-11-12 01:39:42 +01:00
Satyajit Sahoo
0c55803b32 fix: drop support for headerMode='none'
BREAKING CHANGE: The header can be hidden with `headerShown: false` already. Using both `headerMode='none'` and `headerShown` together causes confusion. So it's time to drop the unnecessary `headerMode` prop.
2020-11-12 00:58:25 +01:00
Satyajit Sahoo
da35085f1e fix: make sure inactive screen don't increase scroll area on web 2020-11-10 18:21:36 +01:00
Satyajit Sahoo
8f0efc8db5 fix: don't hide child header automatically in stack 2020-11-07 14:39:23 +01:00
Satyajit Sahoo
ce7d20e336 fix: disable react-native-screens on iOS for older versions 2020-11-04 22:36:43 +01:00
marhaupe
1169ed0946 fix: android textinput gets blurred after navigating back
When navigating from ScreenA to ScreenB and then back to ScreenA,
react-navigation unconditionally calls `Keyboard.dismiss()`.
If the user is fast enough and taps on a `TextInput` after coming
back from ScreenB, the keyboard opens, just to be dismissed again.
This would also happen if some logic automatically focuses the
`TextInput` in ScreenA. This behaviour can be seen observed in
https://snack.expo.io/lTDZhVNhV.
2020-11-04 22:35:57 +01:00
Satyajit Sahoo
c326c106f9 feat: add a headerBackAccessibilityLabel option in stack
closes #9016
2020-11-03 06:22:51 +01:00
Satyajit Sahoo
45dbe5c40e feat: enable react-native-screens in Stack by default on iOS 2020-10-28 22:15:37 +01:00
Satyajit Sahoo
f51086edea feat: update helper types to have navigator specific methods 2020-10-23 18:12:36 +02:00
Wojciech Lewicki
7196889bf1 feat: add optional screens per navigator (#8805)
Changes done here will work properly with https://github.com/software-mansion/react-native-screens/pull/624 merged and released. The documentation of `screensEnabled` and `activeLimit` props should also be added. It also enabled `Screens` in iOS stack-navigator by default.

New things:
- `detachInactiveScreens` - prop for navigators with `react-native-screens` integration that can be set by user. It controls if the `react-native-screens` are used by the navigator.
- `detachPreviousScreen` - option that tells to keep the previous screen active. It can be set by user, defaults to `true` for normal mode and `false` for the last screen for mode = “modal”.

Co-authored-by: Satyajit Sahoo <satyajit.happy@gmail.com>
2020-10-23 17:59:26 +02:00
Satyajit Sahoo
7dc2f5832e feat: improve types for navigation state (#8980)
The commit improves the navigation state object to have more specific types.
e.g. The `routeNames` array will now have proper type instead of `string[]`
2020-10-23 17:06:31 +02:00
Satyajit Sahoo
960f0a5281 refactor: make sure height set on header container is focused header height 2020-10-23 03:32:40 +02:00
Satyajit Sahoo
da91cec941 fix: add missing check for parent header when calculating height 2020-10-23 02:37:36 +02:00
Satyajit Sahoo
38e17aae93 fix: don't set statusbar height on nested header by default 2020-10-23 02:27:50 +02:00
Satyajit Sahoo
0f60b4617f refactor: refactor HeaderSegment to function component 2020-10-23 02:17:04 +02:00
Listi
d6cac6713a fix: fix header buttons not pressable when headerTransparent=true & headerMode=float (#8804)
Motivation
--
Previously when using `headerMode="float"` with headerTransparent set to true, we cant press header buttons in Android. This PR fixes this. (resolves #8731 )
Been doing some debugging and found out that this is caused by `HeaderContainer` being set as `absolute`. Initially it didn't have width & height in Android when it's set to default, that's why we can't access the children.
So, the solution in this PR is to define the height by using headerHeight. But, since we can't access headerHeight from header, Im using local state for keeping up with the headerHeight. Or should I move the HeaderHeight provider out of StackContainer? I'm not sure, since I think it was intended to be kept inside the StackContainer

Test Plan
--
With this config, now the header button can be clicked. Tested in both platform
```typescript
  <Stack.Navigator
    headerMode="float"
    screenOptions={{
      headerTransparent: true
    }}
  >
     <Stack.Screen  
      name="Home Screen"
      component={Home}
      />
      <Stack.Screen  
      name="Details Screen"
      component={Details}
      />
  </Stack.Navigator>
```

Android:
-
![Kapture 2020-09-30 at 19 01 21](https://user-images.githubusercontent.com/24470609/94682575-5b0fe480-034f-11eb-880a-318643d4eb00.gif)

iOS:
--
<img width="300" src="https://user-images.githubusercontent.com/24470609/94682743-9a3e3580-034f-11eb-8e90-2d31748bde5c.gif" />
2020-10-23 01:52:34 +02:00
Satyajit Sahoo
8ee0dda155 fix: set needsOffscreenAlphaCompositing and update default android animation
closes #8696
2020-10-23 01:38:14 +02:00
David Pett
8585f97226 docs: fix comments for gestureResponseDistance (#8954)
gestureResponseDistance vertical and horizontal documentations were swapped
2020-10-21 13:12:54 +02:00
Satyajit Sahoo
2bb6603aa3 chore: upgrade depenendecies 2020-09-23 01:34:55 +02:00
Louis-Alban KIM
2d1da7ef2f fix: add aria-level to HeaderTitle 2020-09-02 16:21:20 +02:00
Satyajit Sahoo
cd031f0473 chore: upgrade depenendecies 2020-08-04 12:32:11 +02:00
Satyajit Sahoo
40e2dbaecf fix: fix TouchableItem opacity on press on iOS 2020-07-29 00:41:22 +02:00
Satyajit Sahoo
0b455afa95 refactor: use libs with limited platform support explicitly
Instead of adding stubs for specific platforms such as Web, Mac OS and Windows, the commit changes the logic to use libraries such as gesture handler and masked view only for the platforms they explictly support. This means that we don't need to manually add all new platforms that aren't supported by these libraries in order for React Navigation to run on those platforms.
2020-07-29 00:24:51 +02:00
Kai Guo
8468c46cab feat: add Windows and macOS support (#8570)
react-native-gesture-handler doesn't have Windows/macOS implementation yet, use the web version as stubs for now to enable navigation features for Windows and mac.

Close https://github.com/microsoft/react-native-windows/issues/3884
Close https://github.com/microsoft/react-native-windows/issues/4044
2020-07-28 23:51:41 +02:00
Martin Treurnicht
15f9b9573e feat: emit gesture navigation events from stack view (#8524)
Allows you to subscribe to gesture navigation events, we have a custom keyboard that we want to hide and show when gesture is being used to navigate (same as native keyboard)
2020-07-28 11:26:45 +02:00
Andrei Barabas
486c3defd2 feat: allow style overrides for HeaderBackButton (#8626) 2020-07-28 11:09:23 +02:00
Satyajit Sahoo
6925e92dc3 feat: add a beforeRemove event
A lot of times, we want to prompt before leaving a screen if we have unsaved changes. Currently, we need to handle multiple cases to prevent this:

- Disable swipe gestures
- Override the back button in header
- Override the hardware back button on Android

This PR adds a new event which is emitted before a screen gets removed, and the developer has a chance to ask the user before closing the screen.

Example:

```js
React.useEffect(
  () =>
    navigation.addListener('beforeRemove', (e) => {
      if (!hasUnsavedChanges) {
        return;
      }

      e.preventDefault();

      Alert.alert(
        'Discard changes?',
        'You have unsaved changes. Are you sure to discard them and leave the screen?',
        [
          { text: "Don't leave", style: 'cancel', onPress: () => {} },
          {
            text: 'Discard',
            style: 'destructive',
            onPress: () => navigation.dispatch(e.data.action),
          },
        ]
      );
    }),
  [navigation, hasUnsavedChanges]
);
```
2020-07-02 14:32:31 +02:00
Satyajit Sahoo
9ba2f84d18 test: add basic unit tests for all navigators 2020-06-30 16:14:52 +02:00
Satyajit Sahoo
fc95d7a256 fix: fix showing back button with headerMode=screen. fixes #8508 2020-06-25 11:42:19 +02:00
Satyajit Sahoo
f00091d7ab refactor: use ts-expect-errpr instead of ts-ignore 2020-06-24 20:07:32 +02:00
Satyajit Sahoo
a2d649faf1 feat: show back button in nested stack 2020-06-24 12:45:40 +02:00