diff --git a/android/app/src/main/java/com/expensify/chat/MainApplication.java b/android/app/src/main/java/com/expensify/chat/MainApplication.java index 68c2cb67d0e1..7156979a6c68 100644 --- a/android/app/src/main/java/com/expensify/chat/MainApplication.java +++ b/android/app/src/main/java/com/expensify/chat/MainApplication.java @@ -21,9 +21,6 @@ import java.util.List; import com.facebook.react.modules.i18nmanager.I18nUtil; -import com.facebook.react.bridge.JSIModulePackage; -import com.swmansion.reanimated.ReanimatedJSIModulePackage; - public class MainApplication extends MultiDexApplication implements ReactApplication { private final ReactNativeHost mReactNativeHost = @@ -49,11 +46,6 @@ protected List getPackages() { protected String getJSMainModuleName() { return "index"; } - - @Override - protected JSIModulePackage getJSIModulePackage() { - return new ReanimatedJSIModulePackage(); - } }; // TODO: Use this to enable new architecture. diff --git a/babel.config.js b/babel.config.js index dad806c0e416..e88676dcea7c 100644 --- a/babel.config.js +++ b/babel.config.js @@ -12,6 +12,8 @@ const defaultPlugins = [ // source code transformation as we do not use class property assignment. 'transform-class-properties', + '@babel/plugin-proposal-export-namespace-from', + // Keep it last 'react-native-reanimated/plugin', ]; diff --git a/config/webpack/webpack.common.js b/config/webpack/webpack.common.js index dbb9df872315..a3f874f93db4 100644 --- a/config/webpack/webpack.common.js +++ b/config/webpack/webpack.common.js @@ -1,5 +1,7 @@ const path = require('path'); -const {IgnorePlugin, DefinePlugin, ProvidePlugin} = require('webpack'); +const { + IgnorePlugin, DefinePlugin, ProvidePlugin, EnvironmentPlugin, +} = require('webpack'); const {CleanWebpackPlugin} = require('clean-webpack-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const CopyPlugin = require('copy-webpack-plugin'); @@ -18,6 +20,7 @@ const includeModules = [ 'react-native-gesture-handler', 'react-native-flipper', 'react-native-google-places-autocomplete', + '@react-navigation/drawer', ].join('|'); /** @@ -30,9 +33,10 @@ const includeModules = [ const webpackConfig = ({envFile = '.env', platform = 'web'}) => ({ mode: 'production', devtool: 'source-map', - entry: { - app: './index.js', - }, + entry: [ + 'babel-polyfill', + './index.js', + ], output: { filename: '[name]-[contenthash].bundle.js', path: path.resolve(__dirname, '../../dist'), @@ -66,12 +70,14 @@ const webpackConfig = ({envFile = '.env', platform = 'web'}) => ({ {from: 'node_modules/pdfjs-dist/cmaps/', to: 'cmaps/'}, ], }), + new EnvironmentPlugin({JEST_WORKER_ID: null}), new IgnorePlugin({ resourceRegExp: /^\.\/locale$/, contextRegExp: /moment$/, }), ...(platform === 'web' ? [new CustomVersionFilePlugin()] : []), new DefinePlugin({ + process: {env: {}}, __REACT_WEB_CONFIG__: JSON.stringify( dotenv.config({path: envFile}).parsed, ), diff --git a/ios/Podfile.lock b/ios/Podfile.lock index e104bf851eae..2617348109b8 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -487,8 +487,12 @@ PODS: - React-Core - react-native-render-html (6.3.1): - React-Core - - react-native-safe-area-context (3.4.1): + - react-native-safe-area-context (4.4.1): + - RCT-Folly + - RCTRequired + - RCTTypeSafety - React-Core + - ReactCommon/turbomodule/core - react-native-webview (11.23.0): - React-Core - React-perflogger (0.70.4) @@ -590,7 +594,7 @@ PODS: - React-Core - RNReactNativeHapticFeedback (1.14.0): - React-Core - - RNReanimated (2.10.0): + - RNReanimated (3.0.0-rc.3): - DoubleConversion - FBLazyVector - FBReactNativeSpec @@ -617,7 +621,7 @@ PODS: - React-RCTText - ReactCommon/turbomodule/core - Yoga - - RNScreens (3.15.0): + - RNScreens (3.17.0): - React-Core - React-RCTImage - RNSVG (12.4.4): @@ -983,7 +987,7 @@ SPEC CHECKSUMS: react-native-progress-bar-android: be43138ab7da30d51fc038bafa98e9ed594d0c40 react-native-progress-view: 4d3bbe6a099ba027b1fedb1548c2c87f74249b70 react-native-render-html: 96c979fe7452a0a41559685d2f83b12b93edac8c - react-native-safe-area-context: 9e40fb181dac02619414ba1294d6c2a807056ab9 + react-native-safe-area-context: 99b24a0c5acd0d5dcac2b1a7f18c49ea317be99a react-native-webview: e771bc375f789ebfa02a26939a57dbc6fa897336 React-perflogger: 5e41b01b35d97cc1b0ea177181eb33b5c77623b6 React-RCTActionSheet: 48949f30b24200c82f3dd27847513be34e06a3ae @@ -1009,8 +1013,8 @@ SPEC CHECKSUMS: RNGestureHandler: 920eb17f5b1e15dae6e5ed1904045f8f90e0b11e RNPermissions: dcdb7b99796bbeda6975a6e79ad519c41b251b1c RNReactNativeHapticFeedback: 1e3efeca9628ff9876ee7cdd9edec1b336913f8c - RNReanimated: 60e291d42c77752a0f6d6f358387bdf225a87c6e - RNScreens: 4a1af06327774490d97342c00aee0c2bafb497b7 + RNReanimated: 26dd29fdca770f9151705eff8e811013a3e9a5ba + RNScreens: 0df01424e9e0ed7827200d6ed1087ddd06c493f9 RNSVG: ecd661f380a07ba690c9c5929c475a44f432d674 SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d diff --git a/package-lock.json b/package-lock.json index aaf0c297e9d0..22ae86e3cec4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,10 +30,11 @@ "@react-native-firebase/crashlytics": "^12.3.0", "@react-native-firebase/perf": "^12.3.0", "@react-native-picker/picker": "^2.4.3", - "@react-navigation/drawer": "6.3.0", - "@react-navigation/native": "6.0.11", - "@react-navigation/stack": "6.2.2", + "@react-navigation/drawer": "6.5.0", + "@react-navigation/native": "6.0.13", + "@react-navigation/stack": "6.3.1", "babel-plugin-transform-remove-console": "^6.9.4", + "babel-polyfill": "^6.26.0", "dom-serializer": "^0.2.2", "domhandler": "^4.3.0", "dotenv": "^8.2.0", @@ -73,10 +74,10 @@ "react-native-permissions": "^3.0.1", "react-native-picker-select": "git+https://github.com/Expensify/react-native-picker-select.git#7f09b2c15ffae320d769788f75bdf8948714bb10", "react-native-plaid-link-sdk": "^7.2.0", - "react-native-reanimated": "2.10.0", + "react-native-reanimated": "3.0.0-rc.3", "react-native-render-html": "6.3.1", - "react-native-safe-area-context": "^3.1.4", - "react-native-screens": "^3.10.1", + "react-native-safe-area-context": "4.4.1", + "react-native-screens": "3.17.0", "react-native-svg": "^12.4.4", "react-native-webview": "^11.17.2", "react-pdf": "5.7.2", @@ -92,6 +93,7 @@ "@actions/github": "5.0.3", "@babel/core": "^7.11.1", "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", "@babel/preset-env": "^7.11.0", "@babel/preset-flow": "^7.12.13", "@babel/preset-react": "^7.10.4", @@ -6560,27 +6562,28 @@ "integrity": "sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==" }, "node_modules/@react-navigation/core": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.2.2.tgz", - "integrity": "sha512-gEJ1gRqt1EIqRrnJIpSQ0wWJRue9maAQNKYrlQ0a/LSKErF3g6w+sD2wW4Bbb1yj88pGhKeuI4wdB9MVK766Pg==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.0.tgz", + "integrity": "sha512-tpc0Ak/DiHfU3LlYaRmIY7vI4sM/Ru0xCet6runLUh9aABf4wiLgxyFJ5BtoWq6xFF8ymYEA/KWtDhetQ24YiA==", "dependencies": { - "@react-navigation/routers": "^6.1.1", + "@react-navigation/routers": "^6.1.3", "escape-string-regexp": "^4.0.0", "nanoid": "^3.1.23", "query-string": "^7.0.0", - "react-is": "^16.13.0" + "react-is": "^16.13.0", + "use-latest-callback": "^0.1.5" }, "peerDependencies": { "react": "*" } }, "node_modules/@react-navigation/drawer": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@react-navigation/drawer/-/drawer-6.3.0.tgz", - "integrity": "sha512-rbIpJCMeRVler6JI8eiHdvFEXbF8j8ii4cD42HeN9DqjpEJRfuz134ObM3O6Qd7h0k9U69exshbAUQ+7QaWesA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@react-navigation/drawer/-/drawer-6.5.0.tgz", + "integrity": "sha512-ma3qPjAfbwF07xd1w1gaWdcvYWmT4F+Z098q2J7XGbHw8yTGQYiNTnD1NMKerXwxM24vui2tMuFHA54F1rIvHQ==", "dependencies": { - "@react-navigation/elements": "^1.3.1", - "color": "^3.1.3", + "@react-navigation/elements": "^1.3.6", + "color": "^4.2.3", "warn-once": "^0.1.0" }, "peerDependencies": { @@ -6605,11 +6608,11 @@ } }, "node_modules/@react-navigation/native": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.0.11.tgz", - "integrity": "sha512-z0YTB7Czdb9SNjxfzcFNB3Vym0qmUcxpiYGOOXX8PH0s+xlIs/w+2RVp6YAvAC48A30o7MMCYqy5OeR6lrtWHg==", + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.0.13.tgz", + "integrity": "sha512-CwaJcAGbhv3p3ECablxBkw8QBCGDWXqVRwQ4QbelajNW623m3sNTC9dOF6kjp8au6Rg9B5e0KmeuY0xWbPk79A==", "dependencies": { - "@react-navigation/core": "^6.2.2", + "@react-navigation/core": "^6.4.0", "escape-string-regexp": "^4.0.0", "fast-deep-equal": "^3.1.3", "nanoid": "^3.1.23" @@ -6620,19 +6623,19 @@ } }, "node_modules/@react-navigation/routers": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.1.tgz", - "integrity": "sha512-mWWj2yh4na/OBaE7bWrft4kdAtxnG8MlV6ph3Bi6tHqgcnxENX+dnQY6y0qg/6E7cmMlaJg5nAC5y4Enr5ir8A==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.3.tgz", + "integrity": "sha512-idJotMEzHc3haWsCh7EvnnZMKxvaS4YF/x2UyFBkNFiEFUaEo/1ioQU6qqmVLspdEv4bI/dLm97hQo7qD8Yl7Q==", "dependencies": { "nanoid": "^3.1.23" } }, "node_modules/@react-navigation/stack": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-6.2.2.tgz", - "integrity": "sha512-P9ZfmluOXNmbs7YdG1UWS1fAh87Yse9aX8TgqOz4FlHEm5q7g5eaM35QgWByt+wif3UiqE40D8wXpqRQvMgPWg==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-6.3.1.tgz", + "integrity": "sha512-WkURDiSip8QpB+cuEbp5GfDPDGxER7w7ooJVgG3J2nJNnYuKxsZR7qnlqWL2vjQW81NzKQpT7xrCADy+mfvIiQ==", "dependencies": { - "@react-navigation/elements": "^1.3.4", + "@react-navigation/elements": "^1.3.6", "color": "^4.2.3", "warn-once": "^0.1.0" }, @@ -6645,34 +6648,6 @@ "react-native-screens": ">= 3.0.0" } }, - "node_modules/@react-navigation/stack/node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/@react-navigation/stack/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@react-navigation/stack/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "node_modules/@sentry/browser": { "version": "7.11.1", "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.11.1.tgz", @@ -17089,6 +17064,28 @@ "integrity": "sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg==", "dev": true }, + "node_modules/babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha512-F2rZGQnAdaHWQ8YAoeRbukc7HS9QgdgeyJ0rQDd485v9opwuPvjpPFcOOT/WmkKTdgy9ESgSPXDcTNpzrGr6iQ==", + "dependencies": { + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" + } + }, + "node_modules/babel-polyfill/node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true + }, + "node_modules/babel-polyfill/node_modules/regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==" + }, "node_modules/babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -17169,7 +17166,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", - "dev": true, "dependencies": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" @@ -17180,14 +17176,12 @@ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "dev": true, "hasInstallScript": true }, "node_modules/babel-runtime/node_modules/regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" }, "node_modules/babel-template": { "version": "6.26.0", @@ -18980,12 +18974,15 @@ } }, "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" } }, "node_modules/color-convert": { @@ -19019,6 +19016,22 @@ "color-support": "bin.js" } }, + "node_modules/color/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, "node_modules/colorette": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", @@ -35606,9 +35619,9 @@ } }, "node_modules/react-native-reanimated": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-2.10.0.tgz", - "integrity": "sha512-jKm3xz5nX7ABtHzzuuLmawP0pFWP77lXNdIC6AWOceBs23OHUaJ29p4prxr/7Sb588GwTbkPsYkDqVFaE3ezNQ==", + "version": "3.0.0-rc.3", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.0.0-rc.3.tgz", + "integrity": "sha512-kFkbazXfhq/zb3sQyLIFegLqxzPMJAd36pbz7jtOphZ1mEXDadX0ODp6eD7/PJHnLqYGHtsqSI8WMMLLN6rdjw==", "dependencies": { "@babel/plugin-transform-object-assign": "^7.16.7", "@babel/preset-typescript": "^7.16.7", @@ -35650,18 +35663,18 @@ "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA==" }, "node_modules/react-native-safe-area-context": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-3.4.1.tgz", - "integrity": "sha512-xfpVd0CiZR7oBhuwJ2HcZMehg5bjha1Ohu1XHpcT+9ykula0TgovH2BNU0R5Krzf/jBR1LMjR6VabxdlUjqxcA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.4.1.tgz", + "integrity": "sha512-N9XTjiuD73ZpVlejHrUWIFZc+6Z14co1K/p1IFMkImU7+avD69F3y+lhkqA2hN/+vljdZrBSiOwXPkuo43nFQA==", "peerDependencies": { "react": "*", "react-native": "*" } }, "node_modules/react-native-screens": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.15.0.tgz", - "integrity": "sha512-ezC5TibsUYyqPuuHpZoM3iEl6bRzCVBMJeGaFkn7xznuOt1VwkZVub0BvafIEYR/+AQC/RjxzMSQPs1qal0+wA==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.17.0.tgz", + "integrity": "sha512-OZCQU7+3neHNaM19jBkYRjL50kXz7p7MUgWQTCcdRoshcCiolf8aXs4eRVQKGK6m1RmoB8UL0//m5R9KoR+41w==", "dependencies": { "react-freeze": "^1.0.0", "warn-once": "^0.1.0" @@ -41211,6 +41224,11 @@ "node": ">=0.10.0" } }, + "node_modules/use-latest-callback": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.5.tgz", + "integrity": "sha512-HtHatS2U4/h32NlkhupDsPlrbiD27gSH5swBdtXbCAlc6pfOFzaj0FehW/FO12rx8j2Vy4/lJScCiJyM01E+bQ==" + }, "node_modules/use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", @@ -47785,24 +47803,25 @@ "integrity": "sha512-K0aGNn1TjalKj+65D7ycc1//H9roAQ51GJVk5ZJQFb2teECGmzd86bYDC0aYdbRf7gtovescq4Zt6FR0tgXiHQ==" }, "@react-navigation/core": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.2.2.tgz", - "integrity": "sha512-gEJ1gRqt1EIqRrnJIpSQ0wWJRue9maAQNKYrlQ0a/LSKErF3g6w+sD2wW4Bbb1yj88pGhKeuI4wdB9MVK766Pg==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@react-navigation/core/-/core-6.4.0.tgz", + "integrity": "sha512-tpc0Ak/DiHfU3LlYaRmIY7vI4sM/Ru0xCet6runLUh9aABf4wiLgxyFJ5BtoWq6xFF8ymYEA/KWtDhetQ24YiA==", "requires": { - "@react-navigation/routers": "^6.1.1", + "@react-navigation/routers": "^6.1.3", "escape-string-regexp": "^4.0.0", "nanoid": "^3.1.23", "query-string": "^7.0.0", - "react-is": "^16.13.0" + "react-is": "^16.13.0", + "use-latest-callback": "^0.1.5" } }, "@react-navigation/drawer": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@react-navigation/drawer/-/drawer-6.3.0.tgz", - "integrity": "sha512-rbIpJCMeRVler6JI8eiHdvFEXbF8j8ii4cD42HeN9DqjpEJRfuz134ObM3O6Qd7h0k9U69exshbAUQ+7QaWesA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@react-navigation/drawer/-/drawer-6.5.0.tgz", + "integrity": "sha512-ma3qPjAfbwF07xd1w1gaWdcvYWmT4F+Z098q2J7XGbHw8yTGQYiNTnD1NMKerXwxM24vui2tMuFHA54F1rIvHQ==", "requires": { - "@react-navigation/elements": "^1.3.1", - "color": "^3.1.3", + "@react-navigation/elements": "^1.3.6", + "color": "^4.2.3", "warn-once": "^0.1.0" } }, @@ -47813,56 +47832,32 @@ "requires": {} }, "@react-navigation/native": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.0.11.tgz", - "integrity": "sha512-z0YTB7Czdb9SNjxfzcFNB3Vym0qmUcxpiYGOOXX8PH0s+xlIs/w+2RVp6YAvAC48A30o7MMCYqy5OeR6lrtWHg==", + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/@react-navigation/native/-/native-6.0.13.tgz", + "integrity": "sha512-CwaJcAGbhv3p3ECablxBkw8QBCGDWXqVRwQ4QbelajNW623m3sNTC9dOF6kjp8au6Rg9B5e0KmeuY0xWbPk79A==", "requires": { - "@react-navigation/core": "^6.2.2", + "@react-navigation/core": "^6.4.0", "escape-string-regexp": "^4.0.0", "fast-deep-equal": "^3.1.3", "nanoid": "^3.1.23" } }, "@react-navigation/routers": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.1.tgz", - "integrity": "sha512-mWWj2yh4na/OBaE7bWrft4kdAtxnG8MlV6ph3Bi6tHqgcnxENX+dnQY6y0qg/6E7cmMlaJg5nAC5y4Enr5ir8A==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@react-navigation/routers/-/routers-6.1.3.tgz", + "integrity": "sha512-idJotMEzHc3haWsCh7EvnnZMKxvaS4YF/x2UyFBkNFiEFUaEo/1ioQU6qqmVLspdEv4bI/dLm97hQo7qD8Yl7Q==", "requires": { "nanoid": "^3.1.23" } }, "@react-navigation/stack": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-6.2.2.tgz", - "integrity": "sha512-P9ZfmluOXNmbs7YdG1UWS1fAh87Yse9aX8TgqOz4FlHEm5q7g5eaM35QgWByt+wif3UiqE40D8wXpqRQvMgPWg==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@react-navigation/stack/-/stack-6.3.1.tgz", + "integrity": "sha512-WkURDiSip8QpB+cuEbp5GfDPDGxER7w7ooJVgG3J2nJNnYuKxsZR7qnlqWL2vjQW81NzKQpT7xrCADy+mfvIiQ==", "requires": { - "@react-navigation/elements": "^1.3.4", + "@react-navigation/elements": "^1.3.6", "color": "^4.2.3", "warn-once": "^0.1.0" - }, - "dependencies": { - "color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "requires": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } } }, "@sentry/browser": { @@ -55817,6 +55812,28 @@ "integrity": "sha512-88blrUrMX3SPiGkT1GnvVY8E/7A+k6oj3MNvUtTIxJflFzXTw1bHkuJ/y039ouhFMp2prRn5cQGzokViYi1dsg==", "dev": true }, + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha512-F2rZGQnAdaHWQ8YAoeRbukc7HS9QgdgeyJ0rQDd485v9opwuPvjpPFcOOT/WmkKTdgy9ESgSPXDcTNpzrGr6iQ==", + "requires": { + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" + }, + "dependencies": { + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" + }, + "regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==" + } + } + }, "babel-preset-current-node-syntax": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", @@ -55885,7 +55902,6 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", - "dev": true, "requires": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" @@ -55894,14 +55910,12 @@ "core-js": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "dev": true + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "dev": true + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" } } }, @@ -57312,12 +57326,27 @@ } }, "color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "requires": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "dependencies": { + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } } }, "color-convert": { @@ -70182,9 +70211,9 @@ "requires": {} }, "react-native-reanimated": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-2.10.0.tgz", - "integrity": "sha512-jKm3xz5nX7ABtHzzuuLmawP0pFWP77lXNdIC6AWOceBs23OHUaJ29p4prxr/7Sb588GwTbkPsYkDqVFaE3ezNQ==", + "version": "3.0.0-rc.3", + "resolved": "https://registry.npmjs.org/react-native-reanimated/-/react-native-reanimated-3.0.0-rc.3.tgz", + "integrity": "sha512-kFkbazXfhq/zb3sQyLIFegLqxzPMJAd36pbz7jtOphZ1mEXDadX0ODp6eD7/PJHnLqYGHtsqSI8WMMLLN6rdjw==", "requires": { "@babel/plugin-transform-object-assign": "^7.16.7", "@babel/preset-typescript": "^7.16.7", @@ -70219,15 +70248,15 @@ } }, "react-native-safe-area-context": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-3.4.1.tgz", - "integrity": "sha512-xfpVd0CiZR7oBhuwJ2HcZMehg5bjha1Ohu1XHpcT+9ykula0TgovH2BNU0R5Krzf/jBR1LMjR6VabxdlUjqxcA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/react-native-safe-area-context/-/react-native-safe-area-context-4.4.1.tgz", + "integrity": "sha512-N9XTjiuD73ZpVlejHrUWIFZc+6Z14co1K/p1IFMkImU7+avD69F3y+lhkqA2hN/+vljdZrBSiOwXPkuo43nFQA==", "requires": {} }, "react-native-screens": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.15.0.tgz", - "integrity": "sha512-ezC5TibsUYyqPuuHpZoM3iEl6bRzCVBMJeGaFkn7xznuOt1VwkZVub0BvafIEYR/+AQC/RjxzMSQPs1qal0+wA==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/react-native-screens/-/react-native-screens-3.17.0.tgz", + "integrity": "sha512-OZCQU7+3neHNaM19jBkYRjL50kXz7p7MUgWQTCcdRoshcCiolf8aXs4eRVQKGK6m1RmoB8UL0//m5R9KoR+41w==", "requires": { "react-freeze": "^1.0.0", "warn-once": "^0.1.0" @@ -74475,6 +74504,11 @@ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, + "use-latest-callback": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/use-latest-callback/-/use-latest-callback-0.1.5.tgz", + "integrity": "sha512-HtHatS2U4/h32NlkhupDsPlrbiD27gSH5swBdtXbCAlc6pfOFzaj0FehW/FO12rx8j2Vy4/lJScCiJyM01E+bQ==" + }, "use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", diff --git a/package.json b/package.json index b5da15c1d30d..f27bc37bcbc8 100644 --- a/package.json +++ b/package.json @@ -57,10 +57,11 @@ "@react-native-firebase/crashlytics": "^12.3.0", "@react-native-firebase/perf": "^12.3.0", "@react-native-picker/picker": "^2.4.3", - "@react-navigation/drawer": "6.3.0", - "@react-navigation/native": "6.0.11", - "@react-navigation/stack": "6.2.2", + "@react-navigation/drawer": "6.5.0", + "@react-navigation/native": "6.0.13", + "@react-navigation/stack": "6.3.1", "babel-plugin-transform-remove-console": "^6.9.4", + "babel-polyfill": "^6.26.0", "dom-serializer": "^0.2.2", "domhandler": "^4.3.0", "dotenv": "^8.2.0", @@ -100,10 +101,10 @@ "react-native-permissions": "^3.0.1", "react-native-picker-select": "git+https://github.com/Expensify/react-native-picker-select.git#7f09b2c15ffae320d769788f75bdf8948714bb10", "react-native-plaid-link-sdk": "^7.2.0", - "react-native-reanimated": "2.10.0", + "react-native-reanimated": "3.0.0-rc.3", "react-native-render-html": "6.3.1", - "react-native-safe-area-context": "^3.1.4", - "react-native-screens": "^3.10.1", + "react-native-safe-area-context": "4.4.1", + "react-native-screens": "3.17.0", "react-native-svg": "^12.4.4", "react-native-webview": "^11.17.2", "react-pdf": "5.7.2", @@ -119,6 +120,7 @@ "@actions/github": "5.0.3", "@babel/core": "^7.11.1", "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", "@babel/preset-env": "^7.11.0", "@babel/preset-flow": "^7.12.13", "@babel/preset-react": "^7.10.4", diff --git a/src/libs/Navigation/DeprecatedCustomActions.js b/src/libs/Navigation/DeprecatedCustomActions.js index eb10d9c2f827..8ce7648577ca 100644 --- a/src/libs/Navigation/DeprecatedCustomActions.js +++ b/src/libs/Navigation/DeprecatedCustomActions.js @@ -121,12 +121,20 @@ function pushDrawerRoute(route) { }); } + const routes = [{ + name: newScreenName, + params: newScreenParams, + }]; + + // Keep the same key so the ReportScreen does not completely re-mount + if (newScreenName === 'Report') { + const prevReportRoute = _.find(state.routes, reportRoute => reportRoute.name === 'Report'); + routes[0].key = prevReportRoute.key; + } + return CommonActions.reset({ ...state, - routes: [{ - name: newScreenName, - params: newScreenParams, - }], + routes, history, }); }; diff --git a/src/pages/home/HeaderView.js b/src/pages/home/HeaderView.js index 6dcd70278f99..f50122239c4c 100644 --- a/src/pages/home/HeaderView.js +++ b/src/pages/home/HeaderView.js @@ -2,10 +2,8 @@ import _ from 'underscore'; import React from 'react'; import {View, Pressable} from 'react-native'; import PropTypes from 'prop-types'; -import {withOnyx} from 'react-native-onyx'; import lodashGet from 'lodash/get'; import styles from '../../styles/styles'; -import ONYXKEYS from '../../ONYXKEYS'; import themeColors from '../../styles/themes/default'; import Icon from '../../components/Icon'; import * as Expensicons from '../../components/Icon/Expensicons'; @@ -46,6 +44,9 @@ const propTypes = { /** Personal details of all the users */ personalDetails: PropTypes.objectOf(participantPropTypes), + /** Whether the header is loading */ + isLoading: PropTypes.bool, + ...windowDimensionsPropTypes, ...withLocalizePropTypes, }; @@ -54,14 +55,10 @@ const defaultProps = { personalDetails: {}, policies: {}, report: null, + isLoading: false, }; const HeaderView = (props) => { - // Waiting until ONYX variables are loaded before displaying the component - if (_.isEmpty(props.personalDetails)) { - return null; - } - const participants = lodashGet(props.report, 'participants', []); const participantPersonalDetails = OptionsListUtils.getPersonalDetailsForLogins(participants, props.personalDetails); const isMultipleParticipant = participants.length > 1; @@ -95,7 +92,7 @@ const HeaderView = (props) => { )} - {Boolean(props.report && title) && ( + {!props.isLoading && Boolean(props.report && title) && ( `${ONYXKEYS.COLLECTION.REPORT}${reportID}`, - }, - personalDetails: { - key: ONYXKEYS.PERSONAL_DETAILS, - }, - policies: { - key: ONYXKEYS.COLLECTION.POLICY, - }, - }), )(HeaderView); diff --git a/src/pages/home/ReportScreen.js b/src/pages/home/ReportScreen.js index bdf3a608b71f..3df476b63aa1 100644 --- a/src/pages/home/ReportScreen.js +++ b/src/pages/home/ReportScreen.js @@ -120,9 +120,12 @@ class ReportScreen extends React.Component { } componentDidUpdate(prevProps) { - if (this.props.route.params.reportID === prevProps.route.params.reportID) { + const previousReportID = prevProps.route.params.reportID; + const newReportID = this.props.route.params.reportID; + if (previousReportID === newReportID) { return; } + this.storeCurrentlyViewedReport(); } @@ -186,7 +189,7 @@ class ReportScreen extends React.Component { } render() { - if (!this.props.isSidebarLoaded) { + if (!this.props.isSidebarLoaded || _.isEmpty(this.props.personalDetails)) { return null; } @@ -208,6 +211,8 @@ class ReportScreen extends React.Component { const reportID = getReportID(this.props.route); const addWorkspaceRoomPendingAction = lodashGet(this.props.report, 'pendingFields.addWorkspaceRoom'); const addWorkspaceRoomErrors = lodashGet(this.props.report, 'errorFields.addWorkspaceRoom'); + const isReportLoaded = this.props.report && this.props.report.reportID === reportID; + const isTransitioning = !isReportLoaded; return ( Navigation.navigate(ROUTES.HOME)} + isLoading={isTransitioning} + personalDetails={this.props.personalDetails} + report={this.props.report} + policies={this.props.policies} /> {this.props.accountManagerReportID && ReportUtils.isConciergeChatReport(this.props.report) && this.state.isBannerVisible && ( @@ -247,7 +257,7 @@ class ReportScreen extends React.Component { style={[styles.flex1, styles.justifyContentEnd, styles.overflowHidden]} onLayout={event => this.setState({skeletonViewContainerHeight: event.nativeEvent.layout.height})} > - {this.shouldShowLoader() + {(this.shouldShowLoader() || isTransitioning) ? ( @@ -312,5 +324,8 @@ export default compose( accountManagerReportID: { key: ONYXKEYS.ACCOUNT_MANAGER_REPORT_ID, }, + personalDetails: { + key: ONYXKEYS.PERSONAL_DETAILS, + }, }), )(ReportScreen); diff --git a/src/pages/home/report/ParticipantLocalTime.js b/src/pages/home/report/ParticipantLocalTime.js index b62a7ba5e833..10461b52856f 100644 --- a/src/pages/home/report/ParticipantLocalTime.js +++ b/src/pages/home/report/ParticipantLocalTime.js @@ -2,6 +2,7 @@ import React, {PureComponent} from 'react'; import { View, } from 'react-native'; +import PropTypes from 'prop-types'; import lodashGet from 'lodash/get'; import Str from 'expensify-common/lib/str'; import styles from '../../../styles/styles'; @@ -16,6 +17,9 @@ const propTypes = { /** Personal details of the participant */ participant: participantPropTypes.isRequired, + /** Whether a report is being transitioned to */ + isLoading: PropTypes.bool.isRequired, + ...withLocalizePropTypes, }; @@ -61,21 +65,23 @@ class ParticipantLocalTime extends PureComponent { return ( - - {this.props.translate( - 'reportActionCompose.localTime', - { - user: reportRecipientDisplayName, - time: this.state.localTime, - }, - )} - + {!this.props.isLoading && ( + + {this.props.translate( + 'reportActionCompose.localTime', + { + user: reportRecipientDisplayName, + time: this.state.localTime, + }, + )} + + )} ); } diff --git a/src/pages/home/report/ReportActionCompose.js b/src/pages/home/report/ReportActionCompose.js index 4977d8cdd04f..1f60d5e37aa4 100644 --- a/src/pages/home/report/ReportActionCompose.js +++ b/src/pages/home/report/ReportActionCompose.js @@ -93,6 +93,9 @@ const propTypes = { expiresAt: PropTypes.string, }), + /** Whether a report is being transitioned to */ + isLoading: PropTypes.bool.isRequired, + ...windowDimensionsPropTypes, ...withLocalizePropTypes, ...withCurrentUserPersonalDetailsPropTypes, @@ -505,7 +508,7 @@ class ReportActionCompose extends React.Component { ]} > {shouldShowReportRecipientLocalTime - && } + && }