diff --git a/examples/ExpoMessaging/yarn.lock b/examples/ExpoMessaging/yarn.lock index 48d77730ca..2f4353d0cf 100644 --- a/examples/ExpoMessaging/yarn.lock +++ b/examples/ExpoMessaging/yarn.lock @@ -1521,13 +1521,6 @@ dependencies: regenerator-runtime "^0.13.11" -"@babel/runtime@^7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762" - integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== - dependencies: - regenerator-runtime "^0.14.0" - "@babel/template@^7.20.7", "@babel/template@^7.21.9": version "7.21.9" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.21.9.tgz#bf8dad2859130ae46088a99c1f265394877446fb" @@ -2888,7 +2881,7 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/jsonwebtoken@^9.0.8", "@types/jsonwebtoken@~9.0.0": +"@types/jsonwebtoken@^9.0.8": version "9.0.9" resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz#a4c3a446c0ebaaf467a58398382616f416345fb3" integrity sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ== @@ -2925,13 +2918,6 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== -"@types/ws@^7.4.0": - version "7.4.7" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" - integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== - dependencies: - "@types/node" "*" - "@types/ws@^8.5.14": version "8.18.0" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.0.tgz#8a2ec491d6f0685ceaab9a9b7ff44146236993b5" @@ -5156,11 +5142,6 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== - isomorphic-ws@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" @@ -5420,7 +5401,7 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonwebtoken@^9.0.2, jsonwebtoken@~9.0.0: +jsonwebtoken@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== @@ -7422,10 +7403,10 @@ stream-buffers@2.2.x, stream-buffers@~2.2.0: version "0.0.0" uid "" -stream-chat-react-native-core@6.7.4: - version "6.7.4" - resolved "https://registry.yarnpkg.com/stream-chat-react-native-core/-/stream-chat-react-native-core-6.7.4.tgz#9709465e161e32cf358034a82c284cc16369397a" - integrity sha512-YCAXBfdbazFIpO1EI9Czd2QYaFCJX+i9q710L3xPB4mRuaNl2SL8kH+RTj4Ur9Fyl3u1fcDI+1o/iYnaap1Uwg== +stream-chat-react-native-core@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/stream-chat-react-native-core/-/stream-chat-react-native-core-7.0.0.tgz#ba5439c9a446713356105a40c7d2f90c3ccbf4a3" + integrity sha512-qjjukVUXl13/cQDCovTAUHMUXgweg6fhh0we2t+C3RI3gN0AaiXMpzejA6RSuArBtezV4AB/mv9BoT7BRTzqeA== dependencies: "@gorhom/bottom-sheet" "^5.1.1" dayjs "1.10.5" @@ -7438,28 +7419,13 @@ stream-chat-react-native-core@6.7.4: path "0.12.7" react-native-markdown-package "1.8.2" react-native-url-polyfill "^1.3.0" - stream-chat "^8.57.6" + stream-chat "^9.0.0" use-sync-external-store "^1.4.0" "stream-chat-react-native-core@link:../../package": version "0.0.0" uid "" -stream-chat@^8.57.6: - version "8.60.0" - resolved "https://registry.yarnpkg.com/stream-chat/-/stream-chat-8.60.0.tgz#b67d4fbb185da53fb8ac5fc5759986d6ad7e19a3" - integrity sha512-7FpO7Wno++r+n+x9aFuXtGYtNO06CIMd2Bxe3doYZLhMfS0nuaXloeFlGcMT0r4U/6bnguz1qQdDJUPNQAS8bQ== - dependencies: - "@babel/runtime" "^7.27.0" - "@types/jsonwebtoken" "~9.0.0" - "@types/ws" "^7.4.0" - axios "^1.6.0" - base64-js "^1.5.1" - form-data "^4.0.0" - isomorphic-ws "^4.0.1" - jsonwebtoken "~9.0.0" - ws "^7.5.10" - stream-chat@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/stream-chat/-/stream-chat-9.0.0.tgz#cb22dcb8b7f070c623a13b6b75b212d560534d6c" diff --git a/examples/SampleApp/android/app/build.gradle b/examples/SampleApp/android/app/build.gradle index 122e62d673..e1c59595a5 100644 --- a/examples/SampleApp/android/app/build.gradle +++ b/examples/SampleApp/android/app/build.gradle @@ -126,15 +126,14 @@ dependencies { implementation platform('com.google.firebase:firebase-bom:29.3.0') implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.0.0") - // For animated GIF support - implementation 'com.facebook.fresco:animated-gif:2.6.0' - // For React native video implementation "androidx.appcompat:appcompat:1.0.0" + // For animated GIF support + implementation('com.facebook.fresco:animated-gif:3.6.0') // For WebP support, including animated WebP - implementation 'com.facebook.fresco:animated-webp:2.6.0' - implementation 'com.facebook.fresco:webpsupport:2.6.0' + implementation('com.facebook.fresco:animated-webp:3.6.0') + implementation('com.facebook.fresco:webpsupport:3.6.0') // For Firebase Crashlytics and Analytics support implementation 'com.google.firebase:firebase-crashlytics' diff --git a/examples/SampleApp/ios/Podfile.lock b/examples/SampleApp/ios/Podfile.lock index 269ca91dd2..5da03a4244 100644 --- a/examples/SampleApp/ios/Podfile.lock +++ b/examples/SampleApp/ios/Podfile.lock @@ -2234,7 +2234,7 @@ PODS: - libwebp (~> 1.0) - SDWebImage/Core (~> 5.10) - SocketRocket (0.7.1) - - stream-chat-react-native (6.7.3): + - stream-chat-react-native (7.0.0): - DoubleConversion - glog - hermes-engine @@ -2578,91 +2578,91 @@ SPEC CHECKSUMS: hermes-engine: b417d2b2aee3b89b58e63e23a51e02be91dc876d libwebp: 02b23773aedb6ff1fd38cec7a77b81414c6842a8 nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 - op-sqlite: c33561ea312a2ae38aae032fd3a42635dc6b57e8 + op-sqlite: 2e34a191af7e843608357671c94a6e2befd4b986 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 PromisesSwift: 9d77319bbe72ebf6d872900551f7eeba9bce2851 - RCT-Folly: 36fe2295e44b10d831836cc0d1daec5f8abcf809 + RCT-Folly: e78785aa9ba2ed998ea4151e314036f6c49e6d82 RCTDeprecation: b2eecf2d60216df56bc5e6be5f063826d3c1ee35 RCTRequired: 78522de7dc73b81f3ed7890d145fa341f5bb32ea RCTTypeSafety: c135dd2bf50402d87fd12884cbad5d5e64850edd React: b229c49ed5898dab46d60f61ed5a0bfa2ee2fadb React-callinvoker: 2ac508e92c8bd9cf834cc7d7787d94352e4af58f React-Codegen: 4b8b4817cea7a54b83851d4c1f91f79aa73de30a - React-Core: 13cdd1558d0b3f6d9d5a22e14d89150280e79f02 - React-CoreModules: b07a6744f48305405e67c845ebf481b6551b712a - React-cxxreact: 1055a86c66ac35b4e80bd5fb766aed5f494dfff4 + React-Core: 325b4f6d9162ae8b9a6ff42fe78e260eb124180d + React-CoreModules: 558041e5258f70cd1092f82778d07b8b2ff01897 + React-cxxreact: 8fff17cbe76e6a8f9991b59552e1235429f9c74b React-debug: c76e92776a86622209279fe6d24a0147584444ed - React-defaultsnativemodule: c2e3ac39909241374c3322eb2be33f4c15fe6be4 - React-domnativemodule: 240b3c95b5300cc6537594e73ebc6e8e77585b74 - React-Fabric: 3b403ca25f74d54454b31d1d2627050e0777d42c - React-FabricComponents: 154740cfcd57943709a9d0343769d17173c0ac9c - React-FabricImage: 0863e39cea98f3ca2f8c3d92984660795cec84ae + React-defaultsnativemodule: 111fb1efc95c2bd0ee18e38e9f7b57d678e6f932 + React-domnativemodule: d5154a815306fd6050ee9346a1490d2fb17eb0e5 + React-Fabric: 51ac32f0a6790b1d3b14d90c6870e5ce5bb3854a + React-FabricComponents: 1094d6a3c2566b3c56951331c44d7d3960570ac8 + React-FabricImage: 6b210ad3c72704a9ad60dde66c397ce6257333f4 React-featureflags: efb93a998907e4ad5b88f6ed77cc140914d5c36d - React-featureflagsnativemodule: 51116d72aafea30860f315702d17eb76bbb725a3 - React-graphics: 91d9920451f633d64d31948da3ba0377b6eda8de - React-hermes: 71186f872c932e4574d5feb3ed754dda63a0b3bd - React-idlecallbacksnativemodule: 19bf1fa4b2b66fe1898ac1d185129cdcc3221c7c - React-ImageManager: 7dc7bfca8e9ecb9a7436b8a89a143a193ef5adcf - React-jserrorhandler: d8640792495ac2d78e73acbcc77a8439d1eedfef - React-jsi: 0775a66820496769ad83e629f0f5cce621a57fc7 - React-jsiexecutor: 2cf5ba481386803f3c88b85c63fa102cba5d769e - React-jsinspector: d1d9f215c7431b286acc12e83cdf0d90c265f0ed - React-jsinspectortracing: c4c1cceb9a9c266ce849c82332e35cc57ee9dae9 - React-jsitracing: 267618eec9c362658a4587c5ddcfb41b2e00c403 - React-logger: 795cd5055782db394f187f9db0477d4b25b44291 - React-Mapbuffer: 0df2a235bd0182f5cbed6c5f095e66deca12e335 - React-microtasksnativemodule: b31e56a980634f383221bfefd5111d04c14c110b - react-native-blob-util: 875bbeee07e4ada135e4edf9fc7b22acf8d9721d - react-native-cameraroll: cdc91c4c953d1a18aa3ce88b5a25698025c8c4d2 - react-native-document-picker: 19be73c0423e4bc886cef74ec282eff750698013 - react-native-image-picker: 1c620a65f900a47d6d12ec94874c6a1820ebea7d - react-native-netinfo: f0a9899081c185db1de5bb2fdc1c88c202a059ac - react-native-safe-area-context: 0b43456abcaaa3c8323bbfafe9c5f0f9511219d2 - react-native-video: a225b4d4d3286f3253dc7b00a62e7c8e59d04d51 - React-NativeModulesApple: b74b4e3004104429461593fe460ad790cc4928c2 - React-perflogger: ab51b7592532a0ea45bf6eed7e6cae14a368b678 - React-performancetimeline: 37192fd1019c3b3b597a877dff12f3af68305c34 + React-featureflagsnativemodule: a74b09429c2e7a57412d78cc159ab86ae4f15db9 + React-graphics: 17ef0ee3ef4a4c1774cc82f1f477ecef4d67c73f + React-hermes: a9a0c8377627b5506ef9a7b6f60a805c306e3f51 + React-idlecallbacksnativemodule: 0711ec5eb53c7f790641fa00e5f6ec0355d3159b + React-ImageManager: 23b4701408390428724f0e0ebb2cbed7b37c2b24 + React-jserrorhandler: e21b438ef8b99ea8bf070ff35f00bc0215b5f769 + React-jsi: f3f51595cc4c089037b536368f016d4742bf9cf7 + React-jsiexecutor: cca6c232db461e2fd213a11e9364cfa6fdaa20eb + React-jsinspector: 8a3c2637b84ebec478f46a43432a522d7489410f + React-jsinspectortracing: ee0215d2db753cc10f45fc9aa86557718d0b16fb + React-jsitracing: 258be1fd259141f6aa43012c20c70ebc02e32087 + React-logger: 018826bfd51b9f18e87f67db1590bc510ad20664 + React-Mapbuffer: 9fbb496e7d6f7c34d5e617365ee778bf96d14eae + React-microtasksnativemodule: 36adde22631838680d1be62776e8ccb83186c06a + react-native-blob-util: d03eaad9fd1bbe90bd0eedb5bad3333215976086 + react-native-cameraroll: 10054f480dfd6e0bd02fdf08fb6d82f80b362575 + react-native-document-picker: 78c262a7f9f77df2380378aa4b3413b8646ce91b + react-native-image-picker: 4c10603e9b253c7f48f296034c04a09fe9c8d427 + react-native-netinfo: cec9c4e86083cb5b6aba0e0711f563e2fbbff187 + react-native-safe-area-context: 02e0f487c16ccf1acc8a666bed2318ceeb5dc14c + react-native-video: 16b5c395d05f8af23e16bfe3dc0794a5514c882f + React-NativeModulesApple: ec44c21ae0bbb5f9a2df72db00294e33a00e07f0 + React-perflogger: 9e8d3c0dc0194eb932162812a168aa5dc662f418 + React-performancetimeline: 350424518f433dd43f063dc5f2cf3195c1a5b60f React-RCTActionSheet: 592674cf61142497e0e820688f5a696e41bf16dd - React-RCTAnimation: 8fbb8dba757b49c78f4db403133ab6399a4ce952 - React-RCTAppDelegate: 7f88baa8cb4e5d6c38bb4d84339925c70c9ac864 - React-RCTBlob: f89b162d0fe6b570a18e755eb16cbe356d3c6d17 - React-RCTFabric: f2151588dc1dc884b34b8660d72ef5237aa4b10e - React-RCTFBReactNativeSpec: 8c29630c2f379c729300e4c1e540f3d1b78d1936 - React-RCTImage: ccac9969940f170503857733f9a5f63578e106e1 - React-RCTLinking: d82427bbf18415a3732105383dff119131cadd90 - React-RCTNetwork: 12ad4d0fbde939e00251ca5ca890da2e6825cc3c - React-RCTSettings: e7865bf9f455abf427da349c855f8644b5c39afa - React-RCTText: 2cdfd88745059ec3202a0842ea75a956c7d6f27d - React-RCTVibration: a3a1458e6230dfd64b3768ebc0a4aac430d9d508 + React-RCTAnimation: e6d669872f9b3b4ab9527aab283b7c49283236b7 + React-RCTAppDelegate: de2343fe08be4c945d57e0ecce44afcc7dd8fc03 + React-RCTBlob: 3e2dce94c56218becc4b32b627fc2293149f798d + React-RCTFabric: adad07a08efb186bc1046041207527927524170d + React-RCTFBReactNativeSpec: d10ca5e0ccbfeac8c047361fedf8e4ac653887b6 + React-RCTImage: dc04b176c022d12a8f55ae7a7279b1e091066ae0 + React-RCTLinking: 88f5e37fe4f26fbc80791aa2a5f01baf9b9a3fd5 + React-RCTNetwork: f213693565efbd698b8e9c18d700a514b49c0c8e + React-RCTSettings: a2d32a90c45a3575568cad850abc45924999b8a5 + React-RCTText: 54cdcd1cbf6f6a91dc6317f5d2c2b7fc3f6bf7a0 + React-RCTVibration: 11dae0e7f577b5807bb7d31e2e881eb46f854fd4 React-rendererconsistency: aa476d937c91886dd8b2ddde3191c775585ae47a - React-rendererdebug: 5a2219e0ceb78f4ffe9ee2d80fa260bb5bac50b2 + React-rendererdebug: df10d858ac7709b9c8349d952474b0746092c690 React-rncore: 517c6c3647d45de81a7920b6959adf14fed2a5a5 - React-RuntimeApple: 40809bf5975c265b990dec2725f2cfb61f1afc75 - React-RuntimeCore: 375c2645e924fdca875918f07ed987653c517edc + React-RuntimeApple: 6922a0861c3fc4c7d544fc7d1d5cb38c779d1264 + React-RuntimeCore: 41a95876d16630ce00946eaaee7ffd5222242b44 React-runtimeexecutor: a188df372373baf5066e6e229177836488799f80 - React-RuntimeHermes: 2de8d61ec25d950ae4aebcab1a895e0bb8b18c95 - React-runtimescheduler: e8b49a60eca68a3513c259879a352ed010fed255 + React-RuntimeHermes: f2ca409c03c36bb3dcbf61bdfa2636501f9faebd + React-runtimescheduler: 7ae10fa81428c2479e0a5534943dacb8e34c9d52 React-timing: e56b95cb12c6fb9146be7ba3d671cf6b5d17b2e0 - React-utils: 8ad62100a8780798a380b769e968c4764bad1f4b - ReactAppDependencyProvider: f2e81d80afd71a8058589e19d8a134243fa53f17 - ReactCodegen: 299e99fc57c93edc7c5396ef1a39a3a4d494f25d - ReactCommon: c8fdbc582b98a07daf201cd95c1da75dd029f3ee - RNAudioRecorderPlayer: 224c7de87722938aedce04000d09baa633148f5b - RNCAsyncStorage: dac011cac81189c2b3b8654f3db97d2b6362d165 - RNFastImage: 5c9c9fed9c076e521b3f509fe79e790418a544e8 - RNFBApp: 60366dd9d6bb01327607e1561a32508592d76db9 - RNFBMessaging: 9465c2e3adb5e02cae8d40048306a30aea7f55cf - RNGestureHandler: 0a16f3f13829c01268ae55610a40b57b713c8161 - RNNotifee: 4a6ee5c7deaf00e005050052d73ee6315dff7ec9 - RNReactNativeHapticFeedback: a49e613d48d721c99cad9689a490554104c22154 - RNReanimated: c9f295fb1679867288d238bfaf3ea39225c95e1b - RNScreens: 77f93ec55b749c49549b447527ebf78e990125f3 - RNShare: 12d13ebc179faf22534c605d17b2c2fa40191850 - RNSVG: 05776cf3f0d52d3f8e7ebee34b2189da7b8638ff + React-utils: 6eabecc0e7d7bcf21b6b33357bc1fe8ae13c7c4c + ReactAppDependencyProvider: a1fb08dfdc7ebc387b2e54cfc9decd283ed821d8 + ReactCodegen: 0f8899ac1bad260bf3b362ee848ef67a70b5a306 + ReactCommon: a30b578194de911fbe1698efb8247bfe4cb6abff + RNAudioRecorderPlayer: 11df0c7b614e9767ef24d896465c3a758c592de7 + RNCAsyncStorage: 849b77e6ab3eb838361a902b492993056924faab + RNFastImage: 462a183c4b0b6b26fdfd639e1ed6ba37536c3b87 + RNFBApp: b5626640e0f4b4fe5be4f44375df703c0d62ee4b + RNFBMessaging: 8e38f5ca846497f8a9c91d33f311c00ca52d119c + RNGestureHandler: f7b3a72c099e1e29b5b81688678bc9108d44057c + RNNotifee: 5e3b271e8ea7456a36eec994085543c9adca9168 + RNReactNativeHapticFeedback: eb5395b503c7a8f10de5e6722ef8afd3c61bc4f5 + RNReanimated: fe5c52894886953248a81a10b2a9b6eeb5398d61 + RNScreens: fc78b9b5a1274426d7a59b7d07c272bba13604fa + RNShare: dcef43a8864fcc114fd582edba7832a906fd318d + RNSVG: 71e35e78add645b84b52b0c6f203f91028e1ab5e SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - stream-chat-react-native: e6555aac04d25ad09d9f219360dda7a00eb0d9d1 + stream-chat-react-native: 655e616ec1738f03ab9796eb12693bb1a91bb65e Yoga: be02ca501b03c79d7027a6bbbd0a8db985034f11 PODFILE CHECKSUM: 4f662370295f8f9cee909f1a4c59a614999a209d diff --git a/examples/SampleApp/yarn.lock b/examples/SampleApp/yarn.lock index 098e0553c2..04687f5183 100644 --- a/examples/SampleApp/yarn.lock +++ b/examples/SampleApp/yarn.lock @@ -996,13 +996,6 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762" - integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== - dependencies: - regenerator-runtime "^0.14.0" - "@babel/template@^7.25.0", "@babel/template@^7.25.9", "@babel/template@^7.26.9", "@babel/template@^7.3.3": version "7.26.9" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.9.tgz#4577ad3ddf43d194528cff4e1fa6b232fa609bb2" @@ -2565,7 +2558,7 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/jsonwebtoken@^9.0.8", "@types/jsonwebtoken@~9.0.0": +"@types/jsonwebtoken@^9.0.8": version "9.0.9" resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz#a4c3a446c0ebaaf467a58398382616f416345fb3" integrity sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ== @@ -2616,13 +2609,6 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== -"@types/ws@^7.4.0": - version "7.4.7" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" - integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== - dependencies: - "@types/node" "*" - "@types/ws@^8.5.14": version "8.18.0" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.0.tgz#8a2ec491d6f0685ceaab9a9b7ff44146236993b5" @@ -5238,11 +5224,6 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== - isomorphic-ws@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" @@ -5787,7 +5768,7 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonwebtoken@^9.0.2, jsonwebtoken@~9.0.0: +jsonwebtoken@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== @@ -7559,10 +7540,10 @@ statuses@~1.5.0: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -stream-chat-react-native-core@6.7.4: - version "6.7.4" - resolved "https://registry.yarnpkg.com/stream-chat-react-native-core/-/stream-chat-react-native-core-6.7.4.tgz#9709465e161e32cf358034a82c284cc16369397a" - integrity sha512-YCAXBfdbazFIpO1EI9Czd2QYaFCJX+i9q710L3xPB4mRuaNl2SL8kH+RTj4Ur9Fyl3u1fcDI+1o/iYnaap1Uwg== +stream-chat-react-native-core@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/stream-chat-react-native-core/-/stream-chat-react-native-core-7.0.0.tgz#ba5439c9a446713356105a40c7d2f90c3ccbf4a3" + integrity sha512-qjjukVUXl13/cQDCovTAUHMUXgweg6fhh0we2t+C3RI3gN0AaiXMpzejA6RSuArBtezV4AB/mv9BoT7BRTzqeA== dependencies: "@gorhom/bottom-sheet" "^5.1.1" dayjs "1.10.5" @@ -7575,7 +7556,7 @@ stream-chat-react-native-core@6.7.4: path "0.12.7" react-native-markdown-package "1.8.2" react-native-url-polyfill "^1.3.0" - stream-chat "^8.57.6" + stream-chat "^9.0.0" use-sync-external-store "^1.4.0" "stream-chat-react-native-core@link:../../package": @@ -7586,21 +7567,6 @@ stream-chat-react-native-core@6.7.4: version "0.0.0" uid "" -stream-chat@^8.57.6: - version "8.60.0" - resolved "https://registry.yarnpkg.com/stream-chat/-/stream-chat-8.60.0.tgz#b67d4fbb185da53fb8ac5fc5759986d6ad7e19a3" - integrity sha512-7FpO7Wno++r+n+x9aFuXtGYtNO06CIMd2Bxe3doYZLhMfS0nuaXloeFlGcMT0r4U/6bnguz1qQdDJUPNQAS8bQ== - dependencies: - "@babel/runtime" "^7.27.0" - "@types/jsonwebtoken" "~9.0.0" - "@types/ws" "^7.4.0" - axios "^1.6.0" - base64-js "^1.5.1" - form-data "^4.0.0" - isomorphic-ws "^4.0.1" - jsonwebtoken "~9.0.0" - ws "^7.5.10" - stream-chat@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/stream-chat/-/stream-chat-9.0.0.tgz#cb22dcb8b7f070c623a13b6b75b212d560534d6c" diff --git a/examples/TypeScriptMessaging/android/app/build.gradle b/examples/TypeScriptMessaging/android/app/build.gradle index 0da2735031..d2fcd02d00 100644 --- a/examples/TypeScriptMessaging/android/app/build.gradle +++ b/examples/TypeScriptMessaging/android/app/build.gradle @@ -120,8 +120,8 @@ dependencies { // For React native video implementation("androidx.appcompat:appcompat:1.0.0") // For animated GIF support - implementation('com.facebook.fresco:animated-gif:2.6.0') + implementation('com.facebook.fresco:animated-gif:3.6.0') // For WebP support, including animated WebP - implementation('com.facebook.fresco:animated-webp:2.6.0') - implementation('com.facebook.fresco:webpsupport:2.6.0') + implementation('com.facebook.fresco:animated-webp:3.6.0') + implementation('com.facebook.fresco:webpsupport:3.6.0') } diff --git a/examples/TypeScriptMessaging/ios/Podfile.lock b/examples/TypeScriptMessaging/ios/Podfile.lock index 3886d3a36d..d9be70d483 100644 --- a/examples/TypeScriptMessaging/ios/Podfile.lock +++ b/examples/TypeScriptMessaging/ios/Podfile.lock @@ -2039,7 +2039,7 @@ PODS: - ReactCommon/turbomodule/core - Yoga - SocketRocket (0.7.1) - - stream-chat-react-native (6.6.8): + - stream-chat-react-native (7.0.0): - DoubleConversion - glog - hermes-engine @@ -2404,7 +2404,7 @@ SPEC CHECKSUMS: RNShare: 56b5431c60e1e9ee167191f4f327471af1c2941a RNSVG: 8126581b369adf6a0004b6a6cab1a55e3002d5b0 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - stream-chat-react-native: f394c3690415a9ad3c3ab741da3f0e72660de074 + stream-chat-react-native: ad7b0924fab4b907f3ac17210322f8b435affe80 Yoga: afd04ff05ebe0121a00c468a8a3c8080221cb14c PODFILE CHECKSUM: 6b7a4b74915b42bfe4ffddaf67cbf5e7a2bfeab3 diff --git a/examples/TypeScriptMessaging/yarn.lock b/examples/TypeScriptMessaging/yarn.lock index 96279a2958..7076242572 100644 --- a/examples/TypeScriptMessaging/yarn.lock +++ b/examples/TypeScriptMessaging/yarn.lock @@ -996,13 +996,6 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762" - integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== - dependencies: - regenerator-runtime "^0.14.0" - "@babel/template@^7.25.0", "@babel/template@^7.25.9", "@babel/template@^7.26.9", "@babel/template@^7.3.3": version "7.26.9" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.26.9.tgz#4577ad3ddf43d194528cff4e1fa6b232fa609bb2" @@ -2054,7 +2047,7 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/jsonwebtoken@^9.0.8", "@types/jsonwebtoken@~9.0.0": +"@types/jsonwebtoken@^9.0.8": version "9.0.9" resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz#a4c3a446c0ebaaf467a58398382616f416345fb3" integrity sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ== @@ -2105,13 +2098,6 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== -"@types/ws@^7.4.0": - version "7.4.7" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" - integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== - dependencies: - "@types/node" "*" - "@types/ws@^8.5.14": version "8.18.0" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.0.tgz#8a2ec491d6f0685ceaab9a9b7ff44146236993b5" @@ -4671,11 +4657,6 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== - isomorphic-ws@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" @@ -5220,7 +5201,7 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonwebtoken@^9.0.2, jsonwebtoken@~9.0.0: +jsonwebtoken@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== @@ -6945,10 +6926,10 @@ statuses@~1.5.0: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -stream-chat-react-native-core@6.7.4: - version "6.7.4" - resolved "https://registry.yarnpkg.com/stream-chat-react-native-core/-/stream-chat-react-native-core-6.7.4.tgz#9709465e161e32cf358034a82c284cc16369397a" - integrity sha512-YCAXBfdbazFIpO1EI9Czd2QYaFCJX+i9q710L3xPB4mRuaNl2SL8kH+RTj4Ur9Fyl3u1fcDI+1o/iYnaap1Uwg== +stream-chat-react-native-core@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/stream-chat-react-native-core/-/stream-chat-react-native-core-7.0.0.tgz#ba5439c9a446713356105a40c7d2f90c3ccbf4a3" + integrity sha512-qjjukVUXl13/cQDCovTAUHMUXgweg6fhh0we2t+C3RI3gN0AaiXMpzejA6RSuArBtezV4AB/mv9BoT7BRTzqeA== dependencies: "@gorhom/bottom-sheet" "^5.1.1" dayjs "1.10.5" @@ -6961,7 +6942,7 @@ stream-chat-react-native-core@6.7.4: path "0.12.7" react-native-markdown-package "1.8.2" react-native-url-polyfill "^1.3.0" - stream-chat "^8.57.6" + stream-chat "^9.0.0" use-sync-external-store "^1.4.0" "stream-chat-react-native-core@link:../../package": @@ -6972,21 +6953,6 @@ stream-chat-react-native-core@6.7.4: version "0.0.0" uid "" -stream-chat@^8.57.6: - version "8.60.0" - resolved "https://registry.yarnpkg.com/stream-chat/-/stream-chat-8.60.0.tgz#b67d4fbb185da53fb8ac5fc5759986d6ad7e19a3" - integrity sha512-7FpO7Wno++r+n+x9aFuXtGYtNO06CIMd2Bxe3doYZLhMfS0nuaXloeFlGcMT0r4U/6bnguz1qQdDJUPNQAS8bQ== - dependencies: - "@babel/runtime" "^7.27.0" - "@types/jsonwebtoken" "~9.0.0" - "@types/ws" "^7.4.0" - axios "^1.6.0" - base64-js "^1.5.1" - form-data "^4.0.0" - isomorphic-ws "^4.0.1" - jsonwebtoken "~9.0.0" - ws "^7.5.10" - stream-chat@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/stream-chat/-/stream-chat-9.0.0.tgz#cb22dcb8b7f070c623a13b6b75b212d560534d6c" diff --git a/package/expo-package/yarn.lock b/package/expo-package/yarn.lock index 3b073df7e5..78f6621cdb 100644 --- a/package/expo-package/yarn.lock +++ b/package/expo-package/yarn.lock @@ -1101,13 +1101,6 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762" - integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== - dependencies: - regenerator-runtime "^0.14.0" - "@babel/runtime@^7.8.4": version "7.26.9" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.9.tgz#aa4c6facc65b9cb3f87d75125ffd47781b475433" @@ -1795,7 +1788,7 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== -"@types/jsonwebtoken@~9.0.0": +"@types/jsonwebtoken@^9.0.8": version "9.0.9" resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz#a4c3a446c0ebaaf467a58398382616f416345fb3" integrity sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ== @@ -1827,10 +1820,10 @@ dependencies: csstype "^3.0.2" -"@types/ws@^7.4.0": - version "7.4.7" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" - integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== +"@types/ws@^8.5.14": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" + integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== dependencies: "@types/node" "*" @@ -3357,10 +3350,10 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== +isomorphic-ws@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" + integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== jackspeak@^3.1.2: version "3.4.0" @@ -3467,7 +3460,7 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonwebtoken@~9.0.0: +jsonwebtoken@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== @@ -3596,6 +3589,11 @@ linkifyjs@^4.1.1: resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.1.1.tgz#73d427e3bbaaf4ca8e71c589ad4ffda11a9a5fde" integrity sha512-zFN/CTVmbcVef+WaDXT63dNzzkfRBKT1j464NJQkV7iSgJU0sLBus9W0HBwnXK13/hf168pbrx/V/bjEHOXNHA== +linkifyjs@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.2.0.tgz#9dd30222b9cbabec9c950e725ec00031c7fa3f08" + integrity sha512-pCj3PrQyATaoTYKHrgWRF3SJwsm61udVh+vuls/Rl6SptiDhgE7ziUIudAedRY9QEfynmM7/RmLEfPUyw1HPCw== + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -4780,10 +4778,10 @@ stream-buffers@2.2.x, stream-buffers@~2.2.0: resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" integrity sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg== -stream-chat-react-native-core@6.7.4: - version "6.7.4" - resolved "https://registry.yarnpkg.com/stream-chat-react-native-core/-/stream-chat-react-native-core-6.7.4.tgz#9709465e161e32cf358034a82c284cc16369397a" - integrity sha512-YCAXBfdbazFIpO1EI9Czd2QYaFCJX+i9q710L3xPB4mRuaNl2SL8kH+RTj4Ur9Fyl3u1fcDI+1o/iYnaap1Uwg== +stream-chat-react-native-core@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/stream-chat-react-native-core/-/stream-chat-react-native-core-7.0.0.tgz#ba5439c9a446713356105a40c7d2f90c3ccbf4a3" + integrity sha512-qjjukVUXl13/cQDCovTAUHMUXgweg6fhh0we2t+C3RI3gN0AaiXMpzejA6RSuArBtezV4AB/mv9BoT7BRTzqeA== dependencies: "@gorhom/bottom-sheet" "^5.1.1" dayjs "1.10.5" @@ -4796,23 +4794,23 @@ stream-chat-react-native-core@6.7.4: path "0.12.7" react-native-markdown-package "1.8.2" react-native-url-polyfill "^1.3.0" - stream-chat "^8.57.6" + stream-chat "^9.0.0" use-sync-external-store "^1.4.0" -stream-chat@^8.57.6: - version "8.60.0" - resolved "https://registry.yarnpkg.com/stream-chat/-/stream-chat-8.60.0.tgz#b67d4fbb185da53fb8ac5fc5759986d6ad7e19a3" - integrity sha512-7FpO7Wno++r+n+x9aFuXtGYtNO06CIMd2Bxe3doYZLhMfS0nuaXloeFlGcMT0r4U/6bnguz1qQdDJUPNQAS8bQ== +stream-chat@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/stream-chat/-/stream-chat-9.0.0.tgz#cb22dcb8b7f070c623a13b6b75b212d560534d6c" + integrity sha512-I4+/DEp7dP3WBgRmqHaLswL+Y2fyQkUWJhYBS5zx4bpu1cYM6WEir9HYjToDNuJjltqa/FFIEF/tMPWr7iTc0A== dependencies: - "@babel/runtime" "^7.27.0" - "@types/jsonwebtoken" "~9.0.0" - "@types/ws" "^7.4.0" + "@types/jsonwebtoken" "^9.0.8" + "@types/ws" "^8.5.14" axios "^1.6.0" base64-js "^1.5.1" form-data "^4.0.0" - isomorphic-ws "^4.0.1" - jsonwebtoken "~9.0.0" - ws "^7.5.10" + isomorphic-ws "^5.0.0" + jsonwebtoken "^9.0.2" + linkifyjs "^4.2.0" + ws "^8.18.1" "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" @@ -5283,16 +5281,16 @@ ws@^6.2.3: dependencies: async-limiter "~1.0.0" -ws@^7.5.10: - version "7.5.10" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" - integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== - ws@^8.12.1: version "8.17.1" resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== +ws@^8.18.1: + version "8.18.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.2.tgz#42738b2be57ced85f46154320aabb51ab003705a" + integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ== + xcode@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/xcode/-/xcode-3.0.1.tgz#3efb62aac641ab2c702458f9a0302696146aa53c" diff --git a/package/native-package/src/optionalDependencies/takePhoto.ts b/package/native-package/src/optionalDependencies/takePhoto.ts index 914dec735b..a508624217 100644 --- a/package/native-package/src/optionalDependencies/takePhoto.ts +++ b/package/native-package/src/optionalDependencies/takePhoto.ts @@ -88,8 +88,8 @@ export const takePhoto = ImagePicker const date = new Date().toISOString().replace(clearFilter, '_'); return { cancelled: false, - name: 'video_recording_' + date + '.' + asset.fileName.split('.').pop(), - size: asset.size, + name: 'image_' + date + '.' + asset.uri.split('.').pop(), + size: asset.fileSize, type: asset.type, uri: asset.uri, ...size, diff --git a/package/native-package/yarn.lock b/package/native-package/yarn.lock index 91c31ab4ef..921310dbef 100644 --- a/package/native-package/yarn.lock +++ b/package/native-package/yarn.lock @@ -773,13 +773,6 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.27.0": - version "7.27.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762" - integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== - dependencies: - regenerator-runtime "^0.14.0" - "@babel/runtime@^7.8.4": version "7.25.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.0.tgz#3af9a91c1b739c569d5d80cc917280919c544ecb" @@ -1252,7 +1245,7 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jsonwebtoken@~9.0.0": +"@types/jsonwebtoken@^9.0.8": version "9.0.9" resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz#a4c3a446c0ebaaf467a58398382616f416345fb3" integrity sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ== @@ -1289,10 +1282,10 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== -"@types/ws@^7.4.0": - version "7.4.7" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" - integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== +"@types/ws@^8.5.14": + version "8.18.1" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9" + integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg== dependencies: "@types/node" "*" @@ -2240,10 +2233,10 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== +isomorphic-ws@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" + integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== istanbul-lib-coverage@^3.2.0: version "3.2.2" @@ -2427,7 +2420,7 @@ json5@^2.2.3: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -jsonwebtoken@~9.0.0: +jsonwebtoken@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== @@ -2483,6 +2476,11 @@ linkifyjs@^4.1.1: resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.1.1.tgz#73d427e3bbaaf4ca8e71c589ad4ffda11a9a5fde" integrity sha512-zFN/CTVmbcVef+WaDXT63dNzzkfRBKT1j464NJQkV7iSgJU0sLBus9W0HBwnXK13/hf168pbrx/V/bjEHOXNHA== +linkifyjs@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-4.2.0.tgz#9dd30222b9cbabec9c950e725ec00031c7fa3f08" + integrity sha512-pCj3PrQyATaoTYKHrgWRF3SJwsm61udVh+vuls/Rl6SptiDhgE7ziUIudAedRY9QEfynmM7/RmLEfPUyw1HPCw== + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -3452,10 +3450,10 @@ statuses@~1.5.0: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -stream-chat-react-native-core@6.7.4: - version "6.7.4" - resolved "https://registry.yarnpkg.com/stream-chat-react-native-core/-/stream-chat-react-native-core-6.7.4.tgz#9709465e161e32cf358034a82c284cc16369397a" - integrity sha512-YCAXBfdbazFIpO1EI9Czd2QYaFCJX+i9q710L3xPB4mRuaNl2SL8kH+RTj4Ur9Fyl3u1fcDI+1o/iYnaap1Uwg== +stream-chat-react-native-core@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/stream-chat-react-native-core/-/stream-chat-react-native-core-7.0.0.tgz#ba5439c9a446713356105a40c7d2f90c3ccbf4a3" + integrity sha512-qjjukVUXl13/cQDCovTAUHMUXgweg6fhh0we2t+C3RI3gN0AaiXMpzejA6RSuArBtezV4AB/mv9BoT7BRTzqeA== dependencies: "@gorhom/bottom-sheet" "^5.1.1" dayjs "1.10.5" @@ -3468,23 +3466,23 @@ stream-chat-react-native-core@6.7.4: path "0.12.7" react-native-markdown-package "1.8.2" react-native-url-polyfill "^1.3.0" - stream-chat "^8.57.6" + stream-chat "^9.0.0" use-sync-external-store "^1.4.0" -stream-chat@^8.57.6: - version "8.60.0" - resolved "https://registry.yarnpkg.com/stream-chat/-/stream-chat-8.60.0.tgz#b67d4fbb185da53fb8ac5fc5759986d6ad7e19a3" - integrity sha512-7FpO7Wno++r+n+x9aFuXtGYtNO06CIMd2Bxe3doYZLhMfS0nuaXloeFlGcMT0r4U/6bnguz1qQdDJUPNQAS8bQ== +stream-chat@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/stream-chat/-/stream-chat-9.0.0.tgz#cb22dcb8b7f070c623a13b6b75b212d560534d6c" + integrity sha512-I4+/DEp7dP3WBgRmqHaLswL+Y2fyQkUWJhYBS5zx4bpu1cYM6WEir9HYjToDNuJjltqa/FFIEF/tMPWr7iTc0A== dependencies: - "@babel/runtime" "^7.27.0" - "@types/jsonwebtoken" "~9.0.0" - "@types/ws" "^7.4.0" + "@types/jsonwebtoken" "^9.0.8" + "@types/ws" "^8.5.14" axios "^1.6.0" base64-js "^1.5.1" form-data "^4.0.0" - isomorphic-ws "^4.0.1" - jsonwebtoken "~9.0.0" - ws "^7.5.10" + isomorphic-ws "^5.0.0" + jsonwebtoken "^9.0.2" + linkifyjs "^4.2.0" + ws "^8.18.1" string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" @@ -3740,6 +3738,11 @@ ws@^7.5.10: resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== +ws@^8.18.1: + version "8.18.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.2.tgz#42738b2be57ced85f46154320aabb51ab003705a" + integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ== + y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" diff --git a/package/src/components/Attachment/FileAttachmentGroup.tsx b/package/src/components/Attachment/FileAttachmentGroup.tsx index dc9247b02a..507feb998b 100644 --- a/package/src/components/Attachment/FileAttachmentGroup.tsx +++ b/package/src/components/Attachment/FileAttachmentGroup.tsx @@ -39,7 +39,9 @@ type FilesToDisplayType = Attachment & { const FileAttachmentGroupWithContext = (props: FileAttachmentGroupPropsWithContext) => { const { Attachment, AudioAttachment, files, messageId, styles: stylesProp = {} } = props; - const [filesToDisplay, setFilesToDisplay] = useState([]); + const [filesToDisplay, setFilesToDisplay] = useState(() => + files.map((file) => ({ ...file, duration: file.duration || 0, paused: true, progress: 0 })), + ); useEffect(() => { setFilesToDisplay( diff --git a/package/src/components/ChannelList/hooks/usePaginatedChannels.ts b/package/src/components/ChannelList/hooks/usePaginatedChannels.ts index d0ef342002..7c75acbbdd 100644 --- a/package/src/components/ChannelList/hooks/usePaginatedChannels.ts +++ b/package/src/components/ChannelList/hooks/usePaginatedChannels.ts @@ -282,7 +282,7 @@ export const usePaginatedChannels = ({ // ready. I do not like providing a way to set the ready state, as it should be managed // in the LLC entirely. Once we move offline support to the LLC, we can remove this check // too as it'll be redundant. - pagination?.isLoading || (!channelListInitialized && channels.length === 0), + pagination?.isLoading || (!channelListInitialized && channels.length === 0 && !error), loadingNextPage: pagination?.isLoadingNext, loadNextPage: channelManager.loadNext, refreshing: activeQueryType === 'refresh', diff --git a/package/src/components/Chat/hooks/useAppSettings.ts b/package/src/components/Chat/hooks/useAppSettings.ts index f51a34931e..ce61f8f0df 100644 --- a/package/src/components/Chat/hooks/useAppSettings.ts +++ b/package/src/components/Chat/hooks/useAppSettings.ts @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import { useEffect, useRef, useState } from 'react'; import type { AppSettingsAPIResponse, StreamChat } from 'stream-chat'; @@ -12,9 +12,18 @@ export const useAppSettings = ( initialisedDatabase: boolean, ): AppSettingsAPIResponse | null => { const [appSettings, setAppSettings] = useState(null); + const appSettingsPromise = useRef>(null); + const fetchedAppSettings = useRef(false); const isMounted = useIsMountedRef(); useEffect(() => { + const fetchAppSettings = () => { + if (appSettingsPromise.current) { + return appSettingsPromise.current; + } + appSettingsPromise.current = client.getAppSettings(); + return appSettingsPromise.current; + }; /** * Fetches app settings from the backend when offline support is disabled. */ @@ -24,9 +33,10 @@ export const useAppSettings = ( } try { - const appSettings = await client.getAppSettings(); + const appSettings = await fetchAppSettings(); if (isMounted.current) { setAppSettings(appSettings); + fetchedAppSettings.current = true; } } catch (error: unknown) { if (error instanceof Error) { @@ -56,9 +66,10 @@ export const useAppSettings = ( } try { - const appSettings = await client.getAppSettings(); - if (isMounted.current) { + const appSettings = await fetchAppSettings(); + if (isMounted.current && appSettings) { setAppSettings(appSettings); + fetchedAppSettings.current = true; await dbApi.upsertAppSettings({ appSettings, currentUserId: client.userID as string, @@ -72,6 +83,10 @@ export const useAppSettings = ( }; async function enforeAppSettings() { + if (fetchedAppSettings.current) { + return; + } + if (enableOfflineSupport) { await enforceAppSettingsWithOfflineSupport(); } else { diff --git a/package/src/components/Message/Message.tsx b/package/src/components/Message/Message.tsx index bdb8f7062b..0e10894ccf 100644 --- a/package/src/components/Message/Message.tsx +++ b/package/src/components/Message/Message.tsx @@ -135,9 +135,12 @@ export type MessagePropsWithContext = Pick< > & Pick & Partial< - Omit + Omit< + MessageContextValue, + 'groupStyles' | 'handleReaction' | 'message' | 'isMessageAIGenerated' | 'readBy' + > > & - Pick & + Pick & Pick< MessagesContextValue, | 'sendReaction' @@ -262,8 +265,8 @@ const MessageWithContext = (props: MessagePropsWithContext) => { t, threadList = false, updateMessage, + readBy, } = props; - const { read } = useChannelContext(); const isMessageAIGenerated = messagesContext.isMessageAIGenerated; const isAIGenerated = useMemo( () => isMessageAIGenerated(message), @@ -278,7 +281,6 @@ const MessageWithContext = (props: MessagePropsWithContext) => { screenPadding, }, } = useTheme(); - const readBy = useMemo(() => getReadState(message, read), [message, read]); const showMessageOverlay = async (showMessageReactions = false, selectedReaction?: string) => { await dismissKeyboard(); @@ -759,6 +761,7 @@ const areEqual = (prevProps: MessagePropsWithContext, nextProps: MessagePropsWit message: prevMessage, messagesContext: prevMessagesContext, showUnreadUnderlay: prevShowUnreadUnderlay, + readBy: prevReadBy, t: prevT, } = prevProps; const { @@ -771,9 +774,15 @@ const areEqual = (prevProps: MessagePropsWithContext, nextProps: MessagePropsWit message: nextMessage, messagesContext: nextMessagesContext, showUnreadUnderlay: nextShowUnreadUnderlay, + readBy: nextReadBy, t: nextT, } = nextProps; + const readByEqual = prevReadBy === nextReadBy; + if (!readByEqual) { + return false; + } + const membersEqual = Object.keys(prevMembers).length === Object.keys(nextMembers).length; if (!membersEqual) { return false; @@ -925,12 +934,14 @@ export type MessageProps = Partial< * @example ./Message.md */ export const Message = (props: MessageProps) => { - const { channel, enforceUniqueReaction, members } = useChannelContext(); + const { message } = props; + const { channel, enforceUniqueReaction, members, read } = useChannelContext(); const chatContext = useChatContext(); const { dismissKeyboard } = useKeyboardContext(); const messagesContext = useMessagesContext(); const { openThread } = useThreadContext(); const { t } = useTranslationContext(); + const readBy = useMemo(() => getReadState(message, read), [message, read]); return ( { members, messagesContext, openThread, + readBy, t, }} {...props} diff --git a/package/src/components/Message/MessageSimple/MessageSimple.tsx b/package/src/components/Message/MessageSimple/MessageSimple.tsx index ca2e7f0b74..52a416b5d6 100644 --- a/package/src/components/Message/MessageSimple/MessageSimple.tsx +++ b/package/src/components/Message/MessageSimple/MessageSimple.tsx @@ -90,7 +90,16 @@ export type MessageSimplePropsWithContext = Pick< | 'reactionListPosition' | 'ReactionListTop' | 'setQuotedMessageState' - >; + > & { + /** + * Will determine whether the swipeable wrapper is always rendered for each + * message. If set to false, the animated wrapper will be rendered only when + * a swiping gesture is active and not otherwise. + * Since stateful components would lose their state if we remount them while + * an animation is happening, this should always be set to true in those instances. + */ + shouldRenderSwipeableWrapper: boolean; + }; const MessageSimpleWithContext = (props: MessageSimplePropsWithContext) => { const [messageContentWidth, setMessageContentWidth] = useState(0); @@ -123,6 +132,7 @@ const MessageSimpleWithContext = (props: MessageSimplePropsWithContext) => { ReactionListTop, setQuotedMessageState, showMessageStatus, + shouldRenderSwipeableWrapper, } = props; const { @@ -202,7 +212,9 @@ const MessageSimpleWithContext = (props: MessageSimplePropsWithContext) => { const translateX = useSharedValue(0); const touchStart = useSharedValue<{ x: number; y: number } | null>(null); const isSwiping = useSharedValue(false); - const [isBeingSwiped, setIsBeingSwiped] = useState(false); + const [shouldRenderAnimatedWrapper, setShouldRenderAnimatedWrapper] = useState( + shouldRenderSwipeableWrapper, + ); const onSwipeToReply = useCallback(() => { clearQuotedMessageState(); @@ -233,7 +245,9 @@ const MessageSimpleWithContext = (props: MessageSimplePropsWithContext) => { if (isHorizontalPanning) { state.activate(); isSwiping.value = true; - runOnJS(setIsBeingSwiped)(true); + if (!shouldRenderSwipeableWrapper) { + runOnJS(setShouldRenderAnimatedWrapper)(isSwiping.value); + } } else { state.fail(); } @@ -253,6 +267,7 @@ const MessageSimpleWithContext = (props: MessageSimplePropsWithContext) => { runOnJS(triggerHaptic)('impactMedium'); } } + isSwiping.value = false; translateX.value = withSpring( 0, { @@ -262,41 +277,44 @@ const MessageSimpleWithContext = (props: MessageSimplePropsWithContext) => { stiffness: 1, }, () => { - isSwiping.value = false; - runOnJS(setIsBeingSwiped)(false); + if (!shouldRenderSwipeableWrapper) { + runOnJS(setShouldRenderAnimatedWrapper)(isSwiping.value); + } }, ); }), - [isSwiping, messageSwipeToReplyHitSlop, onSwipeToReply, touchStart, translateX, triggerHaptic], + [ + isSwiping, + messageSwipeToReplyHitSlop, + onSwipeToReply, + touchStart, + translateX, + triggerHaptic, + shouldRenderSwipeableWrapper, + ], ); const messageBubbleAnimatedStyle = useAnimatedStyle( - () => - isSwiping.value - ? { - transform: [{ translateX: translateX.value }], - } - : {}, + () => ({ + transform: [{ translateX: translateX.value }], + }), [], ); const swipeContentAnimatedStyle = useAnimatedStyle( - () => - isSwiping.value - ? { - opacity: interpolate(translateX.value, [0, THRESHOLD], [0, 1]), - transform: [ - { - translateX: interpolate( - translateX.value, - [0, THRESHOLD], - [-THRESHOLD, 0], - Extrapolation.CLAMP, - ), - }, - ], - } - : {}, + () => ({ + opacity: interpolate(translateX.value, [0, THRESHOLD], [0, 1]), + transform: [ + { + translateX: interpolate( + translateX.value, + [0, THRESHOLD], + [-THRESHOLD, 0], + Extrapolation.CLAMP, + ), + }, + ], + }), [], ); @@ -332,7 +350,7 @@ const MessageSimpleWithContext = (props: MessageSimplePropsWithContext) => { () => ( - {isBeingSwiped ? ( + {shouldRenderAnimatedWrapper ? ( <> { [ MessageSwipeContent, contentWrapper, - isBeingSwiped, + shouldRenderAnimatedWrapper, messageBubbleAnimatedStyle, messageSwipeToReplyHitSlop, renderMessageBubble, @@ -592,6 +610,7 @@ export const MessageSimple = (props: MessageSimpleProps) => { onlyEmojis, otherAttachments, showMessageStatus, + isMessageAIGenerated, } = useMessageContext(); const { clearQuotedMessageState, @@ -613,6 +632,11 @@ export const MessageSimple = (props: MessageSimpleProps) => { ReactionListTop, setQuotedMessageState, } = useMessagesContext(); + const isAIGenerated = useMemo( + () => isMessageAIGenerated(message), + [message, isMessageAIGenerated], + ); + const shouldRenderSwipeableWrapper = (message?.attachments || []).length > 0 || isAIGenerated; return ( { reactionListPosition, ReactionListTop, setQuotedMessageState, + shouldRenderSwipeableWrapper, showMessageStatus, }} {...props} diff --git a/package/src/hooks/useStateStore.ts b/package/src/hooks/useStateStore.ts index 197fe2141e..94e560fe14 100644 --- a/package/src/hooks/useStateStore.ts +++ b/package/src/hooks/useStateStore.ts @@ -1,6 +1,9 @@ -import { useEffect, useState } from 'react'; +import { useCallback, useMemo } from 'react'; import type { StateStore } from 'stream-chat'; +import { useSyncExternalStore } from 'use-sync-external-store/shim'; + +const noop = () => {}; export function useStateStore< T extends Record, @@ -14,22 +17,48 @@ export function useStateStore< T extends Record, O extends Readonly | Readonly>, >(store: StateStore | undefined, selector: (v: T) => O) { - const [state, setState] = useState(() => { - if (!store) { - return undefined; - } - return selector(store.getLatestValue()); - }); + const wrappedSubscription = useCallback( + (onStoreChange: () => void) => { + const unsubscribe = store?.subscribeWithSelector(selector, onStoreChange); + return unsubscribe ?? noop; + }, + [store, selector], + ); + + const wrappedSnapshot = useMemo(() => { + let cachedTuple: [T, O]; + + return () => { + const currentValue = store?.getLatestValue(); + + if (!currentValue) return undefined; - useEffect(() => { - if (!store) { - return; - } + // store value hasn't changed, no need to compare individual values + if (cachedTuple && cachedTuple[0] === currentValue) { + return cachedTuple[1]; + } - const unsubscribe = store.subscribeWithSelector(selector, setState); + const newlySelected = selector(currentValue); - return unsubscribe; + // store value changed but selected values wouldn't have to, double-check selected + if (cachedTuple) { + let selectededAreEqualToCached = true; + + for (const key in cachedTuple[1]) { + if (cachedTuple[1][key] === newlySelected[key]) continue; + selectededAreEqualToCached = false; + break; + } + + if (selectededAreEqualToCached) return cachedTuple[1]; + } + + cachedTuple = [currentValue, newlySelected]; + return cachedTuple[1]; + }; }, [store, selector]); + const state = useSyncExternalStore(wrappedSubscription, wrappedSnapshot); + return state; }