From 2656818572aaf879dddf6ecf61126527476e798d Mon Sep 17 00:00:00 2001
From: RainPlays09 <jhanreuell9@gmail.com>
Date: Thu, 30 Jan 2025 00:49:39 +0800
Subject: [PATCH 1/5] chore: upgrade react-navigation/native package

---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 37198ca2f4..3ffce9dc3f 100644
--- a/package.json
+++ b/package.json
@@ -59,7 +59,7 @@
     "@callstack/eslint-config": "^13.0.2",
     "@commitlint/config-conventional": "^8.3.4",
     "@expo/vector-icons": "^14.0.2",
-    "@react-navigation/native": "^6.1.2",
+    "@react-navigation/native": "^7.0.14",
     "@release-it/conventional-changelog": "^1.1.0",
     "@testing-library/jest-native": "^5.4.1",
     "@testing-library/react-native": "11.5.0",

From 57dd6ecbf6e0908743b634da80cb988d8556c7cc Mon Sep 17 00:00:00 2001
From: RainPlays09 <jhanreuell9@gmail.com>
Date: Thu, 30 Jan 2025 00:58:12 +0800
Subject: [PATCH 2/5] refactor: change createMaterialBottomTabNavigator types
 based on react-navigation@7

---
 .../createMaterialBottomTabNavigator.tsx      | 33 +++++++++++++++----
 1 file changed, 26 insertions(+), 7 deletions(-)

diff --git a/src/react-navigation/navigators/createMaterialBottomTabNavigator.tsx b/src/react-navigation/navigators/createMaterialBottomTabNavigator.tsx
index 975b83172b..adaf4134f6 100644
--- a/src/react-navigation/navigators/createMaterialBottomTabNavigator.tsx
+++ b/src/react-navigation/navigators/createMaterialBottomTabNavigator.tsx
@@ -3,11 +3,14 @@ import * as React from 'react';
 import {
   createNavigatorFactory,
   DefaultNavigatorOptions,
+  NavigatorTypeBagBase,
   ParamListBase,
+  StaticConfig,
   TabActionHelpers,
   TabNavigationState,
   TabRouter,
   TabRouterOptions,
+  TypedNavigator,
   useNavigationBuilder,
 } from '@react-navigation/native';
 
@@ -20,9 +23,11 @@ import MaterialBottomTabView from '../views/MaterialBottomTabView';
 
 export type MaterialBottomTabNavigatorProps = DefaultNavigatorOptions<
   ParamListBase,
+  undefined,
   TabNavigationState<ParamListBase>,
   MaterialBottomTabNavigationOptions,
-  MaterialBottomTabNavigationEventMap
+  MaterialBottomTabNavigationEventMap,
+  typeof MaterialBottomTabView
 > &
   TabRouterOptions &
   MaterialBottomTabNavigationConfig;
@@ -64,9 +69,23 @@ function MaterialBottomTabNavigator({
   );
 }
 
-export default createNavigatorFactory<
-  TabNavigationState<ParamListBase>,
-  MaterialBottomTabNavigationOptions,
-  MaterialBottomTabNavigationEventMap,
-  typeof MaterialBottomTabNavigator
->(MaterialBottomTabNavigator);
+function createMaterialBottomTabNavigator<
+  const ParamList extends ParamListBase,
+  const NavigatorID extends string | undefined,
+  const TypeBag extends NavigatorTypeBagBase = {
+    ParamList: ParamList;
+    NavigatorID: NavigatorID;
+    State: TabNavigationState<ParamList>;
+    ScreenOptions: MaterialBottomTabNavigationOptions;
+    EventMap: MaterialBottomTabNavigationEventMap;
+    NavigationList: {
+      [RouteName in keyof ParamList]: MaterialBottomTabNavigatorProps;
+    };
+    Navigator: typeof MaterialBottomTabNavigator;
+  },
+  const Config extends StaticConfig<TypeBag> = StaticConfig<TypeBag>
+>(config?: Config): TypedNavigator<TypeBag, Config> {
+  return createNavigatorFactory(MaterialBottomTabNavigator)(config);
+}
+
+export default createMaterialBottomTabNavigator;

