* Convert user groups main modal to GenericModal, convert menu to Menu component, fixes
* Added useFocusTrap on other modals, fix DOM ordering
* [MM-64018] Add proper aria-labels to the menu button
* [MM-64025] Convert user group button to an actual button
* [MM-64017] Fixed aria-label on 3-dot menu in view user group modal
* [MM-64030] Show aria-live region when search results are rendered
* Fix tests
* PR feedback
* PR feedback
* fixed the url styling for webhooks to now use pure html instead of markdown
* remove code styling from outgoing webhook token
* updated test snapshots
* added code styling to more integrations tokens
* update snapshots
* fixed translation strings for english and german
* Fix notification message for posts with no text
Changed the default notification message from "did something new" to
"posted a message" for better clarity when receiving notifications
from posts with no readable text content.
Fixes: MM-61948
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* address feedback from code review
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Added user over usager alert in License and System Statistics page
* Fixed case below 90
* Fixed constant
* Linting
* Change over user notification threshold to 0
* Fix tests
* Saved dismissed preference
* Text tweek
* Fix tests
* More tests fixed
* Snapshot updated
* MM-63966 - save pannel not dissapearing after save
* adjust unit tests
* trim only on direct change
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
* [MM-62980] Set aria-describedby for Input component when again custom message is set
* [MM-62970] Change password reset send link input to Input
* Fix i18n
* Fix e2e
* fix snapshots
---------
Co-authored-by: yasserfaraazkhan <attitude3cena.yf@gmail.com>
* MM-63406: Update timezone automatically
On focus as well as every 30 minutes, check if the timezone has changed.
Also, ignore the momentjs cache, otherwise this value is static as per https://momentjs.com/timezone/docs/#/using-timezones/guessing-user-timezone/
> By default Moment Timezone caches the detected timezone. This means that subsequent calls to moment.tz.guess() will always return the same value.
* migrate away from enzyme
* MM-63406: Address PR feedback - add constants and improve comments
* MM-63406: Address PR feedback - Extract timezone logic to a separate component
- Created a new TimezoneManager component for handling timezone updates
- Used fake timers in tests to properly test the periodic update
- Removed visibility change handler to simplify the component
* fix linting
* Remove comments from getBrowserTimezone function
* Move updateTimezone function before useEffect
* Simplify timezone detection with Intl.DateTimeFormat().resolvedOptions().timeZone
* Fix style issues
* Improve timezone manager tests with jest.getTimerCount()
Used jest.getTimerCount() to verify timer cleanup on unmount instead of spying on clearInterval.
This change addresses PR feedback in #30856.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* MM-63406: Simplify timezone updates to check every minute
- Simplify timezone manager by removing focus event and only checking every minute
- Replace 30-minute interval with 1-minute interval for more responsive timezone detection
- Update tests to match new implementation
- Change removes focus/blur event handling as per PR feedback
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
* revert to simpler approach
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
Co-authored-by: Claude <noreply@anthropic.com>
* MM-63968 - remove channel name input plus one
* adjust test to most common use in webapp
* adjust error for min lenght and add back minlenght indicator under a param bool value
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
* MM-63965 - add scroll to advanced text editor
* show scroll only when content wraps in more than one line
* fix unit test
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
A recent change to the enterprise cluster code introduced the possibility that we could get cluster info with empty fields. This happens when we can't properly communicate with the related cluster node. In that case, we now show a warning to the admin.
* [MM-63000] Use CSS hover state instead of component state, add focus-within to ensure buttons are focusable
* [MM-63046] Allow draft panel to be correctly focusable and navigable using correct roles
* [MM-63046] Use `name` as `aria-label` for `Action`
* update locator for scheduled drafts and fix failing playwright tests
* fix lint
* PR feedback
* PR feedback
---------
Co-authored-by: yasserfaraazkhan <attitude3cena.yf@gmail.com>
On page load, we load ALL channels and channel members from all teams.
But then, on team_switch, we would again load channels and channel
members from that team. This was redundant and mainly kept
because previously the websocket events were considered unreliable.
Now with reliable websockets, and client-side pings, we can detect
broken connections faster and recover without loss.
Additionally, the getAllChannelMembers call would page through
all responses on the client side. This was inefficient and incur
extra latency. To optimize for this, we introduce server-side
streaming of the full response if page is set to -1.
This optimizes the intial response as well.
https://mattermost.atlassian.net/browse/MM-56906
```release-note
Optimize team switch operation by removing calls to get channels
and channel members.
```
Co-authored-by: Mattermost Build <build@mattermost.com>
* [MM-62973] Fix order of Close button and other buttons in the header
* [MM-63028] Add aria-live status area when searching for channels
* [MM-63027] Add announcement that channel is joined
* [MM-63034] Add role=checkbox and reformat HTML to have correct custom checkbox code
* Update snapshots from generic_modal change
* PR feedback
* PR feedback
* PR feedback
* [MM-62975] Convert results table to actual table instead of divs
* [MM-62981] Ensure remove user button is focusable
* fix playwright test
* fix playwright test
---------
Co-authored-by: yasserfaraazkhan <attitude3cena.yf@gmail.com>
This commit introduces listeners for network changes that will:
- Test the websocket if we get an offline event to check if we have disconnected.
- Re-connect the websocket immediately if we get an online event, and we are disconnected.
Additionally when a ping fails, we now immediately call the onclose() callback instead of waiting for the system to trigger it when the broken websocket closes. This allows us to re-connect much more quickly (since we don't have to wait for the broken websocket to get cleaned up by the system).
* First set of texts updated for Enterprise Adv upsells and trial
* Updated upsell message for all tiers
* Linting translation file
* Linting
* Reverting unintended styling changes
* my ide making lint more
* Fix tests
* More default texts updated
* Trial banner title
* Make advantages list translatable
* Text updates
* Fix tests
* More text tweaking
* Linting
* Reodered translations
* Fixed e2e test
* More linting
* Removed incorrect new test
* Fix test typo
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
* [MM-62987] Include description on aria-label for last reply time, make link focused when using up/down arrows.
* PR feedback
---------
Co-authored-by: Mattermost Build <build@mattermost.com>
* [MM-62974] Focus team name inputs when error occurs
* [MM-62984] Change h5 to label on create team screens
* [MM-63016] Add a page title for the create team page
* [MM-63025] Add role=alert and aria-describedby for error messages on create team page
* Fix i18n
* [MM-62986] Ensure focus goes back to the inputs after an error for Login/Create Account/MFA
* [MM-63011] Show outline on Mattermost logo link when focused
* [MM-63018] Remove tabindex from the login/signup cards and use <form> element for submit
* [MM-63014] Toggle aria-label when show/hide password is pressed
* [MM-63013] Mention the field name when showing an error message about the password field
* Fix lint
* Update screenshots and fix tests
* Update screenshots and fix tests
* Fix tests
* Update webapp/channels/src/components/mfa/setup/setup.tsx
Co-authored-by: Harrison Healey <harrisonmhealey@gmail.com>
* update screenshots
---------
Co-authored-by: yasserfaraazkhan <attitude3cena.yf@gmail.com>
Co-authored-by: Harrison Healey <harrisonmhealey@gmail.com>
* Fixed save state panel for channel banner
* Defined default background color
* Updated test
---------
Co-authored-by: Mattermost Build <build@mattermost.com>