* Fix isDateLine function to check for null and undefined
* use optional chaining instead
Co-Authored-By: Amit Uttam <changingrainbows@gmail.com>
Co-authored-by: Amit Uttam <changingrainbows@gmail.com>
* Remove redux-offline and configure redux-persist
* Fix typo
* Fix configure store
* Upgrade to redux-persist 6.0.0
* Add migration from redux-persist v4 to v6
* Replace AsyncStorage with MMKVStorage to boost storage speed
* Mock RNFastStorage
* Fix reactions test
* Fix clearing the store on logout
* Remove the need for LOGOUT_SUCCESS
* No need to pass persistConfig to middlewares()
* Remove unused imports
* Export connection
Accidentally removed this export.
* Add batch action name
Co-Authored-By: Elias Nahum <nahumhbl@gmail.com>
* Add batch action name
Co-Authored-By: Elias Nahum <nahumhbl@gmail.com>
* Add batch action name
Co-Authored-By: Elias Nahum <nahumhbl@gmail.com>
* Add batch action name
Co-Authored-By: Elias Nahum <nahumhbl@gmail.com>
* Fix delete post
* Fix leave channel
Co-authored-by: Elias Nahum <nahumhbl@gmail.com>
* Add nickname search functionality
* Add username property to test
* Fix parentheses out of place
* Add nickname property to additional tests
* Added ability to truncate long names
* Minor clean up
* More minor clean up
* WIP: Implementing quick reaction functionality
* Making closing animations smoother
- Added haptic feedback + timeouts for a smooth flow
* Fixing clipping of post options on android
* updating snapshots
* Refactoring code & fixing styles
- Fixed paddings element sizes to comply with design specs
- Replaced reaction image to one with a higher resolution
- Made sizes of emojis to be conditional on deviceWidth
* Apply suggestions from code review
* Adding component to avoid extra re-renders
* Refactoring function call in reaction_button
Am ashamed i didn't catch this before pushing the rest
Co-authored-by: Elias Nahum <nahumhbl@gmail.com>
* MM-23490 Save state to file via async middleware vs store subscription
Currently for iOS, a subset of store state is saved to an on-device file, so that the Share Extension can have access to information it needs (teams and channels) to function.
This file saving would happen via a store subscription which triggers a file save for every dispatched action. By moving this logic to a middleware function, when this function gets invoked is now limited to a configurable set of action dispatches. (e.g. `LOGIN`, `CONNECTION_CHANGED`, `WEBSOCKET_SUCCESS`), etc.
* MM-23493 Move app cache purge from store subscription to middleware (#4069)
* MM-23493 Move app cache purge from store subscription to middleware
This commit exposes persistence configuration as a static reference, so that cache purging can be invoked on demand anywhere else in the codebase.
While middleware still may not be the best spot for this singular "action", existing functionality (reacting to `OFFLINE_STORE_PURGE`) is maintained.
The change also removes the need for `state.views.root.purge` to exist in the state tree.
* PR feedback: Inject config dependency for purging app cache
Previously, `middleware` imported the config back from `store` (i.e. cyclic import).
* PR feedback: No need to export config, now that it's passed as argument
* Fix tests after refactoring middleware call from array -> function
* PR feedback: Let parent continue to pass down initial store state
* Port WebSocket from mm-redux and batch actions
* Update mm-redux and fix tests
* Change action name
* Naming batch actions
* Fix unit tests
* Dispatch connection change only if its different
* Remove comment
* Add Lint to TypeScript and fix linting errors
* Add WebSocket Unit Tests
* Revert from unwanted RN 0.62
* Initiated basic migration to react-native-elements
- Search bar receives all right props without custom animations being necessary
- Need to test on different layouts and cases
- May be possible to unify android and iOS components. Attempt later
* Removing separated android/ios files
- Adding implementation of android searchbar
- updating test snapshots
* WIP: Integrating leftComponent and adding focus animations
* Adding animations to left component on focus and blur events
* Removing repeated styles and useless props
* Updating snapshots
* Ensuring clearIcon renders when tapping search suggestions
- Also makes sure it prioritizes custom color attributes over default values for the search input
* Refactoring styles, removing clear icon animations
- Also removed useless ternary operations since the library itself already checks whether the search input is empty
* Replacing icon components with props whenever possible
- Removing useless styles
* memoizing styles, adding default props/values
* Memoize searchBarStyle with params
* Fixing backgroundColor
* Removing minWidth for cancel button
* Fixing styling issues on both iOS and android
* Updating snapshots post merge
* Making sure showCancel can be controlled by props
* Updating snapshots
* Fix clipped edges on iOS & cancel icon on Android
* Fixed radius, memoized styles
* Fixing styling issues found on Android
Co-authored-by: Elias Nahum <nahumhbl@gmail.com>
Unify usage to one set of defined dispatch actions in codebase, instead of a mix of (almost) identical actions defined in `mattermost-mobile` and `mattermost-redux` .
`setDeviceOrientation` and `setDeviceDimensions` used to get called on any navigation change (e.g. modal launches) and triggered multiple needless dispatches.
* Upgrade Navigation library
* Fix background color on Select Server
* Upgrade Navigation library
* Apply patch to nav lib
* Upgrade RNN to 6.1.1
* Update Dependencies
* Feedback review
* Call clearNavigationComponents when reset to channel
* PostList optimizations on FlatList
* Stop scroll to index if there is an interaction
* Fix unit tests
* MM-23176 Fix crash due to scrollToIndex out of range
* Batch mark channel as read action
* Fine tune post list
* Batch actions for getting posts
* Update app/utils/push_notifications.js
Co-Authored-By: Miguel Alatzar <migbot@users.noreply.github.com>
* Update app/actions/views/channel.js
Co-Authored-By: Miguel Alatzar <migbot@users.noreply.github.com>
* Pass state as arg to markAsViewedAndReadBatch
Co-authored-by: Miguel Alatzar <migbot@users.noreply.github.com>
* Upgrade Navigation library
* Feedback review on Navigation Library
* Fix select server background color
* Fix iPhone 11 and 11 Pro Max navbar height
* Fix background color on Select Server
* Upgrade nav lib to 6.1.0
* Apply patch to nav lib
* Upgrade RNN to 6.1.1
* MM-22622 Check mentionHighlightsDisabled in markdown
* MM-22622 Use array of mentions instead of long conditional
* MM-22622 Disable Channel mention highlight for channel header change messages
* MM-22622 Update tests to ensure mention highlight disabled on system message
* Ensure isFirstRow prop is set on first row
* Determine maxPreviewColumns on mount
* Fix expand button offset on Android
* Fix moreBelow gradient
* Show right gradient when columns are sliced
* Fix moreRight conditions
* No need to resetToChannel on clearing data
* Don't use componentWillReceiveProps
* Dismiss all modals on iOS too
* Use centerChannelBg when channel as root
* Fix resetToChannel test
* Fix removal of loadChannels call when rebasing with master
* Add new line
* Address PR review comments
* MM-21923 Enforce channel mentions permission by hiding it from autocomplete and disabling @mention confirmation modal
Add tests for post_textbox channel mentions
* MM-21923 Set use channel mentions to true if server version is not minimum required
* MM-21923 Point to specific redux hash and update permission check to be easier to read
* MM-21923 Fix currentChannel.id
* undelete
* fix build
* change let to const
* ran make i18n
* small refactor
* using canUndelete var
* added render message
* fix bug
* sync
* remove duplicate
* fix test
* add unit test for unarchive channel button render
* fix unit test for unarchive channel
* delete space
* change logic in undelete
* add server minimum for feature
* fix renderunarchive test with adding props variables
* snpashot wasnt matching. fixed by adding to base prop
* return early if false
* change position and color for unarchive button
* refactor handle delete undelete leave
* move serverversion call up
* undelete to unarchive
* remove unnecessary seperator
* hash
* Update app/screens/channel_info/index.js
Co-Authored-By: Elias Nahum <nahumhbl@gmail.com>
* delete canuseunarchive feature
* add test to render sys message
* remote 'w' in package.json
* add trailing comma
* update redux hash
* whitespace in test
Co-authored-by: Elias Nahum <nahumhbl@gmail.com>
* Add fix to prevent emdash autocorrect in a Code Block on ios
* Add fix to prevent emdash autocorrect in a Code Block on ios
* code clean up
* separate to new switchKeyboardForCodeBlocks function
* added emdash prevention to edit_post and also code cleanup
* moved keyboardType logic to its own utils function and added unit tests
* clean up - align event argument names
* removed unnecessary event check
* Improve sidebar performance on first load
* Initial work for switch channel
* Revert android changes
* Split Sidebar per Platform
* Fix waitForHydration executing the callback more than once
* Fix custom emoji not showing on Android
* Finalize Channel Switch
* Enable Android Ram Bundles
* Select the right team for lastChannelForTeam
* Channel loading post indicator
* Fix main sidebar base intl provider
* Update mm-redux
* No need to request configAndLicense on launch
* Load channel member roles
* Rename closeChannelDrawer to closeMainSidebar
* do not throw errors when console is called while running tests
* constant for LOADING_POSTS_HEIGHT
* Remove show more if a long post is edited and no longer long
* Update mm-redux#batch-actions branch
* Code review
* Clear notifications if channel was switched
* Import Platform
Co-authored-by: Miguel Alatzar <migbot@users.noreply.github.com>
* Tighten up post draft UI
* Revert "MM-15307 Updated to use InteractionManager (#3666)"
This reverts commit e08155c81b.
* Address PR review comments
* Update snapshot test
* Don't return null if no files
* Fix progress text and padding issues
* Fixes per Matt's review
* Make linter happy
Re-renders were occuring because of prop and state updates that created new object references, despite being of identical value. A key culprit was `postListHeight` in `PostList` which goes through a few calls to `handleContentSizeChange` when loading posts.
Also, "New Messages" divider line is a pure component now (via `memo`) to reduce unnecessary re-renders here too.
Introduced large number of unnecessary re-renders when opening channels, and ideally should not be a part of the channel switching/opening code path. Although this was discovered while trying to investigate an [Android-specific issue](https://mattermost.atlassian.net/browse/MM-22253), this extra code path made it difficult to see what Android is potentially doing differently than iOS.
Functionality originally introduced in #1203.
Conversation for removal is [here](https://community.mattermost.com/core/pl/hfcogf6pr7rw8k3ryq14c69c7e)
* Reacting to shift-enter events on iOS
* moving keyEvent logic to handleHardwareEnterPress
* configured android to work with keyEvents
* using dispatchKeyEvent instead of onKeyUp
* using react-native-hw-keyboard-event
* cleanup
* updated package name
* update package name
* using react-native-hw-keyboard-event v0.0.2
* reverted cocoapods version change
* Documentation
* fix detection of Shift-Enter on android
* simplify dispatchKeyEvent()
* fix for stacked hardware keyboard events
* Update android/app/src/main/java/com/mattermost/rnbeta/MainActivity.java
Co-Authored-By: Miguel Alatzar <migbot@users.noreply.github.com>
* simplify dispatchKeyEvent
* removed yarn.lock
* using react-native-hw-keyboard-event v0.0.4
* Using ACTION_UP instead of ACTION_DOWN
Co-authored-by: Miguel Alatzar <migbot@users.noreply.github.com>
* Sort emojis in EmojiPicker
* Pass search term to compareEmojis
* Sort emojis that include search term first
* Fix sorting
* Handle compareEmojis without search term
* Return doDefaultComparison
* Check includes only if needed
* Make linter happy
* Use doDefaultComparison
Default to current server or site URL.
Example case: `<jump to convo>` links generated from autolink plugin have their server/site URL stripped, and it is assumed that generated links are relative to the current server.
Conversation: https://community.mattermost.com/core/pl/78j4a7ozupbci8qxwx1sczc1ua