mirror of
https://github.com/zhigang1992/react-navigation.git
synced 2026-01-14 09:32:32 +08:00
Compare commits
32 Commits
@react-nav
...
@react-nav
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
978b197446 | ||
|
|
c65f9ef1a9 | ||
|
|
d85d27c432 | ||
|
|
f00091d7ab | ||
|
|
67cd44d24b | ||
|
|
a021cfb8af | ||
|
|
a2d649faf1 | ||
|
|
1024a86a07 | ||
|
|
c94d79d3a5 | ||
|
|
37bbbbe869 | ||
|
|
84aea698f2 | ||
|
|
8177c45d14 | ||
|
|
16128199ed | ||
|
|
ea5affd914 | ||
|
|
d2444887be | ||
|
|
962456beb6 | ||
|
|
1aadc79fb8 | ||
|
|
b14fd9453d | ||
|
|
cc3728fc95 | ||
|
|
bf1ee2d9ff | ||
|
|
6730690529 | ||
|
|
afc83eedf8 | ||
|
|
24e4333ec6 | ||
|
|
4480d2fe04 | ||
|
|
33476b9cb5 | ||
|
|
07c30b2847 | ||
|
|
fe3f98eb9c | ||
|
|
35d6b9e3a4 | ||
|
|
95b044ecf9 | ||
|
|
f51f9c8493 | ||
|
|
e000138fe5 | ||
|
|
5042c86a09 |
@@ -11,7 +11,8 @@
|
|||||||
"@react-navigation/drawer",
|
"@react-navigation/drawer",
|
||||||
"@react-navigation/bottom-tabs",
|
"@react-navigation/bottom-tabs",
|
||||||
"@react-navigation/material-top-tabs",
|
"@react-navigation/material-top-tabs",
|
||||||
"@react-navigation/material-bottom-tabs"
|
"@react-navigation/material-bottom-tabs",
|
||||||
|
"@react-navigation/devtools"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"env": { "browser": true, "node": true }
|
"env": { "browser": true, "node": true }
|
||||||
|
|||||||
1
.github/FUNDING.yml
vendored
Normal file
1
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
github: react-navigation
|
||||||
17
.github/workflows/expo-preview.yml
vendored
17
.github/workflows/expo-preview.yml
vendored
@@ -8,7 +8,7 @@ jobs:
|
|||||||
if: github.event.pull_request.head.repo.owner.login == 'react-navigation'
|
if: github.event.pull_request.head.repo.owner.login == 'react-navigation'
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v1
|
uses: actions/setup-node@v1
|
||||||
@@ -25,7 +25,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Restore yarn cache
|
- name: Restore yarn cache
|
||||||
id: yarn-cache
|
id: yarn-cache
|
||||||
uses: actions/cache@master
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: '**/node_modules'
|
path: '**/node_modules'
|
||||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||||
@@ -43,8 +43,13 @@ jobs:
|
|||||||
run: echo "::set-output name=path::@react-navigation/react-navigation-example?release-channel=pr-${{ github.event.number }}"
|
run: echo "::set-output name=path::@react-navigation/react-navigation-example?release-channel=pr-${{ github.event.number }}"
|
||||||
|
|
||||||
- name: Comment on PR
|
- name: Comment on PR
|
||||||
uses: unsplash/comment-on-pr@master
|
uses: actions/github-script@v2
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
with:
|
||||||
msg: The Expo app for the example from this branch is ready!<br><br>[expo.io/${{ steps.expo.outputs.path }}](https://expo.io/${{ steps.expo.outputs.path }})<br><br><a href="https://exp.host/${{ steps.expo.outputs.path }}"><img src="https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=exp://exp.host/${{ steps.expo.outputs.path }}" height="200px" width="200px"></a>.
|
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||||
|
script: |
|
||||||
|
github.issues.createComment({
|
||||||
|
issue_number: context.issue.number,
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
body: 'The Expo app for the example from this branch is ready!\n\n[expo.io/${{ steps.expo.outputs.path }}](https://expo.io/${{ steps.expo.outputs.path }})\n\n<a href="https://exp.host/${{ steps.expo.outputs.path }}"><img src="https://api.qrserver.com/v1/create-qr-code/?size=400x400&data=exp://exp.host/${{ steps.expo.outputs.path }}" height="200px" width="200px"></a>'
|
||||||
|
})
|
||||||
|
|||||||
6
.github/workflows/expo.yml
vendored
6
.github/workflows/expo.yml
vendored
@@ -2,7 +2,7 @@ name: Expo Publish
|
|||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- main
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
publish:
|
publish:
|
||||||
@@ -10,7 +10,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v1
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Setup Node.js
|
- name: Setup Node.js
|
||||||
uses: actions/setup-node@v1
|
uses: actions/setup-node@v1
|
||||||
@@ -27,7 +27,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Restore yarn cache
|
- name: Restore yarn cache
|
||||||
id: yarn-cache
|
id: yarn-cache
|
||||||
uses: actions/cache@master
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: '**/node_modules'
|
path: '**/node_modules'
|
||||||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
|
||||||
|
|||||||
3
.github/workflows/rebase.yml
vendored
3
.github/workflows/rebase.yml
vendored
@@ -9,7 +9,8 @@ jobs:
|
|||||||
if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/rebase')
|
if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/rebase')
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@master
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
|||||||
56
.github/workflows/triage.yml
vendored
56
.github/workflows/triage.yml
vendored
@@ -8,42 +8,58 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.event.label.name == 'needs more info'
|
if: github.event.label.name == 'needs more info'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@master
|
- uses: actions/github-script@v2
|
||||||
- uses: actions/github@v1.0.0
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
with:
|
||||||
args: comment "Hey! Thanks for opening the issue. Can you provide more information about the issue? Please fill the issue template when opening the issue without deleting any section. We need all the information we can to be able to help. Make sure to at least provide - Current behaviour, Expected behaviour, A way to [reproduce the issue with minimal code](https://stackoverflow.com/help/minimal-reproducible-example) (link to [snack.expo.io](https://snack.expo.io)) or a repo on GitHub, and the information about your environment (such as the platform of the device, exact versions of all the packages mentioned in the template etc.)."
|
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||||
|
script: |
|
||||||
|
github.issues.createComment({
|
||||||
|
issue_number: context.issue.number,
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
body: "Hey! Thanks for opening the issue. Can you provide more information about the issue? Please fill the issue template when opening the issue without deleting any section. We need all the information we can to be able to help.\n\nMake sure to at least provide - Current behaviour, Expected behaviour, A way to [reproduce the issue with minimal code](https://stackoverflow.com/help/minimal-reproducible-example) (link to [snack.expo.io](https://snack.expo.io)) or a repo on GitHub, and the information about your environment (such as the platform of the device, exact versions of all the packages mentioned in the template etc.)."
|
||||||
|
})
|
||||||
|
|
||||||
needs-repro:
|
needs-repro:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.event.label.name == 'needs repro'
|
if: github.event.label.name == 'needs repro'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@master
|
- uses: actions/github-script@v2
|
||||||
- uses: actions/github@v1.0.0
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
with:
|
||||||
args: comment "Hey! Thanks for opening the issue. Can you provide a [minimal repro](https://stackoverflow.com/help/minimal-reproducible-example) which demonstrates the issue? Posting a snippet of your code in the issue is useful, but it's not usually straightforward to run. A repro will help us debug the issue faster. Please try to keep the repro as small as possible. The easiest way to provide a repro is on [snack.expo.io](https://snack.expo.io). If it's not possible to repro it on [snack.expo.io](https://snack.expo.io), then you can also provide the repro in a GitHub repository."
|
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||||
|
script: |
|
||||||
|
github.issues.createComment({
|
||||||
|
issue_number: context.issue.number,
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
body: "Hey! Thanks for opening the issue. Can you provide a [minimal repro](https://stackoverflow.com/help/minimal-reproducible-example) which demonstrates the issue? Posting a snippet of your code in the issue is useful, but it's not usually straightforward to run. A repro will help us debug the issue faster. Please try to keep the repro as small as possible.\n\nThe easiest way to provide a repro is on [snack.expo.io](https://snack.expo.io). If it's not possible to repro it on [snack.expo.io](https://snack.expo.io), then please provide the repro in a GitHub repository."
|
||||||
|
})
|
||||||
|
|
||||||
question:
|
question:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.event.label.name == 'question'
|
if: github.event.label.name == 'question'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@master
|
- uses: actions/github-script@v2
|
||||||
- uses: actions/github@v1.0.0
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
with:
|
||||||
args: comment "Hey! Thanks for opening the issue. The issue tracker is intended for only tracking bug reports. This helps us prioritize fixing bugs in the library. Seems you have a usage question. Please ask the question on [StackOverflow](https://stackoverflow.com/questions/tagged/react-navigation) instead using the `react-navigation` label. You can also chat with other community members on [Reactiflux Discord server](https://www.reactiflux.com/) in the `#react-navigation` channel."
|
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||||
|
script: |
|
||||||
|
github.issues.createComment({
|
||||||
|
issue_number: context.issue.number,
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
body: "Hey! Thanks for opening the issue. The issue tracker is intended for only tracking bug reports. This helps us prioritize fixing bugs in the library. Seems you have a usage question or an issue unrelated to this library. Please ask the question on [StackOverflow](https://stackoverflow.com/questions/tagged/react-navigation) instead using the `react-navigation` label. You can also chat with other community members on [Reactiflux Discord server](https://www.reactiflux.com/) in the `#react-navigation` channel.\n\nIf you believe that this is actually a bug in the library, please open a new issue and fill the issue template with relevant information."
|
||||||
|
})
|
||||||
|
|
||||||
feature-request:
|
feature-request:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: github.event.label.name == 'feature-request'
|
if: github.event.label.name == 'feature-request'
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@master
|
- uses: actions/github-script@v2
|
||||||
- uses: actions/github@v1.0.0
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
with:
|
||||||
args: comment "Hey! Thanks for opening the issue. The issue tracker is intended for only tracking bug reports. Seems you have a feature request. Please post the feature request on [Canny](https://react-navigation.canny.io/feature-requests). This lets other users upvote your feature request and helps us prioritize the most requested features."
|
github-token: ${{secrets.GITHUB_TOKEN}}
|
||||||
|
script: |
|
||||||
|
github.issues.createComment({
|
||||||
|
issue_number: context.issue.number,
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
body: "Hey! Thanks for opening the issue. The issue tracker is intended for only tracking bug reports. Seems you have a feature request. Please post the feature request on [Canny](https://react-navigation.canny.io/feature-requests). This lets other users upvote your feature request and helps us prioritize the most requested features.\n\nYou can also open a detailed proposal in our [RFC repo](https://github.com/react-navigation/rfcs) for discussion."
|
||||||
|
})
|
||||||
|
|||||||
17
.github/workflows/versions.yml
vendored
17
.github/workflows/versions.yml
vendored
@@ -7,19 +7,30 @@ jobs:
|
|||||||
check-versions:
|
check-versions:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: react-navigation/check-versions-action@master
|
- uses: react-navigation/check-versions-action@v1.0.0
|
||||||
|
if: contains(github.event.issue.labels.*.name, 'version-4') != true
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
packages: |
|
required-packages: |
|
||||||
|
@react-navigation/native
|
||||||
|
optional-packages: |
|
||||||
@react-navigation/bottom-tabs
|
@react-navigation/bottom-tabs
|
||||||
@react-navigation/compat
|
@react-navigation/compat
|
||||||
@react-navigation/core
|
@react-navigation/core
|
||||||
|
@react-navigation/devtools
|
||||||
@react-navigation/drawer
|
@react-navigation/drawer
|
||||||
@react-navigation/material-bottom-tabs
|
@react-navigation/material-bottom-tabs
|
||||||
@react-navigation/material-top-tabs
|
@react-navigation/material-top-tabs
|
||||||
@react-navigation/native
|
|
||||||
@react-navigation/routers
|
@react-navigation/routers
|
||||||
@react-navigation/stack
|
@react-navigation/stack
|
||||||
|
|
||||||
|
- uses: react-navigation/check-versions-action@v1.0.0
|
||||||
|
if: contains(github.event.issue.labels.*.name, 'version-4')
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
required-packages: |
|
||||||
|
react-navigation
|
||||||
|
optional-packages: |
|
||||||
react-navigation-animated-switch
|
react-navigation-animated-switch
|
||||||
react-navigation-drawer
|
react-navigation-drawer
|
||||||
react-navigation-material-bottom-tabs
|
react-navigation-material-bottom-tabs
|
||||||
|
|||||||
18
README.md
18
README.md
@@ -10,9 +10,23 @@ Documentation can be found at [reactnavigation.org](https://reactnavigation.org/
|
|||||||
|
|
||||||
If you are looking for version 4, the code can be found in the [4.x branch](https://github.com/react-navigation/react-navigation/tree/4.x).
|
If you are looking for version 4, the code can be found in the [4.x branch](https://github.com/react-navigation/react-navigation/tree/4.x).
|
||||||
|
|
||||||
|
## Package Versions
|
||||||
|
|
||||||
|
| Name | Latest Version |
|
||||||
|
| ------------------------------------------------------------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|
||||||
|
| [@react-navigation/core](/packages/core) | [](https://www.npmjs.com/package/@react-navigation/core) |
|
||||||
|
| [@react-navigation/native](/packages/native) | [](https://www.npmjs.com/package/@react-navigation/native) |
|
||||||
|
| [@react-navigation/routers](/packages/routers) | [](https://www.npmjs.com/package/@react-navigation/routers) |
|
||||||
|
| [@react-navigation/stack](/packages/stack) | [](https://www.npmjs.com/package/@react-navigation/stack) |
|
||||||
|
| [@react-navigation/drawer](/packages/drawer) | [](https://www.npmjs.com/package/@react-navigation/drawer) |
|
||||||
|
| [@react-navigation/material-top-tabs](/packages/material-top-tabs) | [](https://www.npmjs.com/package/@react-navigation/material-top-tabs) |
|
||||||
|
| [@react-navigation/material-bottom-tabs](/packages/material-bottom-tabs) | [](https://www.npmjs.com/package/@react-navigation/material-bottom-tabs) |
|
||||||
|
| [@react-navigation/bottom-tabs](/packages/bottom-tabs) | [](https://www.npmjs.com/package/@react-navigation/bottom-tabs) |
|
||||||
|
| [@react-navigation/devtools](/packages/devtools) | [](https://www.npmjs.com/package/@react-navigation/devtools) |
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
Please read through our [contribution guide](CONTRIBUTING.md) a to get started!
|
Please read through our [contribution guide](CONTRIBUTING.md) to get started!
|
||||||
|
|
||||||
## Installing from a fork on GitHub
|
## Installing from a fork on GitHub
|
||||||
|
|
||||||
@@ -49,7 +63,7 @@ Remember to replace `<user>`, `<repo>` and `<name>` with right values.
|
|||||||
|
|
||||||
<!-- badges -->
|
<!-- badges -->
|
||||||
|
|
||||||
[build-badge]: https://img.shields.io/circleci/project/github/react-navigation/react-navigation/master.svg?style=flat-square
|
[build-badge]: https://img.shields.io/circleci/project/github/react-navigation/react-navigation/main.svg?style=flat-square
|
||||||
[build]: https://circleci.com/gh/react-navigation/react-navigation
|
[build]: https://circleci.com/gh/react-navigation/react-navigation
|
||||||
[coverage-badge]: https://img.shields.io/codecov/c/github/react-navigation/react-navigation.svg?style=flat-square
|
[coverage-badge]: https://img.shields.io/codecov/c/github/react-navigation/react-navigation.svg?style=flat-square
|
||||||
[coverage]: https://codecov.io/github/react-navigation/react-navigation
|
[coverage]: https://codecov.io/github/react-navigation/react-navigation
|
||||||
|
|||||||
@@ -3,10 +3,11 @@ import { page } from '../config/setup-playwright';
|
|||||||
it('loads the example app', async () => {
|
it('loads the example app', async () => {
|
||||||
const snapshot = await page.accessibility.snapshot();
|
const snapshot = await page.accessibility.snapshot();
|
||||||
|
|
||||||
// @ts-ignore
|
expect(
|
||||||
expect(snapshot?.children?.find((it) => it.role === 'heading')?.name).toBe(
|
(snapshot?.children as Record<string, unknown>[])?.find(
|
||||||
'Examples'
|
(it) => it.role === 'heading'
|
||||||
);
|
)?.name
|
||||||
|
).toBe('Examples');
|
||||||
const title = await page.$eval('[role=heading]', (el) => el.textContent);
|
const title = await page.$eval('[role=heading]', (el) => el.textContent);
|
||||||
|
|
||||||
expect(title).toBe('Examples');
|
expect(title).toBe('Examples');
|
||||||
|
|||||||
@@ -16,8 +16,8 @@
|
|||||||
"@expo/vector-icons": "^10.2.0",
|
"@expo/vector-icons": "^10.2.0",
|
||||||
"@react-native-community/masked-view": "^0.1.10",
|
"@react-native-community/masked-view": "^0.1.10",
|
||||||
"color": "^3.1.2",
|
"color": "^3.1.2",
|
||||||
"expo": "^37.0.8",
|
"expo": "^37.0.12",
|
||||||
"expo-asset": "~8.1.3",
|
"expo-asset": "~8.1.5",
|
||||||
"expo-blur": "~8.1.0",
|
"expo-blur": "~8.1.0",
|
||||||
"koa": "^2.12.0",
|
"koa": "^2.12.0",
|
||||||
"react": "~16.9.0",
|
"react": "~16.9.0",
|
||||||
@@ -29,32 +29,32 @@
|
|||||||
"react-native-restart": "^0.0.15",
|
"react-native-restart": "^0.0.15",
|
||||||
"react-native-safe-area-context": "^1.0.0",
|
"react-native-safe-area-context": "^1.0.0",
|
||||||
"react-native-screens": "^2.7.0",
|
"react-native-screens": "^2.7.0",
|
||||||
"react-native-tab-view": "2.14.0",
|
"react-native-tab-view": "2.14.4",
|
||||||
"react-native-unimodules": "~0.9.1",
|
"react-native-unimodules": "~0.9.1",
|
||||||
"react-native-vector-icons": "^6.6.0",
|
"react-native-vector-icons": "^6.6.0",
|
||||||
"react-native-web": "^0.11.7"
|
"react-native-web": "^0.11.7"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/node": "^7.8.7",
|
"@babel/node": "^7.10.1",
|
||||||
"@expo/webpack-config": "^0.11.19",
|
"@expo/webpack-config": "^0.12.12",
|
||||||
"@types/cheerio": "^0.22.18",
|
"@types/cheerio": "^0.22.18",
|
||||||
"@types/jest-dev-server": "^4.2.0",
|
"@types/jest-dev-server": "^4.2.0",
|
||||||
"@types/koa": "^2.11.3",
|
"@types/koa": "^2.11.3",
|
||||||
"@types/node-fetch": "^2.5.7",
|
"@types/node-fetch": "^2.5.7",
|
||||||
"@types/react": "^16.9.34",
|
"@types/react": "^16.9.36",
|
||||||
"@types/react-dom": "^16.9.8",
|
"@types/react-dom": "^16.9.8",
|
||||||
"@types/react-native": "^0.62.7",
|
"@types/react-native": "^0.62.7",
|
||||||
"babel-plugin-module-resolver": "^4.0.0",
|
"babel-plugin-module-resolver": "^4.0.0",
|
||||||
"babel-preset-expo": "^8.1.0",
|
"babel-preset-expo": "^8.2.1",
|
||||||
"cheerio": "^1.0.0-rc.3",
|
"cheerio": "^1.0.0-rc.3",
|
||||||
"expo-cli": "^3.20.1",
|
"expo-cli": "^3.21.5",
|
||||||
"jest": "^26.0.1",
|
"jest": "^26.0.1",
|
||||||
"jest-dev-server": "^4.4.0",
|
"jest-dev-server": "^4.4.0",
|
||||||
"mock-require-assets": "^0.0.1",
|
"mock-require-assets": "^0.0.1",
|
||||||
"node-fetch": "^2.6.0",
|
"node-fetch": "^2.6.0",
|
||||||
"nodemon": "^2.0.4",
|
"nodemon": "^2.0.4",
|
||||||
"playwright": "^0.14.0",
|
"playwright": "^0.14.0",
|
||||||
"serve": "^11.3.0",
|
"serve": "^11.3.2",
|
||||||
"typescript": "^3.8.3"
|
"typescript": "^3.9.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,9 @@ import 'mock-require-assets';
|
|||||||
import Module from 'module';
|
import Module from 'module';
|
||||||
|
|
||||||
// We need to make sure that .web.xx extensions are resolved before .xx
|
// We need to make sure that .web.xx extensions are resolved before .xx
|
||||||
// @ts-ignore
|
// @ts-expect-error: _extensions doesn't exist in the type definitions
|
||||||
Module._extensions = Object.fromEntries(
|
Module._extensions = Object.fromEntries(
|
||||||
// @ts-ignore
|
// @ts-expect-error
|
||||||
Object.entries(Module._extensions).sort((a, b) => {
|
Object.entries(Module._extensions).sort((a, b) => {
|
||||||
return b[0].split('.').length - a[0].split('.').length;
|
return b[0].split('.').length - a[0].split('.').length;
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
import RNRestart from 'react-native-restart';
|
|
||||||
import { Updates } from 'expo';
|
import { Updates } from 'expo';
|
||||||
|
import RNRestart from 'react-native-restart';
|
||||||
|
|
||||||
export function restartApp() {
|
export function restartApp() {
|
||||||
// @ts-ignore
|
// @ts-expect-error: Expo doesn't exist in global definitions
|
||||||
if (global.Expo) {
|
if (global.Expo) {
|
||||||
Updates.reloadFromCache();
|
Updates.reloadFromCache();
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -2,6 +2,11 @@ import * as React from 'react';
|
|||||||
import { View, ScrollView, StyleSheet, Platform } from 'react-native';
|
import { View, ScrollView, StyleSheet, Platform } from 'react-native';
|
||||||
import { Button } from 'react-native-paper';
|
import { Button } from 'react-native-paper';
|
||||||
import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
|
import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
|
||||||
|
import {
|
||||||
|
getFocusedRouteNameFromRoute,
|
||||||
|
ParamListBase,
|
||||||
|
} from '@react-navigation/native';
|
||||||
|
import type { StackScreenProps } from '@react-navigation/stack';
|
||||||
import {
|
import {
|
||||||
createBottomTabNavigator,
|
createBottomTabNavigator,
|
||||||
BottomTabNavigationProp,
|
BottomTabNavigationProp,
|
||||||
@@ -59,7 +64,18 @@ const AlbumsScreen = ({
|
|||||||
|
|
||||||
const BottomTabs = createBottomTabNavigator<BottomTabParams>();
|
const BottomTabs = createBottomTabNavigator<BottomTabParams>();
|
||||||
|
|
||||||
export default function BottomTabsScreen() {
|
export default function BottomTabsScreen({
|
||||||
|
navigation,
|
||||||
|
route,
|
||||||
|
}: StackScreenProps<ParamListBase, string>) {
|
||||||
|
const routeName = getFocusedRouteNameFromRoute(route) ?? 'Article';
|
||||||
|
|
||||||
|
React.useLayoutEffect(() => {
|
||||||
|
navigation.setOptions({
|
||||||
|
title: routeName,
|
||||||
|
});
|
||||||
|
}, [navigation, routeName]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<BottomTabs.Navigator
|
<BottomTabs.Navigator
|
||||||
screenOptions={{
|
screenOptions={{
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import {
|
|||||||
useNavigation,
|
useNavigation,
|
||||||
ParamListBase,
|
ParamListBase,
|
||||||
} from '@react-navigation/native';
|
} from '@react-navigation/native';
|
||||||
import { StackNavigationProp } from '@react-navigation/stack';
|
|
||||||
import {
|
import {
|
||||||
createDrawerNavigator,
|
createDrawerNavigator,
|
||||||
DrawerNavigationProp,
|
DrawerNavigationProp,
|
||||||
@@ -14,6 +13,7 @@ import {
|
|||||||
DrawerContentComponentProps,
|
DrawerContentComponentProps,
|
||||||
DrawerContentOptions,
|
DrawerContentOptions,
|
||||||
} from '@react-navigation/drawer';
|
} from '@react-navigation/drawer';
|
||||||
|
import type { StackNavigationProp } from '@react-navigation/stack';
|
||||||
import Article from '../Shared/Article';
|
import Article from '../Shared/Article';
|
||||||
import Albums from '../Shared/Albums';
|
import Albums from '../Shared/Albums';
|
||||||
import NewsFeed from '../Shared/NewsFeed';
|
import NewsFeed from '../Shared/NewsFeed';
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { ParamListBase } from '@react-navigation/native';
|
import type { ParamListBase } from '@react-navigation/native';
|
||||||
import { StackNavigationProp } from '@react-navigation/stack';
|
import type { StackNavigationProp } from '@react-navigation/stack';
|
||||||
import { createMaterialTopTabNavigator } from '@react-navigation/material-top-tabs';
|
import { createMaterialTopTabNavigator } from '@react-navigation/material-top-tabs';
|
||||||
import Albums from '../Shared/Albums';
|
import Albums from '../Shared/Albums';
|
||||||
import Contacts from '../Shared/Contacts';
|
import Contacts from '../Shared/Contacts';
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { View, StyleSheet, ScrollView, Platform } from 'react-native';
|
import { View, StyleSheet, ScrollView, Platform } from 'react-native';
|
||||||
import { Button } from 'react-native-paper';
|
import { Button } from 'react-native-paper';
|
||||||
import { RouteProp, ParamListBase } from '@react-navigation/native';
|
import type { RouteProp, ParamListBase } from '@react-navigation/native';
|
||||||
import {
|
import {
|
||||||
createStackNavigator,
|
createStackNavigator,
|
||||||
StackNavigationProp,
|
StackNavigationProp,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { StackNavigationProp } from '@react-navigation/stack';
|
|
||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { StyleSheet, Text, View } from 'react-native';
|
import { StyleSheet, Text, View } from 'react-native';
|
||||||
import { Button } from 'react-native-paper';
|
import { Button } from 'react-native-paper';
|
||||||
|
import type { StackNavigationProp } from '@react-navigation/stack';
|
||||||
|
|
||||||
const NotFoundScreen = ({
|
const NotFoundScreen = ({
|
||||||
navigation,
|
navigation,
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { View, Platform, StyleSheet, ScrollView } from 'react-native';
|
import { View, Platform, StyleSheet, ScrollView } from 'react-native';
|
||||||
import { Button } from 'react-native-paper';
|
import { Button } from 'react-native-paper';
|
||||||
import { RouteProp, ParamListBase } from '@react-navigation/native';
|
import type { RouteProp, ParamListBase } from '@react-navigation/native';
|
||||||
import {
|
import {
|
||||||
createStackNavigator,
|
createStackNavigator,
|
||||||
StackNavigationProp,
|
StackNavigationProp,
|
||||||
|
|||||||
@@ -81,10 +81,6 @@ export default function Albums(props: Partial<ScrollViewProps>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const styles = StyleSheet.create({
|
const styles = StyleSheet.create({
|
||||||
content: {
|
|
||||||
flexDirection: 'row',
|
|
||||||
flexWrap: 'wrap',
|
|
||||||
},
|
|
||||||
...Platform.select({
|
...Platform.select({
|
||||||
web: {
|
web: {
|
||||||
content: {
|
content: {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// @ts-ignore
|
// @ts-expect-error: there are no type definitions for deep imports
|
||||||
import TouchableBounce from 'react-native/Libraries/Components/Touchable/TouchableBounce';
|
import TouchableBounce from 'react-native/Libraries/Components/Touchable/TouchableBounce';
|
||||||
|
|
||||||
export default TouchableBounce;
|
export default TouchableBounce;
|
||||||
|
|||||||
@@ -26,7 +26,8 @@ import {
|
|||||||
NavigationContainer,
|
NavigationContainer,
|
||||||
DefaultTheme,
|
DefaultTheme,
|
||||||
DarkTheme,
|
DarkTheme,
|
||||||
PathConfig,
|
PathConfigMap,
|
||||||
|
NavigationContainerRef,
|
||||||
} from '@react-navigation/native';
|
} from '@react-navigation/native';
|
||||||
import {
|
import {
|
||||||
createDrawerNavigator,
|
createDrawerNavigator,
|
||||||
@@ -37,6 +38,7 @@ import {
|
|||||||
StackNavigationProp,
|
StackNavigationProp,
|
||||||
HeaderStyleInterpolators,
|
HeaderStyleInterpolators,
|
||||||
} from '@react-navigation/stack';
|
} from '@react-navigation/stack';
|
||||||
|
import { useReduxDevToolsExtension } from '@react-navigation/devtools';
|
||||||
|
|
||||||
import { restartApp } from './Restart';
|
import { restartApp } from './Restart';
|
||||||
import AsyncStorage from './AsyncStorage';
|
import AsyncStorage from './AsyncStorage';
|
||||||
@@ -60,9 +62,6 @@ YellowBox.ignoreWarnings(['Require cycle:', 'Warning: Async Storage']);
|
|||||||
|
|
||||||
enableScreens();
|
enableScreens();
|
||||||
|
|
||||||
// @ts-ignore
|
|
||||||
global.REACT_NAVIGATION_REDUX_DEVTOOLS_EXTENSION_INTEGRATION_ENABLED = true;
|
|
||||||
|
|
||||||
type RootDrawerParamList = {
|
type RootDrawerParamList = {
|
||||||
Root: undefined;
|
Root: undefined;
|
||||||
Another: undefined;
|
Another: undefined;
|
||||||
@@ -192,6 +191,10 @@ export default function App() {
|
|||||||
return () => Dimensions.removeEventListener('change', onDimensionsChange);
|
return () => Dimensions.removeEventListener('change', onDimensionsChange);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
const navigationRef = React.useRef<NavigationContainerRef>(null);
|
||||||
|
|
||||||
|
useReduxDevToolsExtension(navigationRef);
|
||||||
|
|
||||||
if (!isReady) {
|
if (!isReady) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -204,6 +207,7 @@ export default function App() {
|
|||||||
<StatusBar barStyle={theme.dark ? 'light-content' : 'dark-content'} />
|
<StatusBar barStyle={theme.dark ? 'light-content' : 'dark-content'} />
|
||||||
)}
|
)}
|
||||||
<NavigationContainer
|
<NavigationContainer
|
||||||
|
ref={navigationRef}
|
||||||
initialState={initialState}
|
initialState={initialState}
|
||||||
onStateChange={(state) =>
|
onStateChange={(state) =>
|
||||||
AsyncStorage.setItem(
|
AsyncStorage.setItem(
|
||||||
@@ -221,47 +225,49 @@ export default function App() {
|
|||||||
// The first segment of the link is the the scheme + host (returned by `Linking.makeUrl`)
|
// The first segment of the link is the the scheme + host (returned by `Linking.makeUrl`)
|
||||||
prefixes: LinkingPrefixes,
|
prefixes: LinkingPrefixes,
|
||||||
config: {
|
config: {
|
||||||
Root: {
|
screens: {
|
||||||
path: '',
|
Root: {
|
||||||
initialRouteName: 'Home',
|
path: '',
|
||||||
screens: Object.keys(SCREENS).reduce<PathConfig>(
|
initialRouteName: 'Home',
|
||||||
(acc, name) => {
|
screens: Object.keys(SCREENS).reduce<PathConfigMap>(
|
||||||
// Convert screen names such as SimpleStack to kebab case (simple-stack)
|
(acc, name) => {
|
||||||
const path = name
|
// Convert screen names such as SimpleStack to kebab case (simple-stack)
|
||||||
.replace(/([A-Z]+)/g, '-$1')
|
const path = name
|
||||||
.replace(/^-/, '')
|
.replace(/([A-Z]+)/g, '-$1')
|
||||||
.toLowerCase();
|
.replace(/^-/, '')
|
||||||
|
.toLowerCase();
|
||||||
|
|
||||||
acc[name] = {
|
acc[name] = {
|
||||||
path,
|
path,
|
||||||
screens: {
|
screens: {
|
||||||
Article: {
|
Article: {
|
||||||
path: 'article/:author?',
|
path: 'article/:author?',
|
||||||
parse: {
|
parse: {
|
||||||
author: (author) =>
|
author: (author) =>
|
||||||
author.charAt(0).toUpperCase() +
|
author.charAt(0).toUpperCase() +
|
||||||
author.slice(1).replace(/-/g, ' '),
|
author.slice(1).replace(/-/g, ' '),
|
||||||
},
|
},
|
||||||
stringify: {
|
stringify: {
|
||||||
author: (author: string) =>
|
author: (author: string) =>
|
||||||
author.toLowerCase().replace(/\s/g, '-'),
|
author.toLowerCase().replace(/\s/g, '-'),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
|
Albums: 'music',
|
||||||
|
Chat: 'chat',
|
||||||
|
Contacts: 'people',
|
||||||
|
NewsFeed: 'feed',
|
||||||
|
Dialog: 'dialog',
|
||||||
},
|
},
|
||||||
Albums: 'music',
|
};
|
||||||
Chat: 'chat',
|
|
||||||
Contacts: 'people',
|
|
||||||
NewsFeed: 'feed',
|
|
||||||
Dialog: 'dialog',
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
return acc;
|
return acc;
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Home: '',
|
Home: '',
|
||||||
NotFound: '*',
|
NotFound: '*',
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
"version": "independent",
|
"version": "independent",
|
||||||
"command": {
|
"command": {
|
||||||
"publish": {
|
"publish": {
|
||||||
"allowBranch": "master",
|
"allowBranch": "main",
|
||||||
"conventionalCommits": true,
|
"conventionalCommits": true,
|
||||||
"createRelease": "github",
|
"createRelease": "github",
|
||||||
"message": "chore: publish",
|
"message": "chore: publish",
|
||||||
|
|||||||
24
package.json
24
package.json
@@ -25,26 +25,26 @@
|
|||||||
"example": "yarn --cwd example"
|
"example": "yarn --cwd example"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/plugin-proposal-class-properties": "^7.8.3",
|
"@babel/plugin-proposal-class-properties": "^7.10.1",
|
||||||
"@babel/plugin-proposal-optional-chaining": "^7.9.0",
|
"@babel/plugin-proposal-optional-chaining": "^7.10.1",
|
||||||
"@babel/preset-env": "^7.9.6",
|
"@babel/preset-env": "^7.10.2",
|
||||||
"@babel/preset-flow": "^7.9.0",
|
"@babel/preset-flow": "^7.10.1",
|
||||||
"@babel/preset-react": "^7.9.4",
|
"@babel/preset-react": "^7.10.1",
|
||||||
"@babel/preset-typescript": "^7.9.0",
|
"@babel/preset-typescript": "^7.10.1",
|
||||||
"@babel/runtime": "^7.9.6",
|
"@babel/runtime": "^7.10.2",
|
||||||
"@commitlint/config-conventional": "^8.3.4",
|
"@commitlint/config-conventional": "^8.3.4",
|
||||||
"@types/jest": "^25.2.1",
|
"@types/jest": "^26.0.0",
|
||||||
"babel-jest": "^26.0.1",
|
"babel-jest": "^26.0.1",
|
||||||
"codecov": "^3.6.5",
|
"codecov": "^3.7.0",
|
||||||
"commitlint": "^8.3.5",
|
"commitlint": "^8.3.5",
|
||||||
"core-js": "^3.6.5",
|
"core-js": "^3.6.5",
|
||||||
"eslint": "^6.8.0",
|
"eslint": "^7.2.0",
|
||||||
"eslint-config-satya164": "^3.1.7",
|
"eslint-config-satya164": "^3.1.7",
|
||||||
"husky": "^4.2.5",
|
"husky": "^4.2.5",
|
||||||
"jest": "^26.0.1",
|
"jest": "^26.0.1",
|
||||||
"lerna": "^3.20.2",
|
"lerna": "^3.22.1",
|
||||||
"prettier": "^2.0.5",
|
"prettier": "^2.0.5",
|
||||||
"typescript": "^3.8.3"
|
"typescript": "^3.9.5"
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"react": "~16.9.0",
|
"react": "~16.9.0",
|
||||||
|
|||||||
@@ -3,38 +3,24 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
## [5.5.2](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.5.1...@react-navigation/bottom-tabs@5.5.2) (2020-06-06)
|
# [5.6.0](https://github.com/react-navigation/react-navigation/compare/@react-navigation/bottom-tabs@5.5.2...@react-navigation/bottom-tabs@5.6.0) (2020-06-24)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.5.1](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.5.0...@react-navigation/bottom-tabs@5.5.1) (2020-05-27)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* fix type of style for various options ([9d822b9](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/commit/9d822b95a6df797e2e63e481573e64ea7d0f9386))
|
* make sure we don't miss dimensions updates ([c65f9ef](https://github.com/react-navigation/react-navigation/commit/c65f9ef1a9be93b399e724a9731605e408aca80e))
|
||||||
|
* remove broken showIcon option from bottom-tabs ([1612819](https://github.com/react-navigation/react-navigation/commit/16128199edd4de37f9c7353bdf803de8e2f201a2))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.5.0](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.4.7...@react-navigation/bottom-tabs@5.5.0) (2020-05-23)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* animate changes to tabBarVisible in BottomTabBar ([#8286](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/issues/8286)) ([c1e46f8](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/commit/c1e46f8e331e0054995aa476455af204d02d4170))
|
* add iconStyle prop to bottom tab bar options ([#8188](https://github.com/react-navigation/react-navigation/issues/8188)) ([4480d2f](https://github.com/react-navigation/react-navigation/commit/4480d2fe04c8da11b444ebe75ee618d380682312))
|
||||||
* update react-native-safe-area-context to 1.0.0 ([#8182](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/issues/8182)) ([d62fbfe](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/commit/d62fbfe255140f16b182e8b54b276a7c96f2aec6))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.4.7](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.4.6...@react-navigation/bottom-tabs@5.4.7) (2020-05-20)
|
## [5.5.2](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.5.1...@react-navigation/bottom-tabs@5.5.2) (2020-06-06)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
@@ -42,69 +28,30 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.4.6](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.4.5...@react-navigation/bottom-tabs@5.4.6) (2020-05-20)
|
## [5.5.1](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.5.0...@react-navigation/bottom-tabs@5.5.1) (2020-05-27)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.4.5](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.4.4...@react-navigation/bottom-tabs@5.4.5) (2020-05-16)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.4.4](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.4.3...@react-navigation/bottom-tabs@5.4.4) (2020-05-14)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.4.3](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.4.2...@react-navigation/bottom-tabs@5.4.3) (2020-05-14)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.4.2](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.4.1...@react-navigation/bottom-tabs@5.4.2) (2020-05-10)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.4.1](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.4.0...@react-navigation/bottom-tabs@5.4.1) (2020-05-08)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* fix building typescript definitions. closes [#8216](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/issues/8216) ([47a1229](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/commit/47a12298378747edd2d22e54dc1c8677f98c49b4))
|
* fix type of style for various options ([9d822b9](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/9d822b95a6df797e2e63e481573e64ea7d0f9386))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.4.0](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.3.4...@react-navigation/bottom-tabs@5.4.0) (2020-05-08)
|
# [5.5.0](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.4.7...@react-navigation/bottom-tabs@5.5.0) (2020-05-23)
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add generic type aliases for screen props ([bea14aa](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/commit/bea14aa26fd5cbfebc7973733c5cf1f44fd323aa)), closes [#7971](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/issues/7971)
|
* animate changes to tabBarVisible in BottomTabBar ([#8286](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/issues/8286)) ([c1e46f8](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/c1e46f8e331e0054995aa476455af204d02d4170))
|
||||||
|
* update react-native-safe-area-context to 1.0.0 ([#8182](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/issues/8182)) ([d62fbfe](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/d62fbfe255140f16b182e8b54b276a7c96f2aec6))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.3.4](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.3.3...@react-navigation/bottom-tabs@5.3.4) (2020-05-05)
|
## [5.4.7](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.4.6...@react-navigation/bottom-tabs@5.4.7) (2020-05-20)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
@@ -112,7 +59,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.3.3](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.3.2...@react-navigation/bottom-tabs@5.3.3) (2020-05-01)
|
## [5.4.6](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.4.5...@react-navigation/bottom-tabs@5.4.6) (2020-05-20)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
@@ -120,7 +67,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.3.2](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.3.1...@react-navigation/bottom-tabs@5.3.2) (2020-05-01)
|
## [5.4.5](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.4.4...@react-navigation/bottom-tabs@5.4.5) (2020-05-16)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
@@ -128,7 +75,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.3.1](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.3.0...@react-navigation/bottom-tabs@5.3.1) (2020-04-30)
|
## [5.4.4](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.4.3...@react-navigation/bottom-tabs@5.4.4) (2020-05-14)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
@@ -136,19 +83,45 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.3.0](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.2.8...@react-navigation/bottom-tabs@5.3.0) (2020-04-30)
|
## [5.4.3](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.4.2...@react-navigation/bottom-tabs@5.4.3) (2020-05-14)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.4.2](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.4.1...@react-navigation/bottom-tabs@5.4.2) (2020-05-10)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.4.1](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.4.0...@react-navigation/bottom-tabs@5.4.1) (2020-05-08)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* fix building typescript definitions. closes [#8216](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/issues/8216) ([47a1229](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/47a12298378747edd2d22e54dc1c8677f98c49b4))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [5.4.0](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.3.4...@react-navigation/bottom-tabs@5.4.0) (2020-05-08)
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add `useLinkBuilder` hook to build links ([2792f43](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/commit/2792f438fe45428fe193e3708fee7ad61966cbf4))
|
* add generic type aliases for screen props ([bea14aa](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/bea14aa26fd5cbfebc7973733c5cf1f44fd323aa)), closes [#7971](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/issues/7971)
|
||||||
* add action prop to Link ([942d2be](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/commit/942d2be2c72720469475ce12ec8df23825994dbf))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.2.8](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.2.7...@react-navigation/bottom-tabs@5.2.8) (2020-04-27)
|
## [5.3.4](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.3.3...@react-navigation/bottom-tabs@5.3.4) (2020-05-05)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
@@ -156,7 +129,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.2.7](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.2.6...@react-navigation/bottom-tabs@5.2.7) (2020-04-17)
|
## [5.3.3](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.3.2...@react-navigation/bottom-tabs@5.3.3) (2020-05-01)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
@@ -164,18 +137,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.2.6](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.2.5...@react-navigation/bottom-tabs@5.2.6) (2020-04-08)
|
## [5.3.2](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.3.1...@react-navigation/bottom-tabs@5.3.2) (2020-05-01)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* mark type exports for all packages ([b71de6c](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/commit/b71de6cc799143f1d0e8a0cfcc34f0a2381f9840))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.2.5](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.2.4...@react-navigation/bottom-tabs@5.2.5) (2020-03-30)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
@@ -183,7 +145,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.2.4](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.2.3...@react-navigation/bottom-tabs@5.2.4) (2020-03-23)
|
## [5.3.1](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.3.0...@react-navigation/bottom-tabs@5.3.1) (2020-04-30)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
@@ -191,46 +153,19 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.2.3](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.2.2...@react-navigation/bottom-tabs@5.2.3) (2020-03-22)
|
# [5.3.0](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.2.8...@react-navigation/bottom-tabs@5.3.0) (2020-04-30)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.2.2](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.2.1...@react-navigation/bottom-tabs@5.2.2) (2020-03-19)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* don't use react-native-screens on web ([b1a65fc](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/commit/b1a65fc73e8603ae2c06ef101a74df31e80bb9b2)), closes [#7485](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/issues/7485)
|
|
||||||
* initialize height and width to zero if undefined ([3df65e2](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/commit/3df65e28197db3bb8371059146546d57661c5ba3)), closes [#6789](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/issues/6789)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.2.1](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.2.0...@react-navigation/bottom-tabs@5.2.1) (2020-03-17)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.2.0](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.1.1...@react-navigation/bottom-tabs@5.2.0) (2020-03-16)
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add safeAreaInsets to bottom tabs ([82af7be](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/commit/82af7bed7135e42e24693b48cf7f1c6f9f5a6981))
|
* add `useLinkBuilder` hook to build links ([2792f43](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/2792f438fe45428fe193e3708fee7ad61966cbf4))
|
||||||
|
* add action prop to Link ([942d2be](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/942d2be2c72720469475ce12ec8df23825994dbf))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.1](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.1.0...@react-navigation/bottom-tabs@5.1.1) (2020-03-03)
|
## [5.2.8](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.2.7...@react-navigation/bottom-tabs@5.2.8) (2020-04-27)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
@@ -238,18 +173,81 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.1.0](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.7...@react-navigation/bottom-tabs@5.1.0) (2020-02-26)
|
## [5.2.7](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.2.6...@react-navigation/bottom-tabs@5.2.7) (2020-04-17)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.2.6](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.2.5...@react-navigation/bottom-tabs@5.2.6) (2020-04-08)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* mark type exports for all packages ([b71de6c](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/b71de6cc799143f1d0e8a0cfcc34f0a2381f9840))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.2.5](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.2.4...@react-navigation/bottom-tabs@5.2.5) (2020-03-30)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.2.4](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.2.3...@react-navigation/bottom-tabs@5.2.4) (2020-03-23)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.2.3](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.2.2...@react-navigation/bottom-tabs@5.2.3) (2020-03-22)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.2.2](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.2.1...@react-navigation/bottom-tabs@5.2.2) (2020-03-19)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* don't use react-native-screens on web ([b1a65fc](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/b1a65fc73e8603ae2c06ef101a74df31e80bb9b2)), closes [#7485](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/issues/7485)
|
||||||
|
* initialize height and width to zero if undefined ([3df65e2](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/3df65e28197db3bb8371059146546d57661c5ba3)), closes [#6789](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/issues/6789)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.2.1](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.2.0...@react-navigation/bottom-tabs@5.2.1) (2020-03-17)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [5.2.0](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.1.1...@react-navigation/bottom-tabs@5.2.0) (2020-03-16)
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add ability add listeners with listeners prop ([1624108](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/commit/162410843c4f175ae107756de1c3af04d1d47aa7)), closes [#6756](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/issues/6756)
|
* add safeAreaInsets to bottom tabs ([82af7be](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/82af7bed7135e42e24693b48cf7f1c6f9f5a6981))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.0.7](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.6...@react-navigation/bottom-tabs@5.0.7) (2020-02-21)
|
## [5.1.1](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.1.0...@react-navigation/bottom-tabs@5.1.1) (2020-03-03)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
@@ -257,132 +255,18 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.0.6](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.5...@react-navigation/bottom-tabs@5.0.6) (2020-02-19)
|
# [5.1.0](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.7...@react-navigation/bottom-tabs@5.1.0) (2020-02-26)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.0.5](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.4...@react-navigation/bottom-tabs@5.0.5) (2020-02-14)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.0.4](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.3...@react-navigation/bottom-tabs@5.0.4) (2020-02-14)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.0.3](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.2...@react-navigation/bottom-tabs@5.0.3) (2020-02-12)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.0.2](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.1...@react-navigation/bottom-tabs@5.0.2) (2020-02-11)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* initialize keyboard-hiding tabBar to visible=true ([#6740](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/issues/6740), [#6799](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/issues/6799)) ([0c59ef7](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/commit/0c59ef7328c63108a2a2c04e927794d73cead63a))
|
|
||||||
* provide route context to header and bottom tabs ([b6e7e08](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/commit/b6e7e08b9a05be6c04ed21e938b9580876239116))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.0.1](https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.45...@react-navigation/bottom-tabs@5.0.1) (2020-02-10)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.45](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.44...@react-navigation/bottom-tabs@5.0.0-alpha.45) (2020-02-04)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.44](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.43...@react-navigation/bottom-tabs@5.0.0-alpha.44) (2020-02-04)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.43](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.42...@react-navigation/bottom-tabs@5.0.0-alpha.43) (2020-02-03)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.42](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.39...@react-navigation/bottom-tabs@5.0.0-alpha.42) (2020-02-02)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* add licenses ([0c159db](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/commit/0c159db4c9bc85e83b5cfe6819ab2562669a4d8f))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.40](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.39...@react-navigation/bottom-tabs@5.0.0-alpha.40) (2020-02-02)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* add licenses ([0c159db](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/commit/0c159db4c9bc85e83b5cfe6819ab2562669a4d8f))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.39](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.38...@react-navigation/bottom-tabs@5.0.0-alpha.39) (2020-01-24)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* use layout instead of dimensions for determining tab bar layout ([f1fe951](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/commit/f1fe951cf9d602e1b6d4932e3c6c77bbeaaec5c0))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.38](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.37...@react-navigation/bottom-tabs@5.0.0-alpha.38) (2020-01-23)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
|
||||||
|
|
||||||
* don't use native driver on web ([0a982ee](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/commit/0a982ee6984b24c0ba053a30223e255f3835e050))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* let the navigator specify if default can be prevented ([da67e13](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/commit/da67e134d2157201360427d3c10da24f24cae7aa))
|
* add ability add listeners with listeners prop ([1624108](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/162410843c4f175ae107756de1c3af04d1d47aa7)), closes [#6756](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/issues/6756)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.37](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.36...@react-navigation/bottom-tabs@5.0.0-alpha.37) (2020-01-14)
|
## [5.0.7](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.6...@react-navigation/bottom-tabs@5.0.7) (2020-02-21)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
@@ -390,18 +274,51 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.36](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.35...@react-navigation/bottom-tabs@5.0.0-alpha.36) (2020-01-13)
|
## [5.0.6](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.5...@react-navigation/bottom-tabs@5.0.6) (2020-02-19)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.0.5](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.4...@react-navigation/bottom-tabs@5.0.5) (2020-02-14)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.0.4](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.3...@react-navigation/bottom-tabs@5.0.4) (2020-02-14)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.0.3](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.2...@react-navigation/bottom-tabs@5.0.3) (2020-02-12)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.0.2](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.1...@react-navigation/bottom-tabs@5.0.2) (2020-02-11)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* make sure paths aren't aliased when building definitions ([65a5dac](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/commit/65a5dac2bf887f4ba081ab15bd4c9870bb15697f)), closes [#265](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/issues/265)
|
* initialize keyboard-hiding tabBar to visible=true ([#6740](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/issues/6740), [#6799](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/issues/6799)) ([0c59ef7](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/0c59ef7328c63108a2a2c04e927794d73cead63a))
|
||||||
|
* provide route context to header and bottom tabs ([b6e7e08](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/b6e7e08b9a05be6c04ed21e938b9580876239116))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.35](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.34...@react-navigation/bottom-tabs@5.0.0-alpha.35) (2020-01-13)
|
## [5.0.1](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.45...@react-navigation/bottom-tabs@5.0.1) (2020-02-10)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
@@ -409,7 +326,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.34](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.32...@react-navigation/bottom-tabs@5.0.0-alpha.34) (2020-01-09)
|
# [5.0.0-alpha.45](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.44...@react-navigation/bottom-tabs@5.0.0-alpha.45) (2020-02-04)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
@@ -417,7 +334,107 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.33](https://github.com/react-navigation/navigation-ex/tree/master/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.32...@react-navigation/bottom-tabs@5.0.0-alpha.33) (2020-01-09)
|
# [5.0.0-alpha.44](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.43...@react-navigation/bottom-tabs@5.0.0-alpha.44) (2020-02-04)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [5.0.0-alpha.43](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.42...@react-navigation/bottom-tabs@5.0.0-alpha.43) (2020-02-03)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [5.0.0-alpha.42](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.39...@react-navigation/bottom-tabs@5.0.0-alpha.42) (2020-02-02)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* add licenses ([0c159db](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/0c159db4c9bc85e83b5cfe6819ab2562669a4d8f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [5.0.0-alpha.40](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.39...@react-navigation/bottom-tabs@5.0.0-alpha.40) (2020-02-02)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* add licenses ([0c159db](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/0c159db4c9bc85e83b5cfe6819ab2562669a4d8f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [5.0.0-alpha.39](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.38...@react-navigation/bottom-tabs@5.0.0-alpha.39) (2020-01-24)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* use layout instead of dimensions for determining tab bar layout ([f1fe951](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/f1fe951cf9d602e1b6d4932e3c6c77bbeaaec5c0))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [5.0.0-alpha.38](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.37...@react-navigation/bottom-tabs@5.0.0-alpha.38) (2020-01-23)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* don't use native driver on web ([0a982ee](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/0a982ee6984b24c0ba053a30223e255f3835e050))
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* let the navigator specify if default can be prevented ([da67e13](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/da67e134d2157201360427d3c10da24f24cae7aa))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [5.0.0-alpha.37](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.36...@react-navigation/bottom-tabs@5.0.0-alpha.37) (2020-01-14)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [5.0.0-alpha.36](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.35...@react-navigation/bottom-tabs@5.0.0-alpha.36) (2020-01-13)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* make sure paths aren't aliased when building definitions ([65a5dac](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/commit/65a5dac2bf887f4ba081ab15bd4c9870bb15697f)), closes [#265](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/issues/265)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [5.0.0-alpha.35](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.34...@react-navigation/bottom-tabs@5.0.0-alpha.35) (2020-01-13)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [5.0.0-alpha.34](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.32...@react-navigation/bottom-tabs@5.0.0-alpha.34) (2020-01-09)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [5.0.0-alpha.33](https://github.com/react-navigation/react-navigation/tree/main/packages/bottom-tabs/compare/@react-navigation/bottom-tabs@5.0.0-alpha.32...@react-navigation/bottom-tabs@5.0.0-alpha.33) (2020-01-09)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
**Note:** Version bump only for package @react-navigation/bottom-tabs
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@react-navigation/bottom-tabs",
|
"name": "@react-navigation/bottom-tabs",
|
||||||
"description": "Bottom tab navigator following iOS design guidelines",
|
"description": "Bottom tab navigator following iOS design guidelines",
|
||||||
"version": "5.5.2",
|
"version": "5.6.0",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"react-native-component",
|
"react-native-component",
|
||||||
"react-component",
|
"react-component",
|
||||||
@@ -12,7 +12,11 @@
|
|||||||
"tab"
|
"tab"
|
||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"repository": "https://github.com/react-navigation/react-navigation/tree/master/packages/bottom-tabs",
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/react-navigation/react-navigation.git",
|
||||||
|
"directory": "packages/bottom-tabs"
|
||||||
|
},
|
||||||
"main": "lib/commonjs/index.js",
|
"main": "lib/commonjs/index.js",
|
||||||
"react-native": "src/index.tsx",
|
"react-native": "src/index.tsx",
|
||||||
"source": "src/index.tsx",
|
"source": "src/index.tsx",
|
||||||
@@ -36,17 +40,17 @@
|
|||||||
"react-native-iphone-x-helper": "^1.2.1"
|
"react-native-iphone-x-helper": "^1.2.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@react-native-community/bob": "^0.14.3",
|
"@react-native-community/bob": "^0.15.1",
|
||||||
"@react-navigation/native": "^5.5.1",
|
"@react-navigation/native": "^5.6.0",
|
||||||
"@types/color": "^3.0.1",
|
"@types/color": "^3.0.1",
|
||||||
"@types/react": "^16.9.34",
|
"@types/react": "^16.9.36",
|
||||||
"@types/react-native": "^0.62.7",
|
"@types/react-native": "^0.62.7",
|
||||||
"del-cli": "^3.0.0",
|
"del-cli": "^3.0.1",
|
||||||
"react": "~16.9.0",
|
"react": "~16.9.0",
|
||||||
"react-native": "~0.61.5",
|
"react-native": "~0.61.5",
|
||||||
"react-native-safe-area-context": "^1.0.0",
|
"react-native-safe-area-context": "^1.0.0",
|
||||||
"react-native-screens": "^2.7.0",
|
"react-native-screens": "^2.7.0",
|
||||||
"typescript": "^3.8.3"
|
"typescript": "^3.9.5"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@react-navigation/native": "^5.0.5",
|
"@react-navigation/native": "^5.0.5",
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import {
|
|||||||
TabNavigationState,
|
TabNavigationState,
|
||||||
} from '@react-navigation/native';
|
} from '@react-navigation/native';
|
||||||
import BottomTabView from '../views/BottomTabView';
|
import BottomTabView from '../views/BottomTabView';
|
||||||
import {
|
import type {
|
||||||
BottomTabNavigationConfig,
|
BottomTabNavigationConfig,
|
||||||
BottomTabNavigationOptions,
|
BottomTabNavigationOptions,
|
||||||
BottomTabNavigationEventMap,
|
BottomTabNavigationEventMap,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import * as React from 'react';
|
import type * as React from 'react';
|
||||||
import {
|
import type {
|
||||||
Animated,
|
Animated,
|
||||||
TouchableWithoutFeedbackProps,
|
TouchableWithoutFeedbackProps,
|
||||||
StyleProp,
|
StyleProp,
|
||||||
@@ -7,7 +7,7 @@ import {
|
|||||||
ViewStyle,
|
ViewStyle,
|
||||||
GestureResponderEvent,
|
GestureResponderEvent,
|
||||||
} from 'react-native';
|
} from 'react-native';
|
||||||
import {
|
import type {
|
||||||
NavigationHelpers,
|
NavigationHelpers,
|
||||||
NavigationProp,
|
NavigationProp,
|
||||||
ParamListBase,
|
ParamListBase,
|
||||||
@@ -119,7 +119,7 @@ export type BottomTabDescriptorMap = {
|
|||||||
[key: string]: BottomTabDescriptor;
|
[key: string]: BottomTabDescriptor;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type BottomTabNavigationConfig = {
|
export type BottomTabNavigationConfig<T = BottomTabBarOptions> = {
|
||||||
/**
|
/**
|
||||||
* Whether the screens should render the first time they are accessed. Defaults to `true`.
|
* Whether the screens should render the first time they are accessed. Defaults to `true`.
|
||||||
* Set it to `false` if you want to render all screens on initial render.
|
* Set it to `false` if you want to render all screens on initial render.
|
||||||
@@ -128,11 +128,11 @@ export type BottomTabNavigationConfig = {
|
|||||||
/**
|
/**
|
||||||
* Function that returns a React element to display as the tab bar.
|
* Function that returns a React element to display as the tab bar.
|
||||||
*/
|
*/
|
||||||
tabBar?: (props: BottomTabBarProps) => React.ReactNode;
|
tabBar?: (props: BottomTabBarProps<T>) => React.ReactNode;
|
||||||
/**
|
/**
|
||||||
* Options for the tab bar which will be passed as props to the tab bar component.
|
* Options for the tab bar which will be passed as props to the tab bar component.
|
||||||
*/
|
*/
|
||||||
tabBarOptions?: BottomTabBarOptions;
|
tabBarOptions?: T;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type BottomTabBarOptions = {
|
export type BottomTabBarOptions = {
|
||||||
@@ -164,21 +164,21 @@ export type BottomTabBarOptions = {
|
|||||||
* Whether the tab label should be visible. Defaults to `true`.
|
* Whether the tab label should be visible. Defaults to `true`.
|
||||||
*/
|
*/
|
||||||
showLabel?: boolean;
|
showLabel?: boolean;
|
||||||
/**
|
|
||||||
* Whether the tab icon should be visible. Defaults to `true`.
|
|
||||||
*/
|
|
||||||
showIcon?: boolean;
|
|
||||||
/**
|
/**
|
||||||
* Style object for the tab label.
|
* Style object for the tab label.
|
||||||
*/
|
*/
|
||||||
labelStyle?: StyleProp<TextStyle>;
|
labelStyle?: StyleProp<TextStyle>;
|
||||||
|
/**
|
||||||
|
* Style object for the tab icon.
|
||||||
|
*/
|
||||||
|
iconStyle?: StyleProp<TextStyle>;
|
||||||
/**
|
/**
|
||||||
* Style object for the tab container.
|
* Style object for the tab container.
|
||||||
*/
|
*/
|
||||||
tabStyle?: StyleProp<ViewStyle>;
|
tabStyle?: StyleProp<ViewStyle>;
|
||||||
/**
|
/**
|
||||||
* Whether the label is rendered below the icon or beside the icon.
|
* Whether the label is rendered below the icon or beside the icon.
|
||||||
* By default, in `vertical` orinetation, label is rendered below and in `horizontal` orientation, it's rendered beside.
|
* By default, in `vertical` orientation, label is rendered below and in `horizontal` orientation, it's rendered beside.
|
||||||
*/
|
*/
|
||||||
labelPosition?: LabelPosition;
|
labelPosition?: LabelPosition;
|
||||||
/**
|
/**
|
||||||
@@ -201,7 +201,7 @@ export type BottomTabBarOptions = {
|
|||||||
style?: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;
|
style?: Animated.WithAnimatedValue<StyleProp<ViewStyle>>;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type BottomTabBarProps = BottomTabBarOptions & {
|
export type BottomTabBarProps<T = BottomTabBarOptions> = T & {
|
||||||
state: TabNavigationState;
|
state: TabNavigationState;
|
||||||
descriptors: BottomTabDescriptorMap;
|
descriptors: BottomTabDescriptorMap;
|
||||||
navigation: NavigationHelpers<ParamListBase, BottomTabNavigationEventMap>;
|
navigation: NavigationHelpers<ParamListBase, BottomTabNavigationEventMap>;
|
||||||
|
|||||||
31
packages/bottom-tabs/src/utils/useIsKeyboardShown.tsx
Normal file
31
packages/bottom-tabs/src/utils/useIsKeyboardShown.tsx
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import * as React from 'react';
|
||||||
|
import { Keyboard, Platform } from 'react-native';
|
||||||
|
|
||||||
|
export default function useIsKeyboardShown() {
|
||||||
|
const [isKeyboardShown, setIsKeyboardShown] = React.useState(false);
|
||||||
|
|
||||||
|
React.useEffect(() => {
|
||||||
|
const handleKeyboardShow = () => setIsKeyboardShown(true);
|
||||||
|
const handleKeyboardHide = () => setIsKeyboardShown(false);
|
||||||
|
|
||||||
|
if (Platform.OS === 'ios') {
|
||||||
|
Keyboard.addListener('keyboardWillShow', handleKeyboardShow);
|
||||||
|
Keyboard.addListener('keyboardWillHide', handleKeyboardHide);
|
||||||
|
} else {
|
||||||
|
Keyboard.addListener('keyboardDidShow', handleKeyboardShow);
|
||||||
|
Keyboard.addListener('keyboardDidHide', handleKeyboardHide);
|
||||||
|
}
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
if (Platform.OS === 'ios') {
|
||||||
|
Keyboard.removeListener('keyboardWillShow', handleKeyboardShow);
|
||||||
|
Keyboard.removeListener('keyboardWillHide', handleKeyboardHide);
|
||||||
|
} else {
|
||||||
|
Keyboard.removeListener('keyboardDidShow', handleKeyboardShow);
|
||||||
|
Keyboard.removeListener('keyboardDidHide', handleKeyboardHide);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return isKeyboardShown;
|
||||||
|
}
|
||||||
37
packages/bottom-tabs/src/utils/useWindowDimensions.tsx
Normal file
37
packages/bottom-tabs/src/utils/useWindowDimensions.tsx
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
import * as React from 'react';
|
||||||
|
import { ScaledSize, Dimensions } from 'react-native';
|
||||||
|
|
||||||
|
// This is similar to the new useWindowDimensions hook in react-native
|
||||||
|
// However, we have a custom implementation to support older RN versions
|
||||||
|
export default function useWindowDimensions() {
|
||||||
|
const [dimensions, setDimensions] = React.useState(() => {
|
||||||
|
// `height` and `width` maybe undefined during SSR, so we initialize them
|
||||||
|
const { height = 0, width = 0 } = Dimensions.get('window');
|
||||||
|
|
||||||
|
return { height, width };
|
||||||
|
});
|
||||||
|
|
||||||
|
React.useEffect(() => {
|
||||||
|
const onChange = ({ window }: { window: ScaledSize }) => {
|
||||||
|
const { width, height } = window;
|
||||||
|
|
||||||
|
setDimensions((d) => {
|
||||||
|
if (width === d.width && height === d.height) {
|
||||||
|
return d;
|
||||||
|
}
|
||||||
|
|
||||||
|
return { width, height };
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// We might have missed an update before the listener was added
|
||||||
|
// So make sure to update the dimensions
|
||||||
|
onChange({ window: Dimensions.get('window') });
|
||||||
|
|
||||||
|
Dimensions.addEventListener('change', onChange);
|
||||||
|
|
||||||
|
return () => Dimensions.addEventListener('change', onChange);
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
return dimensions;
|
||||||
|
}
|
||||||
@@ -3,11 +3,8 @@ import {
|
|||||||
View,
|
View,
|
||||||
Animated,
|
Animated,
|
||||||
StyleSheet,
|
StyleSheet,
|
||||||
Keyboard,
|
|
||||||
Platform,
|
Platform,
|
||||||
LayoutChangeEvent,
|
LayoutChangeEvent,
|
||||||
ScaledSize,
|
|
||||||
Dimensions,
|
|
||||||
} from 'react-native';
|
} from 'react-native';
|
||||||
import {
|
import {
|
||||||
NavigationContext,
|
NavigationContext,
|
||||||
@@ -19,7 +16,9 @@ import {
|
|||||||
import { useSafeArea } from 'react-native-safe-area-context';
|
import { useSafeArea } from 'react-native-safe-area-context';
|
||||||
|
|
||||||
import BottomTabItem from './BottomTabItem';
|
import BottomTabItem from './BottomTabItem';
|
||||||
import { BottomTabBarProps } from '../types';
|
import useWindowDimensions from '../utils/useWindowDimensions';
|
||||||
|
import useIsKeyboardShown from '../utils/useIsKeyboardShown';
|
||||||
|
import type { BottomTabBarProps } from '../types';
|
||||||
|
|
||||||
type Props = BottomTabBarProps & {
|
type Props = BottomTabBarProps & {
|
||||||
activeTintColor?: string;
|
activeTintColor?: string;
|
||||||
@@ -44,8 +43,8 @@ export default function BottomTabBar({
|
|||||||
keyboardHidesTabBar = false,
|
keyboardHidesTabBar = false,
|
||||||
labelPosition,
|
labelPosition,
|
||||||
labelStyle,
|
labelStyle,
|
||||||
|
iconStyle,
|
||||||
safeAreaInsets,
|
safeAreaInsets,
|
||||||
showIcon,
|
|
||||||
showLabel,
|
showLabel,
|
||||||
style,
|
style,
|
||||||
tabStyle,
|
tabStyle,
|
||||||
@@ -57,7 +56,8 @@ export default function BottomTabBar({
|
|||||||
const focusedDescriptor = descriptors[focusedRoute.key];
|
const focusedDescriptor = descriptors[focusedRoute.key];
|
||||||
const focusedOptions = focusedDescriptor.options;
|
const focusedOptions = focusedDescriptor.options;
|
||||||
|
|
||||||
const [isKeyboardShown, setIsKeyboardShown] = React.useState(false);
|
const dimensions = useWindowDimensions();
|
||||||
|
const isKeyboardShown = useIsKeyboardShown();
|
||||||
|
|
||||||
const shouldShowTabBar =
|
const shouldShowTabBar =
|
||||||
focusedOptions.tabBarVisible !== false &&
|
focusedOptions.tabBarVisible !== false &&
|
||||||
@@ -91,43 +91,6 @@ export default function BottomTabBar({
|
|||||||
}
|
}
|
||||||
}, [shouldShowTabBar, visible]);
|
}, [shouldShowTabBar, visible]);
|
||||||
|
|
||||||
const [dimensions, setDimensions] = React.useState(() => {
|
|
||||||
const { height = 0, width = 0 } = Dimensions.get('window');
|
|
||||||
|
|
||||||
return { height, width };
|
|
||||||
});
|
|
||||||
|
|
||||||
React.useEffect(() => {
|
|
||||||
const handleOrientationChange = ({ window }: { window: ScaledSize }) => {
|
|
||||||
setDimensions(window);
|
|
||||||
};
|
|
||||||
|
|
||||||
Dimensions.addEventListener('change', handleOrientationChange);
|
|
||||||
|
|
||||||
const handleKeyboardShow = () => setIsKeyboardShown(true);
|
|
||||||
const handleKeyboardHide = () => setIsKeyboardShown(false);
|
|
||||||
|
|
||||||
if (Platform.OS === 'ios') {
|
|
||||||
Keyboard.addListener('keyboardWillShow', handleKeyboardShow);
|
|
||||||
Keyboard.addListener('keyboardWillHide', handleKeyboardHide);
|
|
||||||
} else {
|
|
||||||
Keyboard.addListener('keyboardDidShow', handleKeyboardShow);
|
|
||||||
Keyboard.addListener('keyboardDidHide', handleKeyboardHide);
|
|
||||||
}
|
|
||||||
|
|
||||||
return () => {
|
|
||||||
Dimensions.removeEventListener('change', handleOrientationChange);
|
|
||||||
|
|
||||||
if (Platform.OS === 'ios') {
|
|
||||||
Keyboard.removeListener('keyboardWillShow', handleKeyboardShow);
|
|
||||||
Keyboard.removeListener('keyboardWillHide', handleKeyboardHide);
|
|
||||||
} else {
|
|
||||||
Keyboard.removeListener('keyboardDidShow', handleKeyboardShow);
|
|
||||||
Keyboard.removeListener('keyboardDidHide', handleKeyboardHide);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
const [layout, setLayout] = React.useState({
|
const [layout, setLayout] = React.useState({
|
||||||
height: 0,
|
height: 0,
|
||||||
width: dimensions.width,
|
width: dimensions.width,
|
||||||
@@ -283,9 +246,9 @@ export default function BottomTabBar({
|
|||||||
button={options.tabBarButton}
|
button={options.tabBarButton}
|
||||||
icon={options.tabBarIcon}
|
icon={options.tabBarIcon}
|
||||||
label={label}
|
label={label}
|
||||||
showIcon={showIcon}
|
|
||||||
showLabel={showLabel}
|
showLabel={showLabel}
|
||||||
labelStyle={labelStyle}
|
labelStyle={labelStyle}
|
||||||
|
iconStyle={iconStyle}
|
||||||
style={tabStyle}
|
style={tabStyle}
|
||||||
/>
|
/>
|
||||||
</NavigationRouteContext.Provider>
|
</NavigationRouteContext.Provider>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import { Link, Route, useTheme } from '@react-navigation/native';
|
|||||||
import Color from 'color';
|
import Color from 'color';
|
||||||
|
|
||||||
import TabBarIcon from './TabBarIcon';
|
import TabBarIcon from './TabBarIcon';
|
||||||
import { BottomTabBarButtonProps } from '../types';
|
import type { BottomTabBarButtonProps } from '../types';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
/**
|
/**
|
||||||
@@ -90,10 +90,6 @@ type Props = {
|
|||||||
* Whether to show the label text for the tab.
|
* Whether to show the label text for the tab.
|
||||||
*/
|
*/
|
||||||
showLabel?: boolean;
|
showLabel?: boolean;
|
||||||
/**
|
|
||||||
* Whether to show the icon for the tab.
|
|
||||||
*/
|
|
||||||
showIcon?: boolean;
|
|
||||||
/**
|
/**
|
||||||
* Whether to allow scaling the font for the label for accessibility purposes.
|
* Whether to allow scaling the font for the label for accessibility purposes.
|
||||||
*/
|
*/
|
||||||
@@ -102,6 +98,10 @@ type Props = {
|
|||||||
* Style object for the label element.
|
* Style object for the label element.
|
||||||
*/
|
*/
|
||||||
labelStyle?: StyleProp<TextStyle>;
|
labelStyle?: StyleProp<TextStyle>;
|
||||||
|
/**
|
||||||
|
* Style object for the icon element.
|
||||||
|
*/
|
||||||
|
iconStyle?: StyleProp<ViewStyle>;
|
||||||
/**
|
/**
|
||||||
* Style object for the wrapper element.
|
* Style object for the wrapper element.
|
||||||
*/
|
*/
|
||||||
@@ -165,9 +165,9 @@ export default function BottomTabBarItem({
|
|||||||
activeBackgroundColor = 'transparent',
|
activeBackgroundColor = 'transparent',
|
||||||
inactiveBackgroundColor = 'transparent',
|
inactiveBackgroundColor = 'transparent',
|
||||||
showLabel = true,
|
showLabel = true,
|
||||||
showIcon = true,
|
|
||||||
allowFontScaling,
|
allowFontScaling,
|
||||||
labelStyle,
|
labelStyle,
|
||||||
|
iconStyle,
|
||||||
style,
|
style,
|
||||||
}: Props) {
|
}: Props) {
|
||||||
const { colors } = useTheme();
|
const { colors } = useTheme();
|
||||||
@@ -196,7 +196,7 @@ export default function BottomTabBarItem({
|
|||||||
style={[
|
style={[
|
||||||
styles.label,
|
styles.label,
|
||||||
{ color },
|
{ color },
|
||||||
showIcon && horizontal ? styles.labelBeside : styles.labelBeneath,
|
horizontal ? styles.labelBeside : styles.labelBeneath,
|
||||||
labelStyle,
|
labelStyle,
|
||||||
]}
|
]}
|
||||||
allowFontScaling={allowFontScaling}
|
allowFontScaling={allowFontScaling}
|
||||||
@@ -210,7 +210,7 @@ export default function BottomTabBarItem({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const renderIcon = ({ focused }: { focused: boolean }) => {
|
const renderIcon = ({ focused }: { focused: boolean }) => {
|
||||||
if (showIcon === false || icon === undefined) {
|
if (icon === undefined) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -226,7 +226,10 @@ export default function BottomTabBarItem({
|
|||||||
activeTintColor={activeTintColor}
|
activeTintColor={activeTintColor}
|
||||||
inactiveTintColor={inactiveTintColor}
|
inactiveTintColor={inactiveTintColor}
|
||||||
renderIcon={icon}
|
renderIcon={icon}
|
||||||
style={horizontal ? styles.iconHorizontal : styles.iconVertical}
|
style={[
|
||||||
|
horizontal ? styles.iconHorizontal : styles.iconVertical,
|
||||||
|
iconStyle,
|
||||||
|
]}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import { ScreenContainer } from 'react-native-screens';
|
|||||||
import SafeAreaProviderCompat from './SafeAreaProviderCompat';
|
import SafeAreaProviderCompat from './SafeAreaProviderCompat';
|
||||||
import ResourceSavingScene from './ResourceSavingScene';
|
import ResourceSavingScene from './ResourceSavingScene';
|
||||||
import BottomTabBar from './BottomTabBar';
|
import BottomTabBar from './BottomTabBar';
|
||||||
import {
|
import type {
|
||||||
BottomTabNavigationConfig,
|
BottomTabNavigationConfig,
|
||||||
BottomTabDescriptorMap,
|
BottomTabDescriptorMap,
|
||||||
BottomTabNavigationHelpers,
|
BottomTabNavigationHelpers,
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ export default class ResourceSavingScene extends React.Component<Props> {
|
|||||||
if (screensEnabled?.() && Platform.OS !== 'web') {
|
if (screensEnabled?.() && Platform.OS !== 'web') {
|
||||||
const { isVisible, ...rest } = this.props;
|
const { isVisible, ...rest } = this.props;
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-expect-error: stackPresentation is incorrectly marked as required
|
||||||
return <Screen active={isVisible ? 1 : 0} {...rest} />;
|
return <Screen active={isVisible ? 1 : 0} {...rest} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { View, StyleSheet, StyleProp, ViewStyle } from 'react-native';
|
import { View, StyleSheet, StyleProp, ViewStyle } from 'react-native';
|
||||||
import { Route } from '@react-navigation/native';
|
import type { Route } from '@react-navigation/native';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
route: Route<string>;
|
route: Route<string>;
|
||||||
|
|||||||
@@ -3,90 +3,18 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
## [5.1.26](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.25...@react-navigation/compat@5.1.26) (2020-06-06)
|
## [5.1.27](https://github.com/react-navigation/react-navigation/compare/@react-navigation/compat@5.1.26...@react-navigation/compat@5.1.27) (2020-06-24)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.25](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.24...@react-navigation/compat@5.1.25) (2020-05-27)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.24](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.23...@react-navigation/compat@5.1.24) (2020-05-23)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.23](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.22...@react-navigation/compat@5.1.23) (2020-05-20)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.22](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.21...@react-navigation/compat@5.1.22) (2020-05-20)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.21](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.20...@react-navigation/compat@5.1.21) (2020-05-16)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.20](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.19...@react-navigation/compat@5.1.20) (2020-05-14)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.19](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.18...@react-navigation/compat@5.1.19) (2020-05-14)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.18](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.17...@react-navigation/compat@5.1.18) (2020-05-10)
|
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.17](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.16...@react-navigation/compat@5.1.17) (2020-05-08)
|
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* fix building typescript definitions. closes [#8216](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/issues/8216) ([47a1229](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/commit/47a12298378747edd2d22e54dc1c8677f98c49b4))
|
* more improvements to types ([d244488](https://github.com/react-navigation/react-navigation/commit/d2444887be227bbbdcfcb13a7f26a8ebb344043e))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.16](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.15...@react-navigation/compat@5.1.16) (2020-05-08)
|
## [5.1.26](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.25...@react-navigation/compat@5.1.26) (2020-06-06)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -94,7 +22,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.15](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.14...@react-navigation/compat@5.1.15) (2020-05-05)
|
## [5.1.25](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.24...@react-navigation/compat@5.1.25) (2020-05-27)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -102,7 +30,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.14](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.13...@react-navigation/compat@5.1.14) (2020-05-01)
|
## [5.1.24](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.23...@react-navigation/compat@5.1.24) (2020-05-23)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -110,7 +38,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.13](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.12...@react-navigation/compat@5.1.13) (2020-05-01)
|
## [5.1.23](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.22...@react-navigation/compat@5.1.23) (2020-05-20)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -118,7 +46,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.12](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.11...@react-navigation/compat@5.1.12) (2020-04-30)
|
## [5.1.22](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.21...@react-navigation/compat@5.1.22) (2020-05-20)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -126,7 +54,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.11](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.10...@react-navigation/compat@5.1.11) (2020-04-30)
|
## [5.1.21](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.20...@react-navigation/compat@5.1.21) (2020-05-16)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -134,19 +62,42 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.10](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.9...@react-navigation/compat@5.1.10) (2020-04-27)
|
## [5.1.20](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.19...@react-navigation/compat@5.1.20) (2020-05-14)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.1.19](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.18...@react-navigation/compat@5.1.19) (2020-05-14)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.1.18](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.17...@react-navigation/compat@5.1.18) (2020-05-10)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.1.17](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.16...@react-navigation/compat@5.1.17) (2020-05-08)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* fix typo in navigationOptions ([8cbb201](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/commit/8cbb201f1a7fb90e45a078df6bc42ce4771cc6a6))
|
* fix building typescript definitions. closes [#8216](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/issues/8216) ([47a1229](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/commit/47a12298378747edd2d22e54dc1c8677f98c49b4))
|
||||||
* spread parent params to children in compat navigator ([24febf6](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/commit/24febf6ea99be2e5f22005fdd2a82136d647255c)), closes [#6785](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/issues/6785)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.9](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.8...@react-navigation/compat@5.1.9) (2020-04-17)
|
## [5.1.16](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.15...@react-navigation/compat@5.1.16) (2020-05-08)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -154,18 +105,59 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.8](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.7...@react-navigation/compat@5.1.8) (2020-04-08)
|
## [5.1.15](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.14...@react-navigation/compat@5.1.15) (2020-05-05)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.1.14](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.13...@react-navigation/compat@5.1.14) (2020-05-01)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.1.13](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.12...@react-navigation/compat@5.1.13) (2020-05-01)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.1.12](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.11...@react-navigation/compat@5.1.12) (2020-04-30)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.1.11](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.10...@react-navigation/compat@5.1.11) (2020-04-30)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.1.10](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.9...@react-navigation/compat@5.1.10) (2020-04-27)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* use 1 as default in compatibility pop action ([4408117](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/commit/44081172d440c713ad3543a2d5e1e18ebc8f72a4))
|
* fix typo in navigationOptions ([8cbb201](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/commit/8cbb201f1a7fb90e45a078df6bc42ce4771cc6a6))
|
||||||
|
* spread parent params to children in compat navigator ([24febf6](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/commit/24febf6ea99be2e5f22005fdd2a82136d647255c)), closes [#6785](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/issues/6785)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.7](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.6...@react-navigation/compat@5.1.7) (2020-03-30)
|
## [5.1.9](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.8...@react-navigation/compat@5.1.9) (2020-04-17)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -173,7 +165,18 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.6](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.5...@react-navigation/compat@5.1.6) (2020-03-23)
|
## [5.1.8](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.7...@react-navigation/compat@5.1.8) (2020-04-08)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* use 1 as default in compatibility pop action ([4408117](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/commit/44081172d440c713ad3543a2d5e1e18ebc8f72a4))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.1.7](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.6...@react-navigation/compat@5.1.7) (2020-03-30)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -181,7 +184,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.5](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.4...@react-navigation/compat@5.1.5) (2020-03-22)
|
## [5.1.6](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.5...@react-navigation/compat@5.1.6) (2020-03-23)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -189,7 +192,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.4](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.3...@react-navigation/compat@5.1.4) (2020-03-19)
|
## [5.1.5](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.4...@react-navigation/compat@5.1.5) (2020-03-22)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -197,7 +200,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.3](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.2...@react-navigation/compat@5.1.3) (2020-03-17)
|
## [5.1.4](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.3...@react-navigation/compat@5.1.4) (2020-03-19)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -205,7 +208,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.2](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.1...@react-navigation/compat@5.1.2) (2020-03-16)
|
## [5.1.3](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.2...@react-navigation/compat@5.1.3) (2020-03-17)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -213,7 +216,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.1](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.1.0...@react-navigation/compat@5.1.1) (2020-03-03)
|
## [5.1.2](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.1...@react-navigation/compat@5.1.2) (2020-03-16)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -221,18 +224,26 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.1.0](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.0.7...@react-navigation/compat@5.1.0) (2020-02-26)
|
## [5.1.1](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.1.0...@react-navigation/compat@5.1.1) (2020-03-03)
|
||||||
|
|
||||||
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# [5.1.0](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.7...@react-navigation/compat@5.1.0) (2020-02-26)
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add ability add listeners with listeners prop ([1624108](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/commit/162410843c4f175ae107756de1c3af04d1d47aa7)), closes [#6756](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/issues/6756)
|
* add ability add listeners with listeners prop ([1624108](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/commit/162410843c4f175ae107756de1c3af04d1d47aa7)), closes [#6756](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/issues/6756)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.0.7](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.0.6...@react-navigation/compat@5.0.7) (2020-02-21)
|
## [5.0.7](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.6...@react-navigation/compat@5.0.7) (2020-02-21)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -240,18 +251,18 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.0.6](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.0.5...@react-navigation/compat@5.0.6) (2020-02-19)
|
## [5.0.6](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.5...@react-navigation/compat@5.0.6) (2020-02-19)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* add NavigationEvents ([d69b0db](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/commit/d69b0db60455b8789276822ba73f5349db8842d7)), closes [/github.com/react-navigation/react-navigation/issues/6821#issuecomment-588268512](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/issues/issuecomment-588268512)
|
* add NavigationEvents ([d69b0db](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/commit/d69b0db60455b8789276822ba73f5349db8842d7)), closes [/github.com/react-navigation/react-navigation/issues/6821#issuecomment-588268512](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/issues/issuecomment-588268512)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.0.5](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.0.4...@react-navigation/compat@5.0.5) (2020-02-14)
|
## [5.0.5](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.4...@react-navigation/compat@5.0.5) (2020-02-14)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -259,7 +270,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.0.4](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.0.3...@react-navigation/compat@5.0.4) (2020-02-14)
|
## [5.0.4](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.3...@react-navigation/compat@5.0.4) (2020-02-14)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -267,7 +278,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.0.3](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.0.2...@react-navigation/compat@5.0.3) (2020-02-12)
|
## [5.0.3](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.2...@react-navigation/compat@5.0.3) (2020-02-12)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -275,7 +286,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.0.2](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.0.1...@react-navigation/compat@5.0.2) (2020-02-11)
|
## [5.0.2](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.1...@react-navigation/compat@5.0.2) (2020-02-11)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -283,7 +294,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.0.1](https://github.com/react-navigation/react-navigation/tree/master/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.34...@react-navigation/compat@5.0.1) (2020-02-10)
|
## [5.0.1](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.34...@react-navigation/compat@5.0.1) (2020-02-10)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -291,7 +302,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.34](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.33...@react-navigation/compat@5.0.0-alpha.34) (2020-02-04)
|
# [5.0.0-alpha.34](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.33...@react-navigation/compat@5.0.0-alpha.34) (2020-02-04)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -299,7 +310,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.33](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.32...@react-navigation/compat@5.0.0-alpha.33) (2020-02-04)
|
# [5.0.0-alpha.33](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.32...@react-navigation/compat@5.0.0-alpha.33) (2020-02-04)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -307,7 +318,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.32](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.31...@react-navigation/compat@5.0.0-alpha.32) (2020-02-03)
|
# [5.0.0-alpha.32](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.31...@react-navigation/compat@5.0.0-alpha.32) (2020-02-03)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -315,31 +326,31 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.31](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.28...@react-navigation/compat@5.0.0-alpha.31) (2020-02-02)
|
# [5.0.0-alpha.31](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.28...@react-navigation/compat@5.0.0-alpha.31) (2020-02-02)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* add licenses ([0c159db](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/commit/0c159db4c9bc85e83b5cfe6819ab2562669a4d8f))
|
* add licenses ([0c159db](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/commit/0c159db4c9bc85e83b5cfe6819ab2562669a4d8f))
|
||||||
* throw when assigning or accessing the router property in compat ([944fa35](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/commit/944fa35ed4778ebc7fa7cd50092719cbd5bf3caf))
|
* throw when assigning or accessing the router property in compat ([944fa35](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/commit/944fa35ed4778ebc7fa7cd50092719cbd5bf3caf))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.29](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.28...@react-navigation/compat@5.0.0-alpha.29) (2020-02-02)
|
# [5.0.0-alpha.29](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.28...@react-navigation/compat@5.0.0-alpha.29) (2020-02-02)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* add licenses ([0c159db](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/commit/0c159db4c9bc85e83b5cfe6819ab2562669a4d8f))
|
* add licenses ([0c159db](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/commit/0c159db4c9bc85e83b5cfe6819ab2562669a4d8f))
|
||||||
* throw when assigning or accessing the router property in compat ([944fa35](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/commit/944fa35ed4778ebc7fa7cd50092719cbd5bf3caf))
|
* throw when assigning or accessing the router property in compat ([944fa35](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/commit/944fa35ed4778ebc7fa7cd50092719cbd5bf3caf))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.28](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.27...@react-navigation/compat@5.0.0-alpha.28) (2020-01-24)
|
# [5.0.0-alpha.28](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.27...@react-navigation/compat@5.0.0-alpha.28) (2020-01-24)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -347,19 +358,19 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.27](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.26...@react-navigation/compat@5.0.0-alpha.27) (2020-01-23)
|
# [5.0.0-alpha.27](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.26...@react-navigation/compat@5.0.0-alpha.27) (2020-01-23)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* ensure re-render on isFirstRouteInParent change in compat layer ([14ae373](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/commit/14ae3738cf46088e082bd1c60b9dcc6dacacd1bf))
|
* ensure re-render on isFirstRouteInParent change in compat layer ([14ae373](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/commit/14ae3738cf46088e082bd1c60b9dcc6dacacd1bf))
|
||||||
* improvements to the compat layer ([2a76dc4](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/commit/2a76dc4d3c4cc0365a3afcff6ac321145efed026))
|
* improvements to the compat layer ([2a76dc4](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/commit/2a76dc4d3c4cc0365a3afcff6ac321145efed026))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.26](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.25...@react-navigation/compat@5.0.0-alpha.26) (2020-01-14)
|
# [5.0.0-alpha.26](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.25...@react-navigation/compat@5.0.0-alpha.26) (2020-01-14)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -367,18 +378,18 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.25](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.24...@react-navigation/compat@5.0.0-alpha.25) (2020-01-13)
|
# [5.0.0-alpha.25](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.24...@react-navigation/compat@5.0.0-alpha.25) (2020-01-13)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* make sure paths aren't aliased when building definitions ([65a5dac](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/commit/65a5dac2bf887f4ba081ab15bd4c9870bb15697f)), closes [#265](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/issues/265)
|
* make sure paths aren't aliased when building definitions ([65a5dac](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/commit/65a5dac2bf887f4ba081ab15bd4c9870bb15697f)), closes [#265](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/issues/265)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.24](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.23...@react-navigation/compat@5.0.0-alpha.24) (2020-01-13)
|
# [5.0.0-alpha.24](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.23...@react-navigation/compat@5.0.0-alpha.24) (2020-01-13)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -386,7 +397,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.23](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.21...@react-navigation/compat@5.0.0-alpha.23) (2020-01-09)
|
# [5.0.0-alpha.23](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.21...@react-navigation/compat@5.0.0-alpha.23) (2020-01-09)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
@@ -394,7 +405,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.22](https://github.com/react-navigation/navigation-ex/tree/master/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.21...@react-navigation/compat@5.0.0-alpha.22) (2020-01-09)
|
# [5.0.0-alpha.22](https://github.com/react-navigation/react-navigation/tree/main/packages/compat/compare/@react-navigation/compat@5.0.0-alpha.21...@react-navigation/compat@5.0.0-alpha.22) (2020-01-09)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/compat
|
**Note:** Version bump only for package @react-navigation/compat
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,13 @@
|
|||||||
{
|
{
|
||||||
"name": "@react-navigation/compat",
|
"name": "@react-navigation/compat",
|
||||||
"description": "Compatibility layer to write navigator definitions in static configuration format",
|
"description": "Compatibility layer to write navigator definitions in static configuration format",
|
||||||
"version": "5.1.26",
|
"version": "5.1.27",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"repository": "https://github.com/react-navigation/react-navigation/tree/master/packages/compat",
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/react-navigation/react-navigation.git",
|
||||||
|
"directory": "packages/compat"
|
||||||
|
},
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/react-navigation/react-navigation/issues"
|
"url": "https://github.com/react-navigation/react-navigation/issues"
|
||||||
},
|
},
|
||||||
@@ -27,11 +31,11 @@
|
|||||||
"clean": "del lib"
|
"clean": "del lib"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@react-native-community/bob": "^0.14.3",
|
"@react-native-community/bob": "^0.15.1",
|
||||||
"@react-navigation/native": "^5.5.1",
|
"@react-navigation/native": "^5.6.0",
|
||||||
"@types/react": "^16.9.34",
|
"@types/react": "^16.9.36",
|
||||||
"react": "~16.9.0",
|
"react": "~16.9.0",
|
||||||
"typescript": "^3.8.3"
|
"typescript": "^3.9.5"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@react-navigation/native": "^5.0.5",
|
"@react-navigation/native": "^5.0.5",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import {
|
import type {
|
||||||
NavigationProp,
|
NavigationProp,
|
||||||
ParamListBase,
|
ParamListBase,
|
||||||
RouteProp,
|
RouteProp,
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ export default function NavigationEvents(props: Props) {
|
|||||||
propsRef.current.onWillBlur?.();
|
propsRef.current.onWillBlur?.();
|
||||||
});
|
});
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-expect-error: transitionEnd may not exist on this navigator
|
||||||
const unsubTransitionEnd = navigation.addListener('transitionEnd', () => {
|
const unsubTransitionEnd = navigation.addListener('transitionEnd', () => {
|
||||||
if (navigation.isFocused()) {
|
if (navigation.isFocused()) {
|
||||||
propsRef.current.onDidFocus?.();
|
propsRef.current.onDidFocus?.();
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import {
|
import type {
|
||||||
NavigationState,
|
NavigationState,
|
||||||
PartialState,
|
PartialState,
|
||||||
ParamListBase,
|
ParamListBase,
|
||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
RouteProp,
|
RouteProp,
|
||||||
} from '@react-navigation/native';
|
} from '@react-navigation/native';
|
||||||
import * as helpers from './helpers';
|
import * as helpers from './helpers';
|
||||||
import { CompatNavigationProp } from './types';
|
import type { CompatNavigationProp } from './types';
|
||||||
|
|
||||||
type EventName =
|
type EventName =
|
||||||
| 'action'
|
| 'action'
|
||||||
@@ -16,10 +16,6 @@ type EventName =
|
|||||||
| 'didBlur'
|
| 'didBlur'
|
||||||
| 'refocus';
|
| 'refocus';
|
||||||
|
|
||||||
// const focusSubscriptions = new WeakMap<() => void, () => void>();
|
|
||||||
// const blurSubscriptions = new WeakMap<() => void, () => void>();
|
|
||||||
// const refocusSubscriptions = new WeakMap<() => void, () => void>();
|
|
||||||
|
|
||||||
export default function createCompatNavigationProp<
|
export default function createCompatNavigationProp<
|
||||||
NavigationPropType extends NavigationProp<ParamListBase>,
|
NavigationPropType extends NavigationProp<ParamListBase>,
|
||||||
ParamList extends ParamListBase = NavigationPropType extends NavigationProp<
|
ParamList extends ParamListBase = NavigationPropType extends NavigationProp<
|
||||||
@@ -74,7 +70,7 @@ export default function createCompatNavigationProp<
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-expect-error: this event may not exist in this navigator
|
||||||
unsubscribe = navigation.addListener('transitionEnd', listener);
|
unsubscribe = navigation.addListener('transitionEnd', listener);
|
||||||
context.subscriptions.didFocus.set(callback, unsubscribe);
|
context.subscriptions.didFocus.set(callback, unsubscribe);
|
||||||
break;
|
break;
|
||||||
@@ -86,7 +82,7 @@ export default function createCompatNavigationProp<
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-expect-error: this event may not exist in this navigator
|
||||||
unsubscribe = navigation.addListener('transitionEnd', listener);
|
unsubscribe = navigation.addListener('transitionEnd', listener);
|
||||||
context.subscriptions.didBlur.set(callback, unsubscribe);
|
context.subscriptions.didBlur.set(callback, unsubscribe);
|
||||||
break;
|
break;
|
||||||
@@ -98,7 +94,7 @@ export default function createCompatNavigationProp<
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-expect-error: this event may not exist in this navigator
|
||||||
unsubscribe = navigation.addListener('tabPress', listener);
|
unsubscribe = navigation.addListener('tabPress', listener);
|
||||||
context.subscriptions.refocus.set(callback, unsubscribe);
|
context.subscriptions.refocus.set(callback, unsubscribe);
|
||||||
break;
|
break;
|
||||||
@@ -106,7 +102,6 @@ export default function createCompatNavigationProp<
|
|||||||
case 'action':
|
case 'action':
|
||||||
throw new Error("Listening to 'action' events is not supported.");
|
throw new Error("Listening to 'action' events is not supported.");
|
||||||
default:
|
default:
|
||||||
// @ts-ignore
|
|
||||||
unsubscribe = navigation.addListener(type, callback);
|
unsubscribe = navigation.addListener(type, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,18 +139,17 @@ export default function createCompatNavigationProp<
|
|||||||
case 'action':
|
case 'action':
|
||||||
throw new Error("Listening to 'action' events is not supported.");
|
throw new Error("Listening to 'action' events is not supported.");
|
||||||
default:
|
default:
|
||||||
// @ts-ignore
|
|
||||||
navigation.removeListener(type, callback);
|
navigation.removeListener(type, callback);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
state: {
|
state: {
|
||||||
...state,
|
...state,
|
||||||
// @ts-ignore
|
// @ts-expect-error
|
||||||
routeName: state.name,
|
routeName: state.name,
|
||||||
get index() {
|
get index() {
|
||||||
// @ts-ignore
|
// @ts-expect-error
|
||||||
if (state.index !== undefined) {
|
if (state.index !== undefined) {
|
||||||
// @ts-ignore
|
// @ts-expect-error
|
||||||
return state.index;
|
return state.index;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -163,13 +157,13 @@ export default function createCompatNavigationProp<
|
|||||||
"Accessing child navigation state for a route is not safe and won't work correctly."
|
"Accessing child navigation state for a route is not safe and won't work correctly."
|
||||||
);
|
);
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-expect-error
|
||||||
return state.state ? state.state.index : undefined;
|
return state.state ? state.state.index : undefined;
|
||||||
},
|
},
|
||||||
get routes() {
|
get routes() {
|
||||||
// @ts-ignore
|
// @ts-expect-error
|
||||||
if (state.routes !== undefined) {
|
if (state.routes !== undefined) {
|
||||||
// @ts-ignore
|
// @ts-expect-error
|
||||||
return state.routes;
|
return state.routes;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -177,7 +171,7 @@ export default function createCompatNavigationProp<
|
|||||||
"Accessing child navigation state for a route is not safe and won't work correctly."
|
"Accessing child navigation state for a route is not safe and won't work correctly."
|
||||||
);
|
);
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-expect-error
|
||||||
return state.state ? state.state.routes : undefined;
|
return state.state ? state.state.routes : undefined;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -185,7 +179,7 @@ export default function createCompatNavigationProp<
|
|||||||
paramName: T,
|
paramName: T,
|
||||||
defaultValue: ParamList[T]
|
defaultValue: ParamList[T]
|
||||||
): ParamList[T] {
|
): ParamList[T] {
|
||||||
// @ts-ignore
|
// @ts-expect-error
|
||||||
const params = state.params;
|
const params = state.params;
|
||||||
|
|
||||||
if (params && paramName in params) {
|
if (params && paramName in params) {
|
||||||
@@ -201,7 +195,7 @@ export default function createCompatNavigationProp<
|
|||||||
|
|
||||||
const { routes } = navigation.dangerouslyGetState();
|
const { routes } = navigation.dangerouslyGetState();
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-expect-error
|
||||||
return routes[0].key === state.key;
|
return routes[0].key === state.key;
|
||||||
},
|
},
|
||||||
dangerouslyGetParent() {
|
dangerouslyGetParent() {
|
||||||
|
|||||||
@@ -6,24 +6,23 @@ import {
|
|||||||
TypedNavigator,
|
TypedNavigator,
|
||||||
NavigationProp,
|
NavigationProp,
|
||||||
RouteProp,
|
RouteProp,
|
||||||
EventMapBase,
|
|
||||||
NavigationRouteContext,
|
NavigationRouteContext,
|
||||||
} from '@react-navigation/native';
|
} from '@react-navigation/native';
|
||||||
import CompatScreen from './CompatScreen';
|
import CompatScreen from './CompatScreen';
|
||||||
import ScreenPropsContext from './ScreenPropsContext';
|
import ScreenPropsContext from './ScreenPropsContext';
|
||||||
import createCompatNavigationProp from './createCompatNavigationProp';
|
import createCompatNavigationProp from './createCompatNavigationProp';
|
||||||
import { CompatScreenType, CompatRouteConfig } from './types';
|
import type { CompatScreenType, CompatRouteConfig } from './types';
|
||||||
|
|
||||||
export default function createCompatNavigatorFactory<
|
export default function createCompatNavigatorFactory<
|
||||||
CreateNavigator extends () => TypedNavigator<
|
CreateNavigator extends () => TypedNavigator<
|
||||||
ParamListBase,
|
ParamListBase,
|
||||||
NavigationState,
|
NavigationState,
|
||||||
{},
|
{},
|
||||||
EventMapBase,
|
any,
|
||||||
React.ComponentType<any>
|
React.ComponentType<any>
|
||||||
>
|
>
|
||||||
>(createNavigator: CreateNavigator) {
|
>(createNavigator: CreateNavigator) {
|
||||||
// @ts-ignore
|
// @ts-expect-error: isCompat may or may not exist
|
||||||
if (createNavigator.isCompat) {
|
if (createNavigator.isCompat) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`The navigator is already in compat mode. You don't need to wrap it in 'createCompatNavigatorFactory'.`
|
`The navigator is already in compat mode. You don't need to wrap it in 'createCompatNavigatorFactory'.`
|
||||||
@@ -99,7 +98,7 @@ export default function createCompatNavigatorFactory<
|
|||||||
state?: NavigationState | PartialState<NavigationState>;
|
state?: NavigationState | PartialState<NavigationState>;
|
||||||
};
|
};
|
||||||
}) => {
|
}) => {
|
||||||
// @ts-ignore
|
// @ts-expect-error: navigationOptions may exists on the component, but TS is dumb
|
||||||
const routeNavigationOptions = routeConfigItem.navigationOptions;
|
const routeNavigationOptions = routeConfigItem.navigationOptions;
|
||||||
const screenNavigationOptions = getScreenComponent()
|
const screenNavigationOptions = getScreenComponent()
|
||||||
.navigationOptions;
|
.navigationOptions;
|
||||||
@@ -116,7 +115,8 @@ export default function createCompatNavigatorFactory<
|
|||||||
typeof screenNavigationOptions === 'function'
|
typeof screenNavigationOptions === 'function'
|
||||||
? {
|
? {
|
||||||
navigation: createCompatNavigationProp<
|
navigation: createCompatNavigationProp<
|
||||||
NavigationPropType
|
NavigationPropType,
|
||||||
|
ParamList
|
||||||
>(navigation, route, {}),
|
>(navigation, route, {}),
|
||||||
navigationOptions: defaultNavigationOptions || {},
|
navigationOptions: defaultNavigationOptions || {},
|
||||||
screenProps,
|
screenProps,
|
||||||
|
|||||||
@@ -1,5 +1,9 @@
|
|||||||
import { ParamListBase, NavigationProp, Route } from '@react-navigation/native';
|
import type {
|
||||||
import * as helpers from './helpers';
|
ParamListBase,
|
||||||
|
NavigationProp,
|
||||||
|
Route,
|
||||||
|
} from '@react-navigation/native';
|
||||||
|
import type * as helpers from './helpers';
|
||||||
|
|
||||||
export type CompatNavigationProp<
|
export type CompatNavigationProp<
|
||||||
NavigationPropType extends NavigationProp<ParamListBase>,
|
NavigationPropType extends NavigationProp<ParamListBase>,
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import {
|
|||||||
useNavigationState,
|
useNavigationState,
|
||||||
} from '@react-navigation/native';
|
} from '@react-navigation/native';
|
||||||
import createCompatNavigationProp from './createCompatNavigationProp';
|
import createCompatNavigationProp from './createCompatNavigationProp';
|
||||||
import { CompatNavigationProp } from './types';
|
import type { CompatNavigationProp } from './types';
|
||||||
|
|
||||||
export default function useCompatNavigation<
|
export default function useCompatNavigation<
|
||||||
T extends NavigationProp<ParamListBase>
|
T extends NavigationProp<ParamListBase>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { NavigationProp, ParamListBase } from '@react-navigation/native';
|
import type { NavigationProp, ParamListBase } from '@react-navigation/native';
|
||||||
import useCompatNavigation from './useCompatNavigation';
|
import useCompatNavigation from './useCompatNavigation';
|
||||||
import { CompatNavigationProp } from './types';
|
import type { CompatNavigationProp } from './types';
|
||||||
|
|
||||||
type InjectedProps<T extends NavigationProp<ParamListBase>> = {
|
type InjectedProps<T extends NavigationProp<ParamListBase>> = {
|
||||||
navigation: CompatNavigationProp<T>;
|
navigation: CompatNavigationProp<T>;
|
||||||
@@ -22,7 +22,7 @@ export default function withNavigation<
|
|||||||
}): React.ReactElement => {
|
}): React.ReactElement => {
|
||||||
const navigation = useCompatNavigation<T>();
|
const navigation = useCompatNavigation<T>();
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-expect-error: type checking HOC is hard
|
||||||
return <Comp ref={onRef} navigation={navigation} {...rest} />;
|
return <Comp ref={onRef} navigation={navigation} {...rest} />;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ export default function withNavigationFocus<
|
|||||||
}): React.ReactElement => {
|
}): React.ReactElement => {
|
||||||
const isFocused = useIsFocused();
|
const isFocused = useIsFocused();
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-expect-error: type checking HOC is hard
|
||||||
return <Comp ref={onRef} isFocused={isFocused} {...rest} />;
|
return <Comp ref={onRef} isFocused={isFocused} {...rest} />;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -3,37 +3,58 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
# [5.10.0](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.9.0...@react-navigation/core@5.10.0) (2020-06-06)
|
# [5.11.0](https://github.com/react-navigation/react-navigation/compare/@react-navigation/core@5.10.0...@react-navigation/core@5.11.0) (2020-06-24)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* catch missing params when they are required in navigate ([#8389](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/8389)) ([8774ca9](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/8774ca97e1da91e97677ecd816c85f66af296b93))
|
* fix getCurrentOptions for nested screens ([6730690](https://github.com/react-navigation/react-navigation/commit/67306905299314bda053e553ded228374e3e23c9))
|
||||||
* make sure the wildcard pattern catches nested unmatched routes ([c3bd349](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/c3bd349d77688011c9c55027edd66c6f39de2ade))
|
* fix getCurrentOptions for nested screens ([afc83ee](https://github.com/react-navigation/react-navigation/commit/afc83eedf8c308c958a08900e069948e3d8a6aa1))
|
||||||
* only use the query params for focused route in path ([2d66ef9](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/2d66ef93ec9923a452415c482c40e7c6b769917c))
|
* more improvements to types ([d244488](https://github.com/react-navigation/react-navigation/commit/d2444887be227bbbdcfcb13a7f26a8ebb344043e))
|
||||||
* prevent state change being emitted unnecessarily ([ab1f79c](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/ab1f79c096e94475a4da1acf1c850d04fb1bc4cf))
|
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add wildcard patterns for paths ([4fe72e3](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/4fe72e3ce7bae9120d04e490401f3bad58ebdf5c)), closes [#8019](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/8019)
|
* add devtools package ([#8436](https://github.com/react-navigation/react-navigation/issues/8436)) ([95b044e](https://github.com/react-navigation/react-navigation/commit/95b044ecf95939f40ced4da740a365140b3952b7))
|
||||||
|
* add event for options on container ([#8334](https://github.com/react-navigation/react-navigation/issues/8334)) ([fe3f98e](https://github.com/react-navigation/react-navigation/commit/fe3f98eb9cdd986c32460b78520b4d3d2435c279))
|
||||||
|
* add helper to get focused route name from nested state ([#8435](https://github.com/react-navigation/react-navigation/issues/8435)) ([f51f9c8](https://github.com/react-navigation/react-navigation/commit/f51f9c8493e079f73688adaf9dc43a2171c3e44a))
|
||||||
|
* rework linking configuration to be more strict ([#8502](https://github.com/react-navigation/react-navigation/issues/8502)) ([a021cfb](https://github.com/react-navigation/react-navigation/commit/a021cfb8af4afd50f785f6ee9b51d361e25704ca))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.9.0](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.8.2...@react-navigation/core@5.9.0) (2020-05-27)
|
# [5.10.0](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.9.0...@react-navigation/core@5.10.0) (2020-06-06)
|
||||||
|
|
||||||
|
|
||||||
|
### Bug Fixes
|
||||||
|
|
||||||
|
* catch missing params when they are required in navigate ([#8389](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/8389)) ([8774ca9](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/8774ca97e1da91e97677ecd816c85f66af296b93))
|
||||||
|
* make sure the wildcard pattern catches nested unmatched routes ([c3bd349](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/c3bd349d77688011c9c55027edd66c6f39de2ade))
|
||||||
|
* only use the query params for focused route in path ([2d66ef9](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/2d66ef93ec9923a452415c482c40e7c6b769917c))
|
||||||
|
* prevent state change being emitted unnecessarily ([ab1f79c](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/ab1f79c096e94475a4da1acf1c850d04fb1bc4cf))
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add ref to get current options in `ServerContainer` ([#8333](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/8333)) ([0b1a718](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/0b1a718756e208d84b20e45ca56004332308ad54))
|
* add wildcard patterns for paths ([4fe72e3](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/4fe72e3ce7bae9120d04e490401f3bad58ebdf5c)), closes [#8019](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/8019)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.8.2](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.8.1...@react-navigation/core@5.8.2) (2020-05-23)
|
# [5.9.0](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.8.2...@react-navigation/core@5.9.0) (2020-05-27)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add ref to get current options in `ServerContainer` ([#8333](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/8333)) ([0b1a718](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/0b1a718756e208d84b20e45ca56004332308ad54))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
## [5.8.2](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.8.1...@react-navigation/core@5.8.2) (2020-05-23)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/core
|
**Note:** Version bump only for package @react-navigation/core
|
||||||
|
|
||||||
@@ -41,7 +62,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.8.1](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.8.0...@react-navigation/core@5.8.1) (2020-05-20)
|
## [5.8.1](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.8.0...@react-navigation/core@5.8.1) (2020-05-20)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/core
|
**Note:** Version bump only for package @react-navigation/core
|
||||||
|
|
||||||
@@ -49,189 +70,189 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.8.0](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.7.0...@react-navigation/core@5.8.0) (2020-05-20)
|
# [5.8.0](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.7.0...@react-navigation/core@5.8.0) (2020-05-20)
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add getCurrentOptions ([#8277](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/8277)) ([d024ec6](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/d024ec6d74dffe481ce6fde732c729e20c1668f4))
|
* add getCurrentOptions ([#8277](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/8277)) ([d024ec6](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/d024ec6d74dffe481ce6fde732c729e20c1668f4))
|
||||||
* add getCurrentRoute ([#8254](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/8254)) ([7b25c8e](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/7b25c8eb2e6f96128fd86b92615346ce55bedeca))
|
* add getCurrentRoute ([#8254](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/8254)) ([7b25c8e](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/7b25c8eb2e6f96128fd86b92615346ce55bedeca))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.7.0](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.6.1...@react-navigation/core@5.7.0) (2020-05-16)
|
# [5.7.0](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.6.1...@react-navigation/core@5.7.0) (2020-05-16)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* don't use Object.fromEntries ([51f4d11](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/51f4d11fdf4bd2bb06f8cd4094f051816590e62c))
|
* don't use Object.fromEntries ([51f4d11](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/51f4d11fdf4bd2bb06f8cd4094f051816590e62c))
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add a PathConfig type ([60cb3c9](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/60cb3c9ba76d7ef166c9fe8b55f23728975b5b6e))
|
* add a PathConfig type ([60cb3c9](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/60cb3c9ba76d7ef166c9fe8b55f23728975b5b6e))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.6.1](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.6.0...@react-navigation/core@5.6.1) (2020-05-14)
|
## [5.6.1](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.6.0...@react-navigation/core@5.6.1) (2020-05-14)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* don't use flat since it's not supported in node ([21b397f](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/21b397f0d6b96ec4875d3172f47533130bb08009))
|
* don't use flat since it's not supported in node ([21b397f](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/21b397f0d6b96ec4875d3172f47533130bb08009))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.6.0](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.5.2...@react-navigation/core@5.6.0) (2020-05-14)
|
# [5.6.0](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.5.2...@react-navigation/core@5.6.0) (2020-05-14)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* ignore extra slashes in the pattern ([3c47716](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/3c47716826d0dfa69dfa6112141c116723372ea1))
|
* ignore extra slashes in the pattern ([3c47716](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/3c47716826d0dfa69dfa6112141c116723372ea1))
|
||||||
* ignore state updates when we're not mounted ([0149e85](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/0149e85a95b90c6a9d487fa753ddbf5d01c03e3d)), closes [#8226](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/8226)
|
* ignore state updates when we're not mounted ([0149e85](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/0149e85a95b90c6a9d487fa753ddbf5d01c03e3d)), closes [#8226](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/8226)
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* merge path patterns for nested screens ([#8253](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/8253)) ([acc9646](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/acc9646426fee53558d686dfbe5fd0e35361d8c0))
|
* merge path patterns for nested screens ([#8253](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/8253)) ([acc9646](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/acc9646426fee53558d686dfbe5fd0e35361d8c0))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.5.2](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.5.1...@react-navigation/core@5.5.2) (2020-05-08)
|
## [5.5.2](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.5.1...@react-navigation/core@5.5.2) (2020-05-08)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* fix building typescript definitions. closes [#8216](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/8216) ([47a1229](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/47a12298378747edd2d22e54dc1c8677f98c49b4))
|
* fix building typescript definitions. closes [#8216](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/8216) ([47a1229](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/47a12298378747edd2d22e54dc1c8677f98c49b4))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.5.1](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.5.0...@react-navigation/core@5.5.1) (2020-05-08)
|
## [5.5.1](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.5.0...@react-navigation/core@5.5.1) (2020-05-08)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* avoid cleaning up state when a new navigator is mounted. fixes [#8195](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/8195) ([f6d0676](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/f6d06768d3c36d1f5beaffcb660f3c259209f2e7))
|
* avoid cleaning up state when a new navigator is mounted. fixes [#8195](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/8195) ([f6d0676](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/f6d06768d3c36d1f5beaffcb660f3c259209f2e7))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.5.0](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.4.0...@react-navigation/core@5.5.0) (2020-05-05)
|
# [5.5.0](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.4.0...@react-navigation/core@5.5.0) (2020-05-05)
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add support for optional params to linking ([#8196](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/8196)) ([fcd1cc6](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/fcd1cc64c151e4941f3f544a54b5048d853821f6))
|
* add support for optional params to linking ([#8196](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/8196)) ([fcd1cc6](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/fcd1cc64c151e4941f3f544a54b5048d853821f6))
|
||||||
* support params anywhere in path segement ([#8184](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/8184)) ([3999fc2](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/3999fc28365c3a06a17d963c7be7fb7e897f99e0))
|
* support params anywhere in path segement ([#8184](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/8184)) ([3999fc2](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/3999fc28365c3a06a17d963c7be7fb7e897f99e0))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.4.0](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.3.5...@react-navigation/core@5.4.0) (2020-04-30)
|
# [5.4.0](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.3.5...@react-navigation/core@5.4.0) (2020-04-30)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* handle empty paths when parsing ([c3fa83e](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/c3fa83efe0d73db76365f8be3d6a8ca1d1289b71))
|
* handle empty paths when parsing ([c3fa83e](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/c3fa83efe0d73db76365f8be3d6a8ca1d1289b71))
|
||||||
* parsing url ([bd35b4f](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/bd35b4fc202c3868fb75c3675b62de67557089e1))
|
* parsing url ([bd35b4f](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/bd35b4fc202c3868fb75c3675b62de67557089e1))
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add `useLinkBuilder` hook to build links ([2792f43](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/2792f438fe45428fe193e3708fee7ad61966cbf4))
|
* add `useLinkBuilder` hook to build links ([2792f43](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/2792f438fe45428fe193e3708fee7ad61966cbf4))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.3.5](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.3.4...@react-navigation/core@5.3.5) (2020-04-27)
|
## [5.3.5](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.3.4...@react-navigation/core@5.3.5) (2020-04-27)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* add config to enable redux devtools integration ([c9c825b](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/c9c825bee61426635a28ee149eeeff3d628171cd))
|
* add config to enable redux devtools integration ([c9c825b](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/c9c825bee61426635a28ee149eeeff3d628171cd))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.3.4](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.3.3...@react-navigation/core@5.3.4) (2020-04-17)
|
## [5.3.4](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.3.3...@react-navigation/core@5.3.4) (2020-04-17)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* add initial option for navigating to nested navigators ([004c7d7](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/004c7d7ab1f80faf04b2a1836ec6b79a5419e45f))
|
* add initial option for navigating to nested navigators ([004c7d7](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/004c7d7ab1f80faf04b2a1836ec6b79a5419e45f))
|
||||||
* add initial param for actions from deep link ([a3f7a5f](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/a3f7a5feba2e6aa2158aeaea6cde73ae1603173e))
|
* add initial param for actions from deep link ([a3f7a5f](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/a3f7a5feba2e6aa2158aeaea6cde73ae1603173e))
|
||||||
* handle initial: false for nested route after first initialization ([187aefe](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/187aefe9c400b499f920c212bf856414e25c5aaf))
|
* handle initial: false for nested route after first initialization ([187aefe](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/187aefe9c400b499f920c212bf856414e25c5aaf))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.3.3](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.3.2...@react-navigation/core@5.3.3) (2020-04-08)
|
## [5.3.3](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.3.2...@react-navigation/core@5.3.3) (2020-04-08)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* switch order of focus and blur events. closes [#7963](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/7963) ([ce3994c](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/ce3994c82c28669d5742017eb7627e9adf996933))
|
* switch order of focus and blur events. closes [#7963](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/7963) ([ce3994c](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/ce3994c82c28669d5742017eb7627e9adf996933))
|
||||||
* workaround warning about setState in another component in render ([d4fd906](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/d4fd906915cc20d6fb21508384c05a540d8644d8))
|
* workaround warning about setState in another component in render ([d4fd906](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/d4fd906915cc20d6fb21508384c05a540d8644d8))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.3.2](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.3.1...@react-navigation/core@5.3.2) (2020-03-30)
|
## [5.3.2](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.3.1...@react-navigation/core@5.3.2) (2020-03-30)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* handle no path property and undefined query params ([#7911](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/7911)) ([cd47915](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/cd47915861a56cd7eaa9ac79f5139cde56ca95a7))
|
* handle no path property and undefined query params ([#7911](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/7911)) ([cd47915](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/cd47915861a56cd7eaa9ac79f5139cde56ca95a7))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.3.1](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.3.0...@react-navigation/core@5.3.1) (2020-03-23)
|
## [5.3.1](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.3.0...@react-navigation/core@5.3.1) (2020-03-23)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* don't emit events for screens that don't exist anymore ([1c00142](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/1c001424b595b40f9db9343096c833f75353b099))
|
* don't emit events for screens that don't exist anymore ([1c00142](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/1c001424b595b40f9db9343096c833f75353b099))
|
||||||
* only call listeners for focused screen for global events ([3096de6](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/3096de62868a7ed9ed65e529c8ddfa001b9be486))
|
* only call listeners for focused screen for global events ([3096de6](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/3096de62868a7ed9ed65e529c8ddfa001b9be486))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.3.0](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.2.3...@react-navigation/core@5.3.0) (2020-03-22)
|
# [5.3.0](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.2.3...@react-navigation/core@5.3.0) (2020-03-22)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* return correct value for isFocused after changing screens ([5b15c71](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/5b15c7164f5503f2f0d51006a3f23bd0c58fd9b7)), closes [#7843](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/7843)
|
* return correct value for isFocused after changing screens ([5b15c71](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/5b15c7164f5503f2f0d51006a3f23bd0c58fd9b7)), closes [#7843](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/7843)
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* support function in listeners prop ([3709e65](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/3709e652f41a16c2c2b05d5dbbe1da2017ba2c3f))
|
* support function in listeners prop ([3709e65](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/3709e652f41a16c2c2b05d5dbbe1da2017ba2c3f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.2.3](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.2.2...@react-navigation/core@5.2.3) (2020-03-19)
|
## [5.2.3](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.2.2...@react-navigation/core@5.2.3) (2020-03-19)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/core
|
**Note:** Version bump only for package @react-navigation/core
|
||||||
|
|
||||||
@@ -239,7 +260,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.2.2](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.2.1...@react-navigation/core@5.2.2) (2020-03-16)
|
## [5.2.2](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.2.1...@react-navigation/core@5.2.2) (2020-03-16)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/core
|
**Note:** Version bump only for package @react-navigation/core
|
||||||
|
|
||||||
@@ -247,133 +268,133 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.2.1](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.2.0...@react-navigation/core@5.2.1) (2020-03-03)
|
## [5.2.1](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.2.0...@react-navigation/core@5.2.1) (2020-03-03)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* fix links for documentation ([5bb0f40](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/5bb0f405ceb5755d39a0b5b1f2e4ecee0da051bc))
|
* fix links for documentation ([5bb0f40](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/5bb0f405ceb5755d39a0b5b1f2e4ecee0da051bc))
|
||||||
* move updating state to useEffect ([2dfa4f3](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/2dfa4f36293a2acb718814f6b2fa79d7c7ddf09c))
|
* move updating state to useEffect ([2dfa4f3](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/2dfa4f36293a2acb718814f6b2fa79d7c7ddf09c))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.2.0](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.1.6...@react-navigation/core@5.2.0) (2020-02-26)
|
# [5.2.0](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.1.6...@react-navigation/core@5.2.0) (2020-02-26)
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add ability add listeners with listeners prop ([1624108](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/162410843c4f175ae107756de1c3af04d1d47aa7)), closes [#6756](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/6756)
|
* add ability add listeners with listeners prop ([1624108](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/162410843c4f175ae107756de1c3af04d1d47aa7)), closes [#6756](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/6756)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.6](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.1.5...@react-navigation/core@5.1.6) (2020-02-21)
|
## [5.1.6](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.1.5...@react-navigation/core@5.1.6) (2020-02-21)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* avoid emitting focus events twice ([f167008](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/f16700812f3757713b04ca3a860209795b4a6c44)), closes [#6749](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/6749)
|
* avoid emitting focus events twice ([f167008](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/f16700812f3757713b04ca3a860209795b4a6c44)), closes [#6749](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/6749)
|
||||||
* preserve screen order with numeric names ([125bd70](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/125bd70e49b708d936a2eee72ba5cb92eacf26a9)), closes [#6900](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/6900)
|
* preserve screen order with numeric names ([125bd70](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/125bd70e49b708d936a2eee72ba5cb92eacf26a9)), closes [#6900](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/6900)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.5](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.1.4...@react-navigation/core@5.1.5) (2020-02-19)
|
## [5.1.5](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.1.4...@react-navigation/core@5.1.5) (2020-02-19)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* show descriptive error for invalid return for useFocusEffect ([1a28c29](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/1a28c299b5e3f0805eb6e9ea3cf5e9cc90c7a280))
|
* show descriptive error for invalid return for useFocusEffect ([1a28c29](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/1a28c299b5e3f0805eb6e9ea3cf5e9cc90c7a280))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.4](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.1.3...@react-navigation/core@5.1.4) (2020-02-14)
|
## [5.1.4](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.1.3...@react-navigation/core@5.1.4) (2020-02-14)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* link to migration guide on invalid usage ([c5fcfbd](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/c5fcfbd4277541e131acbaa7602a5d7e636afebb))
|
* link to migration guide on invalid usage ([c5fcfbd](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/c5fcfbd4277541e131acbaa7602a5d7e636afebb))
|
||||||
* return '/' for empty paths ([aaf01e0](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/aaf01e01e7b47b375f68aebe6d0effe82878d060))
|
* return '/' for empty paths ([aaf01e0](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/aaf01e01e7b47b375f68aebe6d0effe82878d060))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.3](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.1.2...@react-navigation/core@5.1.3) (2020-02-14)
|
## [5.1.3](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.1.2...@react-navigation/core@5.1.3) (2020-02-14)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* return false for canGoBack if navigator hasn't finished mounting ([c8ac5fa](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/c8ac5fab61cf127985431075a3c59c1f3dfa42da))
|
* return false for canGoBack if navigator hasn't finished mounting ([c8ac5fa](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/c8ac5fab61cf127985431075a3c59c1f3dfa42da))
|
||||||
* throw a descriptive error if navigation object hasn't initialized ([b6accd0](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/b6accd03f69dd438e595094d8bf8599cc12e71ac))
|
* throw a descriptive error if navigation object hasn't initialized ([b6accd0](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/b6accd03f69dd438e595094d8bf8599cc12e71ac))
|
||||||
* update links in error messages ([f964200](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/f964200b0dcbc19d5f88ad2dd1eb8e5576973497))
|
* update links in error messages ([f964200](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/f964200b0dcbc19d5f88ad2dd1eb8e5576973497))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.2](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.1.1...@react-navigation/core@5.1.2) (2020-02-12)
|
## [5.1.2](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.1.1...@react-navigation/core@5.1.2) (2020-02-12)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* fix false positives for circular object check ([030c63c](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/030c63c89fe447aa484b767831c8f8e26e90431c)), closes [#6827](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/6827)
|
* fix false positives for circular object check ([030c63c](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/030c63c89fe447aa484b767831c8f8e26e90431c)), closes [#6827](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/6827)
|
||||||
* static container memo check ([#6825](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/6825)) ([2bf0958](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/2bf09585021470f500d967e9242836840efe970f))
|
* static container memo check ([#6825](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/6825)) ([2bf0958](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/2bf09585021470f500d967e9242836840efe970f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## [5.1.1](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.1.0...@react-navigation/core@5.1.1) (2020-02-11)
|
## [5.1.1](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.1.0...@react-navigation/core@5.1.1) (2020-02-11)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* don't cleanup state on switching navigator ([359ae1b](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/359ae1bfacec5ef880b3944f465c881aedb16767))
|
* don't cleanup state on switching navigator ([359ae1b](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/359ae1bfacec5ef880b3944f465c881aedb16767))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.1.0](https://github.com/react-navigation/react-navigation/tree/master/packages/core/compare/@react-navigation/core@5.0.0-alpha.43...@react-navigation/core@5.1.0) (2020-02-10)
|
# [5.1.0](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.0.0-alpha.43...@react-navigation/core@5.1.0) (2020-02-10)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* add some links in the error messages ([13b4e07](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/13b4e07348496f7cb516d625b44a6a7d310ef9af))
|
* add some links in the error messages ([13b4e07](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/13b4e07348496f7cb516d625b44a6a7d310ef9af))
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* support ignoring empty path strings ([#349](https://github.com/react-navigation/react-navigation/tree/master/packages/core/issues/349)) ([61b1134](https://github.com/react-navigation/react-navigation/tree/master/packages/core/commit/61b1134f90310390fe819622c1f33273fca0bd42))
|
* support ignoring empty path strings ([#349](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/349)) ([61b1134](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/61b1134f90310390fe819622c1f33273fca0bd42))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.43](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/compare/@react-navigation/core@5.0.0-alpha.42...@react-navigation/core@5.0.0-alpha.43) (2020-02-04)
|
# [5.0.0-alpha.43](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.0.0-alpha.42...@react-navigation/core@5.0.0-alpha.43) (2020-02-04)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* improve error message for unhandled action ([ca4a360](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/ca4a36070a21c4fe86cb1cc55a4452dca293f215))
|
* improve error message for unhandled action ([ca4a360](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/ca4a36070a21c4fe86cb1cc55a4452dca293f215))
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add initialRouteName property to config ([#322](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/issues/322)) ([4ca5cc6](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/4ca5cc632992187f12870281e4cf4c7d1f799967))
|
* add initialRouteName property to config ([#322](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/322)) ([4ca5cc6](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/4ca5cc632992187f12870281e4cf4c7d1f799967))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.42](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/compare/@react-navigation/core@5.0.0-alpha.41...@react-navigation/core@5.0.0-alpha.42) (2020-02-04)
|
# [5.0.0-alpha.42](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.0.0-alpha.41...@react-navigation/core@5.0.0-alpha.42) (2020-02-04)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/core
|
**Note:** Version bump only for package @react-navigation/core
|
||||||
|
|
||||||
@@ -381,115 +402,115 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.41](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/compare/@react-navigation/core@5.0.0-alpha.40...@react-navigation/core@5.0.0-alpha.41) (2020-02-03)
|
# [5.0.0-alpha.41](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.0.0-alpha.40...@react-navigation/core@5.0.0-alpha.41) (2020-02-03)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* ignore circular references when checking serializable ([e5063b9](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/e5063b93398350511f3fd2ef48425559f871781f))
|
* ignore circular references when checking serializable ([e5063b9](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/e5063b93398350511f3fd2ef48425559f871781f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.40](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/compare/@react-navigation/core@5.0.0-alpha.37...@react-navigation/core@5.0.0-alpha.40) (2020-02-02)
|
# [5.0.0-alpha.40](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.0.0-alpha.37...@react-navigation/core@5.0.0-alpha.40) (2020-02-02)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* add licenses ([0c159db](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/0c159db4c9bc85e83b5cfe6819ab2562669a4d8f))
|
* add licenses ([0c159db](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/0c159db4c9bc85e83b5cfe6819ab2562669a4d8f))
|
||||||
* add warning when passing inline function to component prop ([fa4a959](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/fa4a959549ccd9dc2f9bd2ea495e99abdedc9f94))
|
* add warning when passing inline function to component prop ([fa4a959](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/fa4a959549ccd9dc2f9bd2ea495e99abdedc9f94))
|
||||||
* tweak error messages for validation ([2243b45](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/2243b45cc1addf83727166d82736d214f181b1fb))
|
* tweak error messages for validation ([2243b45](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/2243b45cc1addf83727166d82736d214f181b1fb))
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add `screens` prop for nested configs ([#308](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/issues/308)) ([b931ae6](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/b931ae62dfb2c5253c94ea5ace73e9070ec17c4a))
|
* add `screens` prop for nested configs ([#308](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/308)) ([b931ae6](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/b931ae62dfb2c5253c94ea5ace73e9070ec17c4a))
|
||||||
* add useIsDrawerOpen hook ([#299](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/issues/299)) ([ecd68af](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/ecd68afb46a4c56200748da5e5fb284fa5a839db))
|
* add useIsDrawerOpen hook ([#299](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/299)) ([ecd68af](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/ecd68afb46a4c56200748da5e5fb284fa5a839db))
|
||||||
* integrate with history API on web ([5a3f835](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/5a3f8356b05bff7ed20893a5db6804612da3e568))
|
* integrate with history API on web ([5a3f835](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/5a3f8356b05bff7ed20893a5db6804612da3e568))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.38](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/compare/@react-navigation/core@5.0.0-alpha.37...@react-navigation/core@5.0.0-alpha.38) (2020-02-02)
|
# [5.0.0-alpha.38](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.0.0-alpha.37...@react-navigation/core@5.0.0-alpha.38) (2020-02-02)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* add licenses ([0c159db](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/0c159db4c9bc85e83b5cfe6819ab2562669a4d8f))
|
* add licenses ([0c159db](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/0c159db4c9bc85e83b5cfe6819ab2562669a4d8f))
|
||||||
* add warning when passing inline function to component prop ([fa4a959](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/fa4a959549ccd9dc2f9bd2ea495e99abdedc9f94))
|
* add warning when passing inline function to component prop ([fa4a959](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/fa4a959549ccd9dc2f9bd2ea495e99abdedc9f94))
|
||||||
* tweak error messages for validation ([2243b45](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/2243b45cc1addf83727166d82736d214f181b1fb))
|
* tweak error messages for validation ([2243b45](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/2243b45cc1addf83727166d82736d214f181b1fb))
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add `screens` prop for nested configs ([#308](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/issues/308)) ([b931ae6](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/b931ae62dfb2c5253c94ea5ace73e9070ec17c4a))
|
* add `screens` prop for nested configs ([#308](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/308)) ([b931ae6](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/b931ae62dfb2c5253c94ea5ace73e9070ec17c4a))
|
||||||
* add useIsDrawerOpen hook ([#299](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/issues/299)) ([ecd68af](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/ecd68afb46a4c56200748da5e5fb284fa5a839db))
|
* add useIsDrawerOpen hook ([#299](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/299)) ([ecd68af](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/ecd68afb46a4c56200748da5e5fb284fa5a839db))
|
||||||
* integrate with history API on web ([5a3f835](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/5a3f8356b05bff7ed20893a5db6804612da3e568))
|
* integrate with history API on web ([5a3f835](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/5a3f8356b05bff7ed20893a5db6804612da3e568))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.37](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/compare/@react-navigation/core@5.0.0-alpha.36...@react-navigation/core@5.0.0-alpha.37) (2020-01-24)
|
# [5.0.0-alpha.37](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.0.0-alpha.36...@react-navigation/core@5.0.0-alpha.37) (2020-01-24)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* add error message when trying to use v4 API with v5 ([179e807](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/179e807a64a7d031d671c2c4b12edaee3c3440c5))
|
* add error message when trying to use v4 API with v5 ([179e807](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/179e807a64a7d031d671c2c4b12edaee3c3440c5))
|
||||||
* validate screen configs ([2f1f0af](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/2f1f0af862ef8625da4c2aaf463d45fe17a4ac88))
|
* validate screen configs ([2f1f0af](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/2f1f0af862ef8625da4c2aaf463d45fe17a4ac88))
|
||||||
* warn if non-serializable values found in state ([5751e7f](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/5751e7f97a1731a5c71862174dfd931b6ffe13e2))
|
* warn if non-serializable values found in state ([5751e7f](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/5751e7f97a1731a5c71862174dfd931b6ffe13e2))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.36](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/compare/@react-navigation/core@5.0.0-alpha.35...@react-navigation/core@5.0.0-alpha.36) (2020-01-23)
|
# [5.0.0-alpha.36](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.0.0-alpha.35...@react-navigation/core@5.0.0-alpha.36) (2020-01-23)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* disallow canPreventDefault option if not present in types ([d9059b5](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/d9059b56d8a89b39fec43d38a7b0514d41c0b550))
|
* disallow canPreventDefault option if not present in types ([d9059b5](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/d9059b56d8a89b39fec43d38a7b0514d41c0b550))
|
||||||
* don't add ?if query params is empty ([3bf5ddd](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/3bf5ddde2ac1ba45f1123752d37532175f18a3d9))
|
* don't add ?if query params is empty ([3bf5ddd](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/3bf5ddde2ac1ba45f1123752d37532175f18a3d9))
|
||||||
* fix types for useFocusEffect ([23ab45a](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/23ab45aceb72cc27ebfacdedfbf60d0c540fecfb)), closes [#270](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/issues/270)
|
* fix types for useFocusEffect ([23ab45a](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/23ab45aceb72cc27ebfacdedfbf60d0c540fecfb)), closes [#270](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/270)
|
||||||
* make sure that we return correct value if selector changes ([6c2acbb](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/6c2acbb304a9f11789b45a410b6c41911eca3947)), closes [/github.com/react-navigation/navigation-ex/pull/273#issuecomment-576581225](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/issues/issuecomment-576581225)
|
* make sure that we return correct value if selector changes ([6c2acbb](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/6c2acbb304a9f11789b45a410b6c41911eca3947)), closes [/github.com/react-navigation/navigation-ex/pull/273#issuecomment-576581225](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/issuecomment-576581225)
|
||||||
* use protected for private value store ([ad4eaff](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/ad4eaff1e99e4f9fca3a193764fd0f26efa41341))
|
* use protected for private value store ([ad4eaff](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/ad4eaff1e99e4f9fca3a193764fd0f26efa41341))
|
||||||
|
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
* add useNavigationState hook ([32a2206](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/32a2206513bc084d8da07187385d11db498f1e2a))
|
* add useNavigationState hook ([32a2206](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/32a2206513bc084d8da07187385d11db498f1e2a))
|
||||||
* let the navigator specify if default can be prevented ([da67e13](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/da67e134d2157201360427d3c10da24f24cae7aa))
|
* let the navigator specify if default can be prevented ([da67e13](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/da67e134d2157201360427d3c10da24f24cae7aa))
|
||||||
* support nested config in getPathFromState ([#266](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/issues/266)) ([1e53821](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/1e53821d52be182369add07a86c72221c5dba53e))
|
* support nested config in getPathFromState ([#266](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/266)) ([1e53821](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/1e53821d52be182369add07a86c72221c5dba53e))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.35](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/compare/@react-navigation/core@5.0.0-alpha.34...@react-navigation/core@5.0.0-alpha.35) (2020-01-14)
|
# [5.0.0-alpha.35](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.0.0-alpha.34...@react-navigation/core@5.0.0-alpha.35) (2020-01-14)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* fix intellisense for CompositeNavigationProp ([a912323](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/a912323c1dfa0c3564ca82c448a86f85d1658f7f))
|
* fix intellisense for CompositeNavigationProp ([a912323](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/a912323c1dfa0c3564ca82c448a86f85d1658f7f))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.34](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/compare/@react-navigation/core@5.0.0-alpha.33...@react-navigation/core@5.0.0-alpha.34) (2020-01-13)
|
# [5.0.0-alpha.34](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.0.0-alpha.33...@react-navigation/core@5.0.0-alpha.34) (2020-01-13)
|
||||||
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
* make sure paths aren't aliased when building definitions ([65a5dac](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/commit/65a5dac2bf887f4ba081ab15bd4c9870bb15697f)), closes [#265](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/issues/265)
|
* make sure paths aren't aliased when building definitions ([65a5dac](https://github.com/react-navigation/react-navigation/tree/main/packages/core/commit/65a5dac2bf887f4ba081ab15bd4c9870bb15697f)), closes [#265](https://github.com/react-navigation/react-navigation/tree/main/packages/core/issues/265)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.33](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/compare/@react-navigation/core@5.0.0-alpha.32...@react-navigation/core@5.0.0-alpha.33) (2020-01-13)
|
# [5.0.0-alpha.33](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.0.0-alpha.32...@react-navigation/core@5.0.0-alpha.33) (2020-01-13)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/core
|
**Note:** Version bump only for package @react-navigation/core
|
||||||
|
|
||||||
@@ -497,7 +518,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.32](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/compare/@react-navigation/core@5.0.0-alpha.30...@react-navigation/core@5.0.0-alpha.32) (2020-01-09)
|
# [5.0.0-alpha.32](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.0.0-alpha.30...@react-navigation/core@5.0.0-alpha.32) (2020-01-09)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/core
|
**Note:** Version bump only for package @react-navigation/core
|
||||||
|
|
||||||
@@ -505,7 +526,7 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
# [5.0.0-alpha.31](https://github.com/react-navigation/navigation-ex/tree/master/packages/core/compare/@react-navigation/core@5.0.0-alpha.30...@react-navigation/core@5.0.0-alpha.31) (2020-01-09)
|
# [5.0.0-alpha.31](https://github.com/react-navigation/react-navigation/tree/main/packages/core/compare/@react-navigation/core@5.0.0-alpha.30...@react-navigation/core@5.0.0-alpha.31) (2020-01-09)
|
||||||
|
|
||||||
**Note:** Version bump only for package @react-navigation/core
|
**Note:** Version bump only for package @react-navigation/core
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,18 @@
|
|||||||
{
|
{
|
||||||
"name": "@react-navigation/core",
|
"name": "@react-navigation/core",
|
||||||
"description": "Core utilities for building navigators",
|
"description": "Core utilities for building navigators",
|
||||||
"version": "5.10.0",
|
"version": "5.11.0",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"react",
|
"react",
|
||||||
"react-native",
|
"react-native",
|
||||||
"react-navigation"
|
"react-navigation"
|
||||||
],
|
],
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"repository": "https://github.com/react-navigation/react-navigation/tree/master/packages/core",
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/react-navigation/react-navigation.git",
|
||||||
|
"directory": "packages/core"
|
||||||
|
},
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/react-navigation/react-navigation/issues"
|
"url": "https://github.com/react-navigation/react-navigation/issues"
|
||||||
},
|
},
|
||||||
@@ -31,23 +35,23 @@
|
|||||||
"clean": "del lib"
|
"clean": "del lib"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@react-navigation/routers": "^5.4.7",
|
"@react-navigation/routers": "^5.4.8",
|
||||||
"escape-string-regexp": "^4.0.0",
|
"escape-string-regexp": "^4.0.0",
|
||||||
"nanoid": "^3.1.5",
|
"nanoid": "^3.1.9",
|
||||||
"query-string": "^6.12.1",
|
"query-string": "^6.13.1",
|
||||||
"react-is": "^16.13.0",
|
"react-is": "^16.13.0",
|
||||||
"use-subscription": "^1.4.0"
|
"use-subscription": "^1.4.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@react-native-community/bob": "^0.14.3",
|
"@react-native-community/bob": "^0.15.1",
|
||||||
"@types/react": "^16.9.34",
|
"@types/react": "^16.9.36",
|
||||||
"@types/react-is": "^16.7.1",
|
"@types/react-is": "^16.7.1",
|
||||||
"@types/use-subscription": "^1.0.0",
|
"@types/use-subscription": "^1.0.0",
|
||||||
"del-cli": "^3.0.0",
|
"del-cli": "^3.0.1",
|
||||||
"react": "~16.9.0",
|
"react": "~16.9.0",
|
||||||
"react-native-testing-library": "^1.13.2",
|
"react-native-testing-library": "^2.1.0",
|
||||||
"react-test-renderer": "~16.13.1",
|
"react-test-renderer": "~16.13.1",
|
||||||
"typescript": "^3.8.3"
|
"typescript": "^3.9.5"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"react": "*"
|
"react": "*"
|
||||||
|
|||||||
@@ -9,28 +9,43 @@ import {
|
|||||||
} from '@react-navigation/routers';
|
} from '@react-navigation/routers';
|
||||||
import EnsureSingleNavigator from './EnsureSingleNavigator';
|
import EnsureSingleNavigator from './EnsureSingleNavigator';
|
||||||
import NavigationBuilderContext from './NavigationBuilderContext';
|
import NavigationBuilderContext from './NavigationBuilderContext';
|
||||||
|
import NavigationStateContext from './NavigationStateContext';
|
||||||
|
import UnhandledActionContext from './UnhandledActionContext';
|
||||||
import { ScheduleUpdateContext } from './useScheduleUpdate';
|
import { ScheduleUpdateContext } from './useScheduleUpdate';
|
||||||
import useFocusedListeners from './useFocusedListeners';
|
import useFocusedListeners from './useFocusedListeners';
|
||||||
import useDevTools from './useDevTools';
|
|
||||||
import useStateGetters from './useStateGetters';
|
import useStateGetters from './useStateGetters';
|
||||||
import useOptionsGetters from './useOptionsGetters';
|
import useOptionsGetters from './useOptionsGetters';
|
||||||
import useEventEmitter from './useEventEmitter';
|
import useEventEmitter from './useEventEmitter';
|
||||||
import useSyncState from './useSyncState';
|
import useSyncState from './useSyncState';
|
||||||
import isSerializable from './isSerializable';
|
import isSerializable from './isSerializable';
|
||||||
|
import type {
|
||||||
import { NavigationContainerRef, NavigationContainerProps } from './types';
|
NavigationContainerEventMap,
|
||||||
import NavigationStateContext from './NavigationStateContext';
|
NavigationContainerRef,
|
||||||
|
NavigationContainerProps,
|
||||||
|
} from './types';
|
||||||
|
|
||||||
type State = NavigationState | PartialState<NavigationState> | undefined;
|
type State = NavigationState | PartialState<NavigationState> | undefined;
|
||||||
|
|
||||||
const DEVTOOLS_CONFIG_KEY =
|
|
||||||
'REACT_NAVIGATION_REDUX_DEVTOOLS_EXTENSION_INTEGRATION_ENABLED';
|
|
||||||
|
|
||||||
const NOT_INITIALIZED_ERROR =
|
const NOT_INITIALIZED_ERROR =
|
||||||
"The 'navigation' object hasn't been initialized yet. This might happen if you don't have a navigator mounted, or if the navigator hasn't finished mounting. See https://reactnavigation.org/docs/navigating-without-navigation-prop#handling-initialization for more details.";
|
"The 'navigation' object hasn't been initialized yet. This might happen if you don't have a navigator mounted, or if the navigator hasn't finished mounting. See https://reactnavigation.org/docs/navigating-without-navigation-prop#handling-initialization for more details.";
|
||||||
|
|
||||||
let hasWarnedForSerialization = false;
|
let hasWarnedForSerialization = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Migration instructions for removal of devtools from core
|
||||||
|
*/
|
||||||
|
Object.defineProperty(
|
||||||
|
global,
|
||||||
|
'REACT_NAVIGATION_REDUX_DEVTOOLS_EXTENSION_INTEGRATION_ENABLED',
|
||||||
|
{
|
||||||
|
set(_) {
|
||||||
|
console.warn(
|
||||||
|
"Redux devtools extension integration can be enabled with the '@react-navigation/devtools' package. For more details, see https://reactnavigation.org/docs/devtools"
|
||||||
|
);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove `key` and `routeNames` from the state objects recursively to get partial state.
|
* Remove `key` and `routeNames` from the state objects recursively to get partial state.
|
||||||
*
|
*
|
||||||
@@ -46,7 +61,6 @@ const getPartialState = (
|
|||||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
const { key, routeNames, ...partialState } = state;
|
const { key, routeNames, ...partialState } = state;
|
||||||
|
|
||||||
// @ts-ignore
|
|
||||||
return {
|
return {
|
||||||
...partialState,
|
...partialState,
|
||||||
stale: true,
|
stale: true,
|
||||||
@@ -100,7 +114,6 @@ const BaseNavigationContainer = React.forwardRef(
|
|||||||
);
|
);
|
||||||
|
|
||||||
const isFirstMountRef = React.useRef<boolean>(true);
|
const isFirstMountRef = React.useRef<boolean>(true);
|
||||||
const skipTrackingRef = React.useRef<boolean>(false);
|
|
||||||
|
|
||||||
const navigatorKeyRef = React.useRef<string | undefined>();
|
const navigatorKeyRef = React.useRef<string | undefined>();
|
||||||
|
|
||||||
@@ -110,23 +123,6 @@ const BaseNavigationContainer = React.forwardRef(
|
|||||||
navigatorKeyRef.current = key;
|
navigatorKeyRef.current = key;
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const reset = React.useCallback(
|
|
||||||
(state: NavigationState) => {
|
|
||||||
skipTrackingRef.current = true;
|
|
||||||
setState(state);
|
|
||||||
},
|
|
||||||
[setState]
|
|
||||||
);
|
|
||||||
|
|
||||||
const { trackState, trackAction } = useDevTools({
|
|
||||||
enabled:
|
|
||||||
// @ts-ignore
|
|
||||||
DEVTOOLS_CONFIG_KEY in global ? global[DEVTOOLS_CONFIG_KEY] : false,
|
|
||||||
name: '@react-navigation',
|
|
||||||
reset,
|
|
||||||
state,
|
|
||||||
});
|
|
||||||
|
|
||||||
const {
|
const {
|
||||||
listeners,
|
listeners,
|
||||||
addListener: addFocusedListener,
|
addListener: addFocusedListener,
|
||||||
@@ -162,10 +158,9 @@ const BaseNavigationContainer = React.forwardRef(
|
|||||||
|
|
||||||
const resetRoot = React.useCallback(
|
const resetRoot = React.useCallback(
|
||||||
(state?: PartialState<NavigationState> | NavigationState) => {
|
(state?: PartialState<NavigationState> | NavigationState) => {
|
||||||
trackAction('@@RESET_ROOT');
|
|
||||||
setState(state);
|
setState(state);
|
||||||
},
|
},
|
||||||
[setState, trackAction]
|
[setState]
|
||||||
);
|
);
|
||||||
|
|
||||||
const getRootState = React.useCallback(() => {
|
const getRootState = React.useCallback(() => {
|
||||||
@@ -183,7 +178,7 @@ const BaseNavigationContainer = React.forwardRef(
|
|||||||
return state.routes[state.index];
|
return state.routes[state.index];
|
||||||
}, [getRootState]);
|
}, [getRootState]);
|
||||||
|
|
||||||
const emitter = useEventEmitter();
|
const emitter = useEventEmitter<NavigationContainerEventMap>();
|
||||||
|
|
||||||
const { addOptionsGetter, getCurrentOptions } = useOptionsGetters({});
|
const { addOptionsGetter, getCurrentOptions } = useOptionsGetters({});
|
||||||
|
|
||||||
@@ -194,7 +189,7 @@ const BaseNavigationContainer = React.forwardRef(
|
|||||||
acc[name] = (...args: any[]) =>
|
acc[name] = (...args: any[]) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
CommonActions[name](
|
CommonActions[name](
|
||||||
// @ts-ignore
|
// @ts-expect-error: we can't know the type statically
|
||||||
...args
|
...args
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@@ -211,13 +206,31 @@ const BaseNavigationContainer = React.forwardRef(
|
|||||||
getCurrentOptions,
|
getCurrentOptions,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
const onDispatchAction = React.useCallback(
|
||||||
|
(action: NavigationAction, noop: boolean) => {
|
||||||
|
emitter.emit({ type: '__unsafe_action__', data: { action, noop } });
|
||||||
|
},
|
||||||
|
[emitter]
|
||||||
|
);
|
||||||
|
|
||||||
|
const onOptionsChange = React.useCallback(
|
||||||
|
(options) => {
|
||||||
|
emitter.emit({
|
||||||
|
type: 'options',
|
||||||
|
data: { options },
|
||||||
|
});
|
||||||
|
},
|
||||||
|
[emitter]
|
||||||
|
);
|
||||||
|
|
||||||
const builderContext = React.useMemo(
|
const builderContext = React.useMemo(
|
||||||
() => ({
|
() => ({
|
||||||
addFocusedListener,
|
addFocusedListener,
|
||||||
addStateGetter,
|
addStateGetter,
|
||||||
trackAction,
|
onDispatchAction,
|
||||||
|
onOptionsChange,
|
||||||
}),
|
}),
|
||||||
[addFocusedListener, trackAction, addStateGetter]
|
[addFocusedListener, addStateGetter, onDispatchAction, onOptionsChange]
|
||||||
);
|
);
|
||||||
|
|
||||||
const scheduleContext = React.useMemo(
|
const scheduleContext = React.useMemo(
|
||||||
@@ -258,29 +271,62 @@ const BaseNavigationContainer = React.forwardRef(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
emitter.emit({
|
emitter.emit({ type: 'state', data: { state } });
|
||||||
type: 'state',
|
|
||||||
data: { state },
|
|
||||||
});
|
|
||||||
|
|
||||||
if (skipTrackingRef.current) {
|
|
||||||
skipTrackingRef.current = false;
|
|
||||||
} else {
|
|
||||||
trackState(getRootState);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isFirstMountRef.current && onStateChangeRef.current) {
|
if (!isFirstMountRef.current && onStateChangeRef.current) {
|
||||||
onStateChangeRef.current(getRootState());
|
onStateChangeRef.current(getRootState());
|
||||||
}
|
}
|
||||||
|
|
||||||
isFirstMountRef.current = false;
|
isFirstMountRef.current = false;
|
||||||
}, [trackState, getRootState, emitter, state]);
|
}, [getRootState, emitter, state]);
|
||||||
|
|
||||||
|
const onUnhandledAction = React.useCallback((action: NavigationAction) => {
|
||||||
|
if (process.env.NODE_ENV === 'production') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const payload: Record<string, any> | undefined = action.payload;
|
||||||
|
|
||||||
|
let message = `The action '${action.type}'${
|
||||||
|
payload ? ` with payload ${JSON.stringify(action.payload)}` : ''
|
||||||
|
} was not handled by any navigator.`;
|
||||||
|
|
||||||
|
switch (action.type) {
|
||||||
|
case 'NAVIGATE':
|
||||||
|
case 'PUSH':
|
||||||
|
case 'REPLACE':
|
||||||
|
case 'JUMP_TO':
|
||||||
|
if (payload?.name) {
|
||||||
|
message += `\n\nDo you have a screen named '${payload.name}'?\n\nIf you're trying to navigate to a screen in a nested navigator, see https://reactnavigation.org/docs/nesting-navigators#navigating-to-a-screen-in-a-nested-navigator.`;
|
||||||
|
} else {
|
||||||
|
message += `\n\nYou need to pass the name of the screen to navigate to.\n\nSee https://reactnavigation.org/docs/navigation-actions for usage.`;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case 'GO_BACK':
|
||||||
|
case 'POP':
|
||||||
|
case 'POP_TO_TOP':
|
||||||
|
message += `\n\nIs there any screen to go back to?`;
|
||||||
|
break;
|
||||||
|
case 'OPEN_DRAWER':
|
||||||
|
case 'CLOSE_DRAWER':
|
||||||
|
case 'TOGGLE_DRAWER':
|
||||||
|
message += `\n\nIs your screen inside a Drawer navigator?`;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
message += `\n\nThis is a development-only warning and won't be shown in production.`;
|
||||||
|
|
||||||
|
console.error(message);
|
||||||
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ScheduleUpdateContext.Provider value={scheduleContext}>
|
<ScheduleUpdateContext.Provider value={scheduleContext}>
|
||||||
<NavigationBuilderContext.Provider value={builderContext}>
|
<NavigationBuilderContext.Provider value={builderContext}>
|
||||||
<NavigationStateContext.Provider value={context}>
|
<NavigationStateContext.Provider value={context}>
|
||||||
<EnsureSingleNavigator>{children}</EnsureSingleNavigator>
|
<UnhandledActionContext.Provider value={onUnhandledAction}>
|
||||||
|
<EnsureSingleNavigator>{children}</EnsureSingleNavigator>
|
||||||
|
</UnhandledActionContext.Provider>
|
||||||
</NavigationStateContext.Provider>
|
</NavigationStateContext.Provider>
|
||||||
</NavigationBuilderContext.Provider>
|
</NavigationBuilderContext.Provider>
|
||||||
</ScheduleUpdateContext.Provider>
|
</ScheduleUpdateContext.Provider>
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import {
|
import type {
|
||||||
NavigationAction,
|
NavigationAction,
|
||||||
NavigationState,
|
NavigationState,
|
||||||
ParamListBase,
|
ParamListBase,
|
||||||
} from '@react-navigation/routers';
|
} from '@react-navigation/routers';
|
||||||
import { NavigationHelpers } from './types';
|
import type { NavigationHelpers } from './types';
|
||||||
|
|
||||||
export type ChildActionListener = (
|
export type ChildActionListener = (
|
||||||
action: NavigationAction,
|
action: NavigationAction,
|
||||||
@@ -32,10 +32,12 @@ const NavigationBuilderContext = React.createContext<{
|
|||||||
addActionListener?: (listener: ChildActionListener) => void;
|
addActionListener?: (listener: ChildActionListener) => void;
|
||||||
addFocusedListener?: (listener: FocusedNavigationListener) => void;
|
addFocusedListener?: (listener: FocusedNavigationListener) => void;
|
||||||
onRouteFocus?: (key: string) => void;
|
onRouteFocus?: (key: string) => void;
|
||||||
|
onDispatchAction: (action: NavigationAction, noop: boolean) => void;
|
||||||
addStateGetter?: (key: string, getter: NavigatorStateGetter) => void;
|
addStateGetter?: (key: string, getter: NavigatorStateGetter) => void;
|
||||||
trackAction: (action: NavigationAction) => void;
|
onOptionsChange: (options: object) => void;
|
||||||
}>({
|
}>({
|
||||||
trackAction: () => undefined,
|
onDispatchAction: () => undefined,
|
||||||
|
onOptionsChange: () => undefined,
|
||||||
});
|
});
|
||||||
|
|
||||||
export default NavigationBuilderContext;
|
export default NavigationBuilderContext;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { ParamListBase } from '@react-navigation/routers';
|
import type { ParamListBase } from '@react-navigation/routers';
|
||||||
import { NavigationProp } from './types';
|
import type { NavigationProp } from './types';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Context which holds the navigation prop for a screen.
|
* Context which holds the navigation prop for a screen.
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { ParamListBase } from '@react-navigation/routers';
|
import type { ParamListBase } from '@react-navigation/routers';
|
||||||
import { NavigationHelpers } from './types';
|
import type { NavigationHelpers } from './types';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Context which holds the navigation helpers of the parent navigator.
|
* Context which holds the navigation helpers of the parent navigator.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { Route } from '@react-navigation/routers';
|
import type { Route } from '@react-navigation/routers';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Context which holds the route prop for a screen.
|
* Context which holds the route prop for a screen.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { NavigationState, PartialState } from '@react-navigation/routers';
|
import type { NavigationState, PartialState } from '@react-navigation/routers';
|
||||||
|
|
||||||
const MISSING_CONTEXT_ERROR =
|
const MISSING_CONTEXT_ERROR =
|
||||||
"Couldn't find a navigation context. Have you wrapped your app with 'NavigationContainer'? See https://reactnavigation.org/docs/getting-started for setup instructions.";
|
"Couldn't find a navigation context. Have you wrapped your app with 'NavigationContainer'? See https://reactnavigation.org/docs/getting-started for setup instructions.";
|
||||||
|
|||||||
@@ -1,21 +1,21 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import {
|
import type {
|
||||||
Route,
|
Route,
|
||||||
ParamListBase,
|
ParamListBase,
|
||||||
NavigationState,
|
NavigationState,
|
||||||
PartialState,
|
PartialState,
|
||||||
} from '@react-navigation/routers';
|
} from '@react-navigation/routers';
|
||||||
import NavigationStateContext from './NavigationStateContext';
|
import NavigationStateContext from './NavigationStateContext';
|
||||||
import NavigationContext from './NavigationContext';
|
|
||||||
import NavigationRouteContext from './NavigationRouteContext';
|
|
||||||
import StaticContainer from './StaticContainer';
|
import StaticContainer from './StaticContainer';
|
||||||
import EnsureSingleNavigator from './EnsureSingleNavigator';
|
import EnsureSingleNavigator from './EnsureSingleNavigator';
|
||||||
import { NavigationProp, RouteConfig, EventMapBase } from './types';
|
|
||||||
import useOptionsGetters from './useOptionsGetters';
|
import useOptionsGetters from './useOptionsGetters';
|
||||||
|
import NavigationBuilderContext from './NavigationBuilderContext';
|
||||||
|
import useFocusEffect from './useFocusEffect';
|
||||||
|
import type { NavigationProp, RouteConfig, EventMapBase } from './types';
|
||||||
|
|
||||||
type Props<
|
type Props<
|
||||||
State extends NavigationState,
|
State extends NavigationState,
|
||||||
ScreenOptions extends object,
|
ScreenOptions extends {},
|
||||||
EventMap extends EventMapBase
|
EventMap extends EventMapBase
|
||||||
> = {
|
> = {
|
||||||
screen: RouteConfig<ParamListBase, string, State, ScreenOptions, EventMap>;
|
screen: RouteConfig<ParamListBase, string, State, ScreenOptions, EventMap>;
|
||||||
@@ -34,7 +34,7 @@ type Props<
|
|||||||
*/
|
*/
|
||||||
export default function SceneView<
|
export default function SceneView<
|
||||||
State extends NavigationState,
|
State extends NavigationState,
|
||||||
ScreenOptions extends object,
|
ScreenOptions extends {},
|
||||||
EventMap extends EventMapBase
|
EventMap extends EventMapBase
|
||||||
>({
|
>({
|
||||||
screen,
|
screen,
|
||||||
@@ -45,21 +45,26 @@ export default function SceneView<
|
|||||||
options,
|
options,
|
||||||
}: Props<State, ScreenOptions, EventMap>) {
|
}: Props<State, ScreenOptions, EventMap>) {
|
||||||
const navigatorKeyRef = React.useRef<string | undefined>();
|
const navigatorKeyRef = React.useRef<string | undefined>();
|
||||||
|
const { onOptionsChange } = React.useContext(NavigationBuilderContext);
|
||||||
const getKey = React.useCallback(() => navigatorKeyRef.current, []);
|
const getKey = React.useCallback(() => navigatorKeyRef.current, []);
|
||||||
|
|
||||||
const optionsRef = React.useRef<object | undefined>(options);
|
const optionsRef = React.useRef<object | undefined>(options);
|
||||||
|
|
||||||
React.useEffect(() => {
|
|
||||||
optionsRef.current = options;
|
|
||||||
}, [options]);
|
|
||||||
|
|
||||||
const getOptions = React.useCallback(() => optionsRef.current, []);
|
const getOptions = React.useCallback(() => optionsRef.current, []);
|
||||||
|
|
||||||
const { addOptionsGetter } = useOptionsGetters({
|
const { addOptionsGetter, hasAnyChildListener } = useOptionsGetters({
|
||||||
key: route.key,
|
key: route.key,
|
||||||
|
getState,
|
||||||
getOptions,
|
getOptions,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const optionsChange = React.useCallback(() => {
|
||||||
|
optionsRef.current = options;
|
||||||
|
if (!hasAnyChildListener) {
|
||||||
|
onOptionsChange(options);
|
||||||
|
}
|
||||||
|
}, [onOptionsChange, options, hasAnyChildListener]);
|
||||||
|
|
||||||
|
useFocusEffect(optionsChange);
|
||||||
|
|
||||||
const setKey = React.useCallback((key: string) => {
|
const setKey = React.useCallback((key: string) => {
|
||||||
navigatorKeyRef.current = key;
|
navigatorKeyRef.current = key;
|
||||||
}, []);
|
}, []);
|
||||||
@@ -105,28 +110,22 @@ export default function SceneView<
|
|||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<NavigationContext.Provider value={navigation}>
|
<NavigationStateContext.Provider value={context}>
|
||||||
<NavigationRouteContext.Provider value={route}>
|
<EnsureSingleNavigator>
|
||||||
<NavigationStateContext.Provider value={context}>
|
<StaticContainer
|
||||||
<EnsureSingleNavigator>
|
name={screen.name}
|
||||||
<StaticContainer
|
// @ts-expect-error: these properties exist on screen, but TS is confused
|
||||||
name={screen.name}
|
render={screen.component || screen.children}
|
||||||
// @ts-ignore
|
navigation={navigation}
|
||||||
render={screen.component || screen.children}
|
route={route}
|
||||||
navigation={navigation}
|
>
|
||||||
route={route}
|
{'component' in screen && screen.component !== undefined ? (
|
||||||
>
|
<screen.component navigation={navigation} route={route} />
|
||||||
{'component' in screen && screen.component !== undefined ? (
|
) : 'children' in screen && screen.children !== undefined ? (
|
||||||
// @ts-ignore
|
screen.children({ navigation, route })
|
||||||
<screen.component navigation={navigation} route={route} />
|
) : null}
|
||||||
) : 'children' in screen && screen.children !== undefined ? (
|
</StaticContainer>
|
||||||
// @ts-ignore
|
</EnsureSingleNavigator>
|
||||||
screen.children({ navigation, route })
|
</NavigationStateContext.Provider>
|
||||||
) : null}
|
|
||||||
</StaticContainer>
|
|
||||||
</EnsureSingleNavigator>
|
|
||||||
</NavigationStateContext.Provider>
|
|
||||||
</NavigationRouteContext.Provider>
|
|
||||||
</NavigationContext.Provider>
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { ParamListBase, NavigationState } from '@react-navigation/routers';
|
import type { ParamListBase, NavigationState } from '@react-navigation/routers';
|
||||||
import { RouteConfig, EventMapBase } from './types';
|
import type { RouteConfig, EventMapBase } from './types';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Empty component used for specifying route configuration.
|
* Empty component used for specifying route configuration.
|
||||||
@@ -8,7 +8,7 @@ export default function Screen<
|
|||||||
ParamList extends ParamListBase,
|
ParamList extends ParamListBase,
|
||||||
RouteName extends keyof ParamList,
|
RouteName extends keyof ParamList,
|
||||||
State extends NavigationState,
|
State extends NavigationState,
|
||||||
ScreenOptions extends object,
|
ScreenOptions extends {},
|
||||||
EventMap extends EventMapBase
|
EventMap extends EventMapBase
|
||||||
>(_: RouteConfig<ParamList, RouteName, State, ScreenOptions, EventMap>) {
|
>(_: RouteConfig<ParamList, RouteName, State, ScreenOptions, EventMap>) {
|
||||||
/* istanbul ignore next */
|
/* istanbul ignore next */
|
||||||
|
|||||||
8
packages/core/src/UnhandledActionContext.tsx
Normal file
8
packages/core/src/UnhandledActionContext.tsx
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import * as React from 'react';
|
||||||
|
import type { NavigationAction } from '@react-navigation/routers';
|
||||||
|
|
||||||
|
const UnhandledActionContext = React.createContext<
|
||||||
|
((action: NavigationAction) => void) | undefined
|
||||||
|
>(undefined);
|
||||||
|
|
||||||
|
export default UnhandledActionContext;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { act, render } from 'react-native-testing-library';
|
import { act, render } from 'react-native-testing-library';
|
||||||
import {
|
import type {
|
||||||
DefaultRouterOptions,
|
DefaultRouterOptions,
|
||||||
NavigationState,
|
NavigationState,
|
||||||
Router,
|
Router,
|
||||||
@@ -10,7 +10,7 @@ import NavigationStateContext from '../NavigationStateContext';
|
|||||||
import MockRouter, { MockActions } from './__fixtures__/MockRouter';
|
import MockRouter, { MockActions } from './__fixtures__/MockRouter';
|
||||||
import useNavigationBuilder from '../useNavigationBuilder';
|
import useNavigationBuilder from '../useNavigationBuilder';
|
||||||
import Screen from '../Screen';
|
import Screen from '../Screen';
|
||||||
import { NavigationContainerRef } from '../types';
|
import type { NavigationContainerRef } from '../types';
|
||||||
|
|
||||||
it('throws when getState is accessed without a container', () => {
|
it('throws when getState is accessed without a container', () => {
|
||||||
expect.assertions(1);
|
expect.assertions(1);
|
||||||
@@ -430,6 +430,65 @@ it('emits state events when the state changes', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('emits state events when options change', () => {
|
||||||
|
const TestNavigator = (props: any) => {
|
||||||
|
const { state, descriptors } = useNavigationBuilder(MockRouter, props);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<React.Fragment>
|
||||||
|
{state.routes.map((route) => descriptors[route.key].render())}
|
||||||
|
</React.Fragment>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const ref = React.createRef<NavigationContainerRef>();
|
||||||
|
|
||||||
|
const element = (
|
||||||
|
<BaseNavigationContainer ref={ref}>
|
||||||
|
<TestNavigator>
|
||||||
|
<Screen name="foo" options={{ x: 1 }}>
|
||||||
|
{() => null}
|
||||||
|
</Screen>
|
||||||
|
<Screen name="bar" options={{ y: 2 }}>
|
||||||
|
{() => null}
|
||||||
|
</Screen>
|
||||||
|
<Screen name="baz" options={{ v: 3 }}>
|
||||||
|
{() => (
|
||||||
|
<TestNavigator>
|
||||||
|
<Screen name="foo" options={{ g: 5 }}>
|
||||||
|
{() => null}
|
||||||
|
</Screen>
|
||||||
|
</TestNavigator>
|
||||||
|
)}
|
||||||
|
</Screen>
|
||||||
|
</TestNavigator>
|
||||||
|
</BaseNavigationContainer>
|
||||||
|
);
|
||||||
|
|
||||||
|
const listener = jest.fn();
|
||||||
|
|
||||||
|
render(element).update(element);
|
||||||
|
ref.current?.addListener('options', listener);
|
||||||
|
|
||||||
|
act(() => {
|
||||||
|
ref.current?.navigate('bar');
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(listener.mock.calls[0][0].data.options).toEqual({
|
||||||
|
y: 2,
|
||||||
|
});
|
||||||
|
|
||||||
|
ref.current?.removeListener('options', listener);
|
||||||
|
const listener2 = jest.fn();
|
||||||
|
ref.current?.addListener('options', listener2);
|
||||||
|
|
||||||
|
act(() => {
|
||||||
|
ref.current?.navigate('baz');
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(listener2.mock.calls[0][0].data.options).toEqual({ g: 5 });
|
||||||
|
});
|
||||||
|
|
||||||
it('throws if there is no navigator rendered', () => {
|
it('throws if there is no navigator rendered', () => {
|
||||||
expect.assertions(1);
|
expect.assertions(1);
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ it('throws descriptive error if an argument is passed', () => {
|
|||||||
|
|
||||||
expect(() => createDummyNavigator()).not.toThrowError();
|
expect(() => createDummyNavigator()).not.toThrowError();
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-expect-error: we're explicitly passing invalid argument
|
||||||
expect(() => createDummyNavigator({})).toThrowError(
|
expect(() => createDummyNavigator({})).toThrowError(
|
||||||
"Creating a navigator doesn't take an argument."
|
"Creating a navigator doesn't take an argument."
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
import getFocusedRouteNameFromRoute from '../getFocusedRouteNameFromRoute';
|
||||||
|
|
||||||
|
it('gets undefined if there is no nested state', () => {
|
||||||
|
expect(getFocusedRouteNameFromRoute({ name: 'Home' })).toBe(undefined);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('gets focused route name from nested state', () => {
|
||||||
|
expect(
|
||||||
|
getFocusedRouteNameFromRoute({
|
||||||
|
name: 'Home',
|
||||||
|
state: {
|
||||||
|
routes: [{ name: 'Article' }],
|
||||||
|
},
|
||||||
|
})
|
||||||
|
).toBe('Article');
|
||||||
|
|
||||||
|
expect(
|
||||||
|
getFocusedRouteNameFromRoute({
|
||||||
|
name: 'Home',
|
||||||
|
state: {
|
||||||
|
index: 1,
|
||||||
|
routes: [{ name: 'Article' }, { name: 'Chat' }, { name: 'Album' }],
|
||||||
|
},
|
||||||
|
})
|
||||||
|
).toBe('Chat');
|
||||||
|
|
||||||
|
expect(
|
||||||
|
getFocusedRouteNameFromRoute({
|
||||||
|
name: 'Home',
|
||||||
|
state: {
|
||||||
|
routes: [{ name: 'Article' }, { name: 'Chat' }],
|
||||||
|
},
|
||||||
|
})
|
||||||
|
).toBe('Chat');
|
||||||
|
|
||||||
|
expect(
|
||||||
|
getFocusedRouteNameFromRoute({
|
||||||
|
name: 'Home',
|
||||||
|
state: {
|
||||||
|
type: 'tab',
|
||||||
|
routes: [{ name: 'Article' }, { name: 'Chat' }],
|
||||||
|
},
|
||||||
|
})
|
||||||
|
).toBe('Article');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('gets nested screen in params if present', () => {
|
||||||
|
expect(
|
||||||
|
getFocusedRouteNameFromRoute({
|
||||||
|
name: 'Home',
|
||||||
|
params: { screen: 'Chat' },
|
||||||
|
})
|
||||||
|
).toBe('Chat');
|
||||||
|
|
||||||
|
expect(
|
||||||
|
getFocusedRouteNameFromRoute({
|
||||||
|
name: 'Home',
|
||||||
|
params: { screen: 'Chat', initial: false },
|
||||||
|
})
|
||||||
|
).toBe('Chat');
|
||||||
|
|
||||||
|
expect(
|
||||||
|
getFocusedRouteNameFromRoute({
|
||||||
|
name: 'Home',
|
||||||
|
params: { screen: {} },
|
||||||
|
})
|
||||||
|
).toBe(undefined);
|
||||||
|
});
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,12 +1,12 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { render, act } from 'react-native-testing-library';
|
import { render, act } from 'react-native-testing-library';
|
||||||
import { NavigationState } from '@react-navigation/routers';
|
import type { NavigationState } from '@react-navigation/routers';
|
||||||
import Screen from '../Screen';
|
import Screen from '../Screen';
|
||||||
import BaseNavigationContainer from '../BaseNavigationContainer';
|
import BaseNavigationContainer from '../BaseNavigationContainer';
|
||||||
import useNavigationBuilder from '../useNavigationBuilder';
|
import useNavigationBuilder from '../useNavigationBuilder';
|
||||||
import useNavigation from '../useNavigation';
|
import useNavigation from '../useNavigation';
|
||||||
import MockRouter, { MockRouterKey } from './__fixtures__/MockRouter';
|
import MockRouter, { MockRouterKey } from './__fixtures__/MockRouter';
|
||||||
import { NavigationContainerRef } from '../types';
|
import type { NavigationContainerRef } from '../types';
|
||||||
|
|
||||||
beforeEach(() => (MockRouterKey.current = 0));
|
beforeEach(() => (MockRouterKey.current = 0));
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ it("doesn't crash when initialState is null", () => {
|
|||||||
const TestScreen = () => null;
|
const TestScreen = () => null;
|
||||||
|
|
||||||
const element = (
|
const element = (
|
||||||
// @ts-ignore
|
// @ts-expect-error: we're explicitly passing null for state
|
||||||
<BaseNavigationContainer initialState={null}>
|
<BaseNavigationContainer initialState={null}>
|
||||||
<TestNavigator>
|
<TestNavigator>
|
||||||
<Screen name="foo" component={TestScreen} />
|
<Screen name="foo" component={TestScreen} />
|
||||||
@@ -1529,7 +1529,7 @@ it('returns currently focused route with getCurrentRoute', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("returns currently focused route's options with getCurrentOptions", () => {
|
it("returns focused screen's options with getCurrentOptions when focused screen is rendered", () => {
|
||||||
const TestNavigator = (props: any): any => {
|
const TestNavigator = (props: any): any => {
|
||||||
const { state, descriptors } = useNavigationBuilder(MockRouter, props);
|
const { state, descriptors } = useNavigationBuilder(MockRouter, props);
|
||||||
|
|
||||||
@@ -1554,6 +1554,11 @@ it("returns currently focused route's options with getCurrentOptions", () => {
|
|||||||
component={TestScreen}
|
component={TestScreen}
|
||||||
options={{ sample: 'data' }}
|
options={{ sample: 'data' }}
|
||||||
/>
|
/>
|
||||||
|
<Screen
|
||||||
|
name="bar-b"
|
||||||
|
component={TestScreen}
|
||||||
|
options={{ sample3: 'data' }}
|
||||||
|
/>
|
||||||
</TestNavigator>
|
</TestNavigator>
|
||||||
)}
|
)}
|
||||||
</Screen>
|
</Screen>
|
||||||
@@ -1568,6 +1573,66 @@ it("returns currently focused route's options with getCurrentOptions", () => {
|
|||||||
sample: 'data',
|
sample: 'data',
|
||||||
sample2: 'data',
|
sample2: 'data',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
act(() => navigation.current?.navigate('bar-b'));
|
||||||
|
|
||||||
|
expect(navigation.current?.getCurrentOptions()).toEqual({
|
||||||
|
sample2: 'data',
|
||||||
|
sample3: 'data',
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it("returns focused screen's options with getCurrentOptions when all screens are rendered", () => {
|
||||||
|
const TestNavigator = (props: any): any => {
|
||||||
|
const { state, descriptors } = useNavigationBuilder(MockRouter, props);
|
||||||
|
|
||||||
|
return <>{state.routes.map((route) => descriptors[route.key].render())}</>;
|
||||||
|
};
|
||||||
|
|
||||||
|
const TestScreen = () => null;
|
||||||
|
|
||||||
|
const navigation = React.createRef<NavigationContainerRef>();
|
||||||
|
|
||||||
|
const container = (
|
||||||
|
<BaseNavigationContainer ref={navigation}>
|
||||||
|
<TestNavigator>
|
||||||
|
<Screen name="bar" options={{ a: 'b' }}>
|
||||||
|
{() => (
|
||||||
|
<TestNavigator
|
||||||
|
initialRouteName="bar-a"
|
||||||
|
screenOptions={() => ({ sample2: 'data' })}
|
||||||
|
>
|
||||||
|
<Screen
|
||||||
|
name="bar-a"
|
||||||
|
component={TestScreen}
|
||||||
|
options={{ sample: 'data' }}
|
||||||
|
/>
|
||||||
|
<Screen
|
||||||
|
name="bar-b"
|
||||||
|
component={TestScreen}
|
||||||
|
options={{ sample3: 'data' }}
|
||||||
|
/>
|
||||||
|
</TestNavigator>
|
||||||
|
)}
|
||||||
|
</Screen>
|
||||||
|
<Screen name="xux" component={TestScreen} />
|
||||||
|
</TestNavigator>
|
||||||
|
</BaseNavigationContainer>
|
||||||
|
);
|
||||||
|
|
||||||
|
render(container).update(container);
|
||||||
|
|
||||||
|
expect(navigation.current?.getCurrentOptions()).toEqual({
|
||||||
|
sample: 'data',
|
||||||
|
sample2: 'data',
|
||||||
|
});
|
||||||
|
|
||||||
|
act(() => navigation.current?.navigate('bar-b'));
|
||||||
|
|
||||||
|
expect(navigation.current?.getCurrentOptions()).toEqual({
|
||||||
|
sample2: 'data',
|
||||||
|
sample3: 'data',
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('does not throw if while getting current options with no options defined', () => {
|
it('does not throw if while getting current options with no options defined', () => {
|
||||||
@@ -1608,8 +1673,9 @@ it('does not throw if while getting current options with no options defined', ()
|
|||||||
it('does not throw if while getting current options with empty container', () => {
|
it('does not throw if while getting current options with empty container', () => {
|
||||||
const navigation = React.createRef<NavigationContainerRef>();
|
const navigation = React.createRef<NavigationContainerRef>();
|
||||||
|
|
||||||
// @ts-ignore
|
const container = (
|
||||||
const container = <BaseNavigationContainer ref={navigation} />;
|
<BaseNavigationContainer ref={navigation} children={null} />
|
||||||
|
);
|
||||||
|
|
||||||
render(container).update(container);
|
render(container).update(container);
|
||||||
|
|
||||||
|
|||||||
@@ -51,19 +51,17 @@ it('returns false for non-serializable object', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('returns false for circular references', () => {
|
it('returns false for circular references', () => {
|
||||||
const x = {
|
const x: any = {
|
||||||
a: 1,
|
a: 1,
|
||||||
b: { b1: 1 },
|
b: { b1: 1 },
|
||||||
};
|
};
|
||||||
|
|
||||||
// @ts-ignore
|
|
||||||
x.b.b2 = x;
|
x.b.b2 = x;
|
||||||
// @ts-ignore
|
|
||||||
x.c = x.b;
|
x.c = x.b;
|
||||||
|
|
||||||
expect(isSerializable(x)).toBe(false);
|
expect(isSerializable(x)).toBe(false);
|
||||||
|
|
||||||
const y = [
|
const y: any = [
|
||||||
{
|
{
|
||||||
label: 'home',
|
label: 'home',
|
||||||
children: [{ label: 'product' }],
|
children: [{ label: 'product' }],
|
||||||
@@ -71,19 +69,16 @@ it('returns false for circular references', () => {
|
|||||||
{ label: 'about', extend: {} },
|
{ label: 'about', extend: {} },
|
||||||
];
|
];
|
||||||
|
|
||||||
// @ts-ignore
|
|
||||||
y[0].children[0].parent = y[0];
|
y[0].children[0].parent = y[0];
|
||||||
// @ts-ignore
|
|
||||||
y[1].extend.home = y[0].children[0];
|
y[1].extend.home = y[0].children[0];
|
||||||
|
|
||||||
expect(isSerializable(y)).toBe(false);
|
expect(isSerializable(y)).toBe(false);
|
||||||
|
|
||||||
const z = {
|
const z: any = {
|
||||||
name: 'sun',
|
name: 'sun',
|
||||||
child: [{ name: 'flower' }],
|
child: [{ name: 'flower' }],
|
||||||
};
|
};
|
||||||
|
|
||||||
// @ts-ignore
|
|
||||||
z.child[0].parent = z;
|
z.child[0].parent = z;
|
||||||
|
|
||||||
expect(isSerializable(z)).toBe(false);
|
expect(isSerializable(z)).toBe(false);
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { render, act } from 'react-native-testing-library';
|
import { render, act } from 'react-native-testing-library';
|
||||||
import {
|
import type {
|
||||||
DefaultRouterOptions,
|
DefaultRouterOptions,
|
||||||
NavigationState,
|
NavigationState,
|
||||||
Router,
|
Router,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { render, act } from 'react-native-testing-library';
|
import { render, act } from 'react-native-testing-library';
|
||||||
import { Router, NavigationState } from '@react-navigation/routers';
|
import type { Router, NavigationState } from '@react-navigation/routers';
|
||||||
import useNavigationBuilder from '../useNavigationBuilder';
|
import useNavigationBuilder from '../useNavigationBuilder';
|
||||||
import BaseNavigationContainer from '../BaseNavigationContainer';
|
import BaseNavigationContainer from '../BaseNavigationContainer';
|
||||||
import Screen from '../Screen';
|
import Screen from '../Screen';
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { render, act } from 'react-native-testing-library';
|
import { render, act } from 'react-native-testing-library';
|
||||||
import { NavigationState } from '@react-navigation/routers';
|
import type { NavigationState } from '@react-navigation/routers';
|
||||||
import useNavigationBuilder from '../useNavigationBuilder';
|
import useNavigationBuilder from '../useNavigationBuilder';
|
||||||
import useNavigationState from '../useNavigationState';
|
import useNavigationState from '../useNavigationState';
|
||||||
import BaseNavigationContainer from '../BaseNavigationContainer';
|
import BaseNavigationContainer from '../BaseNavigationContainer';
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { render } from 'react-native-testing-library';
|
import { render } from 'react-native-testing-library';
|
||||||
import {
|
import type {
|
||||||
Router,
|
Router,
|
||||||
DefaultRouterOptions,
|
DefaultRouterOptions,
|
||||||
NavigationState,
|
NavigationState,
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import useRoute from '../useRoute';
|
|||||||
import BaseNavigationContainer from '../BaseNavigationContainer';
|
import BaseNavigationContainer from '../BaseNavigationContainer';
|
||||||
import Screen from '../Screen';
|
import Screen from '../Screen';
|
||||||
import MockRouter from './__fixtures__/MockRouter';
|
import MockRouter from './__fixtures__/MockRouter';
|
||||||
import { RouteProp } from '../types';
|
import type { RouteProp } from '../types';
|
||||||
|
|
||||||
it('gets route prop from context', () => {
|
it('gets route prop from context', () => {
|
||||||
expect.assertions(1);
|
expect.assertions(1);
|
||||||
|
|||||||
36
packages/core/src/checkLegacyPathConfig.tsx
Normal file
36
packages/core/src/checkLegacyPathConfig.tsx
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import type { PathConfigMap } from './types';
|
||||||
|
|
||||||
|
type Options = {
|
||||||
|
initialRouteName?: string;
|
||||||
|
screens: PathConfigMap;
|
||||||
|
};
|
||||||
|
|
||||||
|
export default function checkLegacyPathConfig(
|
||||||
|
config?: Options
|
||||||
|
): [boolean, Options | undefined] {
|
||||||
|
let legacy = false;
|
||||||
|
|
||||||
|
if (config) {
|
||||||
|
// Assume legacy configuration if config has any other keys except `screens` and `initialRouteName`
|
||||||
|
legacy = Object.keys(config).some(
|
||||||
|
(key) => key !== 'screens' && key !== 'initialRouteName'
|
||||||
|
);
|
||||||
|
|
||||||
|
if (
|
||||||
|
legacy &&
|
||||||
|
(config.hasOwnProperty('screens') ||
|
||||||
|
config.hasOwnProperty('initialRouteName'))
|
||||||
|
) {
|
||||||
|
throw new Error(
|
||||||
|
'Found invalid keys in the configuration object. See https://reactnavigation.org/docs/configuring-links/ for more details on the shape of the configuration object.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (legacy) {
|
||||||
|
// @ts-expect-error: we have incorrect type for config since we don't type legacy config
|
||||||
|
return [legacy, { screens: config }];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [legacy, config];
|
||||||
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
import * as React from 'react';
|
import type * as React from 'react';
|
||||||
import { ParamListBase, NavigationState } from '@react-navigation/routers';
|
import type { ParamListBase, NavigationState } from '@react-navigation/routers';
|
||||||
import Screen from './Screen';
|
import Screen from './Screen';
|
||||||
import { TypedNavigator, EventMapBase } from './types';
|
import type { TypedNavigator, EventMapBase } from './types';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Higher order component to create a `Navigator` and `Screen` pair.
|
* Higher order component to create a `Navigator` and `Screen` pair.
|
||||||
@@ -12,7 +12,7 @@ import { TypedNavigator, EventMapBase } from './types';
|
|||||||
*/
|
*/
|
||||||
export default function createNavigatorFactory<
|
export default function createNavigatorFactory<
|
||||||
State extends NavigationState,
|
State extends NavigationState,
|
||||||
ScreenOptions extends object,
|
ScreenOptions extends {},
|
||||||
EventMap extends EventMapBase,
|
EventMap extends EventMapBase,
|
||||||
NavigatorComponent extends React.ComponentType<any>
|
NavigatorComponent extends React.ComponentType<any>
|
||||||
>(Navigator: NavigatorComponent) {
|
>(Navigator: NavigatorComponent) {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { PartialState, NavigationState } from '@react-navigation/routers';
|
import type { PartialState, NavigationState } from '@react-navigation/routers';
|
||||||
|
|
||||||
type NavigateParams = {
|
type NavigateParams = {
|
||||||
screen?: string;
|
screen?: string;
|
||||||
|
|||||||
29
packages/core/src/getFocusedRouteNameFromRoute.tsx
Normal file
29
packages/core/src/getFocusedRouteNameFromRoute.tsx
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import type {
|
||||||
|
Route,
|
||||||
|
PartialState,
|
||||||
|
NavigationState,
|
||||||
|
} from '@react-navigation/routers';
|
||||||
|
|
||||||
|
export default function getFocusedRouteNameFromRoute(
|
||||||
|
route: Partial<Route<string>> & { state?: PartialState<NavigationState> }
|
||||||
|
): string | undefined {
|
||||||
|
const state = route.state;
|
||||||
|
const params = route.params as { screen?: unknown } | undefined;
|
||||||
|
|
||||||
|
const routeName = state
|
||||||
|
? // Get the currently active route name in the nested navigator
|
||||||
|
state.routes[
|
||||||
|
// If we have a partial state without index, for tab/drawer, first screen will be focused one, and last for stack
|
||||||
|
// The type property will only exist for rehydrated state and not for state from deep link
|
||||||
|
state.index ??
|
||||||
|
(typeof state.type === 'string' && state.type !== 'stack'
|
||||||
|
? 0
|
||||||
|
: state.routes.length - 1)
|
||||||
|
].name
|
||||||
|
: // If state doesn't exist, we need to default to `screen` param if available
|
||||||
|
typeof params?.screen === 'string'
|
||||||
|
? params.screen
|
||||||
|
: undefined;
|
||||||
|
|
||||||
|
return routeName;
|
||||||
|
}
|
||||||
@@ -1,17 +1,18 @@
|
|||||||
import queryString from 'query-string';
|
import queryString from 'query-string';
|
||||||
import {
|
import type {
|
||||||
NavigationState,
|
NavigationState,
|
||||||
PartialState,
|
PartialState,
|
||||||
Route,
|
Route,
|
||||||
} from '@react-navigation/routers';
|
} from '@react-navigation/routers';
|
||||||
import { PathConfig } from './types';
|
import checkLegacyPathConfig from './checkLegacyPathConfig';
|
||||||
|
import type { PathConfig, PathConfigMap } from './types';
|
||||||
|
|
||||||
|
type Options = { initialRouteName?: string; screens: PathConfigMap };
|
||||||
|
|
||||||
type State = NavigationState | Omit<PartialState<NavigationState>, 'stale'>;
|
type State = NavigationState | Omit<PartialState<NavigationState>, 'stale'>;
|
||||||
|
|
||||||
type StringifyConfig = Record<string, (value: any) => string>;
|
type StringifyConfig = Record<string, (value: any) => string>;
|
||||||
|
|
||||||
type OptionsItem = PathConfig[string];
|
|
||||||
|
|
||||||
type ConfigItem = {
|
type ConfigItem = {
|
||||||
pattern?: string;
|
pattern?: string;
|
||||||
stringify?: StringifyConfig;
|
stringify?: StringifyConfig;
|
||||||
@@ -46,9 +47,11 @@ const getActiveRoute = (state: State): { name: string; params?: object } => {
|
|||||||
* ],
|
* ],
|
||||||
* },
|
* },
|
||||||
* {
|
* {
|
||||||
* Chat: {
|
* screens: {
|
||||||
* path: 'chat/:author/:id',
|
* Chat: {
|
||||||
* stringify: { author: author => author.toLowerCase() }
|
* path: 'chat/:author/:id',
|
||||||
|
* stringify: { author: author => author.toLowerCase() }
|
||||||
|
* }
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
* )
|
* )
|
||||||
@@ -59,15 +62,21 @@ const getActiveRoute = (state: State): { name: string; params?: object } => {
|
|||||||
* @returns Path representing the state, e.g. /foo/bar?count=42.
|
* @returns Path representing the state, e.g. /foo/bar?count=42.
|
||||||
*/
|
*/
|
||||||
export default function getPathFromState(
|
export default function getPathFromState(
|
||||||
state?: State,
|
state: State,
|
||||||
options: PathConfig = {}
|
options?: Options
|
||||||
): string {
|
): string {
|
||||||
if (state === undefined) {
|
if (state == null) {
|
||||||
throw Error('NavigationState not passed');
|
throw Error(
|
||||||
|
"Got 'undefined' for the navigation state. You must pass a valid state object."
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a normalized configs array which will be easier to use
|
const [legacy, compatOptions] = checkLegacyPathConfig(options);
|
||||||
const configs = createNormalizedConfigs(options);
|
|
||||||
|
// Create a normalized configs object which will be easier to use
|
||||||
|
const configs: Record<string, ConfigItem> = compatOptions
|
||||||
|
? createNormalizedConfigs(legacy, compatOptions.screens)
|
||||||
|
: {};
|
||||||
|
|
||||||
let path = '/';
|
let path = '/';
|
||||||
let current: State | undefined = state;
|
let current: State | undefined = state;
|
||||||
@@ -168,6 +177,12 @@ export default function getPathFromState(
|
|||||||
// Showing the route name seems ok, though whatever we show here will be incorrect
|
// Showing the route name seems ok, though whatever we show here will be incorrect
|
||||||
// Since the page doesn't actually exist
|
// Since the page doesn't actually exist
|
||||||
if (p === '*') {
|
if (p === '*') {
|
||||||
|
if (legacy) {
|
||||||
|
throw new Error(
|
||||||
|
"Please update your config to the new format to use wildcard pattern ('*'). https://reactnavigation.org/docs/configuring-links/#updating-config"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return route.name;
|
return route.name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -238,7 +253,8 @@ const joinPaths = (...paths: string[]): string =>
|
|||||||
.join('/');
|
.join('/');
|
||||||
|
|
||||||
const createConfigItem = (
|
const createConfigItem = (
|
||||||
config: OptionsItem | string,
|
legacy: boolean,
|
||||||
|
config: PathConfig | string,
|
||||||
parentPattern?: string
|
parentPattern?: string
|
||||||
): ConfigItem => {
|
): ConfigItem => {
|
||||||
if (typeof config === 'string') {
|
if (typeof config === 'string') {
|
||||||
@@ -250,13 +266,28 @@ const createConfigItem = (
|
|||||||
|
|
||||||
// If an object is specified as the value (e.g. Foo: { ... }),
|
// If an object is specified as the value (e.g. Foo: { ... }),
|
||||||
// It can have `path` property and `screens` prop which has nested configs
|
// It can have `path` property and `screens` prop which has nested configs
|
||||||
const pattern =
|
let pattern: string | undefined;
|
||||||
config.exact !== true && parentPattern && config.path
|
|
||||||
? joinPaths(parentPattern, config.path)
|
if (legacy) {
|
||||||
: config.path;
|
pattern =
|
||||||
|
config.exact !== true && parentPattern && config.path
|
||||||
|
? joinPaths(parentPattern, config.path)
|
||||||
|
: config.path;
|
||||||
|
} else {
|
||||||
|
if (config.exact && config.path === undefined) {
|
||||||
|
throw new Error(
|
||||||
|
"A 'path' needs to be specified when specifying 'exact: true'. If you don't want this screen in the URL, specify it as empty string, e.g. `path: ''`."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
pattern =
|
||||||
|
config.exact !== true
|
||||||
|
? joinPaths(parentPattern || '', config.path || '')
|
||||||
|
: config.path || '';
|
||||||
|
}
|
||||||
|
|
||||||
const screens = config.screens
|
const screens = config.screens
|
||||||
? createNormalizedConfigs(config.screens, pattern)
|
? createNormalizedConfigs(legacy, config.screens, pattern)
|
||||||
: undefined;
|
: undefined;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -268,12 +299,13 @@ const createConfigItem = (
|
|||||||
};
|
};
|
||||||
|
|
||||||
const createNormalizedConfigs = (
|
const createNormalizedConfigs = (
|
||||||
options: PathConfig,
|
legacy: boolean,
|
||||||
|
options: PathConfigMap,
|
||||||
pattern?: string
|
pattern?: string
|
||||||
): Record<string, ConfigItem> =>
|
): Record<string, ConfigItem> =>
|
||||||
fromEntries(
|
fromEntries(
|
||||||
Object.entries(options).map(([name, c]) => {
|
Object.entries(options).map(([name, c]) => {
|
||||||
const result = createConfigItem(c, pattern);
|
const result = createConfigItem(legacy, c, pattern);
|
||||||
|
|
||||||
return [name, result];
|
return [name, result];
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,11 +1,17 @@
|
|||||||
import escape from 'escape-string-regexp';
|
import escape from 'escape-string-regexp';
|
||||||
import queryString from 'query-string';
|
import queryString from 'query-string';
|
||||||
import {
|
import type {
|
||||||
NavigationState,
|
NavigationState,
|
||||||
PartialState,
|
PartialState,
|
||||||
InitialState,
|
InitialState,
|
||||||
} from '@react-navigation/routers';
|
} from '@react-navigation/routers';
|
||||||
import { PathConfig } from './types';
|
import checkLegacyPathConfig from './checkLegacyPathConfig';
|
||||||
|
import type { PathConfigMap } from './types';
|
||||||
|
|
||||||
|
type Options = {
|
||||||
|
initialRouteName?: string;
|
||||||
|
screens: PathConfigMap;
|
||||||
|
};
|
||||||
|
|
||||||
type ParseConfig = Record<string, (value: string) => any>;
|
type ParseConfig = Record<string, (value: string) => any>;
|
||||||
|
|
||||||
@@ -36,9 +42,11 @@ type ResultState = PartialState<NavigationState> & {
|
|||||||
* getStateFromPath(
|
* getStateFromPath(
|
||||||
* '/chat/jane/42',
|
* '/chat/jane/42',
|
||||||
* {
|
* {
|
||||||
* Chat: {
|
* screens: {
|
||||||
* path: 'chat/:author/:id',
|
* Chat: {
|
||||||
* parse: { id: Number }
|
* path: 'chat/:author/:id',
|
||||||
|
* parse: { id: Number }
|
||||||
|
* }
|
||||||
* }
|
* }
|
||||||
* }
|
* }
|
||||||
* )
|
* )
|
||||||
@@ -48,15 +56,62 @@ type ResultState = PartialState<NavigationState> & {
|
|||||||
*/
|
*/
|
||||||
export default function getStateFromPath(
|
export default function getStateFromPath(
|
||||||
path: string,
|
path: string,
|
||||||
options: PathConfig = {}
|
options?: Options
|
||||||
): ResultState | undefined {
|
): ResultState | undefined {
|
||||||
|
const [legacy, compatOptions] = checkLegacyPathConfig(options);
|
||||||
|
|
||||||
let initialRoutes: InitialRouteConfig[] = [];
|
let initialRoutes: InitialRouteConfig[] = [];
|
||||||
|
|
||||||
|
if (compatOptions?.initialRouteName) {
|
||||||
|
initialRoutes.push({
|
||||||
|
initialRouteName: compatOptions.initialRouteName,
|
||||||
|
connectedRoutes: Object.keys(compatOptions.screens),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const screens = compatOptions?.screens;
|
||||||
|
|
||||||
|
let remaining = path
|
||||||
|
.replace(/\/+/g, '/') // Replace multiple slash (//) with single ones
|
||||||
|
.replace(/^\//, '') // Remove extra leading slash
|
||||||
|
.replace(/\?.*$/, ''); // Remove query params which we will handle later
|
||||||
|
|
||||||
|
// Make sure there is a trailing slash
|
||||||
|
remaining = remaining.endsWith('/') ? remaining : `${remaining}/`;
|
||||||
|
|
||||||
|
if (screens === undefined) {
|
||||||
|
// When no config is specified, use the path segments as route names
|
||||||
|
const routes = remaining
|
||||||
|
.split('/')
|
||||||
|
.filter(Boolean)
|
||||||
|
.map((segment, i, self) => {
|
||||||
|
const name = decodeURIComponent(segment);
|
||||||
|
|
||||||
|
if (i === self.length - 1) {
|
||||||
|
return { name, params: parseQueryParams(path) };
|
||||||
|
}
|
||||||
|
|
||||||
|
return { name };
|
||||||
|
});
|
||||||
|
|
||||||
|
if (routes.length) {
|
||||||
|
return createNestedStateObject(routes, initialRoutes);
|
||||||
|
}
|
||||||
|
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
// Create a normalized configs array which will be easier to use
|
// Create a normalized configs array which will be easier to use
|
||||||
const configs = ([] as RouteConfig[])
|
const configs = ([] as RouteConfig[])
|
||||||
.concat(
|
.concat(
|
||||||
...Object.keys(options).map((key) =>
|
...Object.keys(screens).map((key) =>
|
||||||
createNormalizedConfigs(key, options, [], initialRoutes)
|
createNormalizedConfigs(
|
||||||
|
legacy,
|
||||||
|
key,
|
||||||
|
screens as PathConfigMap,
|
||||||
|
[],
|
||||||
|
initialRoutes
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
.sort((a, b) => {
|
.sort((a, b) => {
|
||||||
@@ -100,14 +155,6 @@ export default function getStateFromPath(
|
|||||||
return bWildcardIndex - aWildcardIndex;
|
return bWildcardIndex - aWildcardIndex;
|
||||||
});
|
});
|
||||||
|
|
||||||
let remaining = path
|
|
||||||
.replace(/\/+/g, '/') // Replace multiple slash (//) with single ones
|
|
||||||
.replace(/^\//, '') // Remove extra leading slash
|
|
||||||
.replace(/\?.*$/, ''); // Remove query params which we will handle later
|
|
||||||
|
|
||||||
// Make sure there is a trailing slash
|
|
||||||
remaining = remaining.endsWith('/') ? remaining : `${remaining}/`;
|
|
||||||
|
|
||||||
if (remaining === '/') {
|
if (remaining === '/') {
|
||||||
// We need to add special handling of empty path so navigation to empty path also works
|
// We need to add special handling of empty path so navigation to empty path also works
|
||||||
// When handling empty path, we should only look at the root level config
|
// When handling empty path, we should only look at the root level config
|
||||||
@@ -139,66 +186,67 @@ export default function getStateFromPath(
|
|||||||
let result: PartialState<NavigationState> | undefined;
|
let result: PartialState<NavigationState> | undefined;
|
||||||
let current: PartialState<NavigationState> | undefined;
|
let current: PartialState<NavigationState> | undefined;
|
||||||
|
|
||||||
// We try to match the paths in 2 passes
|
if (legacy === false) {
|
||||||
// In first pass, we match the whole path against the regex instead of segments
|
// If we're not in legacy mode,, we match the whole path against the regex instead of segments
|
||||||
// This makes sure matches such as wildcard will catch any unmatched routes, even if nested
|
// This makes sure matches such as wildcard will catch any unmatched routes, even if nested
|
||||||
const { routeNames, allParams, remainingPath } = matchAgainstConfigs(
|
const { routeNames, allParams, remainingPath } = matchAgainstConfigs(
|
||||||
remaining,
|
|
||||||
configs.map((c) => ({
|
|
||||||
...c,
|
|
||||||
// Add `$` to the regex to make sure it matches till end of the path and not just beginning
|
|
||||||
regex: c.regex ? new RegExp(c.regex.source + '$') : undefined,
|
|
||||||
}))
|
|
||||||
);
|
|
||||||
|
|
||||||
if (routeNames !== undefined) {
|
|
||||||
// This will always be empty if full path matched
|
|
||||||
remaining = remainingPath;
|
|
||||||
current = createNestedStateObject(
|
|
||||||
createRouteObjects(configs, routeNames, allParams),
|
|
||||||
initialRoutes
|
|
||||||
);
|
|
||||||
result = current;
|
|
||||||
}
|
|
||||||
|
|
||||||
// In second pass, we divide the path into segments and match piece by piece
|
|
||||||
// This preserves the old behaviour, but we should remove it in next major
|
|
||||||
while (remaining) {
|
|
||||||
let { routeNames, allParams, remainingPath } = matchAgainstConfigs(
|
|
||||||
remaining,
|
remaining,
|
||||||
configs
|
configs.map((c) => ({
|
||||||
|
...c,
|
||||||
|
// Add `$` to the regex to make sure it matches till end of the path and not just beginning
|
||||||
|
regex: c.regex ? new RegExp(c.regex.source + '$') : undefined,
|
||||||
|
}))
|
||||||
);
|
);
|
||||||
|
|
||||||
remaining = remainingPath;
|
if (routeNames !== undefined) {
|
||||||
|
// This will always be empty if full path matched
|
||||||
// If we hadn't matched any segments earlier, use the path as route name
|
remaining = remainingPath;
|
||||||
if (routeNames === undefined) {
|
current = createNestedStateObject(
|
||||||
const segments = remaining.split('/');
|
createRouteObjects(configs, routeNames, allParams),
|
||||||
|
initialRoutes
|
||||||
routeNames = [decodeURIComponent(segments[0])];
|
);
|
||||||
segments.shift();
|
result = current;
|
||||||
remaining = segments.join('/');
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
// In legacy mode, we divide the path into segments and match piece by piece
|
||||||
|
// This preserves the legacy behaviour, but we should remove it in next major
|
||||||
|
while (remaining) {
|
||||||
|
let { routeNames, allParams, remainingPath } = matchAgainstConfigs(
|
||||||
|
remaining,
|
||||||
|
configs
|
||||||
|
);
|
||||||
|
|
||||||
const state = createNestedStateObject(
|
remaining = remainingPath;
|
||||||
createRouteObjects(configs, routeNames, allParams),
|
|
||||||
initialRoutes
|
|
||||||
);
|
|
||||||
|
|
||||||
if (current) {
|
// If we hadn't matched any segments earlier, use the path as route name
|
||||||
// The state should be nested inside the deepest route we parsed before
|
if (routeNames === undefined) {
|
||||||
while (current?.routes[current.index || 0].state) {
|
const segments = remaining.split('/');
|
||||||
current = current.routes[current.index || 0].state;
|
|
||||||
|
routeNames = [decodeURIComponent(segments[0])];
|
||||||
|
segments.shift();
|
||||||
|
remaining = segments.join('/');
|
||||||
}
|
}
|
||||||
|
|
||||||
(current as PartialState<NavigationState>).routes[
|
const state = createNestedStateObject(
|
||||||
current?.index || 0
|
createRouteObjects(configs, routeNames, allParams),
|
||||||
].state = state;
|
initialRoutes
|
||||||
} else {
|
);
|
||||||
result = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
current = state;
|
if (current) {
|
||||||
|
// The state should be nested inside the deepest route we parsed before
|
||||||
|
while (current?.routes[current.index || 0].state) {
|
||||||
|
current = current.routes[current.index || 0].state;
|
||||||
|
}
|
||||||
|
|
||||||
|
(current as PartialState<NavigationState>).routes[
|
||||||
|
current?.index || 0
|
||||||
|
].state = state;
|
||||||
|
} else {
|
||||||
|
result = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
current = state;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (current == null || result == null) {
|
if (current == null || result == null) {
|
||||||
@@ -265,8 +313,9 @@ const matchAgainstConfigs = (remaining: string, configs: RouteConfig[]) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const createNormalizedConfigs = (
|
const createNormalizedConfigs = (
|
||||||
|
legacy: boolean,
|
||||||
screen: string,
|
screen: string,
|
||||||
routeConfig: PathConfig,
|
routeConfig: PathConfigMap,
|
||||||
routeNames: string[] = [],
|
routeNames: string[] = [],
|
||||||
initials: InitialRouteConfig[],
|
initials: InitialRouteConfig[],
|
||||||
parentPattern?: string
|
parentPattern?: string
|
||||||
@@ -281,7 +330,7 @@ const createNormalizedConfigs = (
|
|||||||
// If a string is specified as the value of the key(e.g. Foo: '/path'), use it as the pattern
|
// If a string is specified as the value of the key(e.g. Foo: '/path'), use it as the pattern
|
||||||
const pattern = parentPattern ? joinPaths(parentPattern, config) : config;
|
const pattern = parentPattern ? joinPaths(parentPattern, config) : config;
|
||||||
|
|
||||||
configs.push(createConfigItem(screen, routeNames, pattern, config));
|
configs.push(createConfigItem(legacy, screen, routeNames, pattern, config));
|
||||||
} else if (typeof config === 'object') {
|
} else if (typeof config === 'object') {
|
||||||
let pattern: string | undefined;
|
let pattern: string | undefined;
|
||||||
|
|
||||||
@@ -289,13 +338,33 @@ const createNormalizedConfigs = (
|
|||||||
// it can have `path` property and
|
// it can have `path` property and
|
||||||
// it could have `screens` prop which has nested configs
|
// it could have `screens` prop which has nested configs
|
||||||
if (typeof config.path === 'string') {
|
if (typeof config.path === 'string') {
|
||||||
pattern =
|
if (legacy) {
|
||||||
config.exact !== true && parentPattern
|
pattern =
|
||||||
? joinPaths(parentPattern, config.path)
|
config.exact !== true && parentPattern
|
||||||
: config.path;
|
? joinPaths(parentPattern, config.path)
|
||||||
|
: config.path;
|
||||||
|
} else {
|
||||||
|
if (config.exact && config.path === undefined) {
|
||||||
|
throw new Error(
|
||||||
|
"A 'path' needs to be specified when specifying 'exact: true'. If you don't want this screen in the URL, specify it as empty string, e.g. `path: ''`."
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
pattern =
|
||||||
|
config.exact !== true
|
||||||
|
? joinPaths(parentPattern || '', config.path || '')
|
||||||
|
: config.path || '';
|
||||||
|
}
|
||||||
|
|
||||||
configs.push(
|
configs.push(
|
||||||
createConfigItem(screen, routeNames, pattern, config.path, config.parse)
|
createConfigItem(
|
||||||
|
legacy,
|
||||||
|
screen,
|
||||||
|
routeNames,
|
||||||
|
pattern,
|
||||||
|
config.path,
|
||||||
|
config.parse
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -310,11 +379,12 @@ const createNormalizedConfigs = (
|
|||||||
|
|
||||||
Object.keys(config.screens).forEach((nestedConfig) => {
|
Object.keys(config.screens).forEach((nestedConfig) => {
|
||||||
const result = createNormalizedConfigs(
|
const result = createNormalizedConfigs(
|
||||||
|
legacy,
|
||||||
nestedConfig,
|
nestedConfig,
|
||||||
config.screens as PathConfig,
|
config.screens as PathConfigMap,
|
||||||
routeNames,
|
routeNames,
|
||||||
initials,
|
initials,
|
||||||
pattern
|
pattern ?? parentPattern
|
||||||
);
|
);
|
||||||
|
|
||||||
configs.push(...result);
|
configs.push(...result);
|
||||||
@@ -328,6 +398,7 @@ const createNormalizedConfigs = (
|
|||||||
};
|
};
|
||||||
|
|
||||||
const createConfigItem = (
|
const createConfigItem = (
|
||||||
|
legacy: boolean,
|
||||||
screen: string,
|
screen: string,
|
||||||
routeNames: string[],
|
routeNames: string[],
|
||||||
pattern: string,
|
pattern: string,
|
||||||
@@ -342,6 +413,12 @@ const createConfigItem = (
|
|||||||
`^(${pattern
|
`^(${pattern
|
||||||
.split('/')
|
.split('/')
|
||||||
.map((it) => {
|
.map((it) => {
|
||||||
|
if (legacy && it === '*') {
|
||||||
|
throw new Error(
|
||||||
|
"Please update your config to the new format to use wildcard pattern ('*'). https://reactnavigation.org/docs/configuring-links/#updating-config"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (it.startsWith(':')) {
|
if (it.startsWith(':')) {
|
||||||
return `(([^/]+\\/)${it.endsWith('?') ? '?' : ''})`;
|
return `(([^/]+\\/)${it.endsWith('?') ? '?' : ''})`;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,4 +20,6 @@ export { default as getStateFromPath } from './getStateFromPath';
|
|||||||
export { default as getPathFromState } from './getPathFromState';
|
export { default as getPathFromState } from './getPathFromState';
|
||||||
export { default as getActionFromState } from './getActionFromState';
|
export { default as getActionFromState } from './getActionFromState';
|
||||||
|
|
||||||
|
export { default as getFocusedRouteNameFromRoute } from './getFocusedRouteNameFromRoute';
|
||||||
|
|
||||||
export * from './types';
|
export * from './types';
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import * as React from 'react';
|
import type * as React from 'react';
|
||||||
import {
|
import type {
|
||||||
DefaultRouterOptions,
|
DefaultRouterOptions,
|
||||||
NavigationState,
|
NavigationState,
|
||||||
NavigationAction,
|
NavigationAction,
|
||||||
@@ -10,7 +10,7 @@ import {
|
|||||||
} from '@react-navigation/routers';
|
} from '@react-navigation/routers';
|
||||||
|
|
||||||
export type DefaultNavigatorOptions<
|
export type DefaultNavigatorOptions<
|
||||||
ScreenOptions extends object
|
ScreenOptions extends {}
|
||||||
> = DefaultRouterOptions & {
|
> = DefaultRouterOptions & {
|
||||||
/**
|
/**
|
||||||
* Children React Elements to extract the route configuration from.
|
* Children React Elements to extract the route configuration from.
|
||||||
@@ -61,7 +61,7 @@ export type EventArg<
|
|||||||
preventDefault(): void;
|
preventDefault(): void;
|
||||||
}
|
}
|
||||||
: {}) &
|
: {}) &
|
||||||
(Data extends undefined ? {} : { readonly data: Data });
|
(undefined extends Data ? {} : { readonly data: Data });
|
||||||
|
|
||||||
export type EventListenerCallback<
|
export type EventListenerCallback<
|
||||||
EventMap extends EventMapBase,
|
EventMap extends EventMapBase,
|
||||||
@@ -107,7 +107,7 @@ export type EventEmitter<EventMap extends EventMapBase> = {
|
|||||||
} & (EventMap[EventName]['canPreventDefault'] extends true
|
} & (EventMap[EventName]['canPreventDefault'] extends true
|
||||||
? { canPreventDefault: true }
|
? { canPreventDefault: true }
|
||||||
: {}) &
|
: {}) &
|
||||||
(EventMap[EventName]['data'] extends undefined
|
(undefined extends EventMap[EventName]['data']
|
||||||
? {}
|
? {}
|
||||||
: { data: EventMap[EventName]['data'] })
|
: { data: EventMap[EventName]['data'] })
|
||||||
): EventArg<
|
): EventArg<
|
||||||
@@ -250,7 +250,7 @@ export type NavigationProp<
|
|||||||
ParamList extends ParamListBase,
|
ParamList extends ParamListBase,
|
||||||
RouteName extends keyof ParamList = string,
|
RouteName extends keyof ParamList = string,
|
||||||
State extends NavigationState = NavigationState,
|
State extends NavigationState = NavigationState,
|
||||||
ScreenOptions extends object = {},
|
ScreenOptions extends {} = {},
|
||||||
EventMap extends EventMapBase = {}
|
EventMap extends EventMapBase = {}
|
||||||
> = NavigationHelpersCommon<ParamList, State> & {
|
> = NavigationHelpersCommon<ParamList, State> & {
|
||||||
/**
|
/**
|
||||||
@@ -275,7 +275,7 @@ export type RouteProp<
|
|||||||
ParamList extends ParamListBase,
|
ParamList extends ParamListBase,
|
||||||
RouteName extends keyof ParamList
|
RouteName extends keyof ParamList
|
||||||
> = Omit<Route<Extract<RouteName, string>>, 'params'> &
|
> = Omit<Route<Extract<RouteName, string>>, 'params'> &
|
||||||
(ParamList[RouteName] extends undefined
|
(undefined extends ParamList[RouteName]
|
||||||
? {}
|
? {}
|
||||||
: {
|
: {
|
||||||
/**
|
/**
|
||||||
@@ -321,7 +321,7 @@ export type Descriptor<
|
|||||||
ParamList extends ParamListBase,
|
ParamList extends ParamListBase,
|
||||||
RouteName extends keyof ParamList = string,
|
RouteName extends keyof ParamList = string,
|
||||||
State extends NavigationState = NavigationState,
|
State extends NavigationState = NavigationState,
|
||||||
ScreenOptions extends object = {},
|
ScreenOptions extends {} = {},
|
||||||
EventMap extends EventMapBase = {}
|
EventMap extends EventMapBase = {}
|
||||||
> = {
|
> = {
|
||||||
/**
|
/**
|
||||||
@@ -360,7 +360,7 @@ export type RouteConfig<
|
|||||||
ParamList extends ParamListBase,
|
ParamList extends ParamListBase,
|
||||||
RouteName extends keyof ParamList,
|
RouteName extends keyof ParamList,
|
||||||
State extends NavigationState,
|
State extends NavigationState,
|
||||||
ScreenOptions extends object,
|
ScreenOptions extends {},
|
||||||
EventMap extends EventMapBase
|
EventMap extends EventMapBase
|
||||||
> = {
|
> = {
|
||||||
/**
|
/**
|
||||||
@@ -410,8 +410,43 @@ export type RouteConfig<
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
export type NavigationContainerEventMap = {
|
||||||
|
/**
|
||||||
|
* Event which fires when the navigation state changes.
|
||||||
|
*/
|
||||||
|
state: {
|
||||||
|
data: {
|
||||||
|
/**
|
||||||
|
* The updated state object after the state change.
|
||||||
|
*/
|
||||||
|
state: NavigationState | PartialState<NavigationState> | undefined;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* Event which fires when current options changes.
|
||||||
|
*/
|
||||||
|
options: { data: { options: object } };
|
||||||
|
/**
|
||||||
|
* Event which fires when an action is dispatched.
|
||||||
|
* Only intended for debugging purposes, don't use it for app logic.
|
||||||
|
* This event will be emitted before state changes have been applied.
|
||||||
|
*/
|
||||||
|
__unsafe_action__: {
|
||||||
|
data: {
|
||||||
|
/**
|
||||||
|
* The action object which was dispatched.
|
||||||
|
*/
|
||||||
|
action: NavigationAction;
|
||||||
|
/**
|
||||||
|
* Whether the action was a no-op, i.e. resulted any state changes.
|
||||||
|
*/
|
||||||
|
noop: boolean;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
export type NavigationContainerRef = NavigationHelpers<ParamListBase> &
|
export type NavigationContainerRef = NavigationHelpers<ParamListBase> &
|
||||||
EventConsumer<{ state: { data: { state: NavigationState } } }> & {
|
EventConsumer<NavigationContainerEventMap> & {
|
||||||
/**
|
/**
|
||||||
* Reset the navigation state of the root navigator to the provided state.
|
* Reset the navigation state of the root navigator to the provided state.
|
||||||
*
|
*
|
||||||
@@ -435,7 +470,7 @@ export type NavigationContainerRef = NavigationHelpers<ParamListBase> &
|
|||||||
export type TypedNavigator<
|
export type TypedNavigator<
|
||||||
ParamList extends ParamListBase,
|
ParamList extends ParamListBase,
|
||||||
State extends NavigationState,
|
State extends NavigationState,
|
||||||
ScreenOptions extends object,
|
ScreenOptions extends {},
|
||||||
EventMap extends EventMapBase,
|
EventMap extends EventMapBase,
|
||||||
Navigator extends React.ComponentType<any>
|
Navigator extends React.ComponentType<any>
|
||||||
> = {
|
> = {
|
||||||
@@ -443,25 +478,14 @@ export type TypedNavigator<
|
|||||||
* Navigator component which manages the child screens.
|
* Navigator component which manages the child screens.
|
||||||
*/
|
*/
|
||||||
Navigator: React.ComponentType<
|
Navigator: React.ComponentType<
|
||||||
Omit<
|
Omit<React.ComponentProps<Navigator>, keyof DefaultNavigatorOptions<any>> &
|
||||||
React.ComponentProps<Navigator>,
|
Omit<DefaultNavigatorOptions<ScreenOptions>, 'initialRouteName'> & {
|
||||||
'initialRouteName' | 'screenOptions'
|
/**
|
||||||
> & {
|
* Name of the route to focus by on initial render.
|
||||||
/**
|
* If not specified, usually the first route is used.
|
||||||
* Name of the route to focus by on initial render.
|
*/
|
||||||
* If not specified, usually the first route is used.
|
initialRouteName?: keyof ParamList;
|
||||||
*/
|
}
|
||||||
initialRouteName?: keyof ParamList;
|
|
||||||
/**
|
|
||||||
* Default options for all screens under this navigator.
|
|
||||||
*/
|
|
||||||
screenOptions?:
|
|
||||||
| ScreenOptions
|
|
||||||
| ((props: {
|
|
||||||
route: RouteProp<ParamList, keyof ParamList>;
|
|
||||||
navigation: any;
|
|
||||||
}) => ScreenOptions);
|
|
||||||
}
|
|
||||||
>;
|
>;
|
||||||
/**
|
/**
|
||||||
* Component used for specifying route configuration.
|
* Component used for specifying route configuration.
|
||||||
@@ -472,14 +496,14 @@ export type TypedNavigator<
|
|||||||
};
|
};
|
||||||
|
|
||||||
export type PathConfig = {
|
export type PathConfig = {
|
||||||
[routeName: string]:
|
path?: string;
|
||||||
| string
|
exact?: boolean;
|
||||||
| {
|
parse?: Record<string, (value: string) => any>;
|
||||||
path?: string;
|
stringify?: Record<string, (value: any) => string>;
|
||||||
exact?: boolean;
|
screens?: PathConfigMap;
|
||||||
parse?: Record<string, (value: string) => any>;
|
initialRouteName?: string;
|
||||||
stringify?: Record<string, (value: any) => string>;
|
};
|
||||||
screens?: PathConfig;
|
|
||||||
initialRouteName?: string;
|
export type PathConfigMap = {
|
||||||
};
|
[routeName: string]: string | PathConfig;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { ChildActionListener } from './NavigationBuilderContext';
|
import type { ChildActionListener } from './NavigationBuilderContext';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hook which lets child navigators add action listeners.
|
* Hook which lets child navigators add action listeners.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { NavigationState, ParamListBase } from '@react-navigation/routers';
|
import type { NavigationState, ParamListBase } from '@react-navigation/routers';
|
||||||
import CurrentRenderContext from './CurrentRenderContext';
|
import CurrentRenderContext from './CurrentRenderContext';
|
||||||
import { Descriptor, NavigationHelpers } from './types';
|
import type { Descriptor, NavigationHelpers } from './types';
|
||||||
|
|
||||||
type Options = {
|
type Options = {
|
||||||
state: NavigationState;
|
state: NavigationState;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import {
|
import type {
|
||||||
NavigationAction,
|
NavigationAction,
|
||||||
NavigationState,
|
NavigationState,
|
||||||
ParamListBase,
|
ParamListBase,
|
||||||
@@ -11,19 +11,21 @@ import NavigationBuilderContext, {
|
|||||||
FocusedNavigationListener,
|
FocusedNavigationListener,
|
||||||
NavigatorStateGetter,
|
NavigatorStateGetter,
|
||||||
} from './NavigationBuilderContext';
|
} from './NavigationBuilderContext';
|
||||||
import { NavigationEventEmitter } from './useEventEmitter';
|
import type { NavigationEventEmitter } from './useEventEmitter';
|
||||||
import useNavigationCache from './useNavigationCache';
|
import useNavigationCache from './useNavigationCache';
|
||||||
import {
|
import type {
|
||||||
Descriptor,
|
Descriptor,
|
||||||
NavigationHelpers,
|
NavigationHelpers,
|
||||||
RouteConfig,
|
RouteConfig,
|
||||||
RouteProp,
|
RouteProp,
|
||||||
EventMapBase,
|
EventMapBase,
|
||||||
} from './types';
|
} from './types';
|
||||||
|
import NavigationContext from './NavigationContext';
|
||||||
|
import NavigationRouteContext from './NavigationRouteContext';
|
||||||
|
|
||||||
type Options<
|
type Options<
|
||||||
State extends NavigationState,
|
State extends NavigationState,
|
||||||
ScreenOptions extends object,
|
ScreenOptions extends {},
|
||||||
EventMap extends EventMapBase
|
EventMap extends EventMapBase
|
||||||
> = {
|
> = {
|
||||||
state: State;
|
state: State;
|
||||||
@@ -49,7 +51,7 @@ type Options<
|
|||||||
addStateGetter: (key: string, getter: NavigatorStateGetter) => void;
|
addStateGetter: (key: string, getter: NavigatorStateGetter) => void;
|
||||||
onRouteFocus: (key: string) => void;
|
onRouteFocus: (key: string) => void;
|
||||||
router: Router<State, NavigationAction>;
|
router: Router<State, NavigationAction>;
|
||||||
emitter: NavigationEventEmitter;
|
emitter: NavigationEventEmitter<any>;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -62,7 +64,7 @@ type Options<
|
|||||||
*/
|
*/
|
||||||
export default function useDescriptors<
|
export default function useDescriptors<
|
||||||
State extends NavigationState,
|
State extends NavigationState,
|
||||||
ScreenOptions extends object,
|
ScreenOptions extends {},
|
||||||
EventMap extends EventMapBase
|
EventMap extends EventMapBase
|
||||||
>({
|
>({
|
||||||
state,
|
state,
|
||||||
@@ -80,7 +82,9 @@ export default function useDescriptors<
|
|||||||
emitter,
|
emitter,
|
||||||
}: Options<State, ScreenOptions, EventMap>) {
|
}: Options<State, ScreenOptions, EventMap>) {
|
||||||
const [options, setOptions] = React.useState<Record<string, object>>({});
|
const [options, setOptions] = React.useState<Record<string, object>>({});
|
||||||
const { trackAction } = React.useContext(NavigationBuilderContext);
|
const { onDispatchAction, onOptionsChange } = React.useContext(
|
||||||
|
NavigationBuilderContext
|
||||||
|
);
|
||||||
|
|
||||||
const context = React.useMemo(
|
const context = React.useMemo(
|
||||||
() => ({
|
() => ({
|
||||||
@@ -90,16 +94,18 @@ export default function useDescriptors<
|
|||||||
addFocusedListener,
|
addFocusedListener,
|
||||||
addStateGetter,
|
addStateGetter,
|
||||||
onRouteFocus,
|
onRouteFocus,
|
||||||
trackAction,
|
onDispatchAction,
|
||||||
|
onOptionsChange,
|
||||||
}),
|
}),
|
||||||
[
|
[
|
||||||
navigation,
|
|
||||||
onAction,
|
|
||||||
addActionListener,
|
addActionListener,
|
||||||
addFocusedListener,
|
addFocusedListener,
|
||||||
onRouteFocus,
|
|
||||||
addStateGetter,
|
addStateGetter,
|
||||||
trackAction,
|
navigation,
|
||||||
|
onAction,
|
||||||
|
onDispatchAction,
|
||||||
|
onRouteFocus,
|
||||||
|
onOptionsChange,
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -112,56 +118,56 @@ export default function useDescriptors<
|
|||||||
emitter,
|
emitter,
|
||||||
});
|
});
|
||||||
|
|
||||||
return state.routes.reduce(
|
return state.routes.reduce<
|
||||||
(acc, route) => {
|
Record<string, Descriptor<ParamListBase, string, State, ScreenOptions>>
|
||||||
const screen = screens[route.name];
|
>((acc, route) => {
|
||||||
const navigation = navigations[route.key];
|
const screen = screens[route.name];
|
||||||
|
const navigation = navigations[route.key];
|
||||||
|
|
||||||
const routeOptions = {
|
const routeOptions = {
|
||||||
// The default `screenOptions` passed to the navigator
|
// The default `screenOptions` passed to the navigator
|
||||||
...(typeof screenOptions === 'object' || screenOptions == null
|
...(typeof screenOptions === 'object' || screenOptions == null
|
||||||
? screenOptions
|
? screenOptions
|
||||||
: screenOptions({
|
: // @ts-expect-error: this is a function, but typescript doesn't think so
|
||||||
// @ts-ignore
|
screenOptions({
|
||||||
route,
|
route,
|
||||||
navigation,
|
navigation,
|
||||||
})),
|
})),
|
||||||
// The `options` prop passed to `Screen` elements
|
// The `options` prop passed to `Screen` elements
|
||||||
...(typeof screen.options === 'object' || screen.options == null
|
...(typeof screen.options === 'object' || screen.options == null
|
||||||
? screen.options
|
? screen.options
|
||||||
: screen.options({
|
: // @ts-expect-error: this is a function, but typescript doesn't think so
|
||||||
// @ts-ignore
|
screen.options({
|
||||||
route,
|
route,
|
||||||
// @ts-ignore
|
navigation,
|
||||||
navigation,
|
})),
|
||||||
})),
|
// The options set via `navigation.setOptions`
|
||||||
// The options set via `navigation.setOptions`
|
...options[route.key],
|
||||||
...options[route.key],
|
};
|
||||||
};
|
|
||||||
|
|
||||||
acc[route.key] = {
|
acc[route.key] = {
|
||||||
navigation,
|
navigation,
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<NavigationBuilderContext.Provider key={route.key} value={context}>
|
<NavigationBuilderContext.Provider key={route.key} value={context}>
|
||||||
<SceneView
|
<NavigationContext.Provider value={navigation}>
|
||||||
navigation={navigation}
|
<NavigationRouteContext.Provider value={route}>
|
||||||
route={route}
|
<SceneView
|
||||||
screen={screen}
|
navigation={navigation}
|
||||||
getState={getState}
|
route={route}
|
||||||
setState={setState}
|
screen={screen}
|
||||||
options={routeOptions}
|
getState={getState}
|
||||||
/>
|
setState={setState}
|
||||||
</NavigationBuilderContext.Provider>
|
options={routeOptions}
|
||||||
);
|
/>
|
||||||
},
|
</NavigationRouteContext.Provider>
|
||||||
options: routeOptions,
|
</NavigationContext.Provider>
|
||||||
};
|
</NavigationBuilderContext.Provider>
|
||||||
|
);
|
||||||
|
},
|
||||||
|
options: routeOptions as ScreenOptions,
|
||||||
|
};
|
||||||
|
|
||||||
return acc;
|
return acc;
|
||||||
},
|
}, {});
|
||||||
{} as {
|
|
||||||
[key: string]: Descriptor<ParamListBase, string, State, ScreenOptions>;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,107 +0,0 @@
|
|||||||
import * as React from 'react';
|
|
||||||
import {
|
|
||||||
NavigationState,
|
|
||||||
NavigationAction,
|
|
||||||
PartialState,
|
|
||||||
} from '@react-navigation/routers';
|
|
||||||
|
|
||||||
type State = NavigationState | PartialState<NavigationState> | undefined;
|
|
||||||
|
|
||||||
type Options = {
|
|
||||||
enabled: boolean;
|
|
||||||
name: string;
|
|
||||||
reset: (state: NavigationState) => void;
|
|
||||||
state: State;
|
|
||||||
};
|
|
||||||
|
|
||||||
type DevTools = {
|
|
||||||
init(value: any): void;
|
|
||||||
send(action: any, value: any): void;
|
|
||||||
subscribe(
|
|
||||||
listener: (message: { type: string; [key: string]: any }) => void
|
|
||||||
): () => void;
|
|
||||||
};
|
|
||||||
|
|
||||||
declare global {
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-namespace
|
|
||||||
namespace NodeJS {
|
|
||||||
interface Global {
|
|
||||||
__REDUX_DEVTOOLS_EXTENSION__:
|
|
||||||
| {
|
|
||||||
connect(options: { name: string }): DevTools;
|
|
||||||
disconnect(): void;
|
|
||||||
}
|
|
||||||
| undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export default function useDevTools({ name, reset, state, enabled }: Options) {
|
|
||||||
const devToolsRef = React.useRef<DevTools>();
|
|
||||||
|
|
||||||
if (
|
|
||||||
enabled &&
|
|
||||||
process.env.NODE_ENV !== 'production' &&
|
|
||||||
global.__REDUX_DEVTOOLS_EXTENSION__ &&
|
|
||||||
devToolsRef.current === undefined
|
|
||||||
) {
|
|
||||||
devToolsRef.current = global.__REDUX_DEVTOOLS_EXTENSION__.connect({ name });
|
|
||||||
}
|
|
||||||
|
|
||||||
const devTools = devToolsRef.current;
|
|
||||||
const lastStateRef = React.useRef<State>(state);
|
|
||||||
const actions = React.useRef<(NavigationAction | string)[]>([]);
|
|
||||||
|
|
||||||
React.useEffect(() => {
|
|
||||||
devTools?.init(lastStateRef.current);
|
|
||||||
}, [devTools]);
|
|
||||||
|
|
||||||
React.useEffect(
|
|
||||||
() =>
|
|
||||||
devTools?.subscribe((message) => {
|
|
||||||
if (message.type === 'DISPATCH' && message.state) {
|
|
||||||
reset(JSON.parse(message.state));
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
[devTools, reset]
|
|
||||||
);
|
|
||||||
|
|
||||||
const trackState = React.useCallback(
|
|
||||||
(getState: () => State) => {
|
|
||||||
if (!devTools) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (actions.current.length > 1) {
|
|
||||||
devTools.send(actions.current.shift(), lastStateRef.current);
|
|
||||||
}
|
|
||||||
|
|
||||||
const state = getState();
|
|
||||||
|
|
||||||
if (actions.current.length) {
|
|
||||||
devTools.send(actions.current.pop(), state);
|
|
||||||
} else {
|
|
||||||
devTools.send('@@UNKNOWN', state);
|
|
||||||
}
|
|
||||||
|
|
||||||
lastStateRef.current = state;
|
|
||||||
},
|
|
||||||
[devTools]
|
|
||||||
);
|
|
||||||
|
|
||||||
const trackAction = React.useCallback(
|
|
||||||
(action: NavigationAction | string) => {
|
|
||||||
if (!devTools) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
actions.current.push(action);
|
|
||||||
},
|
|
||||||
[devTools]
|
|
||||||
);
|
|
||||||
|
|
||||||
return {
|
|
||||||
trackAction,
|
|
||||||
trackState,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,8 +1,10 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { EventEmitter, EventConsumer, EventArg } from './types';
|
import type { EventEmitter, EventConsumer, EventArg } from './types';
|
||||||
|
|
||||||
export type NavigationEventEmitter = EventEmitter<Record<string, any>> & {
|
export type NavigationEventEmitter<
|
||||||
create: (target: string) => EventConsumer<Record<string, any>>;
|
T extends Record<string, any>
|
||||||
|
> = EventEmitter<T> & {
|
||||||
|
create: (target: string) => EventConsumer<T>;
|
||||||
};
|
};
|
||||||
|
|
||||||
type Listeners = ((e: any) => void)[];
|
type Listeners = ((e: any) => void)[];
|
||||||
@@ -10,9 +12,9 @@ type Listeners = ((e: any) => void)[];
|
|||||||
/**
|
/**
|
||||||
* Hook to manage the event system used by the navigator to notify screens of various events.
|
* Hook to manage the event system used by the navigator to notify screens of various events.
|
||||||
*/
|
*/
|
||||||
export default function useEventEmitter(
|
export default function useEventEmitter<T extends Record<string, any>>(
|
||||||
listen?: (e: any) => void
|
listen?: (e: any) => void
|
||||||
): NavigationEventEmitter {
|
): NavigationEventEmitter<T> {
|
||||||
const listenRef = React.useRef(listen);
|
const listenRef = React.useRef(listen);
|
||||||
|
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
|
|||||||
@@ -1,17 +1,21 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { NavigationState } from '@react-navigation/routers';
|
import type { NavigationState } from '@react-navigation/routers';
|
||||||
import NavigationContext from './NavigationContext';
|
import NavigationContext from './NavigationContext';
|
||||||
import { NavigationEventEmitter } from './useEventEmitter';
|
import type { NavigationEventEmitter } from './useEventEmitter';
|
||||||
|
import type { EventMapCore } from './types';
|
||||||
|
|
||||||
type Options = {
|
type Options<State extends NavigationState> = {
|
||||||
state: NavigationState;
|
state: State;
|
||||||
emitter: NavigationEventEmitter;
|
emitter: NavigationEventEmitter<EventMapCore<State>>;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hook to take care of emitting `focus` and `blur` events.
|
* Hook to take care of emitting `focus` and `blur` events.
|
||||||
*/
|
*/
|
||||||
export default function useFocusEvents({ state, emitter }: Options) {
|
export default function useFocusEvents<State extends NavigationState>({
|
||||||
|
state,
|
||||||
|
emitter,
|
||||||
|
}: Options<State>) {
|
||||||
const navigation = React.useContext(NavigationContext);
|
const navigation = React.useContext(NavigationContext);
|
||||||
const lastFocusedKeyRef = React.useRef<string | undefined>();
|
const lastFocusedKeyRef = React.useRef<string | undefined>();
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { FocusedNavigationListener } from './NavigationBuilderContext';
|
import type { FocusedNavigationListener } from './NavigationBuilderContext';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hook which lets child navigators add listeners to be called for focused navigators.
|
* Hook which lets child navigators add listeners to be called for focused navigators.
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { ParamListBase } from '@react-navigation/routers';
|
import type { ParamListBase } from '@react-navigation/routers';
|
||||||
import NavigationBuilderContext, {
|
import NavigationBuilderContext, {
|
||||||
FocusedNavigationCallback,
|
FocusedNavigationCallback,
|
||||||
FocusedNavigationListener,
|
FocusedNavigationListener,
|
||||||
} from './NavigationBuilderContext';
|
} from './NavigationBuilderContext';
|
||||||
import { NavigationHelpers } from './types';
|
import type { NavigationHelpers } from './types';
|
||||||
|
|
||||||
type Options = {
|
type Options = {
|
||||||
navigation: NavigationHelpers<ParamListBase>;
|
navigation: NavigationHelpers<ParamListBase>;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { ParamListBase } from '@react-navigation/routers';
|
import type { ParamListBase } from '@react-navigation/routers';
|
||||||
import NavigationContext from './NavigationContext';
|
import NavigationContext from './NavigationContext';
|
||||||
import { NavigationProp } from './types';
|
import type { NavigationProp } from './types';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hook to access the navigation prop of the parent screen anywhere.
|
* Hook to access the navigation prop of the parent screen anywhere.
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import {
|
|||||||
RouteConfig,
|
RouteConfig,
|
||||||
PrivateValueStore,
|
PrivateValueStore,
|
||||||
EventMapBase,
|
EventMapBase,
|
||||||
|
EventMapCore,
|
||||||
} from './types';
|
} from './types';
|
||||||
import useStateGetters from './useStateGetters';
|
import useStateGetters from './useStateGetters';
|
||||||
import useOnGetState from './useOnGetState';
|
import useOnGetState from './useOnGetState';
|
||||||
@@ -56,7 +57,7 @@ type NavigatorRoute = {
|
|||||||
*/
|
*/
|
||||||
const getRouteConfigsFromChildren = <
|
const getRouteConfigsFromChildren = <
|
||||||
State extends NavigationState,
|
State extends NavigationState,
|
||||||
ScreenOptions extends object,
|
ScreenOptions extends {},
|
||||||
EventMap extends EventMapBase
|
EventMap extends EventMapBase
|
||||||
>(
|
>(
|
||||||
children: React.ReactNode
|
children: React.ReactNode
|
||||||
@@ -94,7 +95,7 @@ const getRouteConfigsFromChildren = <
|
|||||||
|
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`A navigator can only contain 'Screen' components as its direct children (found '${
|
`A navigator can only contain 'Screen' components as its direct children (found '${
|
||||||
// @ts-ignore
|
// @ts-expect-error: child can be any type and we're accessing it safely, but TS doesn't understand it
|
||||||
child.type && child.type.name ? child.type.name : String(child)
|
child.type && child.type.name ? child.type.name : String(child)
|
||||||
}')`
|
}')`
|
||||||
);
|
);
|
||||||
@@ -160,7 +161,7 @@ const getRouteConfigsFromChildren = <
|
|||||||
export default function useNavigationBuilder<
|
export default function useNavigationBuilder<
|
||||||
State extends NavigationState,
|
State extends NavigationState,
|
||||||
RouterOptions extends DefaultRouterOptions,
|
RouterOptions extends DefaultRouterOptions,
|
||||||
ScreenOptions extends object,
|
ScreenOptions extends {},
|
||||||
EventMap extends Record<string, any>
|
EventMap extends Record<string, any>
|
||||||
>(
|
>(
|
||||||
createRouter: RouterFactory<State, any, RouterOptions>,
|
createRouter: RouterFactory<State, any, RouterOptions>,
|
||||||
@@ -293,7 +294,7 @@ export default function useNavigationBuilder<
|
|||||||
let state =
|
let state =
|
||||||
// If the state isn't initialized, or stale, use the state we initialized instead
|
// If the state isn't initialized, or stale, use the state we initialized instead
|
||||||
// The state won't update until there's a change needed in the state we have initalized locally
|
// The state won't update until there's a change needed in the state we have initalized locally
|
||||||
// So it'll be `undefined` or stale untill the first navigation event happens
|
// So it'll be `undefined` or stale until the first navigation event happens
|
||||||
isStateInitialized(currentState)
|
isStateInitialized(currentState)
|
||||||
? (currentState as State)
|
? (currentState as State)
|
||||||
: (initializedState as State);
|
: (initializedState as State);
|
||||||
@@ -344,7 +345,7 @@ export default function useNavigationBuilder<
|
|||||||
|
|
||||||
// The up-to-date state will come in next render, but we don't need to wait for it
|
// The up-to-date state will come in next render, but we don't need to wait for it
|
||||||
// We can't use the outdated state since the screens have changed, which will cause error due to mismatched config
|
// We can't use the outdated state since the screens have changed, which will cause error due to mismatched config
|
||||||
// So we override the state objec we return to use the latest state as soon as possible
|
// So we override the state object we return to use the latest state as soon as possible
|
||||||
state = nextState;
|
state = nextState;
|
||||||
|
|
||||||
React.useEffect(() => {
|
React.useEffect(() => {
|
||||||
@@ -378,7 +379,7 @@ export default function useNavigationBuilder<
|
|||||||
: (initializedStateRef.current as State);
|
: (initializedStateRef.current as State);
|
||||||
}, [getCurrentState, isStateInitialized]);
|
}, [getCurrentState, isStateInitialized]);
|
||||||
|
|
||||||
const emitter = useEventEmitter((e) => {
|
const emitter = useEventEmitter<EventMapCore<State>>((e) => {
|
||||||
let routeNames = [];
|
let routeNames = [];
|
||||||
|
|
||||||
let route: Route<string> | undefined;
|
let route: Route<string> | undefined;
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ import {
|
|||||||
NavigationState,
|
NavigationState,
|
||||||
Router,
|
Router,
|
||||||
} from '@react-navigation/routers';
|
} from '@react-navigation/routers';
|
||||||
import { NavigationEventEmitter } from './useEventEmitter';
|
import type { NavigationEventEmitter } from './useEventEmitter';
|
||||||
|
|
||||||
import { NavigationHelpers, NavigationProp } from './types';
|
import type { EventMapBase, NavigationHelpers, NavigationProp } from './types';
|
||||||
|
|
||||||
type Options<State extends NavigationState> = {
|
type Options<State extends NavigationState> = {
|
||||||
state: State;
|
state: State;
|
||||||
@@ -19,12 +19,12 @@ type Options<State extends NavigationState> = {
|
|||||||
cb: (options: Record<string, object>) => Record<string, object>
|
cb: (options: Record<string, object>) => Record<string, object>
|
||||||
) => void;
|
) => void;
|
||||||
router: Router<State, NavigationAction>;
|
router: Router<State, NavigationAction>;
|
||||||
emitter: NavigationEventEmitter;
|
emitter: NavigationEventEmitter<EventMapBase>;
|
||||||
};
|
};
|
||||||
|
|
||||||
type NavigationCache<
|
type NavigationCache<
|
||||||
State extends NavigationState,
|
State extends NavigationState,
|
||||||
ScreenOptions extends object
|
ScreenOptions extends {}
|
||||||
> = {
|
> = {
|
||||||
[key: string]: NavigationProp<ParamListBase, string, State, ScreenOptions>;
|
[key: string]: NavigationProp<ParamListBase, string, State, ScreenOptions>;
|
||||||
};
|
};
|
||||||
@@ -36,7 +36,7 @@ type NavigationCache<
|
|||||||
*/
|
*/
|
||||||
export default function useNavigationCache<
|
export default function useNavigationCache<
|
||||||
State extends NavigationState,
|
State extends NavigationState,
|
||||||
ScreenOptions extends object
|
ScreenOptions extends {}
|
||||||
>({
|
>({
|
||||||
state,
|
state,
|
||||||
getState,
|
getState,
|
||||||
@@ -85,7 +85,7 @@ export default function useNavigationCache<
|
|||||||
|
|
||||||
const helpers = Object.keys(actions).reduce<Record<string, () => void>>(
|
const helpers = Object.keys(actions).reduce<Record<string, () => void>>(
|
||||||
(acc, name) => {
|
(acc, name) => {
|
||||||
// @ts-ignore
|
// @ts-expect-error: name is a valid key, but TypeScript is dumb
|
||||||
acc[name] = (...args: any) => dispatch(actions[name](...args));
|
acc[name] = (...args: any) => dispatch(actions[name](...args));
|
||||||
return acc;
|
return acc;
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ import {
|
|||||||
Router,
|
Router,
|
||||||
} from '@react-navigation/routers';
|
} from '@react-navigation/routers';
|
||||||
import NavigationContext from './NavigationContext';
|
import NavigationContext from './NavigationContext';
|
||||||
import { NavigationEventEmitter } from './useEventEmitter';
|
import UnhandledActionContext from './UnhandledActionContext';
|
||||||
|
import type { NavigationEventEmitter } from './useEventEmitter';
|
||||||
import { NavigationHelpers, NavigationProp, PrivateValueStore } from './types';
|
import { NavigationHelpers, NavigationProp, PrivateValueStore } from './types';
|
||||||
|
|
||||||
// This is to make TypeScript compiler happy
|
// This is to make TypeScript compiler happy
|
||||||
@@ -20,7 +21,7 @@ type Options<State extends NavigationState, Action extends NavigationAction> = {
|
|||||||
visitedNavigators?: Set<string>
|
visitedNavigators?: Set<string>
|
||||||
) => boolean;
|
) => boolean;
|
||||||
getState: () => State;
|
getState: () => State;
|
||||||
emitter: NavigationEventEmitter;
|
emitter: NavigationEventEmitter<any>;
|
||||||
router: Router<State, Action>;
|
router: Router<State, Action>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -33,6 +34,7 @@ export default function useNavigationHelpers<
|
|||||||
Action extends NavigationAction,
|
Action extends NavigationAction,
|
||||||
EventMap extends Record<string, any>
|
EventMap extends Record<string, any>
|
||||||
>({ onAction, getState, emitter, router }: Options<State, Action>) {
|
>({ onAction, getState, emitter, router }: Options<State, Action>) {
|
||||||
|
const onUnhandledAction = React.useContext(UnhandledActionContext);
|
||||||
const parentNavigationHelpers = React.useContext(NavigationContext);
|
const parentNavigationHelpers = React.useContext(NavigationContext);
|
||||||
|
|
||||||
return React.useMemo(() => {
|
return React.useMemo(() => {
|
||||||
@@ -41,40 +43,8 @@ export default function useNavigationHelpers<
|
|||||||
|
|
||||||
const handled = onAction(action);
|
const handled = onAction(action);
|
||||||
|
|
||||||
if (!handled && process.env.NODE_ENV !== 'production') {
|
if (!handled) {
|
||||||
const payload: Record<string, any> | undefined = action.payload;
|
onUnhandledAction?.(action);
|
||||||
|
|
||||||
let message = `The action '${action.type}'${
|
|
||||||
payload ? ` with payload ${JSON.stringify(action.payload)}` : ''
|
|
||||||
} was not handled by any navigator.`;
|
|
||||||
|
|
||||||
switch (action.type) {
|
|
||||||
case 'NAVIGATE':
|
|
||||||
case 'PUSH':
|
|
||||||
case 'REPLACE':
|
|
||||||
case 'JUMP_TO':
|
|
||||||
if (payload?.name) {
|
|
||||||
message += `\n\nDo you have a screen named '${payload.name}'?\n\nIf you're trying to navigate to a screen in a nested navigator, see https://reactnavigation.org/docs/nesting-navigators#navigating-to-a-screen-in-a-nested-navigator.`;
|
|
||||||
} else {
|
|
||||||
message += `\n\nYou need to pass the name of the screen to navigate to.\n\nSee https://reactnavigation.org/docs/navigation-actions for usage.`;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case 'GO_BACK':
|
|
||||||
case 'POP':
|
|
||||||
case 'POP_TO_TOP':
|
|
||||||
message += `\n\nIs there any screen to go back to?`;
|
|
||||||
break;
|
|
||||||
case 'OPEN_DRAWER':
|
|
||||||
case 'CLOSE_DRAWER':
|
|
||||||
case 'TOGGLE_DRAWER':
|
|
||||||
message += `\n\nIs your screen inside a Drawer navigator?`;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
message += `\n\nThis is a development-only warning and won't be shown in production.`;
|
|
||||||
|
|
||||||
console.error(message);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -85,7 +55,7 @@ export default function useNavigationHelpers<
|
|||||||
|
|
||||||
const helpers = Object.keys(actions).reduce<Record<string, () => void>>(
|
const helpers = Object.keys(actions).reduce<Record<string, () => void>>(
|
||||||
(acc, name) => {
|
(acc, name) => {
|
||||||
// @ts-ignore
|
// @ts-expect-error: name is a valid key, but TypeScript is dumb
|
||||||
acc[name] = (...args: any) => dispatch(actions[name](...args));
|
acc[name] = (...args: any) => dispatch(actions[name](...args));
|
||||||
return acc;
|
return acc;
|
||||||
},
|
},
|
||||||
@@ -116,5 +86,12 @@ export default function useNavigationHelpers<
|
|||||||
dangerouslyGetState: getState,
|
dangerouslyGetState: getState,
|
||||||
} as NavigationHelpers<ParamListBase, EventMap> &
|
} as NavigationHelpers<ParamListBase, EventMap> &
|
||||||
(NavigationProp<ParamListBase, string, any, any, any> | undefined);
|
(NavigationProp<ParamListBase, string, any, any, any> | undefined);
|
||||||
}, [router, getState, parentNavigationHelpers, emitter.emit, onAction]);
|
}, [
|
||||||
|
emitter.emit,
|
||||||
|
getState,
|
||||||
|
onAction,
|
||||||
|
onUnhandledAction,
|
||||||
|
parentNavigationHelpers,
|
||||||
|
router,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { NavigationState } from '@react-navigation/routers';
|
import type { NavigationState } from '@react-navigation/routers';
|
||||||
import useNavigation from './useNavigation';
|
import useNavigation from './useNavigation';
|
||||||
|
|
||||||
type Selector<T> = (state: NavigationState) => T;
|
type Selector<T> = (state: NavigationState) => T;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import {
|
import type {
|
||||||
NavigationAction,
|
NavigationAction,
|
||||||
NavigationState,
|
NavigationState,
|
||||||
PartialState,
|
PartialState,
|
||||||
@@ -40,7 +40,7 @@ export default function useOnAction({
|
|||||||
onAction: onActionParent,
|
onAction: onActionParent,
|
||||||
onRouteFocus: onRouteFocusParent,
|
onRouteFocus: onRouteFocusParent,
|
||||||
addActionListener: addActionListenerParent,
|
addActionListener: addActionListenerParent,
|
||||||
trackAction,
|
onDispatchAction,
|
||||||
} = React.useContext(NavigationBuilderContext);
|
} = React.useContext(NavigationBuilderContext);
|
||||||
|
|
||||||
const routerConfigOptionsRef = React.useRef<RouterConfigOptions>(
|
const routerConfigOptionsRef = React.useRef<RouterConfigOptions>(
|
||||||
@@ -81,7 +81,7 @@ export default function useOnAction({
|
|||||||
result = result === null && action.target === state.key ? state : result;
|
result = result === null && action.target === state.key ? state : result;
|
||||||
|
|
||||||
if (result !== null) {
|
if (result !== null) {
|
||||||
trackAction(action);
|
onDispatchAction(action, state === result);
|
||||||
|
|
||||||
if (state !== result) {
|
if (state !== result) {
|
||||||
setState(result);
|
setState(result);
|
||||||
@@ -122,7 +122,7 @@ export default function useOnAction({
|
|||||||
getState,
|
getState,
|
||||||
router,
|
router,
|
||||||
onActionParent,
|
onActionParent,
|
||||||
trackAction,
|
onDispatchAction,
|
||||||
onRouteFocusParent,
|
onRouteFocusParent,
|
||||||
setState,
|
setState,
|
||||||
key,
|
key,
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { NavigationState } from '@react-navigation/routers';
|
import type { NavigationState } from '@react-navigation/routers';
|
||||||
import NavigationBuilderContext from './NavigationBuilderContext';
|
import NavigationBuilderContext from './NavigationBuilderContext';
|
||||||
import NavigationRouteContext from './NavigationRouteContext';
|
import NavigationRouteContext from './NavigationRouteContext';
|
||||||
import isArrayEqual from './isArrayEqual';
|
import isArrayEqual from './isArrayEqual';
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import {
|
import type {
|
||||||
NavigationAction,
|
NavigationAction,
|
||||||
NavigationState,
|
NavigationState,
|
||||||
Router,
|
Router,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import NavigationStateContext from './NavigationStateContext';
|
import NavigationStateContext from './NavigationStateContext';
|
||||||
import { NavigationState } from '@react-navigation/routers';
|
import type { NavigationState } from '@react-navigation/routers';
|
||||||
|
|
||||||
export default function useOptionsGetters({
|
export default function useOptionsGetters({
|
||||||
key,
|
key,
|
||||||
@@ -11,8 +11,12 @@ export default function useOptionsGetters({
|
|||||||
getOptions?: () => object | undefined;
|
getOptions?: () => object | undefined;
|
||||||
getState?: () => NavigationState;
|
getState?: () => NavigationState;
|
||||||
}) {
|
}) {
|
||||||
|
let [
|
||||||
|
numberOfChildrenListeners,
|
||||||
|
setNumberOfChildrenListeners,
|
||||||
|
] = React.useState(0);
|
||||||
const optionsGettersFromChild = React.useRef<
|
const optionsGettersFromChild = React.useRef<
|
||||||
Record<string, (() => object | undefined | null) | undefined>
|
Record<string, () => object | undefined | null>
|
||||||
>({});
|
>({});
|
||||||
|
|
||||||
const { addOptionsGetter: parentAddOptionsGetter } = React.useContext(
|
const { addOptionsGetter: parentAddOptionsGetter } = React.useContext(
|
||||||
@@ -55,16 +59,25 @@ export default function useOptionsGetters({
|
|||||||
const addOptionsGetter = React.useCallback(
|
const addOptionsGetter = React.useCallback(
|
||||||
(key: string, getter: () => object | undefined | null) => {
|
(key: string, getter: () => object | undefined | null) => {
|
||||||
optionsGettersFromChild.current[key] = getter;
|
optionsGettersFromChild.current[key] = getter;
|
||||||
|
setNumberOfChildrenListeners((prev) => prev + 1);
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
optionsGettersFromChild.current[key] = undefined;
|
setNumberOfChildrenListeners((prev) => prev - 1);
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
||||||
|
delete optionsGettersFromChild.current[key];
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
[]
|
[]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const hasAnyChildListener = React.useMemo(
|
||||||
|
() => numberOfChildrenListeners > 0,
|
||||||
|
[numberOfChildrenListeners]
|
||||||
|
);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
addOptionsGetter,
|
addOptionsGetter,
|
||||||
getCurrentOptions,
|
getCurrentOptions,
|
||||||
|
hasAnyChildListener,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { ParamListBase } from '@react-navigation/routers';
|
import type { ParamListBase } from '@react-navigation/routers';
|
||||||
import NavigationRouteContext from './NavigationRouteContext';
|
import NavigationRouteContext from './NavigationRouteContext';
|
||||||
import { RouteProp } from './types';
|
import type { RouteProp } from './types';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hook to access the route prop of the parent screen anywhere.
|
* Hook to access the route prop of the parent screen anywhere.
|
||||||
|
|||||||
@@ -1,18 +1,20 @@
|
|||||||
import * as React from 'react';
|
import * as React from 'react';
|
||||||
import { NavigatorStateGetter } from './NavigationBuilderContext';
|
import type { NavigatorStateGetter } from './NavigationBuilderContext';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hook which lets child navigators add getters to be called for obtaining rehydrated state.
|
* Hook which lets child navigators add getters to be called for obtaining rehydrated state.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export default function useStateGetters() {
|
export default function useStateGetters() {
|
||||||
const stateGetters = React.useRef<Record<string, NavigatorStateGetter>>({});
|
const stateGetters = React.useRef<
|
||||||
|
Record<string, NavigatorStateGetter | undefined>
|
||||||
|
>({});
|
||||||
|
|
||||||
const getStateForRoute = React.useCallback(
|
const getStateForRoute = React.useCallback(
|
||||||
(routeKey: string) =>
|
(routeKey: string) => {
|
||||||
stateGetters.current[routeKey] === undefined
|
const getter = stateGetters.current[routeKey];
|
||||||
? undefined
|
return getter === undefined ? undefined : getter();
|
||||||
: stateGetters.current[routeKey](),
|
},
|
||||||
[stateGetters]
|
[stateGetters]
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -21,7 +23,6 @@ export default function useStateGetters() {
|
|||||||
stateGetters.current[key] = getter;
|
stateGetters.current[key] = getter;
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
// @ts-ignore
|
|
||||||
stateGetters.current[key] = undefined;
|
stateGetters.current[key] = undefined;
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ export default function useSyncState<T>(initialState?: (() => T) | T) {
|
|||||||
|
|
||||||
if (stateRef.current === UNINTIALIZED_STATE) {
|
if (stateRef.current === UNINTIALIZED_STATE) {
|
||||||
stateRef.current =
|
stateRef.current =
|
||||||
// @ts-ignore
|
// @ts-expect-error: initialState is a function, but TypeScript doesn't think so
|
||||||
typeof initialState === 'function' ? initialState() : initialState;
|
typeof initialState === 'function' ? initialState() : initialState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
11
packages/devtools/CHANGELOG.md
Normal file
11
packages/devtools/CHANGELOG.md
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# Change Log
|
||||||
|
|
||||||
|
All notable changes to this project will be documented in this file.
|
||||||
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||||
|
|
||||||
|
# 5.1.0 (2020-06-24)
|
||||||
|
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
* add devtools package ([#8436](https://github.com/react-navigation/react-navigation/issues/8436)) ([95b044e](https://github.com/react-navigation/react-navigation/commit/95b044ecf95939f40ced4da740a365140b3952b7))
|
||||||
21
packages/devtools/LICENSE
Normal file
21
packages/devtools/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2017 React Navigation Contributors
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
33
packages/devtools/README.md
Normal file
33
packages/devtools/README.md
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# `@react-navigation/devtools`
|
||||||
|
|
||||||
|
Developer tools for React Navigation.
|
||||||
|
|
||||||
|
Installation instructions and documentation can be found on the [React Navigation website](https://reactnavigation.org/docs/devtools).
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Open a Terminal in your project's folder and run,
|
||||||
|
|
||||||
|
```sh
|
||||||
|
yarn add @react-navigation/devtools
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
For redux dev tools extension integration, you can pass a ref to the container:
|
||||||
|
|
||||||
|
```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>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
```
|
||||||
68
packages/devtools/package.json
Normal file
68
packages/devtools/package.json
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
{
|
||||||
|
"name": "@react-navigation/devtools",
|
||||||
|
"description": "Developer tools for React Navigation",
|
||||||
|
"version": "5.1.0",
|
||||||
|
"keywords": [
|
||||||
|
"react",
|
||||||
|
"react-native",
|
||||||
|
"react-navigation"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/react-navigation/react-navigation.git",
|
||||||
|
"directory": "packages/devtools"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/react-navigation/react-navigation/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://reactnavigation.org",
|
||||||
|
"main": "lib/commonjs/index.js",
|
||||||
|
"react-native": "src/index.tsx",
|
||||||
|
"source": "src/index.tsx",
|
||||||
|
"module": "lib/module/index.js",
|
||||||
|
"types": "lib/typescript/src/index.d.ts",
|
||||||
|
"files": [
|
||||||
|
"src",
|
||||||
|
"lib",
|
||||||
|
"!**/__tests__"
|
||||||
|
],
|
||||||
|
"sideEffects": false,
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"prepare": "bob build",
|
||||||
|
"clean": "del lib"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@react-navigation/core": "^5.11.0",
|
||||||
|
"deep-equal": "^2.0.3"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@react-native-community/bob": "^0.15.1",
|
||||||
|
"@types/deep-equal": "^1.0.1",
|
||||||
|
"@types/react": "^16.9.36",
|
||||||
|
"del-cli": "^3.0.1",
|
||||||
|
"react": "~16.9.0",
|
||||||
|
"react-native-testing-library": "^2.1.0",
|
||||||
|
"typescript": "^3.9.5"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"react": "*"
|
||||||
|
},
|
||||||
|
"@react-native-community/bob": {
|
||||||
|
"source": "src",
|
||||||
|
"output": "lib",
|
||||||
|
"targets": [
|
||||||
|
"commonjs",
|
||||||
|
"module",
|
||||||
|
[
|
||||||
|
"typescript",
|
||||||
|
{
|
||||||
|
"project": "tsconfig.build.json"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
9
packages/devtools/src/index.tsx
Normal file
9
packages/devtools/src/index.tsx
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
const noop: any = () => {};
|
||||||
|
|
||||||
|
export let useReduxDevToolsExtension: typeof import('./useReduxDevToolsExtension').default;
|
||||||
|
|
||||||
|
if (process.env.NODE_ENV !== 'production') {
|
||||||
|
useReduxDevToolsExtension = require('./useReduxDevToolsExtension').default;
|
||||||
|
} else {
|
||||||
|
useReduxDevToolsExtension = noop;
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user