From a218befc753184d706d23995079e87d01942aee3 Mon Sep 17 00:00:00 2001
From: RainPlays09 <jhanreuell9@gmail.com>
Date: Thu, 30 Jan 2025 00:59:27 +0800
Subject: [PATCH 3/5] chore: upgrade react-navigation/native package

---
 yarn.lock | 76 +++++++++++++++++++++++++++++++++++--------------------
 1 file changed, 48 insertions(+), 28 deletions(-)

diff --git a/yarn.lock b/yarn.lock
index e3f47c20ee..b07d303deb 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3863,43 +3863,45 @@ __metadata:
   languageName: node
   linkType: hard
 
-"@react-navigation/core@npm:^6.4.9":
-  version: 6.4.9
-  resolution: "@react-navigation/core@npm:6.4.9"
+"@react-navigation/core@npm:^7.3.1":
+  version: 7.3.1
+  resolution: "@react-navigation/core@npm:7.3.1"
   dependencies:
-    "@react-navigation/routers": "npm:^6.1.9"
+    "@react-navigation/routers": "npm:^7.1.2"
     escape-string-regexp: "npm:^4.0.0"
-    nanoid: "npm:^3.1.23"
+    nanoid: "npm:3.3.8"
     query-string: "npm:^7.1.3"
-    react-is: "npm:^16.13.0"
-    use-latest-callback: "npm:^0.1.5"
+    react-is: "npm:^18.2.0"
+    use-latest-callback: "npm:^0.2.1"
+    use-sync-external-store: "npm:^1.2.2"
   peerDependencies:
-    react: "*"
-  checksum: 10c0/31b77d026a6064712ef275e66c891c6eaf82c6494b96391ba839dad99c40dd2635921ebab8af0a4df71042f889d7165695124f751804ce16012182573139c255
+    react: ">= 18.2.0"
+  checksum: 10c0/92a3b60a2a63366639f68a59c1c3dae0c00998bd0eef82d26acc2304a42a18e6ab7589ae43ce9362c723c78336f99f88845cd7ce1b1ec8dd3e5c9eb4d793d393
   languageName: node
   linkType: hard
 
-"@react-navigation/native@npm:^6.1.2":
-  version: 6.1.7
-  resolution: "@react-navigation/native@npm:6.1.7"
+"@react-navigation/native@npm:^7.0.14":
+  version: 7.0.14
+  resolution: "@react-navigation/native@npm:7.0.14"
   dependencies:
-    "@react-navigation/core": "npm:^6.4.9"
+    "@react-navigation/core": "npm:^7.3.1"
     escape-string-regexp: "npm:^4.0.0"
     fast-deep-equal: "npm:^3.1.3"
-    nanoid: "npm:^3.1.23"
+    nanoid: "npm:3.3.8"
+    use-latest-callback: "npm:^0.2.1"
   peerDependencies:
-    react: "*"
+    react: ">= 18.2.0"
     react-native: "*"
-  checksum: 10c0/d1f6bc00782c8c40bc8a471fde7240cab41e627f7e4bba060aff118abc0496df006f2354a6d3a896cfc8048bbacb71eb682677ff9a3b5649e22efbe4b04e6bfe
+  checksum: 10c0/cba91f3d6f75620e5952b53fa6acb4ba9406c54536416e85802b25c99c008ffdf292b0a2f5212d128a5abfaca578df354d6f2e095df80d7881ac194cacd29cb4
   languageName: node
   linkType: hard
 
-"@react-navigation/routers@npm:^6.1.9":
-  version: 6.1.9
-  resolution: "@react-navigation/routers@npm:6.1.9"
+"@react-navigation/routers@npm:^7.1.2":
+  version: 7.1.2
+  resolution: "@react-navigation/routers@npm:7.1.2"
   dependencies:
