diff --git a/.github/workflows/app.e2e_tests.yml b/.github/workflows/app.e2e_tests.yml
index 4f7e7fc0..0af112f5 100644
--- a/.github/workflows/app.e2e_tests.yml
+++ b/.github/workflows/app.e2e_tests.yml
@@ -32,7 +32,7 @@ jobs:
browser: ${{ matrix.test-platform }}
- name: Upload screenshots of failed tests
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
if: failure()
with:
name: cypress-screenshots
diff --git a/__tests__/components/navbar/Navbar.test.tsx b/__tests__/components/navbar/Navbar.test.tsx
index 9ebc59c9..c0670f7a 100644
--- a/__tests__/components/navbar/Navbar.test.tsx
+++ b/__tests__/components/navbar/Navbar.test.tsx
@@ -1,5 +1,4 @@
import React from 'react';
-import { act } from 'react-dom/test-utils';
import { Provider } from 'react-redux';
import renderer from 'react-test-renderer';
import configureStore from 'redux-mock-store';
@@ -25,16 +24,11 @@ describe('NavBar Component', () => {
});
it('renders with showNavBar=true', () => {
- let component;
-
- act(() => {
- component = renderer.create(
-
-
- ,
- );
- });
- // @ts-ignore
+ const component = renderer.create(
+
+
+ ,
+ );
const tree = component.toJSON();
expect(tree).toMatchSnapshot();
});
@@ -48,17 +42,11 @@ describe('NavBar Component', () => {
theme: 'light',
},
});
-
- let component;
-
- act(() => {
- component = renderer.create(
-
-
- ,
- );
- });
- // @ts-ignore
+ const component = renderer.create(
+
+
+ ,
+ );
const tree = component.toJSON();
expect(tree).toMatchSnapshot();
});
diff --git a/jest-setup.ts b/jest-setup.ts
index 7a59ca5f..3e41cbf9 100644
--- a/jest-setup.ts
+++ b/jest-setup.ts
@@ -3,8 +3,6 @@ import '@testing-library/jest-native/extend-expect';
import { useAppSelector } from './src/lib/redux/Hooks';
import { ThemeState } from './src/lib/redux/slices/ThemeSlice';
-// Silence the warning: Animated: `useNativeDriver` is not supported because the native animated module is missing
-jest.mock('react-native/Libraries/Animated/NativeAnimatedHelper');
jest.mock('react-native-vector-icons/FontAwesome5', () => 'FontAwesome5');
jest.mock('react-native-webview', () => 'WebView');
diff --git a/package-lock.json b/package-lock.json
index 4cb1ce04..51cebed5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -18,7 +18,6 @@
"@react-native-async-storage/async-storage": "1.23.1",
"@react-native-community/eslint-config": "^3.2.0",
"@react-native-community/netinfo": "11.4.1",
- "@react-navigation/bottom-tabs": "^7.2.0",
"@react-navigation/native": "^7.0.14",
"@react-navigation/native-stack": "^7.2.0",
"@react-navigation/routers": "^6.1.9",
@@ -33,7 +32,6 @@
"expo-linking": "~7.0.5",
"expo-router": "~4.0.20",
"expo-status-bar": "~2.0.1",
- "expo-system-ui": "^4.0.9",
"expo-web-browser": "~14.0.2",
"i18next": "^23.7.6",
"openai": "^4.16.1",
@@ -47,10 +45,8 @@
"react-native-element-dropdown": "^2.10.4",
"react-native-error-boundary": "^1.2.3",
"react-native-fs": "^2.20.0",
- "react-native-gesture-handler": "~2.20.2",
"react-native-paper": "^5.11.2",
"react-native-progress": "^5.0.1",
- "react-native-reanimated": "~3.16.7",
"react-native-render-html": "^6.3.4",
"react-native-safe-area-context": "4.12.0",
"react-native-screens": "~4.4.0",
@@ -70,15 +66,9 @@
"devDependencies": {
"@babel/core": "^7.26.10",
"@babel/preset-env": "^7.26.9",
- "@babel/runtime": "^7.26.10",
"@cypress/code-coverage": "^3.12.6",
- "@react-native-community/cli": "^15.0.1",
- "@react-native-community/cli-platform-android": "^15.0.1",
- "@react-native-community/cli-platform-ios": "^15.0.1",
"@react-native/babel-preset": "^0.77.0",
- "@react-native/eslint-config": "^0.77.0",
"@react-native/metro-config": "^0.77.0",
- "@react-native/typescript-config": "^0.77.0",
"@testing-library/jest-native": "^5.4.3",
"@testing-library/react-native": "^12.4.0",
"@types/jest": "^29.5.5",
@@ -21956,186 +21946,6 @@
"url": "https://opencollective.com/parcel"
}
},
- "node_modules/lightningcss-darwin-x64": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.27.0.tgz",
- "integrity": "sha512-0+mZa54IlcNAoQS9E0+niovhyjjQWEMrwW0p2sSdLRhLDc8LMQ/b67z7+B5q4VmjYCMSfnFi3djAAQFIDuj/Tg==",
- "cpu": [
- "x64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-freebsd-x64": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.27.0.tgz",
- "integrity": "sha512-n1sEf85fePoU2aDN2PzYjoI8gbBqnmLGEhKq7q0DKLj0UTVmOTwDC7PtLcy/zFxzASTSBlVQYJUhwIStQMIpRA==",
- "cpu": [
- "x64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm-gnueabihf": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.27.0.tgz",
- "integrity": "sha512-MUMRmtdRkOkd5z3h986HOuNBD1c2lq2BSQA1Jg88d9I7bmPGx08bwGcnB75dvr17CwxjxD6XPi3Qh8ArmKFqCA==",
- "cpu": [
- "arm"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm64-gnu": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.27.0.tgz",
- "integrity": "sha512-cPsxo1QEWq2sfKkSq2Bq5feQDHdUEwgtA9KaB27J5AX22+l4l0ptgjMZZtYtUnteBofjee+0oW1wQ1guv04a7A==",
- "cpu": [
- "arm64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm64-musl": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.27.0.tgz",
- "integrity": "sha512-rCGBm2ax7kQ9pBSeITfCW9XSVF69VX+fm5DIpvDZQl4NnQoMQyRwhZQm9pd59m8leZ1IesRqWk2v/DntMo26lg==",
- "cpu": [
- "arm64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-x64-gnu": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.27.0.tgz",
- "integrity": "sha512-Dk/jovSI7qqhJDiUibvaikNKI2x6kWPN79AQiD/E/KeQWMjdGe9kw51RAgoWFDi0coP4jinaH14Nrt/J8z3U4A==",
- "cpu": [
- "x64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-x64-musl": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.27.0.tgz",
- "integrity": "sha512-QKjTxXm8A9s6v9Tg3Fk0gscCQA1t/HMoF7Woy1u68wCk5kS4fR+q3vXa1p3++REW784cRAtkYKrPy6JKibrEZA==",
- "cpu": [
- "x64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-win32-arm64-msvc": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.27.0.tgz",
- "integrity": "sha512-/wXegPS1hnhkeG4OXQKEMQeJd48RDC3qdh+OA8pCuOPCyvnm/yEayrJdJVqzBsqpy1aJklRCVxscpFur80o6iQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-win32-x64-msvc": {
- "version": "1.27.0",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.27.0.tgz",
- "integrity": "sha512-/OJLj94Zm/waZShL8nB5jsNj3CfNATLCTyFxZyouilfTmSoLDX7VlVAmhPHoZWVFp4vdmoiEbPEYC8HID3m6yw==",
- "cpu": [
- "x64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
"node_modules/lines-and-columns": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
diff --git a/package.json b/package.json
index ae5fafaa..a87f58fc 100644
--- a/package.json
+++ b/package.json
@@ -45,7 +45,6 @@
"@react-native-async-storage/async-storage": "1.23.1",
"@react-native-community/eslint-config": "^3.2.0",
"@react-native-community/netinfo": "11.4.1",
- "@react-navigation/bottom-tabs": "^7.2.0",
"@react-navigation/native": "^7.0.14",
"@react-navigation/native-stack": "^7.2.0",
"@react-navigation/routers": "^6.1.9",
@@ -60,7 +59,6 @@
"expo-linking": "~7.0.5",
"expo-router": "~4.0.20",
"expo-status-bar": "~2.0.1",
- "expo-system-ui": "^4.0.9",
"expo-web-browser": "~14.0.2",
"i18next": "^23.7.6",
"openai": "^4.16.1",
@@ -74,10 +72,8 @@
"react-native-element-dropdown": "^2.10.4",
"react-native-error-boundary": "^1.2.3",
"react-native-fs": "^2.20.0",
- "react-native-gesture-handler": "~2.20.2",
"react-native-paper": "^5.11.2",
"react-native-progress": "^5.0.1",
- "react-native-reanimated": "~3.16.7",
"react-native-render-html": "^6.3.4",
"react-native-safe-area-context": "4.12.0",
"react-native-screens": "~4.4.0",
@@ -97,15 +93,9 @@
"devDependencies": {
"@babel/core": "^7.26.10",
"@babel/preset-env": "^7.26.9",
- "@babel/runtime": "^7.26.10",
"@cypress/code-coverage": "^3.12.6",
- "@react-native-community/cli": "^15.0.1",
- "@react-native-community/cli-platform-android": "^15.0.1",
- "@react-native-community/cli-platform-ios": "^15.0.1",
"@react-native/babel-preset": "^0.77.0",
- "@react-native/eslint-config": "^0.77.0",
"@react-native/metro-config": "^0.77.0",
- "@react-native/typescript-config": "^0.77.0",
"@testing-library/jest-native": "^5.4.3",
"@testing-library/react-native": "^12.4.0",
"@types/jest": "^29.5.5",
diff --git a/src/components/WTR/Card/TechProviderCard.tsx b/src/components/WTR/Card/TechProviderCard.tsx
index fa8e490a..e53ca3c6 100644
--- a/src/components/WTR/Card/TechProviderCard.tsx
+++ b/src/components/WTR/Card/TechProviderCard.tsx
@@ -91,7 +91,14 @@ export function TechProviderCard({
testID={`tech-provider-${techProviderSlug}-button`}
>
diff --git a/src/screens/Course/StageOverview.tsx b/src/screens/Course/StageOverview.tsx
index 664eca35..4b10cc4a 100644
--- a/src/screens/Course/StageOverview.tsx
+++ b/src/screens/Course/StageOverview.tsx
@@ -122,7 +122,7 @@ export default function StageOverview() {
marginLeft: 10,
},
courseBackgroundContainer: {
- borderTopRadius: 15,
+ borderRadius: 15,
overflow: 'hidden',
},
courseTitle: {
diff --git a/webpack.config.js b/webpack.config.js
index 54dc31fc..1d017972 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,4 +1,4 @@
-const createExpoWebpackConfigAsync = require('@expo/webpack-config');
+const createExpoWebpackConfigAsync = require('@expo/metro-config');
const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
module.exports = async function (env, argv) {