From 22a2d658673da8fb3944b1ba4ceae9d0d6d0f39c Mon Sep 17 00:00:00 2001 From: chrisnojima Date: Sun, 15 Jan 2023 15:04:22 -0500 Subject: [PATCH 1/6] WIP lots of temp code --- .../conversation/list-area/index.native.tsx | 67 ++++++++++++------- .../conversation/messages/text/wrapper.tsx | 42 +++++++++--- .../conversation/messages/wrapper/wrapper.tsx | 17 ++++- shared/ios/Keybase.xcodeproj/project.pbxproj | 6 +- shared/ios/Podfile | 2 +- shared/ios/Podfile.lock | 35 +++++++++- shared/local-debug.native.tsx | 2 +- shared/reducers/chat2.tsx | 1 + shared/todo.txt | 1 + 9 files changed, 133 insertions(+), 40 deletions(-) create mode 100644 shared/todo.txt diff --git a/shared/chat/conversation/list-area/index.native.tsx b/shared/chat/conversation/list-area/index.native.tsx index 501f9d8cda49..28bb3f2f3807 100644 --- a/shared/chat/conversation/list-area/index.native.tsx +++ b/shared/chat/conversation/list-area/index.native.tsx @@ -177,6 +177,8 @@ const useScrolling = (p: { } } +const GLOBALREDC = new Map() + const ConversationList = React.memo(function ConversationList(p: { conversationIDKey: Types.ConversationIDKey }) { @@ -192,15 +194,18 @@ const ConversationList = React.memo(function ConversationList(p: { return [..._messageOrdinals].reverse() }, [_messageOrdinals]) + // TEMP don't ever mutate the list, see if that fixes it + // const TEMPRef = React.useRef(messageOrdinalsTEMP) + // if (!TEMPRef.current.length && messageOrdinalsTEMP.length) { + // TEMPRef.current = messageOrdinalsTEMP + // } + // const messageOrdinals = TEMPRef.current + const listRef = React.useRef | null>(null) const {markInitiallyLoadedThreadAsRead} = Hooks.useActions({conversationIDKey}) - const keyExtractor = React.useCallback( - (_item: ItemType, index: number) => { - const ordinal = messageOrdinals[index] - return String(ordinal) - }, - [messageOrdinals] - ) + const keyExtractor = React.useCallback((ordinal: ItemType) => { + return String(ordinal) + }, []) const renderItem = React.useCallback( (info: ListRenderItemInfo | null | undefined) => { const index = info?.index ?? 0 @@ -231,27 +236,36 @@ const ConversationList = React.memo(function ConversationList(p: { [messageOrdinals, conversationIDKey, messageTypeMap] ) - const recycleTypeRef = React.useRef(new Map()) - React.useEffect(() => { - recycleTypeRef.current = new Map() - }, [conversationIDKey]) + // const recycleTypeRef = React.useRef(new Map()) + // React.useEffect(() => { + // recycleTypeRef.current = new Map() + // }, [conversationIDKey]) + // const setRecycleType = React.useCallback((ordinal: Types.Ordinal, type: string) => { + // recycleTypeRef.current.set(ordinal, type) + // }, []) const setRecycleType = React.useCallback((ordinal: Types.Ordinal, type: string) => { - recycleTypeRef.current.set(ordinal, type) + let sub = GLOBALREDC.get(conversationIDKey) + if (!sub) { + sub = GLOBALREDC.set(conversationIDKey, new Map()) + } + sub.set(ordinal, type) }, []) - // put this back when https://github.com/Shopify/flash-list/issues/600 is figured out - // const getItemType = React.useCallback( - // (ordinal: Types.Ordinal, idx: number) => { - // if (!ordinal) { - // return 'null' - // } - // if (messageOrdinals.length - 1 === idx) { - // return 'sent' - // } - // return recycleTypeRef.current.get(ordinal) ?? messageTypeMap?.get(ordinal) ?? 'text' - // }, - // [messageOrdinals, messageTypeMap] - // ) + const getItemType = React.useCallback( + (ordinal: Types.Ordinal, _idx: number) => { + if (!ordinal) { + return 'null' + } + // this messing it up? no, but keep off for now + // if (messageOrdinals.length - 1 === idx) { + // return 'sent' + // } + // console.log('aaa recycletype', recycleTypeRef.current) + // return recycleTypeRef.current.get(ordinal) ?? messageTypeMap?.get(ordinal) ?? 'text' + return /*GLOBALREDC.get(conversationIDKey)?.get(ordinal) ??*/ messageTypeMap?.get(ordinal) ?? 'text' + }, + [/*messageOrdinals, */ messageTypeMap, conversationIDKey] + ) const {scrollToCentered, scrollToBottom, onEndReached} = useScrolling({ centeredOrdinal, @@ -272,6 +286,7 @@ const ConversationList = React.memo(function ConversationList(p: { markInitiallyLoadedThreadAsRead() } }, [markInitiallyLoadedThreadAsRead]) + // console.log('aaa render', messageOrdinals) return ( @@ -288,7 +303,7 @@ const ConversationList = React.memo(function ConversationList(p: { overScrollMode="never" contentContainerStyle={styles.contentContainer} data={messageOrdinals} - getItemType={undefined /*getItemType*/} + getItemType={getItemType} inverted={true} renderItem={renderItem} maintainVisibleContentPosition={maintainVisibleContentPosition} diff --git a/shared/chat/conversation/messages/text/wrapper.tsx b/shared/chat/conversation/messages/text/wrapper.tsx index a434e2c8aeaf..d188ebccc869 100644 --- a/shared/chat/conversation/messages/text/wrapper.tsx +++ b/shared/chat/conversation/messages/text/wrapper.tsx @@ -59,20 +59,24 @@ const WrapperText = React.memo(function WrapperText(p: Props) { const conversationIDKey = React.useContext(ConvoIDContext) const {ordinal} = p const common = useCommon(ordinal) - const {showCenteredHighlight, toggleShowingPopup} = common + const {showCenteredHighlight, toggleShowingPopup, type} = common const bottomChildren = useBottom(ordinal, showCenteredHighlight, toggleShowingPopup) const reply = useReply(ordinal, showCenteredHighlight) const claim = useClaim(ordinal) - const {isEditing, type, hasReactions} = Container.useSelector(state => { + const {isEditing, textType, hasReactions} = Container.useSelector(state => { const editInfo = Constants.getEditInfo(state, conversationIDKey) const isEditing = !!(editInfo && editInfo.ordinal === ordinal) const m = state.chat2.messageMap.get(conversationIDKey)?.get(ordinal) const errorReason = m?.errorReason - const type = errorReason ? ('error' as const) : !m?.submitState ? ('sent' as const) : ('pending' as const) + const textType = errorReason + ? ('error' as const) + : !m?.submitState + ? ('sent' as const) + : ('pending' as const) const hasReactions = (m?.reactions?.size ?? 0) > 0 - return {hasReactions, isEditing, type} + return {hasReactions, isEditing, textType} }, shallowEqual) const setRecycleType = React.useContext(SetRecycleTypeContext) @@ -83,13 +87,29 @@ const WrapperText = React.memo(function WrapperText(p: Props) { if (hasReactions) { subType += ':reactions' } - if (subType) { - setRecycleType(ordinal, subType) + if (subType.length) { + setRecycleType(ordinal, 'text' + subType) } + const TEMP = React.useRef(0) + const TEMPTYPE = React.useRef('') + React.useEffect(() => { + const oldtype = TEMPTYPE.current + if (TEMP.current) { + console.log( + 'aaa textwrapperrecycle', + TEMP.current, + ordinal, + subType === oldtype ? `SAME ${subType}` : `${subType} != ${oldtype} <<<<<<<<<<<<<<<<<` + ) + } + TEMP.current = ordinal + TEMPTYPE.current = subType + }, [ordinal, subType]) + const style = React.useMemo( - () => getStyle(type, isEditing, showCenteredHighlight), - [type, isEditing, showCenteredHighlight] + () => getStyle(textType, isEditing, showCenteredHighlight), + [textType, isEditing, showCenteredHighlight] ) const children = React.useMemo(() => { @@ -102,6 +122,12 @@ const WrapperText = React.memo(function WrapperText(p: Props) { ) }, [reply, claim, style]) + // due to recycling, we can have items that aren't connected to the list that might have live connectors + // so when we load more etc the entire messagMap could no longer have your item + if (type !== 'text') { + return null + } + return ( {children} diff --git a/shared/chat/conversation/messages/wrapper/wrapper.tsx b/shared/chat/conversation/messages/wrapper/wrapper.tsx index 52292b1c0d62..5f8d569520d4 100644 --- a/shared/chat/conversation/messages/wrapper/wrapper.tsx +++ b/shared/chat/conversation/messages/wrapper/wrapper.tsx @@ -74,7 +74,7 @@ export const useCommon = (ordinal: Types.Ordinal) => { ) : null ) - return {popup, popupAnchor, showCenteredHighlight, showingPopup, toggleShowingPopup} + return {popup, popupAnchor, showCenteredHighlight, showingPopup, toggleShowingPopup, type} } type WMProps = { @@ -459,6 +459,21 @@ export const WrapperMessage = React.memo(function WrapperMessage(p: WMProps) { // passed in context so stable const conversationIDKeyRef = React.useRef(conversationIDKey) const ordinalRef = React.useRef(ordinal) + + // const TEMP = React.useRef(0) + // React.useEffect(() => { + // const ttype = global.DEBUGStore?.store + // ?.getState() + // .chat2.messageMap.get(conversationIDKey) + // ?.get(TEMP.current)?.type + // const otype = global.DEBUGStore?.store + // ?.getState() + // .chat2.messageMap.get(conversationIDKey) + // ?.get(ordinal)?.type + // console.log('aaa Wrapper ordinal recycle', TEMP.current, ttype, ordinal, otype) + // TEMP.current = ordinal + // }, [ordinal]) + React.useEffect(() => { conversationIDKeyRef.current = conversationIDKey ordinalRef.current = ordinal diff --git a/shared/ios/Keybase.xcodeproj/project.pbxproj b/shared/ios/Keybase.xcodeproj/project.pbxproj index 45c8cae7e901..3ac4d23b733a 100644 --- a/shared/ios/Keybase.xcodeproj/project.pbxproj +++ b/shared/ios/Keybase.xcodeproj/project.pbxproj @@ -477,12 +477,14 @@ "${PODS_XCFRAMEWORKS_BUILD_DIR}/Flipper-DoubleConversion/double-conversion.framework/double-conversion", "${PODS_XCFRAMEWORKS_BUILD_DIR}/Flipper-Glog/glog.framework/glog", "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", + "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/hermes.framework/hermes", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/double-conversion.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/glog.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -863,7 +865,7 @@ COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -934,7 +936,7 @@ COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = MSGPACK_NO_BOOST; diff --git a/shared/ios/Podfile b/shared/ios/Podfile index 451616f324e5..e2b1d510addd 100644 --- a/shared/ios/Podfile +++ b/shared/ios/Podfile @@ -21,7 +21,7 @@ target 'Keybase' do # Hermes is now enabled by default. Disable by setting this flag to false. # Upcoming versions of React Native may rely on get_default_flags(), but # we make it explicit here to aid in the React Native upgrade process. - :hermes_enabled => false, + :hermes_enabled => true, :fabric_enabled => flags[:fabric_enabled], # Enables Flipper. # diff --git a/shared/ios/Podfile.lock b/shared/ios/Podfile.lock index ef352d0b374e..2c9386e682e7 100644 --- a/shared/ios/Podfile.lock +++ b/shared/ios/Podfile.lock @@ -19,6 +19,8 @@ PODS: - ExpoModulesCore - EXContacts (11.0.1): - ExpoModulesCore + - EXErrorRecovery (4.0.1): + - ExpoModulesCore - EXFileSystem (15.1.1): - ExpoModulesCore - EXFont (11.0.1): @@ -120,6 +122,7 @@ PODS: - FlipperKit/FlipperKitNetworkPlugin - fmt (6.2.1) - glog (0.3.5) + - hermes-engine (0.70.6) - libevent (2.1.12) - libwebp (1.2.4): - libwebp/demux (= 1.2.4) @@ -146,6 +149,12 @@ PODS: - DoubleConversion - fmt (~> 6.2.1) - glog + - RCT-Folly/Futures (2021.07.22.00): + - boost + - DoubleConversion + - fmt (~> 6.2.1) + - glog + - libevent - RCTRequired (0.70.6) - RCTTypeSafety (0.70.6): - FBLazyVector (= 0.70.6) @@ -323,6 +332,17 @@ PODS: - React-logger (= 0.70.6) - React-perflogger (= 0.70.6) - React-runtimeexecutor (= 0.70.6) + - React-hermes (0.70.6): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2021.07.22.00) + - RCT-Folly/Futures (= 2021.07.22.00) + - React-cxxreact (= 0.70.6) + - React-jsi (= 0.70.6) + - React-jsiexecutor (= 0.70.6) + - React-jsinspector (= 0.70.6) + - React-perflogger (= 0.70.6) - React-jsi (0.70.6): - boost (= 1.76.0) - DoubleConversion @@ -507,6 +527,7 @@ DEPENDENCIES: - EXBarCodeScanner (from `../node_modules/expo-barcode-scanner/ios`) - EXConstants (from `../node_modules/expo-constants/ios`) - EXContacts (from `../node_modules/expo-contacts/ios`) + - EXErrorRecovery (from `../node_modules/expo-error-recovery/ios`) - EXFileSystem (from `../node_modules/expo-file-system/ios`) - EXFont (from `../node_modules/expo-font/ios`) - EXImageLoader (from `../node_modules/expo-image-loader/ios`) @@ -544,6 +565,8 @@ DEPENDENCIES: - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.125.0) - FlipperKit/SKIOSNetworkPlugin (= 0.125.0) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) + - hermes-engine (from `../node_modules/react-native/sdks/hermes/hermes-engine.podspec`) + - libevent (~> 2.1.12) - lottie-ios (from `../node_modules/lottie-ios`) - lottie-react-native (from `../node_modules/lottie-react-native`) - OpenSSL-Universal (= 1.1.1100) @@ -559,6 +582,7 @@ DEPENDENCIES: - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) @@ -634,6 +658,8 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-constants/ios" EXContacts: :path: "../node_modules/expo-contacts/ios" + EXErrorRecovery: + :path: "../node_modules/expo-error-recovery/ios" EXFileSystem: :path: "../node_modules/expo-file-system/ios" EXFont: @@ -666,6 +692,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/React/FBReactNativeSpec" glog: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + hermes-engine: + :podspec: "../node_modules/react-native/sdks/hermes/hermes-engine.podspec" lottie-ios: :path: "../node_modules/lottie-ios" lottie-react-native: @@ -690,6 +718,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/React/CoreModules" React-cxxreact: :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-hermes: + :path: "../node_modules/react-native/ReactCommon/hermes" React-jsi: :path: "../node_modules/react-native/ReactCommon/jsi" React-jsiexecutor: @@ -771,6 +801,7 @@ SPEC CHECKSUMS: EXBarCodeScanner: cb4deb49e59b6c7ed6bbf38d187802359908d2a8 EXConstants: 3c86653c422dd77e40d10cbbabb3025003977415 EXContacts: 81d2963abb188d5f79d746cfff94c58cc7e8d713 + EXErrorRecovery: ae43433feb0608a64dc5b1c8363b3e7769a9ea24 EXFileSystem: 60602b6eefa6873f97172c684b7537c9760b50d6 EXFont: 319606bfe48c33b5b5063fb0994afdc496befe80 EXImageLoader: 84b65e6bd9d3345d6fbb3ab936a546c54496a64d @@ -797,6 +828,7 @@ SPEC CHECKSUMS: FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86 fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 glog: 3d02b25ca00c2d456734d0bcff864cbc62f6ae1a + hermes-engine: 2af7b7a59128f250adfd86f15aa1d5a2ecd39995 libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef lottie-ios: c55158d67d0629a260625cc2ded2052b829e3c3e @@ -812,6 +844,7 @@ SPEC CHECKSUMS: React-Core: b587d0a624f9611b0e032505f3d6f25e8daa2bee React-CoreModules: c6ff48b985e7aa622e82ca51c2c353c7803eb04e React-cxxreact: ade3d9e63c599afdead3c35f8a8bd12b3da6730b + React-hermes: ed09ae33512bbb8d31b2411778f3af1a2eb681a1 React-jsi: 5a3952e0c6d57460ad9ee2c905025b4c28f71087 React-jsiexecutor: b4a65947391c658450151275aa406f2b8263178f React-jsinspector: 60769e5a0a6d4b32294a2456077f59d0266f9a8b @@ -854,6 +887,6 @@ SPEC CHECKSUMS: YogaKit: f782866e155069a2cca2517aafea43200b01fd5a ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb -PODFILE CHECKSUM: b36e3e57de516e669d6fa8f7cc0befe3abf0057b +PODFILE CHECKSUM: a31031cd7dfbdfa05795fb7fd4295d60bde3436c COCOAPODS: 1.11.3 diff --git a/shared/local-debug.native.tsx b/shared/local-debug.native.tsx index 5a06f67e0d5f..5bcb62f9d818 100644 --- a/shared/local-debug.native.tsx +++ b/shared/local-debug.native.tsx @@ -54,7 +54,7 @@ const config = { // Developer settings if (__DEV__) { - config.enableActionLogging = true + config.enableActionLogging = false config.enableStoreLogging = false config.immediateStateLogging = false // Move this outside the if statement to get notifications working diff --git a/shared/reducers/chat2.tsx b/shared/reducers/chat2.tsx index 9d2b0cc3c51b..d9be44846b40 100644 --- a/shared/reducers/chat2.tsx +++ b/shared/reducers/chat2.tsx @@ -687,6 +687,7 @@ const reducer = Container.makeReducer(initialState, { logger.info( `messagesAdd: running in context: ${context.type} messages: ${messages.length} deleted: ${deletedMessages.length}` ) + console.log('aaa deleted', deletedMessages) // we want the clear applied when we call findExisting const messageOrdinals = new Map(draftState.messageOrdinals) const oldPendingOutboxToOrdinal = new Map(draftState.pendingOutboxToOrdinal) diff --git a/shared/todo.txt b/shared/todo.txt new file mode 100644 index 000000000000..fe4b96120b77 --- /dev/null +++ b/shared/todo.txt @@ -0,0 +1 @@ +changes in node_modules: recycler and flashlist From 2580ce0c5b33bbddeaa0a93b7331b44732f720f6 Mon Sep 17 00:00:00 2001 From: chrisnojima Date: Sun, 15 Jan 2023 17:00:17 -0500 Subject: [PATCH 2/6] WIP --- .../conversation/list-area/index.native.tsx | 32 +++++++++---------- shared/common-adapters/markdown/react.tsx | 3 +- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/shared/chat/conversation/list-area/index.native.tsx b/shared/chat/conversation/list-area/index.native.tsx index 28bb3f2f3807..d69a9e1028e4 100644 --- a/shared/chat/conversation/list-area/index.native.tsx +++ b/shared/chat/conversation/list-area/index.native.tsx @@ -11,7 +11,7 @@ import SpecialTopMessage from '../messages/special-top-message' import sortedIndexOf from 'lodash/sortedIndexOf' import type * as Types from '../../../constants/types/chat2' import type {ItemType} from '.' -import {Animated /*, View*/} from 'react-native' +import {Animated, FlatList /*, View*/} from 'react-native' import {ConvoIDContext} from '../messages/ids-context' import {FlashList, type ListRenderItemInfo} from '@shopify/flash-list' import {getMessageRender} from '../messages/wrapper' @@ -177,7 +177,7 @@ const useScrolling = (p: { } } -const GLOBALREDC = new Map() +// const GLOBALREDC = new Map() const ConversationList = React.memo(function ConversationList(p: { conversationIDKey: Types.ConversationIDKey @@ -236,20 +236,20 @@ const ConversationList = React.memo(function ConversationList(p: { [messageOrdinals, conversationIDKey, messageTypeMap] ) - // const recycleTypeRef = React.useRef(new Map()) - // React.useEffect(() => { - // recycleTypeRef.current = new Map() - // }, [conversationIDKey]) - // const setRecycleType = React.useCallback((ordinal: Types.Ordinal, type: string) => { - // recycleTypeRef.current.set(ordinal, type) - // }, []) + const recycleTypeRef = React.useRef(new Map()) + React.useEffect(() => { + recycleTypeRef.current = new Map() + }, [conversationIDKey]) const setRecycleType = React.useCallback((ordinal: Types.Ordinal, type: string) => { - let sub = GLOBALREDC.get(conversationIDKey) - if (!sub) { - sub = GLOBALREDC.set(conversationIDKey, new Map()) - } - sub.set(ordinal, type) + recycleTypeRef.current.set(ordinal, type) }, []) + // const setRecycleType = React.useCallback((ordinal: Types.Ordinal, type: string) => { + // let sub = GLOBALREDC.get(conversationIDKey) + // if (!sub) { + // sub = GLOBALREDC.set(conversationIDKey, new Map()) + // } + // sub.set(ordinal, type) + // }, []) const getItemType = React.useCallback( (ordinal: Types.Ordinal, _idx: number) => { @@ -261,8 +261,8 @@ const ConversationList = React.memo(function ConversationList(p: { // return 'sent' // } // console.log('aaa recycletype', recycleTypeRef.current) - // return recycleTypeRef.current.get(ordinal) ?? messageTypeMap?.get(ordinal) ?? 'text' - return /*GLOBALREDC.get(conversationIDKey)?.get(ordinal) ??*/ messageTypeMap?.get(ordinal) ?? 'text' + return /*recycleTypeRef.current.get(ordinal) ?? */ messageTypeMap?.get(ordinal) ?? 'text' + // return GLOBALREDC.get(conversationIDKey)?.get(ordinal) ?? messageTypeMap?.get(ordinal) ?? 'text' }, [/*messageOrdinals, */ messageTypeMap, conversationIDKey] ) diff --git a/shared/common-adapters/markdown/react.tsx b/shared/common-adapters/markdown/react.tsx index 3cee1af3edbe..38184a72be33 100644 --- a/shared/common-adapters/markdown/react.tsx +++ b/shared/common-adapters/markdown/react.tsx @@ -25,8 +25,7 @@ const markdownStyles = Styles.styleSheetCreate( }, isMobile: { fontSize: 32, - lineHeight: undefined, - minHeight: 40, + lineHeight: 39.5, // matches undefined }, } as const), boldStyle: Styles.platformStyles({ From 7528e33a11a19a7ea82604b627978968d5ddcedb Mon Sep 17 00:00:00 2001 From: chrisnojima Date: Tue, 17 Jan 2023 12:12:48 -0500 Subject: [PATCH 3/6] WIP --- .../conversation/list-area/index.native.tsx | 48 +++++++------------ .../chat/conversation/messages/separator.tsx | 1 + .../conversation/messages/text/wrapper.tsx | 31 ++++++------ .../patches/@shopify+flash-list+1.4.0.patch | 2 +- shared/patches/recyclerlistview+4.2.0.patch | 44 +++++++++++++++++ shared/reducers/chat2.tsx | 1 - 6 files changed, 78 insertions(+), 49 deletions(-) create mode 100644 shared/patches/recyclerlistview+4.2.0.patch diff --git a/shared/chat/conversation/list-area/index.native.tsx b/shared/chat/conversation/list-area/index.native.tsx index d69a9e1028e4..4e71fd6ad643 100644 --- a/shared/chat/conversation/list-area/index.native.tsx +++ b/shared/chat/conversation/list-area/index.native.tsx @@ -11,7 +11,7 @@ import SpecialTopMessage from '../messages/special-top-message' import sortedIndexOf from 'lodash/sortedIndexOf' import type * as Types from '../../../constants/types/chat2' import type {ItemType} from '.' -import {Animated, FlatList /*, View*/} from 'react-native' +import {Animated} from 'react-native' import {ConvoIDContext} from '../messages/ids-context' import {FlashList, type ListRenderItemInfo} from '@shopify/flash-list' import {getMessageRender} from '../messages/wrapper' @@ -64,10 +64,10 @@ const AnimatedChild = React.memo(function AnimatedChild({children, animatingKey} type SentProps = { children?: React.ReactElement - conversationIDKey: Types.ConversationIDKey ordinal: Types.Ordinal } -const Sent_ = ({conversationIDKey, ordinal}: SentProps) => { +const Sent_ = ({ordinal}: SentProps) => { + const conversationIDKey = React.useContext(ConvoIDContext) const {type, youSent} = Container.useSelector(state => { const you = state.config.username const message = state.chat2.messageMap.get(conversationIDKey)?.get(ordinal) @@ -194,13 +194,6 @@ const ConversationList = React.memo(function ConversationList(p: { return [..._messageOrdinals].reverse() }, [_messageOrdinals]) - // TEMP don't ever mutate the list, see if that fixes it - // const TEMPRef = React.useRef(messageOrdinalsTEMP) - // if (!TEMPRef.current.length && messageOrdinalsTEMP.length) { - // TEMPRef.current = messageOrdinalsTEMP - // } - // const messageOrdinals = TEMPRef.current - const listRef = React.useRef | null>(null) const {markInitiallyLoadedThreadAsRead} = Hooks.useActions({conversationIDKey}) const keyExtractor = React.useCallback((ordinal: ItemType) => { @@ -214,7 +207,7 @@ const ConversationList = React.memo(function ConversationList(p: { return null } if (!index) { - return + return } const type = messageTypeMap?.get(ordinal) ?? 'text' @@ -222,18 +215,18 @@ const ConversationList = React.memo(function ConversationList(p: { const Clazz = getMessageRender(type) if (!Clazz) return null return - // used to debug measuring issues w/ items + // uncomment to debug measuring issues w/ items // return ( // { - // console.log('aaa', ordinal, e.nativeEvent.layout.height) + // console.log('debug', ordinal, e.nativeEvent.layout.height) // }} // > // // // ) }, - [messageOrdinals, conversationIDKey, messageTypeMap] + [messageOrdinals, messageTypeMap] ) const recycleTypeRef = React.useRef(new Map()) @@ -243,28 +236,20 @@ const ConversationList = React.memo(function ConversationList(p: { const setRecycleType = React.useCallback((ordinal: Types.Ordinal, type: string) => { recycleTypeRef.current.set(ordinal, type) }, []) - // const setRecycleType = React.useCallback((ordinal: Types.Ordinal, type: string) => { - // let sub = GLOBALREDC.get(conversationIDKey) - // if (!sub) { - // sub = GLOBALREDC.set(conversationIDKey, new Map()) - // } - // sub.set(ordinal, type) - // }, []) + + const numOrdinals = messageOrdinals.length const getItemType = React.useCallback( - (ordinal: Types.Ordinal, _idx: number) => { + (ordinal: Types.Ordinal, idx: number) => { if (!ordinal) { return 'null' } - // this messing it up? no, but keep off for now - // if (messageOrdinals.length - 1 === idx) { - // return 'sent' - // } - // console.log('aaa recycletype', recycleTypeRef.current) - return /*recycleTypeRef.current.get(ordinal) ?? */ messageTypeMap?.get(ordinal) ?? 'text' - // return GLOBALREDC.get(conversationIDKey)?.get(ordinal) ?? messageTypeMap?.get(ordinal) ?? 'text' + if (numOrdinals - 1 === idx) { + return 'sent' + } + return recycleTypeRef.current.get(ordinal) ?? messageTypeMap?.get(ordinal) ?? 'text' }, - [/*messageOrdinals, */ messageTypeMap, conversationIDKey] + [numOrdinals, messageTypeMap] ) const {scrollToCentered, scrollToBottom, onEndReached} = useScrolling({ @@ -286,7 +271,6 @@ const ConversationList = React.memo(function ConversationList(p: { markInitiallyLoadedThreadAsRead() } }, [markInitiallyLoadedThreadAsRead]) - // console.log('aaa render', messageOrdinals) return ( @@ -296,7 +280,7 @@ const ConversationList = React.memo(function ConversationList(p: { { const previous = leadingItem const conversationIDKey = React.useContext(ConvoIDContext) const {showUsername, orangeLineAbove} = useReduxFast(conversationIDKey, ordinal, previous) + return ordinal && (showUsername || orangeLineAbove) ? ( { - const oldtype = TEMPTYPE.current - if (TEMP.current) { - console.log( - 'aaa textwrapperrecycle', - TEMP.current, - ordinal, - subType === oldtype ? `SAME ${subType}` : `${subType} != ${oldtype} <<<<<<<<<<<<<<<<<` - ) - } - TEMP.current = ordinal - TEMPTYPE.current = subType - }, [ordinal, subType]) + // Uncomment to test effective recycling + // const DEBUGOldOrdinalRef = React.useRef(0) + // const DEBUGOldTypeRef = React.useRef('') + // React.useEffect(() => { + // const oldtype = DEBUGOldTypeRef.current + // if (DEBUGOldOrdinalRef.current) { + // console.log( + // 'debug textwrapperRecycle', + // DEBUGOldOrdinalRef.current, + // ordinal, + // subType === oldtype ? `SAME ${subType}` : `${subType} != ${oldtype} <<<<<<<<<<<<<<<<<` + // ) + // } + // DEBUGOldOrdinalRef.current = ordinal + // DEBUGOldTypeRef.current = subType + // }, [ordinal, subType]) const style = React.useMemo( () => getStyle(textType, isEditing, showCenteredHighlight), diff --git a/shared/patches/@shopify+flash-list+1.4.0.patch b/shared/patches/@shopify+flash-list+1.4.0.patch index dfe7ebdf3f9c..c79b1a15c881 100644 --- a/shared/patches/@shopify+flash-list+1.4.0.patch +++ b/shared/patches/@shopify+flash-list+1.4.0.patch @@ -1,5 +1,5 @@ diff --git a/node_modules/@shopify/flash-list/dist/FlashList.js b/node_modules/@shopify/flash-list/dist/FlashList.js -index ea05c45..f194afa 100644 +index ea05c45..59ab7ab 100644 --- a/node_modules/@shopify/flash-list/dist/FlashList.js +++ b/node_modules/@shopify/flash-list/dist/FlashList.js @@ -24,7 +24,7 @@ var FlashList = /** @class */ (function (_super) { diff --git a/shared/patches/recyclerlistview+4.2.0.patch b/shared/patches/recyclerlistview+4.2.0.patch new file mode 100644 index 000000000000..f8ef0459241d --- /dev/null +++ b/shared/patches/recyclerlistview+4.2.0.patch @@ -0,0 +1,44 @@ +diff --git a/node_modules/recyclerlistview/dist/reactnative/core/layoutmanager/LayoutManager.js b/node_modules/recyclerlistview/dist/reactnative/core/layoutmanager/LayoutManager.js +index 9cd3c57..f65012e 100644 +--- a/node_modules/recyclerlistview/dist/reactnative/core/layoutmanager/LayoutManager.js ++++ b/node_modules/recyclerlistview/dist/reactnative/core/layoutmanager/LayoutManager.js +@@ -114,7 +114,7 @@ var WrapGridLayoutManager = /** @class */ (function (_super) { + for (var i = startIndex; i < itemCount; i++) { + oldLayout = this._layouts[i]; + var layoutType = this._layoutProvider.getLayoutTypeForIndex(i); +- if (oldLayout && oldLayout.isOverridden && oldLayout.type === layoutType) { ++ if (oldLayout && oldLayout.isOverridden /*&& oldLayout.type === layoutType*/) { + itemDim.height = oldLayout.height; + itemDim.width = oldLayout.width; + } +@@ -145,9 +145,12 @@ var WrapGridLayoutManager = /** @class */ (function (_super) { + itemRect.x = startX; + itemRect.y = startY; + itemRect.type = layoutType; ++ const nextOverriden = !!itemRect.isOverridden && itemRect.width === itemDim.width && itemRect.height === itemDim.height; ++ itemRect.isOverridden = nextOverriden + itemRect.width = itemDim.width; + itemRect.height = itemDim.height; + } ++ + if (this._isHorizontal) { + startY += itemDim.height; + } +diff --git a/node_modules/recyclerlistview/dist/reactnative/platform/reactnative/viewrenderer/ViewRenderer.js b/node_modules/recyclerlistview/dist/reactnative/platform/reactnative/viewrenderer/ViewRenderer.js +index d9c7031..dfc6d92 100644 +--- a/node_modules/recyclerlistview/dist/reactnative/platform/reactnative/viewrenderer/ViewRenderer.js ++++ b/node_modules/recyclerlistview/dist/reactnative/platform/reactnative/viewrenderer/ViewRenderer.js +@@ -44,9 +44,10 @@ var ViewRenderer = /** @class */ (function (_super) { + }; + _this._onLayout = function (event) { + //Preventing layout thrashing in super fast scrolls where RN messes up onLayout event +- var xDiff = Math.abs(_this.props.x - event.nativeEvent.layout.x); +- var yDiff = Math.abs(_this.props.y - event.nativeEvent.layout.y); +- if (xDiff < 1 && yDiff < 1 && ++ //var xDiff = Math.abs(_this.props.x - event.nativeEvent.layout.x); ++ //var yDiff = Math.abs(_this.props.y - event.nativeEvent.layout.y); ++ ++ if (/*xDiff < 1 && yDiff < 1 &&*/ + (_this.props.height !== event.nativeEvent.layout.height || + _this.props.width !== event.nativeEvent.layout.width)) { + _this._dim.height = event.nativeEvent.layout.height; diff --git a/shared/reducers/chat2.tsx b/shared/reducers/chat2.tsx index d9be44846b40..9d2b0cc3c51b 100644 --- a/shared/reducers/chat2.tsx +++ b/shared/reducers/chat2.tsx @@ -687,7 +687,6 @@ const reducer = Container.makeReducer(initialState, { logger.info( `messagesAdd: running in context: ${context.type} messages: ${messages.length} deleted: ${deletedMessages.length}` ) - console.log('aaa deleted', deletedMessages) // we want the clear applied when we call findExisting const messageOrdinals = new Map(draftState.messageOrdinals) const oldPendingOutboxToOrdinal = new Map(draftState.pendingOutboxToOrdinal) From e3a4c895a400f5127e57d23f1762218678b1b0f0 Mon Sep 17 00:00:00 2001 From: chrisnojima Date: Tue, 17 Jan 2023 12:17:00 -0500 Subject: [PATCH 4/6] WIP --- shared/chat/conversation/list-area/index.native.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/chat/conversation/list-area/index.native.tsx b/shared/chat/conversation/list-area/index.native.tsx index 4e71fd6ad643..c6c5df5ba2d3 100644 --- a/shared/chat/conversation/list-area/index.native.tsx +++ b/shared/chat/conversation/list-area/index.native.tsx @@ -280,7 +280,7 @@ const ConversationList = React.memo(function ConversationList(p: { Date: Tue, 17 Jan 2023 12:19:05 -0500 Subject: [PATCH 5/6] WIP --- .../chat/conversation/list-area/index.native.tsx | 2 -- shared/chat/conversation/messages/separator.tsx | 1 - .../chat/conversation/messages/wrapper/wrapper.tsx | 14 -------------- shared/todo.txt | 1 - 4 files changed, 18 deletions(-) delete mode 100644 shared/todo.txt diff --git a/shared/chat/conversation/list-area/index.native.tsx b/shared/chat/conversation/list-area/index.native.tsx index c6c5df5ba2d3..a85adbb6a65f 100644 --- a/shared/chat/conversation/list-area/index.native.tsx +++ b/shared/chat/conversation/list-area/index.native.tsx @@ -177,8 +177,6 @@ const useScrolling = (p: { } } -// const GLOBALREDC = new Map() - const ConversationList = React.memo(function ConversationList(p: { conversationIDKey: Types.ConversationIDKey }) { diff --git a/shared/chat/conversation/messages/separator.tsx b/shared/chat/conversation/messages/separator.tsx index bd86a21e1137..59ff78eb8925 100644 --- a/shared/chat/conversation/messages/separator.tsx +++ b/shared/chat/conversation/messages/separator.tsx @@ -255,7 +255,6 @@ const SeparatorConnector = (p: Props) => { const previous = leadingItem const conversationIDKey = React.useContext(ConvoIDContext) const {showUsername, orangeLineAbove} = useReduxFast(conversationIDKey, ordinal, previous) - return ordinal && (showUsername || orangeLineAbove) ? ( { - // const ttype = global.DEBUGStore?.store - // ?.getState() - // .chat2.messageMap.get(conversationIDKey) - // ?.get(TEMP.current)?.type - // const otype = global.DEBUGStore?.store - // ?.getState() - // .chat2.messageMap.get(conversationIDKey) - // ?.get(ordinal)?.type - // console.log('aaa Wrapper ordinal recycle', TEMP.current, ttype, ordinal, otype) - // TEMP.current = ordinal - // }, [ordinal]) - React.useEffect(() => { conversationIDKeyRef.current = conversationIDKey ordinalRef.current = ordinal diff --git a/shared/todo.txt b/shared/todo.txt deleted file mode 100644 index fe4b96120b77..000000000000 --- a/shared/todo.txt +++ /dev/null @@ -1 +0,0 @@ -changes in node_modules: recycler and flashlist From 01a5cb8ae8b64aa4970c2c5b5474b83f42176782 Mon Sep 17 00:00:00 2001 From: chrisnojima Date: Tue, 17 Jan 2023 13:16:03 -0500 Subject: [PATCH 6/6] WIP --- shared/ios/Keybase.xcodeproj/project.pbxproj | 6 ++-- shared/ios/Podfile | 2 +- shared/ios/Podfile.lock | 35 +------------------- 3 files changed, 4 insertions(+), 39 deletions(-) diff --git a/shared/ios/Keybase.xcodeproj/project.pbxproj b/shared/ios/Keybase.xcodeproj/project.pbxproj index 3ac4d23b733a..45c8cae7e901 100644 --- a/shared/ios/Keybase.xcodeproj/project.pbxproj +++ b/shared/ios/Keybase.xcodeproj/project.pbxproj @@ -477,14 +477,12 @@ "${PODS_XCFRAMEWORKS_BUILD_DIR}/Flipper-DoubleConversion/double-conversion.framework/double-conversion", "${PODS_XCFRAMEWORKS_BUILD_DIR}/Flipper-Glog/glog.framework/glog", "${PODS_XCFRAMEWORKS_BUILD_DIR}/OpenSSL-Universal/OpenSSL.framework/OpenSSL", - "${PODS_XCFRAMEWORKS_BUILD_DIR}/hermes-engine/hermes.framework/hermes", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/double-conversion.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/glog.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/OpenSSL.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/hermes.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; @@ -865,7 +863,7 @@ COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -936,7 +934,7 @@ COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = MSGPACK_NO_BOOST; diff --git a/shared/ios/Podfile b/shared/ios/Podfile index e2b1d510addd..451616f324e5 100644 --- a/shared/ios/Podfile +++ b/shared/ios/Podfile @@ -21,7 +21,7 @@ target 'Keybase' do # Hermes is now enabled by default. Disable by setting this flag to false. # Upcoming versions of React Native may rely on get_default_flags(), but # we make it explicit here to aid in the React Native upgrade process. - :hermes_enabled => true, + :hermes_enabled => false, :fabric_enabled => flags[:fabric_enabled], # Enables Flipper. # diff --git a/shared/ios/Podfile.lock b/shared/ios/Podfile.lock index 2c9386e682e7..ef352d0b374e 100644 --- a/shared/ios/Podfile.lock +++ b/shared/ios/Podfile.lock @@ -19,8 +19,6 @@ PODS: - ExpoModulesCore - EXContacts (11.0.1): - ExpoModulesCore - - EXErrorRecovery (4.0.1): - - ExpoModulesCore - EXFileSystem (15.1.1): - ExpoModulesCore - EXFont (11.0.1): @@ -122,7 +120,6 @@ PODS: - FlipperKit/FlipperKitNetworkPlugin - fmt (6.2.1) - glog (0.3.5) - - hermes-engine (0.70.6) - libevent (2.1.12) - libwebp (1.2.4): - libwebp/demux (= 1.2.4) @@ -149,12 +146,6 @@ PODS: - DoubleConversion - fmt (~> 6.2.1) - glog - - RCT-Folly/Futures (2021.07.22.00): - - boost - - DoubleConversion - - fmt (~> 6.2.1) - - glog - - libevent - RCTRequired (0.70.6) - RCTTypeSafety (0.70.6): - FBLazyVector (= 0.70.6) @@ -332,17 +323,6 @@ PODS: - React-logger (= 0.70.6) - React-perflogger (= 0.70.6) - React-runtimeexecutor (= 0.70.6) - - React-hermes (0.70.6): - - DoubleConversion - - glog - - hermes-engine - - RCT-Folly (= 2021.07.22.00) - - RCT-Folly/Futures (= 2021.07.22.00) - - React-cxxreact (= 0.70.6) - - React-jsi (= 0.70.6) - - React-jsiexecutor (= 0.70.6) - - React-jsinspector (= 0.70.6) - - React-perflogger (= 0.70.6) - React-jsi (0.70.6): - boost (= 1.76.0) - DoubleConversion @@ -527,7 +507,6 @@ DEPENDENCIES: - EXBarCodeScanner (from `../node_modules/expo-barcode-scanner/ios`) - EXConstants (from `../node_modules/expo-constants/ios`) - EXContacts (from `../node_modules/expo-contacts/ios`) - - EXErrorRecovery (from `../node_modules/expo-error-recovery/ios`) - EXFileSystem (from `../node_modules/expo-file-system/ios`) - EXFont (from `../node_modules/expo-font/ios`) - EXImageLoader (from `../node_modules/expo-image-loader/ios`) @@ -565,8 +544,6 @@ DEPENDENCIES: - FlipperKit/FlipperKitUserDefaultsPlugin (= 0.125.0) - FlipperKit/SKIOSNetworkPlugin (= 0.125.0) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - - hermes-engine (from `../node_modules/react-native/sdks/hermes/hermes-engine.podspec`) - - libevent (~> 2.1.12) - lottie-ios (from `../node_modules/lottie-ios`) - lottie-react-native (from `../node_modules/lottie-react-native`) - OpenSSL-Universal (= 1.1.1100) @@ -582,7 +559,6 @@ DEPENDENCIES: - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) - - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) @@ -658,8 +634,6 @@ EXTERNAL SOURCES: :path: "../node_modules/expo-constants/ios" EXContacts: :path: "../node_modules/expo-contacts/ios" - EXErrorRecovery: - :path: "../node_modules/expo-error-recovery/ios" EXFileSystem: :path: "../node_modules/expo-file-system/ios" EXFont: @@ -692,8 +666,6 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/React/FBReactNativeSpec" glog: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" - hermes-engine: - :podspec: "../node_modules/react-native/sdks/hermes/hermes-engine.podspec" lottie-ios: :path: "../node_modules/lottie-ios" lottie-react-native: @@ -718,8 +690,6 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/React/CoreModules" React-cxxreact: :path: "../node_modules/react-native/ReactCommon/cxxreact" - React-hermes: - :path: "../node_modules/react-native/ReactCommon/hermes" React-jsi: :path: "../node_modules/react-native/ReactCommon/jsi" React-jsiexecutor: @@ -801,7 +771,6 @@ SPEC CHECKSUMS: EXBarCodeScanner: cb4deb49e59b6c7ed6bbf38d187802359908d2a8 EXConstants: 3c86653c422dd77e40d10cbbabb3025003977415 EXContacts: 81d2963abb188d5f79d746cfff94c58cc7e8d713 - EXErrorRecovery: ae43433feb0608a64dc5b1c8363b3e7769a9ea24 EXFileSystem: 60602b6eefa6873f97172c684b7537c9760b50d6 EXFont: 319606bfe48c33b5b5063fb0994afdc496befe80 EXImageLoader: 84b65e6bd9d3345d6fbb3ab936a546c54496a64d @@ -828,7 +797,6 @@ SPEC CHECKSUMS: FlipperKit: cbdee19bdd4e7f05472a66ce290f1b729ba3cb86 fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 glog: 3d02b25ca00c2d456734d0bcff864cbc62f6ae1a - hermes-engine: 2af7b7a59128f250adfd86f15aa1d5a2ecd39995 libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 libwebp: f62cb61d0a484ba548448a4bd52aabf150ff6eef lottie-ios: c55158d67d0629a260625cc2ded2052b829e3c3e @@ -844,7 +812,6 @@ SPEC CHECKSUMS: React-Core: b587d0a624f9611b0e032505f3d6f25e8daa2bee React-CoreModules: c6ff48b985e7aa622e82ca51c2c353c7803eb04e React-cxxreact: ade3d9e63c599afdead3c35f8a8bd12b3da6730b - React-hermes: ed09ae33512bbb8d31b2411778f3af1a2eb681a1 React-jsi: 5a3952e0c6d57460ad9ee2c905025b4c28f71087 React-jsiexecutor: b4a65947391c658450151275aa406f2b8263178f React-jsinspector: 60769e5a0a6d4b32294a2456077f59d0266f9a8b @@ -887,6 +854,6 @@ SPEC CHECKSUMS: YogaKit: f782866e155069a2cca2517aafea43200b01fd5a ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb -PODFILE CHECKSUM: a31031cd7dfbdfa05795fb7fd4295d60bde3436c +PODFILE CHECKSUM: b36e3e57de516e669d6fa8f7cc0befe3abf0057b COCOAPODS: 1.11.3