-    nanoid: "npm:^3.1.23"
-  checksum: 10c0/5b58014cf29bb71c7dc01201e271d55f0ecfe6d38d064179eeff0fc0b5cb739d4d9906eb133f100d25fc674c72c24aa65d5f6bfc3d036d79f7c5d1936391c605
+    nanoid: "npm:3.3.8"
+  checksum: 10c0/0d47a021cbad2cf8a0fbcb813ec957063720a4e0a83faaee5bfc1d61047d29f56893d4080450a307b12d5e40b7662963bad8fa455791ec98e71523301decb1ae
   languageName: node
   linkType: hard
 
@@ -11903,12 +11905,12 @@ __metadata:
   languageName: node
   linkType: hard
 
-"nanoid@npm:^3.1.23":
-  version: 3.3.6
-  resolution: "nanoid@npm:3.3.6"
+"nanoid@npm:3.3.8":
+  version: 3.3.8
+  resolution: "nanoid@npm:3.3.8"
   bin:
     nanoid: bin/nanoid.cjs
-  checksum: 10c0/606b355960d0fcbe3d27924c4c52ef7d47d3b57208808ece73279420d91469b01ec1dce10fae512b6d4a8c5a5432b352b228336a8b2202a6ea68e67fa348e2ee
+  checksum: 10c0/4b1bb29f6cfebf3be3bc4ad1f1296fb0a10a3043a79f34fbffe75d1621b4318319211cd420549459018ea3592f0d2f159247a6f874911d6d26eaaadda2478120
   languageName: node
   linkType: hard
 
@@ -13109,14 +13111,14 @@ __metadata:
   languageName: node
   linkType: hard
 
-"react-is@npm:^16.13.0, react-is@npm:^16.13.1, react-is@npm:^16.7.0, react-is@npm:^16.8.4":
+"react-is@npm:^16.13.1, react-is@npm:^16.7.0, react-is@npm:^16.8.4":
   version: 16.13.1
   resolution: "react-is@npm:16.13.1"
   checksum: 10c0/33977da7a5f1a287936a0c85639fec6ca74f4f15ef1e59a6bc20338fc73dc69555381e211f7a3529b8150a1f71e4225525b41b60b52965bda53ce7d47377ada1
   languageName: node
   linkType: hard
 
-"react-is@npm:^18.3.1":
+"react-is@npm:^18.2.0, react-is@npm:^18.3.1":
   version: 18.3.1
   resolution: "react-is@npm:18.3.1"
   checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072
@@ -13167,7 +13169,7 @@ __metadata:
     "@callstack/react-theme-provider": "npm:^3.0.9"
     "@commitlint/config-conventional": "npm:^8.3.4"
     "@expo/vector-icons": "npm:^14.0.2"
-    "@react-navigation/native": "npm:^6.1.2"
+    "@react-navigation/native": "npm:^7.0.14"
     "@release-it/conventional-changelog": "npm:^1.1.0"
     "@testing-library/jest-native": "npm:^5.4.1"
     "@testing-library/react-native": "npm:11.5.0"
@@ -15627,6 +15629,24 @@ __metadata:
   languageName: node
   linkType: hard
 
+"use-latest-callback@npm:^0.2.1":
+  version: 0.2.3
+  resolution: "use-latest-callback@npm:0.2.3"
+  peerDependencies:
+    react: ">=16.8"
+  checksum: 10c0/dc87503f6279ce2980f78e1019231ba20d7509e9d17adac05285babe4d6ba6f68c52f4ef7b5ad777cbc2af9fbaaa09d7adb664ca556da0aebab9f020022880be
+  languageName: node
+  linkType: hard
+
+"use-sync-external-store@npm:^1.2.2":
+  version: 1.4.0
+  resolution: "use-sync-external-store@npm:1.4.0"
+  peerDependencies:
+    react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
+  checksum: 10c0/ec011a5055962c0f6b509d6e78c0b143f8cd069890ae370528753053c55e3b360d3648e76cfaa854faa7a59eb08d6c5fb1015e60ffde9046d32f5b2a295acea5
+  languageName: node
+  linkType: hard
+
 "use@npm:^3.1.0":
   version: 3.1.1
   resolution: "use@npm:3.1.1"

