Commit Graph

68 Commits

Author SHA1 Message Date
Satyajit Sahoo
67f6950c14 chore: upgrade dependencies 2021-06-05 07:33:26 +02:00
Satyajit Sahoo
b91c9b05ff chore: sort imports automatically 2021-05-26 21:29:11 +02:00
Satyajit Sahoo
15ede8112e refactor: align header options for native stack and regular stack 2021-05-22 00:04:29 +02:00
Satyajit Sahoo
3e67f64ea5 fix: set statusbar to translucent on Android 2021-05-21 12:09:25 +02:00
Satyajit Sahoo
82219524da chore: fix crash in example app on Android 2021-05-21 12:09:02 +02:00
Satyajit Sahoo
a4bf622b1a refactor: align native stack to JS stack 2021-05-19 23:42:53 +02:00
Satyajit Sahoo
d6f6f5f94d feat: initial implementation of a flipper plugin 2021-05-18 22:24:18 +02:00
Satyajit Sahoo
dc4ffc0171 fix: fix type error when passing unannotated navigation ref 2021-05-14 09:43:18 +02:00
Satyajit Sahoo
a369ba3645 fix: make sure disabling react-native-screens works 2021-05-09 06:43:48 +02:00
Satyajit Sahoo
4294318210 refactor: use react-native-screens for web as well 2021-05-09 06:43:09 +02:00
Satyajit Sahoo
b28bfddc17 feat: add ability to specify root param list 2021-05-09 04:33:56 +02:00
Satyajit Sahoo
60fa3b9be9 feat: support mixing regular and modal presentation in same stack 2021-05-08 07:04:25 +02:00
Satyajit Sahoo
0ecd112ec9 feat: add helper and hook for container ref 2021-05-01 23:51:10 +02:00
Satyajit Sahoo
83242a7bef refactor: tweak the types 2021-05-01 21:32:10 +02:00
Satyajit Sahoo
d85a4fd8ed chore: upgrade expo to SDK 41 2021-04-04 06:41:26 +02:00
Satyajit Sahoo
aacc1b525d refactor: move headerMode to options
BREAKING CHANGE: headerMode is now moved to options instead of props
2021-03-14 16:27:53 +01:00
Satyajit Sahoo
7ac59e6109 chore: fix crash due to asyncstorage on web 2021-03-05 02:38:01 +01:00
Satyajit Sahoo
0fc718b49d chore: upgrade @types/react-native 2021-02-21 23:39:54 +01:00
Satyajit Sahoo
6c5e196459 chore: wrap example list in SafeAreaView 2021-01-14 14:42:33 +01:00
Satyajit Sahoo
802db004ae chore: upgrade dependencies 2021-01-08 13:59:24 +01:00
Satyajit Sahoo
15e5678037 refactor: move drawerContentOptions to options
BREAKING CHANGE:  This commit moves options from `drawerContentOptions` to regular `options` in order to reduce confusion between the two, as well as to make it more flexible to configure the drawer on a per screen basis.
2020-11-19 03:57:48 +01:00
Satyajit Sahoo
852f2f0f19 chore: remove compat package 2020-11-17 20:36:06 +01:00
Satyajit Sahoo
6f326cf0c5 feat: add a slide animation for modals on Android 2020-11-16 18:09:58 +01:00
Satyajit Sahoo
7bc385e4f3 chore: show header in drawer by default 2020-11-09 19:36:36 +01:00
Satyajit Sahoo
dbe961ba5b feat: add option to show a header in drawer navigator screens
This commit adds new `header` and `headerShown` options in drawer navigator to be able to show a header, along with a bunch of header related options similar to stack navigator.

Historically, we have suggested to nest a stack navigator inside drawer navigator to render a header. While it works, it's not efficient to nest an entire navigator just for a header, considering it adds a lot of additional overhead from the code to handle animations, gestures etc. which won't ever be run in this case. It also increases the view hierarchy which has negative impacts on performance on Android, and could cause content not to render on older iOS devices.

Another issue with the approach is that since drawer navigator is at the root in this setup, it's possible to open drawer from every screen in the stack navigator, which usually isn't the expected behaviour. It's necessary to write additional code to disable the gesture to open drawer in all screens but first.

In addition, users also need to add a custom drawer icon to the header manually to be able to toggle the drawer

If drawer navigator could render its own header we'd avoid all these shortcomings as well as make the code simpler.

For now, I have implemented a new `Header` component in drawer since it's way simpler than stack navigator header. Though we may consider creating a shared UI package and add such components there which all our navigators could use.

