* Add license load metric to About screen
- Add REST endpoint to fetch license load percentage
- Display load metric in About screen next to server version
Fixes: https://mattermost.atlassian.net/browse/MM-63728
* MM-63728: Address PR feedback from enahum
- Move license load metric fetch to a remote action
- Use isMinimumServerVersion to check for server 10.8.0 or higher
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* MM-63728: Simplify getLicenseLoadMetric to directly return number
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* MM-63728: Move getLicenseLoadMetric to dedicated license.ts file
- Create new remote action file specifically for license-related functions
- Add test file for the license actions
- Update imports in about.tsx
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* MM-63728: Remove redundant license check in about.tsx
- Rely on getLicenseLoadMetric to handle the license check
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* MM-63728: Update E2E tests for license load metric
- Add license load metric test IDs to about screen
- Update E2E test to check for load metric when license is enabled
- Handle cases where server might not support the feature
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* recover app/actions/remote/general.ts
* MM-63728: Return error from getLicenseLoadMetric instead of silent failure
- Remove silent failure and debug logging
- Return the error object when API call fails
- Update the About component to handle possible error responses
- Update tests to verify error handling
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* MM-63728: Remove groupLabel parameter from getLicenseLoadMetric
- Remove groupLabel parameter from client getLicenseLoadMetric method in interface and implementation
- Update client tests to reflect the parameter removal
- Update license action test to verify no parameter is passed
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* simplify about screen checks
* MM-63728: Use jest.mocked and real version checks in license tests
- Removed isMinimumServerVersion mock, letting tests use real version checking
- Used proper type casting for mock Client
- Added comprehensive version compatibility test cases
- Simplified test setup
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* MM-63728: Remove redundant server version test
- Removed redundant test for different server versions
- Existing tests already cover the necessary version compatibility cases
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* MM-63728: Refactor license test to use better mocking pattern
- Refactored the test file to use a better mocking pattern similar to custom_emoji.test.ts
- Simplified mock declarations using jest.mock()
- Added type import for Client for better readability
- Improved type casting for mock objects
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* npm run fix
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Handle biometric authentication
* jailbreak/root detection and biometric small fixes
* remove server from initializeSecurityManager and fix loginEntry
* Add screen capture prevention and other small fixes
* added unit tests to SecurityManager
* added shielded nativeID to protect views
* use MobilePreventScreenCapture instead of MobileAllowScreenshots in config type definition
* Apply Swizzle for screen capture on iOS
* Apply patch to bottom sheet to prevent screen captures
* fix ios sendReply
* Fix SDWebImage swizzle to use the correct session
* Fix potential crash on Android when using hardware keyboard
* rename patch for network library to remove warning
* add temp emm reference
* fix initializeSecurityManager tests
* fix translations
* use siteName for jailbreak detection when connecting to a new server
* fix i18n typo
* do not query the entire config from the db only the required fields
* migrate manage_apps to use defineMessages
* use TestHelper.wait in tests
* use defineMessages for security manager
* fix missing else statement for gm_to_channel
* created a TestHelper function to mockQuery and replace as jest.Mock with jest.mocked
* fix unit tests
* fix unit tests (again) and include setting the test environment to UTC
* Fix keyboard disappearing on iOS
* update react-native-emm
* feat: added new check for isAudio and added the supported mime types
* feat: adding the progress and audio on the audio file message
* feat: finishing the layout of the audio_file
* feat: play and pause audio
* feat: update the progress bar when audio is playing
* feat: update the timeframe of the audio
* feat: update with the new design
* feat: adding download and preview
* feat: creates a hook for the file download and preview
* feat: adding useCallback to make the return stable
* fix: iOS issue when playing in loop
* feat: adding localization for the error
* fix: removing code tha was inserted for debug
* feat: add a new line on the en.json
* fix: fixing types
* feat: adding the onSeek method inside the progress bar
* feat: changing progress value to animated value
* feat: changing to GestureDetector and making the seek method work
* feat: adding a touchable without feedback to prevent the audio to triggering other page
* feat: adding the drag on the seek method
* feat: making the download button more gray
* fix: fix tests
* fix: prevent onProgress from clearing the seconds when the audio is paused
* feat: clamping the position of the cursor to never be dragged offscreen
* feat: enhancing the experience of dragging the cursor on the progress bar
* feat: differentiate between the throttles
* feat: remvoing the aac audio files support
* feat: pausing if the focus has changed
* feat: render differently the audio file when in the files list
* refactor: optimize audio file component by using useCallback for event handlers
* refactor: extract stopPropagation function for better readability in AudioFile component
* feat: implement custom useThrottled hook and replace lodash throttle in AudioFile component
* refactor: update useThrottled hook to accept a generic callback type
* fix: loading of uri of audio files after merge
* feat: add audioFile style to enhance layout for audio files
* fix: tests
* Fix MM-61975
* Add missing strings
* Ensure the app gets logged out after not accepting the ToS
* Fix i18n and add comment
* Fix tests and address feedback
* Check for the right value coming from status
* Update texts
* Add new team picker for search
* try fix result header
* fix style
* add test for team picker
* add some tests
* add tests on team list and team list item
* hide All Teams search behind FF
* use style variable for separator
* ALL TEAMS does not have a search history
* Update app/components/team_list/index.test.tsx
Co-authored-by: Elias Nahum <nahumhbl@gmail.com>
* move ALL_TEAMS_ID to a constant file
* memoize the construction of team list to prevent useless allocation
* combine pushes
* move style to stylesheet
* revert changes to Package.resolved
* improve team list index tests
* add test to ensure team picker does not show for just one team
* add test to ensure the file icon filter only shows when i'm on the file tab
* improve jsx readability by making the if test positive
* add test to make sure team picket does not show if there's only one team
* test: remove snapshot and add expect that separator exists in index 0 but index 1 (#8474)
* Trigger Build
---------
Co-authored-by: Elias Nahum <nahumhbl@gmail.com>
Co-authored-by: Mattermost Build <build@mattermost.com>
Co-authored-by: Rahim Rahman <rahim.rahman@mattermost.com>
* Fix timezone crash by adding all timezones to the polyfill
* update snapshots; be careful about undefined: diff on local vs CI
* one more that's different locally vs CI
* i18n
---------
Co-authored-by: Christopher Poile <cpoile@gmail.com>
* refactor: started with draft, done until new tabs for draft
* refactor: change the query and added the screen for draft
* added condition for fetching draft for channel delete or not
* refactor: added draft screen
* linter fixes
* Added draft post component
* added avatar and header display name for the draft post list
* added channel info component
* channel info completed
* proper naming
* added image file markdown acknowledgement support
* draft actions
* Fix the draft receiver in drafts
* separated send message handler
* Done with send drafts
* done with delete drafts
* change save to send draft
* handle lengthy message with show more button
* done with persistent message edit, send and delete drafts
* added alert for sending message
* added update at time for the drafts
* en.json extract fix
* Updated dependencies for useCallback
* refactor: added drafts list to animated list
* added swipeable component and delete conformation for drafts
* done with rendering of images in markdown for drafts
* en.json issue fixed
* fix en.json issue
* refactor: en.json fix
* addressed review comments
* updated image metadata handling code
* linter fixes
* added the empty draft screen
* linter fix
* style fix
* back button an android takes to the channel list page
* en.json fix
* draft actions theme compatible
* CSS fix for draft channel_info and avatar component
* removed the badge icon and change font style drafts
* fix send alert sender name for GMs
* updated snapshot
* added testId to the drafts components
* updated send draft test id
* clicking on draft takes to the channel
* Added toptip for draft tours
* intl extract
* Rebase to main and reverted local testing changes
* Added tooltip for drafts
* addressed review comments
* reset navigation when click on a draft in draft tabs
* fix the theme issue and navigation issue
* reverted back the draft click navigation changes
* observing draft when hitting back button
* removed the unwanted animiation
* updated regex for parsing markdown
* removed unnecessary checks and change folder name
* removed react memo and merge unwanted observes function
* removed unnecessary comments
* changed the name for observing and querying draft function
* removed memo from component level
* Text to FormattedText component
* Text to formatted text, change image name
* added confirmation modal for deleting draft from bottomsheet
* using common send_handler for both draft and post
* removed magic number for tooltip and bottomsheet
* renamed channel_info to draft_post_header
* text to formattedText for Edit drafts
* removed unnecessary changes
* minor fixes
* mounting draft only when there is draft
* map to reduce
* renamed SwipeableDraft to DraftSwipeAction
* name fixes
* isValidUrl to isParsableUrl and added test
* added test and addressed minor review comments
* added inline component for the duplicate code
* inlt fixes
* clearDraft is not optional
* optimised categories_list.tsx component
* Swipeable to ReanimatedSwipeable, TouchableWithoutFeedback to Pressable and folder name changes
* Added comment and disabled eslint rule for showing warning
* fixed component file name
* minor'
* Removed deprecated Animated createAnimatedComponent flatlist
* added test for missing protocol check
* import change for SwipeableMethod
* active tab for tablet view
* Updated the drafts icons
* Updated compass-icon version to v0.1.48
---------
Co-authored-by: Mattermost Build <build@mattermost.com>