From 303c7f760e585024345263a8cb652d24a16edd8b Mon Sep 17 00:00:00 2001
From: RainPlays09 <jhanreuell9@gmail.com>
Date: Sun, 9 Feb 2025 22:57:13 +0800
Subject: [PATCH 4/5] refactor: change the navigator function as an default
 export

---
 .../navigators/createMaterialBottomTabNavigator.tsx           | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/src/react-navigation/navigators/createMaterialBottomTabNavigator.tsx b/src/react-navigation/navigators/createMaterialBottomTabNavigator.tsx
index adaf4134f6..1a5fc5a4d7 100644
--- a/src/react-navigation/navigators/createMaterialBottomTabNavigator.tsx
+++ b/src/react-navigation/navigators/createMaterialBottomTabNavigator.tsx
@@ -69,7 +69,7 @@ function MaterialBottomTabNavigator({
   );
 }
 
-function createMaterialBottomTabNavigator<
+export default function <
   const ParamList extends ParamListBase,
   const NavigatorID extends string | undefined,
   const TypeBag extends NavigatorTypeBagBase = {
@@ -87,5 +87,3 @@ function createMaterialBottomTabNavigator<
 >(config?: Config): TypedNavigator<TypeBag, Config> {
   return createNavigatorFactory(MaterialBottomTabNavigator)(config);
 }
-
-export default createMaterialBottomTabNavigator;

From c7191746deb409f7eaee10ac7a5f69a36c51ea28 Mon Sep 17 00:00:00 2001
From: RainPlays09 <jhanreuell9@gmail.com>
Date: Thu, 17 Apr 2025 22:46:10 +0800
Subject: [PATCH 5/5] fix: created useLinkBuilder that works in any version of
 react navigation

---
 src/react-navigation/utils.ts                        | 11 +++++++++++
 src/react-navigation/views/MaterialBottomTabView.tsx |  3 ++-
 2 files changed, 13 insertions(+), 1 deletion(-)
 create mode 100644 src/react-navigation/utils.ts

diff --git a/src/react-navigation/utils.ts b/src/react-navigation/utils.ts
new file mode 100644
index 0000000000..293c5bef59
--- /dev/null
+++ b/src/react-navigation/utils.ts
@@ -0,0 +1,11 @@
+import { useLinkBuilder } from '@react-navigation/native';
+
+export const useCompatibleLinkBuilder = () => {
+  const builder = useLinkBuilder();
+
+  if (typeof builder === 'function') {
+    return builder;
+  } else {
+    return builder.buildHref;
+  }
+};
diff --git a/src/react-navigation/views/MaterialBottomTabView.tsx b/src/react-navigation/views/MaterialBottomTabView.tsx
index df846ae2fb..f91a1f22b4 100644
--- a/src/react-navigation/views/MaterialBottomTabView.tsx
+++ b/src/react-navigation/views/MaterialBottomTabView.tsx
@@ -17,6 +17,7 @@ import type {
   MaterialBottomTabNavigationConfig,
   MaterialBottomTabNavigationHelpers,
 } from '../types';
+import { useCompatibleLinkBuilder } from '../utils';
 
 type Props = MaterialBottomTabNavigationConfig & {
   state: TabNavigationState<ParamListBase>;
@@ -29,7 +30,7 @@ export default function MaterialBottomTabView({
   descriptors,
   ...rest
 }: Props) {
-  const buildLink = useLinkBuilder();
+  const buildLink = useCompatibleLinkBuilder();
 
   return (
     <BottomNavigation