The `Header` includes a button to toggle the drawer by default, and supports customization options such as showing custom left/right/title components. For this commit, I have kept `headerShown` to `false` by default coz I wasn't sure if it'd be a breaking change to start showing headers in drawers. Probably we can toggle it to `true` by default in next major.
2020-11-09 18:52:24 +01:00
Satyajit Sahoo
fdd549a536 chore: migrate example to community async-storage 2020-10-27 00:44:30 +01:00
Satyajit Sahoo
2bb6603aa3 chore: upgrade depenendecies 2020-09-23 01:34:55 +02:00
Satyajit Sahoo
cd031f0473 chore: upgrade depenendecies 2020-08-04 12:32:11 +02:00
Satyajit Sahoo
f4180295bf feat: add a getComponent prop to lazily specify components 2020-07-10 22:33:13 +02:00
Satyajit Sahoo
eea9860323 refactor: change format to formatter for documentTitle option 2020-07-10 13:07:47 +02:00
Satyajit Sahoo
13c9d1e281 feat: add a hook to update document title 2020-07-10 13:00:45 +02:00
Satyajit Sahoo
bce6c4fc3b chore: tweak types in the example 2020-07-02 16:52:45 +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
a021cfb8af feat: rework linking configuration to be more strict (#8502)
The PR changes a few things about linking configuration:

- Moves the configuration for screens to a screens property so that it's possible to specify other options like `initialRouteName` for the navigator at root
- The nesting in the configuration needs to strictly match the shape of the navigation tree, it can't just rely on URL's shape anymore
- If a screen is not specified in the configuration, it won't be parsed to/from the URL (this is essential to handle unmatched screens)
- Treat `path: ''` and no specified path in the same way, unless `exact` is specified
- Disallow specifying unmatched screen with old format
- Add support for `initialRouteName` at top level
- Automatically adapt old configuration to new format
2020-06-24 16:54:24 +02:00
Satyajit Sahoo
95b044ecf9 feat: add devtools package (#8436)
The `devtools` package extracts the redux devtools extension integration to a separate package. In future we can add more tools such as flipper integration to this package.

Usage:

```js
import * as React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { useReduxDevToolsExtension } from '@react-navigation/devtools';

export default function App() {
  const navigationRef = React.useRef();

  useReduxDevToolsExtension(navigationRef);

  return (
    <NavigationContainer ref={navigationRef}>{/* ... */}</NavigationContainer>
  );
}
```
2020-06-15 13:53:17 +02:00
Satyajit Sahoo
c3bd349d77 fix: make sure the wildcard pattern catches nested unmatched routes 2020-06-05 23:03:37 +02:00
Satyajit Sahoo
4fe72e3ce7 feat: add wildcard patterns for paths
Currently, if we don't have matching routes for a path, we'll reuse the path name for the route name. This doesn't produce an error, and renders the initial route in the navigator. However, the user doesn't have a way of handling this with the default configuration.

This PR adds support for a wildcard pattern ('*'). The wildcard pattern will be matched after all other patterns were matched and will always match unmatched screens. This allows the user to implement a 404 screen.

Example:

```js
{
  Home: '',
  Profile: 'user/:id',
  404: '*',
}
```

This config will return the `404` route for paths which didn't match `Home` or `Profile`, e.g. - `/test`

Closes #8019

Co-authored-by: Evan Bacon <baconbrix@gmail.com>
2020-06-05 17:13:00 +02:00
Satyajit Sahoo
52d5cb4179 chore: add an example for SSR (#8298)
<img width="740" alt="Screen Shot 2020-05-20 at 16 31 30" src="https://user-images.githubusercontent.com/1174278/82458770-673d8880-9ab7-11ea-81d3-8ac0c1e52705.png">
2020-05-26 16:07:47 +02:00
Satyajit Sahoo
6ccceaea8b chore: tweak linking config in the example 2020-05-15 18:48:03 +02:00
Satyajit Sahoo
039017bc2a feat: initialState should take priority over deep link 2020-05-10 08:28:48 +02:00
Satyajit Sahoo
1c075ffb16 fix: render fallback only if linking is enabled. closes #8161 2020-05-01 00:27:42 +02:00
Satyajit Sahoo
b4834ce703 chore: replace AsyncStorage with localStorage on web 2020-04-29 02:16:11 +02:00
Satyajit Sahoo
67404f4999 test: configure playwright for e2e tests 2020-04-27 17:45:20 +02:00
satyajit.happy
2573b5beaa feat: add Link component as useLinkTo hook for navigating to links
The `Link` component can be used to navigate to URLs. On web, it'll use an `a` tag for proper accessibility. On React Native, it'll use a `Text`.

Example:

```js
<Link to="/feed/hot">Go to 🔥</Link>
```

Sometimes we might want more complex styling and more control over the behaviour, or navigate to a URL programmatically. The `useLinkTo` hook can be used for that.

Example:

```js
function LinkButton({ to, ...rest }) {
  const linkTo = useLinkTo();

  return (
    <Button
      {...rest}
      href={to}
      onPress={(e) => {
        e.preventDefault();
        linkTo(to);
      }}
    />
  );
}
```
2020-04-27 17:45:20 +02:00
Satyajit Sahoo
c9c825bee6 fix: add config to enable redux devtools integration 2020-04-25 21:46:57 +02:00
Satyajit Sahoo
cb67530dc5 chore: tweak album example 2020-04-18 01:13:34 +02:00
Satyajit Sahoo
36689e24c2 feat: add openByDefault option to drawer 2020-04-18 01:13:34 +02:00
Satyajit Sahoo
de5d985f3b chore: upgrade depenendecies 2020-04-07 15:44:58 +02:00
Satyajit Sahoo
179b6312fe chore: update prettier 2020-03-22 23:58:06 +01:00
Satyajit Sahoo
6a5d0a035a feat: add permanent drawer type (#7818)
Co-authored-by: NoemiRozpara <nrozpara@gmail.com>
2020-03-17 14:11:00 +01:00