-
Notifications
You must be signed in to change notification settings - Fork 324
Upgrade helper
-
Peer dependency of
react-native-image-picker
has been changed toreact-native-image-crop-picker
for following two reasons.- To fix the issue with image uploads - https://github.com/GetStream/stream-chat-react-native/issues/241
-
react-native-image-picker
didn't offer any option for image compression, which slows down uploads of heavy images.
So you will need to install this new dependency on app level.
yarn remove react-native-image-picker # Remove previous dependency if you don't need it yarn add react-native-image-crop-picker cd ios && pod install && cd ..
There are few additional changes that you need to do separately for iOS and android
- For iOS - https://github.com/ivpusic/react-native-image-crop-picker#step-3
- For android - https://github.com/ivpusic/react-native-image-crop-picker#android
There are two reasons for this change:
-
You will need to install https://github.com/LinusU/react-native-get-random-values and add this line
import 'react-native-get-random-values';
to yourindex.js
-
Expo 39 is now the lowest supported version from 2.x.x
-
Changes to Keyboard functionality: Internally we use
KeyboardCompatibleView
component to sync Channel height according to keyboard state. As part of 1.3.x we updated have the implementation forKeyboardCompatibleView
. Updated KeyboardCompatibleView's implentation is mostly same asKeyboardAvoidingView
, with few additional fixes for app state (background | foreground). And thus, following props on Channel component won't be supported anymore:- keyboardDismissAnimationDuration
- keyboardOpenAnimationDuration
Following new props have been introduced on Channel component. They are the same props accepted by KeyboardAvoidingView of react-native.
- keyboardBehavior ['height' | 'position' | 'padding']
- keyboardVerticalOffset
-
All the components were moved from class based components to functional components, gradually as part of 1.x.x. This caused some breaking changes on
ChannelList
component's custom event handlers. ChannelList component has its own default logic for handling different types of events. Although these default event handlers can still be overridden by providing custom prop functions to the ChannelList component. Custom logic can be provided for the following events.-
onAddedToChannel
overridesnotification.added_to_channel
default -
onChannelDeleted
overrideschannel.deleted
default -
onChannelHidden
overrideschannel.hidden
default -
onChannelTruncated
overrideschannel.truncated
default -
onChannelUpdated
overrideschannel.updated
default -
onMessageNew
overridesnotification.message_new
default -
onRemovedFromChannel
overridesnotification.removed_from_channel
defaultThese props were already present in 0.x.x as well. Breaking change is on the parameters of these event handlers. In 0.x.x, these event handlers used to have
this
as its first argument, which was reference ChannelList component (class based).From 1.3.x, these handlers will accept following params:
-
1st argument:
setChannels
reference to theuseState
hook that sets thechannels
in the React Native FlatList -
2nd argument:
event
object returned by the StreamChat instance
-
-
Similar breaking change was introduced in
MessageSimple
component as well. For example, if you wish to override the SDK's standard long press behavior on a message, theonLongPress
oronPress
function passed in toMessageSimple
no longer takes thethis
component reference as it's first argument. The message and the event object become the first and second arguments, respectively.
-
If you are using
withChannelContext
function inside your app, then you may want to pay attention for context related changes. We have split theChannelContext
into three separate contexts to further modularize the code and reduce renders as items in context change. The following contexts now contain the following values, previously all held within theChannelContext
:-
ChannelContext
:channel
,disabled
,EmptyStateIndicator
,error
,eventHistory
,lastRead
,loading
,LoadingIndicator
,markRead
,members
,read
,setLastRead
,typing
,watcherCount
,watchers
-
MessagesContext
:Attachment
,clearEditingState
,editing
,editMessage
,emojiData
,hasMore
,loadingMore
,loadMore
,Message
,messages
,removeMessage
,retrySendMessage
,sendMessage
,setEditingState
,updateMessage
-
ThreadContext
:closeThread
,loadMoreThread
,openThread
,thread
,threadHasMore
,threadLoadingMore
,threadMessages
-
- The
renderText
function utilized in theMessageTextContainer
component now accepts a single object containingmarkdownRules
,markdownStyles
, andmessage
. Previously each value was a separate function parameter.
Channel
- added
additionalKeyboardAvoidingViewProps
prop to allow custom keyboard props
ChannelListMessenger
- remove
setActiveChannel
prop
ChannelPreviewMessenger
- renamed the
latestMessage
prop tolatestMessagePreview
. This name change is more semantic to what the prop does and reduces confusion with thelastMessage
prop
MessageList
-
Dropped support for the
MessageList
component'sonMessageTouch
prop. Please use theonPress
prop on theMessageSimple
component to perform an action on touch of a message. -
Dropped support for the following
MessageList
props:-
dateSeparator
(use DateSeparator instead) -
headerComponent
(use HeaderComponent instead)
-
MessageSimple
- Dropped support for the
Message
component'sreadOnly
prop. Please use thedisabled
value from theChannelContext
instead.
MessageContent
- removed
retrySendMessage
prop in favor ofretrySendMessage
withinMessagesContext
MessageInput
- remove
parent
prop toparent_id
as it needs to be just an id string instead of the entire parent object - add
setInputRef
prop to actually allow forwarding of the TextInput ref controls
MessageSystem
- add
formatDate
prop to allow custom date formatting
FileIploadPreview
- dropped support for the
fileUploadPreview.dismissText
theme value - added support for
fileUploadPreview.dismiss
,fileUploadPreview.dismissImage
, andfileUploadPreview.imageContainer
theme values
- 1.3.x replaced native dependency support for react-native-image-picker in favor of react-native-image-crop-picker for multi-image selection capabilities
-
0.2.x added support for react native 0.60. Dependencies like
react-native-image-picker
,react-native-document-picker
andnetinfo
have been taken out of hard dependencies and moved to peer dependencies and thus will have to be installed manually on consumer end (Reference) -
React Native 0.60 came with auto-linking functionality that means if some native libraries are linked manually before the upgrade, they will have to be unlinked, so that React Native can auto-link them (Reference)
react-native unlink react-native-image-picker react-native unlink react-native-document-picker react-native unlink @react-native-community/netinfo
-
React Native 0.60 has been migrated over to AndroidX. In the current context, dependencies such as
react-native-document-picker
and (if you are usingreact-navigation
)react-native-gesture-handler
,react-native-reanimated
don't have AndroidX support. But an excellent tool named jetifier is quite useful to patch these dependencies with AndroidX support. -
CocoaPods are not part of React Native's iOS project (ref). Thus make sure to install all the pod dependencies.
cd ios && pod install && cd ..