Commit graph

133 commits

Author SHA1 Message Date
sabril
dab04576a1
MM-66972 Upgrade to node 24 and main dependencies with babel, webpack and jest (#34760)
Some checks are pending
API / build (push) Waiting to run
Server CI / Compute Go Version (push) Waiting to run
Server CI / Check mocks (push) Blocked by required conditions
Server CI / Check go mod tidy (push) Blocked by required conditions
Server CI / check-style (push) Blocked by required conditions
Server CI / Check serialization methods for hot structs (push) Blocked by required conditions
Server CI / Vet API (push) Blocked by required conditions
Server CI / Check migration files (push) Blocked by required conditions
Server CI / Generate email templates (push) Blocked by required conditions
Server CI / Check store layers (push) Blocked by required conditions
Server CI / Check mmctl docs (push) Blocked by required conditions
Server CI / Postgres with binary parameters (push) Blocked by required conditions
Server CI / Postgres (push) Blocked by required conditions
Server CI / Postgres (FIPS) (push) Blocked by required conditions
Server CI / Generate Test Coverage (push) Blocked by required conditions
Server CI / Run mmctl tests (push) Blocked by required conditions
Server CI / Run mmctl tests (FIPS) (push) Blocked by required conditions
Server CI / Build mattermost server app (push) Blocked by required conditions
Web App CI / check-lint (push) Waiting to run
Web App CI / check-i18n (push) Blocked by required conditions
Web App CI / check-types (push) Blocked by required conditions
Web App CI / test (platform) (push) Blocked by required conditions
Web App CI / test (mattermost-redux) (push) Blocked by required conditions
Web App CI / test (channels shard 1/4) (push) Blocked by required conditions
Web App CI / test (channels shard 2/4) (push) Blocked by required conditions
Web App CI / test (channels shard 3/4) (push) Blocked by required conditions
Web App CI / test (channels shard 4/4) (push) Blocked by required conditions
Web App CI / upload-coverage (push) Blocked by required conditions
Web App CI / build (push) Blocked by required conditions
* chore: upgrade to node 24 and dependencies mainly with babel, webpack and jest

* fix components tests, make trial modal passed on all node 20-24

* fix cache for platform packages

* updated test

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
2026-01-14 13:14:01 +08:00
Caleb Roseland
db55f9fa43
MM-66653: migrate i18n extraction from mmjstool to @formatjs/cli (#34498)
* feat(webapp): migrate i18n extraction from mmjstool to @formatjs/cli

Replace custom mmjstool with industry-standard @formatjs/cli for i18n
message extraction. Adds support for localizeMessage as a recognized
extraction function and enables comprehensive ESLint rules for i18n.

Changes by area:

Dependencies (package.json):
- Add @formatjs/cli v6.7.4
- Remove @mattermost/mmjstool dependency
- Replace i18n-extract script with formatjs command
- Remove mmjstool-specific scripts (clean-empty, check-empty-src)
- Add i18n-extract:check for diff validation

Code (utils.tsx):
- Refactor localizeMessage to accept MessageDescriptor format
- Support {id, defaultMessage, description} parameters
- Maintain Redux store access (non-React context compatible)
- Add comprehensive JSDoc documentation

Linting (.eslintrc.json):
- Configure formatjs settings with additionalFunctionNames
- Enable 9 formatjs ESLint rules including enforce-id (error)
- Ensure all messages require explicit manual IDs

CI/CD (webapp-ci.yml):
- Simplify i18n check to formatjs extraction + diff
- Remove mmjstool and mobile-dir references

Context: Second attempt at PR #25830. Uses manual IDs only with
[id] placeholder pattern to enforce explicit ID requirements.
ESLint will catch missing IDs during development.

* chore(webapp): add temporary i18n reconciliation tooling

Add helper script to analyze conflicts between en.json and
defaultMessage values in code. This tooling will be reverted
after initial migration cleanup is complete.

Tooling added:
- scripts/i18n-reconcile-conflicts.js: Analyzes conflicts
  - Detects spelling corrections
  - Identifies placeholder mismatches
  - Flags significant content changes
  - Provides recommendations on which version to keep

- npm script: i18n-reconcile

Usage:
  npm run i18n-reconcile

This will be reverted after reconciling the ~50 duplicate message
warnings and determining correct versions for conflicting messages.

* chore(webapp): upgrade eslint-plugin-formatjs and centralize formatjs deps

Move @formatjs/cli to root webapp package.json alongside other formatjs
dependencies for better monorepo organization. Upgrade eslint-plugin-formatjs
from 4.12.2 to 5.4.2 for latest features and bug fixes.

Changes:
- Upgrade eslint-plugin-formatjs: 4.12.2 → 5.4.2
- Move @formatjs/cli to webapp/package.json (from channels)
- Centralize formatjs tooling at monorepo root level

This provides:
- Better dependency management in monorepo
- Latest formatjs ESLint rules and features
- Consistent tooling across workspaces

* feat(webapp): make localizeMessage fully compatible with formatMessage API

Extend localizeMessage to accept a values parameter for placeholder
interpolation, making it fully compatible with react-intl's formatMessage API.
Remove the now-redundant localizeAndFormatMessage function.

Changes to localizeMessage:
- Add values parameter for {placeholder} interpolation
- Use getIntl() for proper ICU message formatting
- Support full formatMessage feature parity outside React contexts
- Update JSDoc with interpolation examples
- Mark as deprecated (prefer useIntl in React components)

Code cleanup:
- Remove localizeAndFormatMessage function (redundant)
- Migrate all localizeAndFormatMessage usages to localizeMessage
- Remove unused imports: getCurrentLocale, getTranslations
- Add getIntl import

Files migrated:
- notification_actions.tsx: notification.crt message
- app_command_parser_dependencies.ts: intlShim formatMessage

This consolidates i18n logic and provides a single, feature-complete
localization function for non-React contexts.

Example usage:
  // Before (old function)
  localizeAndFormatMessage(
    {id: 'welcome', defaultMessage: 'Hello {name}'},
    {name: 'John'}
  )

  // After (consolidated)
  localizeMessage(
    {id: 'welcome', defaultMessage: 'Hello {name}'},
    {name: 'John'}
  )

* refactor(i18n): remove intlShim abstraction, use IntlShape directly

Remove intlShim wrapper and use react-intl's IntlShape type throughout.

Key Changes:
- Remove intlShim constant from app_command_parser_dependencies.ts
- Update errorMessage() signature to accept IntlShape parameter
- Use IntlShape for intl properties in AppCommandParser and ParsedCommand
- Call getIntl() at function start in actions (command.ts, marketplace.ts)
- Pass IntlShape to AppCommandParser and doAppSubmit consistently

Files Modified:
- app_command_parser_dependencies.ts: Remove intlShim, update errorMessage
- app_command_parser.ts: Use IntlShape type
- command.ts, marketplace.ts: Call getIntl() early, pass to parser
- app_provider.tsx, command_provider.tsx: Use getIntl() in constructor
- apps.ts: Update doAppSubmit signature

Benefits: Better type safety, standard react-intl patterns, eliminates
unnecessary abstraction.

Context: Part of migration to @formatjs/cli tooling.

* refactor(webapp): remove deprecated t() function and refactor login validation

Remove the deprecated t() function that was used as a marker for the old
mmjstool extraction. With @formatjs/cli, this is no longer needed as
extraction happens directly from formatMessage calls.

Changes:
- Remove t() function definition from utils/i18n.tsx
- Remove t() import and marker calls from login.tsx
- Refactor login validation logic from multiple if statements to a clean
  switch(true) pattern that evaluates boolean combinations directly
- Add helpful comments documenting the structure of login method combinations
- Add default case as safety fallback

The switch(true) pattern eliminates the need to build a key string and makes
the login method combination logic clearer and more maintainable.

Prompt: Remove deprecated t() translation marker function used by old mmjstool.
Refactor login validation from if blocks to switch(true) with boolean cases.

* refactor(i18n): share IntlProvider's intl instance with getIntl()

Make getIntl() return the same IntlShape instance that IntlProvider creates,
ensuring consistency between React components (using useIntl()) and non-React
contexts (using getIntl()).

Changes:
- Add intlInstance storage in utils/i18n.tsx
- Export setIntl() function to store the intl instance
- Modify getIntl() to return stored instance if available, with fallback to
  createIntl() for tests and early initialization
- Add IntlCapture component in IntlProvider that uses useIntl() hook to
  capture and store the intl instance via setIntl()

Benefits:
- Single source of truth: Both React and non-React code use the same IntlShape
- Consistent translations: No duplicate translation loading or potential desync
- Leverages IntlProvider's translation loading lifecycle automatically
- Maintains fallback for edge cases where IntlProvider hasn't mounted yet

Prompt: Refactor getIntl() to reuse IntlProvider's intl instance instead of
creating a separate instance, ensuring both React and non-React contexts use
the same translations and intl configuration.

* 1

* exclude test files

* reset en.json

* refactor(i18n): inline message ID constants for formatjs extraction

Replace dynamic ID references with literal strings to enable proper formatjs
extraction. Formatjs can only extract from static message IDs, not from
variables or computed IDs.

Changes:
- configuration_bar.tsx: Inline AnnouncementBarMessages constants to literal
  string IDs ('announcement_bar.error.past_grace', 'announcement_bar.error.preview_mode')
- system_analytics.test.tsx: Replace variable IDs (totalPlaybooksID,
  totalPlaybookRunsID) with literal strings ('total_playbooks', 'total_playbook_runs')
- password.tsx: Use full message descriptor from passwordErrors object instead
  of dynamic ID with hardcoded defaultMessage. The errorId is still built
  dynamically using template strings, but the actual message is looked up from
  the passwordErrors defineMessages block where formatjs can extract it.

This eliminates all "[id]" placeholder entries from extraction output and
ensures all messages have proper extractable definitions.

Prompt: Fix dynamic message ID references that formatjs extraction can't parse.
Inline constants and use message descriptor lookups to enable clean extraction
without [id] placeholders.

* fix(i18n): add missing defaultMessage to drafts.tooltipText

The drafts.tooltipText FormattedMessage had an empty defaultMessage, causing
formatjs extraction to output an empty string for this message.

Added the proper defaultMessage with plural formatting for draft and scheduled
post counts.

Prompt: Fix empty defaultMessage in drafts tooltip causing extraction issues.

* feat(i18n): add --preserve-whitespace flag to formatjs extraction

Add the --preserve-whitespace flag to ensure formatjs extraction maintains
exact whitespace from defaultMessage values. This is important for messages
with intentional formatting like tabs, multiple spaces, or line breaks.

Prompt: Add --preserve-whitespace to i18n extraction to maintain exact formatting.

* feat(i18n): add custom formatjs formatter matching mmjstool ordering

Create custom formatter that replicates mmjstool's sorting behavior:
- Case-insensitive alphabetical sorting
- Underscore (_) sorts before dot (.) to match existing en.json ordering
- Simple key-value format (extracts defaultMessage)

The underscore-before-dot collation matches mmjstool's actual behavior and
reduces diff size by 50% compared to standard alphabetical sorting.

Changes:
- scripts/formatter.js: Custom compareMessages, format, and compile functions
- package.json: Use --format scripts/formatter.js instead of --format simple

Prompt: Create custom formatjs formatter matching mmjstool's exact sorting
behavior including underscore-before-dot collation to minimize migration diff.

* feat(i18n): enhance reconciliation script with git history metadata

Add git log lookups to show when each message was last modified in both
en.json and code files. This enables data-driven decisions about which
version to keep when resolving conflicts.

Enhancements:
- getEnJsonLastModified(): Find when an en.json entry last changed
- findCodeFile(): Locate source file for a message ID (handles id= and id:)
- getCodeLastModified(): Get last modification date for source files
- Caching for performance (minimizes git operations)

Output includes:
  📅 en.json:  [date] | [hash] | [commit message]
  📅 code:     [date] | [hash] | [commit message]
  📂 file:     [source file path]

Analysis shows en.json entries from 2023 while code actively updated
2024-2025, indicating code is more authoritative.

Prompt: Add git history to reconciliation report showing modification dates
for data-driven conflict resolution decisions.

* feat(i18n): add optional duplicate message ID check script

Add i18n-extract:check-duplicates script that fails if the same message ID
has different defaultMessages in multiple locations. This is kept as an
optional standalone script rather than auto-chained with i18n-extract to
allow the migration to proceed while duplicates are addressed separately.

Usage:
  npm run i18n-extract:check-duplicates

The script runs formatjs extract to /dev/null and checks stderr for
"Duplicate message id" warnings, failing if any are found.

Prompt: Add optional duplicate ID check as standalone npm script for gradual
migration without blocking on existing duplicate message IDs.

* about.enterpriseEditionLearn

* admin.accesscontrol.title

* eslint-plugin-formatjs version to eslint 8 compat

* admin.channel_settings.channel_detail.access_control_policy_title

* admin.connectionSecurityTls
- now: admin.connectionSecurityTls.title

* admin.customProfileAttribDesc
now:
- admin.customProfileAttribDesc.ldap
- admin.customProfileAttribDesc.saml

* admin.gitlab.clientSecretExample

* package-lock

* admin.google.EnableMarkdownDesc
- fix err `]` in admin.google.EnableMarkdownDesc.openid
- now:
  - admin.google.EnableMarkdownDesc.oauth
  - admin.google.EnableMarkdownDesc.openid

* admin.image.amazonS3BucketExample
- now:
  - admin.image.amazonS3BucketExample
  - admin.image.amazonS3BucketExampleExport

* admin.license.trialCard.contactSales

* admin.log.AdvancedLoggingJSONDescription
- now:
  - admin.log.AdvancedLoggingJSONDescription
  - admin.log.AdvancedAuditLoggingJSONDescription

* admin.rate.noteDescription
- now
  - admin.rate.noteDescription
  - admin.info_banner.restart_required.desc (3)

* admin.system_properties.user_properties.title
- now:
  - admin.system_properties.user_properties.title
  - admin.accesscontrol.user_properties.link.label

* admin.system_users.filters.team.allTeams, admin.system_users.filters.team.noTeams

* admin.user_item.email_title

* announcement_bar.error.preview_mode

* channel_settings.error_purpose_length

* deactivate_member_modal.desc
- now:
  - deactivate_member_modal.desc
  - deactivate_member_modal.desc_with_confirmation

* deleteChannelModal.canViewArchivedChannelsWarning

* edit_channel_header_modal.error

* filtered_channels_list.search
- now:
  - filtered_channels_list.search
  - filtered_channels_list.search.label

* flag_post.flag

* generic_icons.collapse

* installed_outgoing_oauth_connections.header

* intro_messages.group_message

* intro_messages.notificationPreferences
- now:
  - intro_messages.notificationPreferences
  - intro_messages.notificationPreferences.label

* katex.error

* multiselect.placeholder
- now:
  - multiselect.placeholder
  - multiselect.placeholder.addMembers

* post_info.pin, post_info.unpin, rhs_root.mobile.flag

take en.json

* texteditor.rewrite.rewriting

* user_groups_modal.addPeople

split to user_groups_modal.addPeople.field_title

* user.settings.general.validImage

take en.json

* userSettings.adminMode.modal_header

take en.json

* webapp.mattermost.feature.start_call

split to user_profile.call.start

* admin.general.localization.enableExperimentalLocalesDescription

take en.json

* login.contact_admin.title, login.contact_admin.detail

take en.json

* fix: correct spelling of "complementary" in accessibility sections

* Revert "about.enterpriseEditionLearn"

This reverts commit 23ababe1ce.

* about.enterpriseEditionLearn, about.planNameLearn

* fix: improve clarity and consistency in activity log and command descriptions

* fix: update emoji upload limits and improve help text for emoji creation

* fix easy round 1

* fix: improve messaging for free trial notifications and sales contact

take en.json

* admin.billing.subscription.planDetails.features.limitedFileStorage

take en.json

* admin.billing.subscription.updatePaymentInfo

take en.json

* fix easy round 2

* admin.complianceExport.exportFormat.globalrelay

take en.json

* fix round 3

* fix round 4

* fix round 5

* fix round 6

* fix closing tag, newlines, and popout title

* fix linting, +

* update snapshots

* test(webapp): update tests to match formatjs migration message changes

Update test assertions to reflect message text changes from the
mmjstool → @formatjs/cli migration. All changes align with the
corresponding i18n message updates in the codebase.

Changes:
- limits.test.tsx: Update capitalization (Message History → Message history,
  File Storage → File storage)
- emoji_picker.test.tsx: Update label (Recent → Recently Used)
- command.test.js: Add period to error message
- channel_activity_warning_modal.test.tsx: Update warning text assertion
- channel_settings_archive_tab.test.tsx: Update archive warning text
- feature_discovery.test.tsx: Update agreement name (Software and Services
  License Agreement → Software Evaluation Agreement)
- flag_post_modal.test.tsx: Update placeholder text (Select a reason for
  flagging → Select a reason)
- channel_intro_message.test.tsx: Remove trailing space from assertion
- elasticsearch_settings.tsx: Fix searchableStrings placeholder names
  (documentationLink → link) to match updated message format

All 983 test suites passing (12 tests fixed, 9088 tests total).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* chore(i18n): improve cross-platform compatibility and cleanup temporary tooling

Simplify i18n check scripts to reuse npm run i18n-extract, improving
cross-platform compatibility and reducing duplication.

Changes:
- Refactor i18n-extract:check to reuse base extraction command
  - Uses project-local temp file instead of /tmp (Windows compatible)
  - Simplified from duplicated formatjs command to npm run reuse
  - Add --throws flag to fail fast on extraction errors
  - Add helpful error message: "To update: npm run i18n-extract"

- Add i18n-extract:check to main check script
  - Now runs alongside ESLint and Stylelint checks
  - Ensures en.json stays in sync with code changes

- Remove i18n-extract:check-duplicates script
  - Redundant - duplicates are caught by i18n-extract automatically
  - Avoided grep dependency (not cross-platform)

- Remove temporary reconciliation tooling
  - Deleted scripts/i18n-reconcile-conflicts.js (served its purpose)
  - Removed i18n-reconcile npm script

- Add .i18n-check.tmp.json to .gitignore

i18n-extract:check now works on Windows, macOS, and Linux.
Requires only diff command (available via Git on Windows).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* ci(webapp): simplify i18n check using npm script

Replace custom i18n check in CI with npm run i18n-extract:check for
consistency with local development workflow.

Changes:
- Update check-i18n job to use npm run i18n-extract:check
- Remove manual cp/extract/diff steps (3 lines → 1 line)
- Consistent behavior between CI and local development
- Cross-platform compatible (no /tmp dependency)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat(i18n): add i18n extraction targets to Makefile and workspace scripts

Add Make targets and npm workspace scripts for i18n message extraction
to provide consistent tooling access across the project.

Changes:
- Add make i18n-extract target to webapp/Makefile
  - Extracts i18n messages from code to en.json

- Add make i18n-extract-check target to webapp/Makefile
  - Checks if en.json is in sync with code

- Add i18n-extract workspace script to webapp/package.json
  - Runs extraction across all workspaces

- Add i18n-extract:check workspace script to webapp/package.json
  - Runs sync check across all workspaces

Usage:
  make i18n-extract         # Extract messages
  make i18n-extract-check   # Check if en.json needs update
  npm run i18n-extract      # From webapp root
  npm run i18n-extract:check

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* feat(i18n): add cross-platform cleanup utility for temp files

Add Node.js cleanup script to handle temporary file removal in a
cross-platform manner, replacing platform-specific rm commands.

Changes:
- Add webapp/scripts/cleanup.js
  - Cross-platform file deletion utility
  - Silently handles missing files
  - Works on Windows/Mac/Linux

- Update i18n-extract:check to use cleanup script
  - Removes .i18n-check.tmp.json after diff
  - Cleans up on both success and failure paths

Usage:
  node scripts/cleanup.js <file1> [file2] [...]

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* chore(i18n): remove 'defineMessage' from additionalFunctionNames in ESLint config

* chore(i18n): update i18n-extract check script and remove unused cleanup utility

context: WSL is already required on windows

* chore(i18n): remove ESLint rule disabling for formatjs placeholders in admin definition

* chore(i18n): admin_definition
- re-add defineMessage to eslint additionalfunctionnames
- mark additional individual placeholder lines in admin_definition

* fix(i18n): correct typo in enterprise edition link message

* chore(i18n): fix escape sequences

* revert emoji.ts changes

* fix snapshots

* fix admin.google.EnableMarkdownDesc
- keep en.json but fix linkAPI and <strong>Create</strong>

* restore newlines, and final corrections check

* update snapshots

* fix: i18n

* chore(e2e): admin.complianceExport.exportJobStartTime.title

* chore(e2e): emoji_picker.travel-places

* chore(e2e): user.settings.general.incorrectPassword

* chore(e2e): signup_user_completed.create

* chore(e2e): fix Invite People

* chore(fix): admin console email heading

* chore(e2e): fix edit_channel_header_modal.placeholder

* chore(e2e): fix Create account

* chore(e2e): fix Create account

* chore(e2e): correct success message text in password update alert

* fix: admin guide label

* chore(e2e): update role name in invite people combobox

* chore(e2e): more "Create account"

* chore(e2e): fix authentication_spec

* lint

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Mattermost Build <build@mattermost.com>
2026-01-12 17:22:04 -06:00
sabril
0b0658bdd0
chore: upgrade playwright to 1.57 and its dependencies (#34769)
Some checks are pending
API / build (push) Waiting to run
Server CI / Compute Go Version (push) Waiting to run
Server CI / Check mocks (push) Blocked by required conditions
Server CI / Check go mod tidy (push) Blocked by required conditions
Server CI / check-style (push) Blocked by required conditions
Server CI / Check serialization methods for hot structs (push) Blocked by required conditions
Server CI / Vet API (push) Blocked by required conditions
Server CI / Check migration files (push) Blocked by required conditions
Server CI / Generate email templates (push) Blocked by required conditions
Server CI / Check store layers (push) Blocked by required conditions
Server CI / Check mmctl docs (push) Blocked by required conditions
Server CI / Postgres with binary parameters (push) Blocked by required conditions
Server CI / Postgres (push) Blocked by required conditions
Server CI / Postgres (FIPS) (push) Blocked by required conditions
Server CI / Generate Test Coverage (push) Blocked by required conditions
Server CI / Run mmctl tests (push) Blocked by required conditions
Server CI / Run mmctl tests (FIPS) (push) Blocked by required conditions
Server CI / Build mattermost server app (push) Blocked by required conditions
Web App CI / check-lint (push) Waiting to run
Web App CI / check-i18n (push) Blocked by required conditions
Web App CI / check-types (push) Blocked by required conditions
Web App CI / test (platform) (push) Blocked by required conditions
Web App CI / test (mattermost-redux) (push) Blocked by required conditions
Web App CI / test (channels shard 1/4) (push) Blocked by required conditions
Web App CI / test (channels shard 2/4) (push) Blocked by required conditions
Web App CI / test (channels shard 3/4) (push) Blocked by required conditions
Web App CI / test (channels shard 4/4) (push) Blocked by required conditions
Web App CI / upload-coverage (push) Blocked by required conditions
Web App CI / build (push) Blocked by required conditions
* chore: upgrade playwright to 1.57 and its dependencies

* bump webapp's npm to accept ^11.0.0

* updated per comment

* fix failed tests
2026-01-09 10:48:19 +08:00
Harrison Healey
5fe3987e91
Update web app package versions to 11.3.0 (#34750)
Some checks are pending
API / build (push) Waiting to run
Server CI / Compute Go Version (push) Waiting to run
Server CI / Check mocks (push) Blocked by required conditions
Server CI / Check go mod tidy (push) Blocked by required conditions
Server CI / check-style (push) Blocked by required conditions
Server CI / Check serialization methods for hot structs (push) Blocked by required conditions
Server CI / Vet API (push) Blocked by required conditions
Server CI / Check migration files (push) Blocked by required conditions
Server CI / Generate email templates (push) Blocked by required conditions
Server CI / Check store layers (push) Blocked by required conditions
Server CI / Check mmctl docs (push) Blocked by required conditions
Server CI / Postgres with binary parameters (push) Blocked by required conditions
Server CI / Postgres (push) Blocked by required conditions
Server CI / Postgres (FIPS) (push) Blocked by required conditions
Server CI / Generate Test Coverage (push) Blocked by required conditions
Server CI / Run mmctl tests (push) Blocked by required conditions
Server CI / Run mmctl tests (FIPS) (push) Blocked by required conditions
Server CI / Build mattermost server app (push) Blocked by required conditions
Web App CI / check-lint (push) Waiting to run
Web App CI / check-i18n (push) Blocked by required conditions
Web App CI / check-types (push) Blocked by required conditions
Web App CI / test (platform) (push) Blocked by required conditions
Web App CI / test (mattermost-redux) (push) Blocked by required conditions
Web App CI / test (channels shard 1/4) (push) Blocked by required conditions
Web App CI / test (channels shard 2/4) (push) Blocked by required conditions
Web App CI / test (channels shard 3/4) (push) Blocked by required conditions
Web App CI / test (channels shard 4/4) (push) Blocked by required conditions
Web App CI / upload-coverage (push) Blocked by required conditions
Web App CI / build (push) Blocked by required conditions
2025-12-16 14:26:18 -05:00
Jesse Hallam
f3dec59822
Update marked dependency to fix table rendering issue (#34497)
Updates the marked dependency to the latest master commit which includes
the fix for rendering tables with trailing empty cells followed by content.

Fixes #34369

Co-authored-by: Mattermost Build <build@mattermost.com>
2025-12-02 11:57:49 -04:00
M-ZubairAhmed
40488e35b0
[MM-66608][MM-66374] Upgrade Giphy SDK to v10 and added locale support for gif search (#34459)
* Update @giphy/js-fetch-api and @giphy/react-components to versions 5.7.0 and 10.1.0 respectively in package.json and package-lock.json

* Enhance GifPickerItems component to support language-specific GIF fetching. Added locale handling and updated fetch parameters for Giphy API calls, including sorting and rating options.
2025-11-14 12:56:07 +00:00
Harrison Healey
c89450e2cf
Update to Jest 30 (#34011)
* Unify version of Jest in subpackages

* Upgrade @types/jest

* Update jest and jest-watch-typeahead

* Add nock and node-fetch to client package

* Update snapshots for new version of Jest

* Replace renamed test assertions

* Update more snapshots

* Update type definitions to fix dependency install issues

* Re-add --coverage to CI tests

* Revert "Re-add --coverage to CI tests"

This reverts commit b59a66eb09.

* Update snapshots in components package

* Remove nock.disableNetConnect from Client4 tests

* Standardize how we mock fetch in different test environments

* Add --forceExit and --verbose to test-ci

* Try --no-watchAll?
2025-11-12 18:05:50 +00:00
Devin Binnie
1e14ed7f87
[MM-66358] AI-enabled rewriting of messages (#34407)
* [MM-66358] AI-enabled rewriting of messages

* Fixes and PR feedback

* Fix i18n

* Remove extraneous logger calls

* Update icons

* UX feedback

* Fix lint

* Couple more UX fixes
2025-11-11 14:14:21 +00:00
mm-prodsec-bot
bbfc057e8c
[Snyk] Security upgrade turndown from 7.2.0 to 7.2.2 (#34286)
* fix: webapp/channels/package.json to reduce vulnerabilities

The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-TURNDOWN-12304081

* Remove explicit dependency on turndown and update dependency in lockfile

* Re-add explicit dependency on turndown

---------

Co-authored-by: snyk-bot <snyk-bot@snyk.io>
Co-authored-by: Harrison Healey <harrisonmhealey@gmail.com>
2025-11-07 11:52:11 -05:00
Harrison Healey
bf01adc036
Update web app package versions to 11.1.0 (#34340) 2025-10-30 09:41:17 -04:00
Devin Binnie
841d505ea9
Add hooks for Desktop App theme syncing (#34145)
Some checks are pending
API / build (push) Waiting to run
Server CI / Compute Go Version (push) Waiting to run
Server CI / Check mocks (push) Blocked by required conditions
Server CI / Check go mod tidy (push) Blocked by required conditions
Server CI / check-style (push) Blocked by required conditions
Server CI / Check serialization methods for hot structs (push) Blocked by required conditions
Server CI / Vet API (push) Blocked by required conditions
Server CI / Check migration files (push) Blocked by required conditions
Server CI / Generate email templates (push) Blocked by required conditions
Server CI / Check store layers (push) Blocked by required conditions
Server CI / Check mmctl docs (push) Blocked by required conditions
Server CI / Postgres with binary parameters (push) Blocked by required conditions
Server CI / Postgres (push) Blocked by required conditions
Server CI / Postgres (FIPS) (push) Blocked by required conditions
Server CI / Generate Test Coverage (push) Blocked by required conditions
Server CI / Run mmctl tests (push) Blocked by required conditions
Server CI / Run mmctl tests (FIPS) (push) Blocked by required conditions
Server CI / Build mattermost server app (push) Blocked by required conditions
Web App CI / check-lint (push) Waiting to run
Web App CI / check-i18n (push) Waiting to run
Web App CI / check-types (push) Waiting to run
Web App CI / test (push) Waiting to run
Web App CI / build (push) Waiting to run
2025-10-15 20:16:54 +00:00
Harrison Healey
535d93ee98
MM-45255 Update web app to React 18 (#33858)
* Dependencies: Remove unused dependency on @mattermost/dynamic-virtualized-list

* Update Components package to React 18 and new version of RTL

* Upgrade React, React Redux, RTL, and associated libraries

I had to upgrade React Redux for the new version of React, and that
brought with it new versions of associated packges (Redux, Reselect,
Redux Thunk). A few other libraries needed to be updated or have their
explicit dependencies overridden for the new version of Redux as well.

To note for future dependency upgrades, redux-mock-store is deprecated,
and redux-batched-actions and redux-persist are inactive.

For RTL:
1. `@testing-library/react-hooks` has been rolled into
   `@testing-library/react`, and its interface has changed.
2. I had to make some changes to get TS to use the types for the new
   methods added to `expect`.

* Dependencies: Fix dom-accessibility-api patch from #33553

* Tests: Fix tests that use jest.spyOn with react-redux

* Functional: Remove usage of defaultProps on function components

* Tests: Remove usage of react-dom/test-utils

* Functional: Rename conflicting context prop on Apps components

* Tests: Always await on userEvent calls

* Functional: Patch react-overlays to fix pressing escape in unit tests

I did something similar in React Bootstrap a few weeks ago.

See https://github.com/mattermost/react-bootstrap/pull/5

* Tests: Prevent tests from fetching from real URLs

* Tests: Update snapshots changed by upgrading react-redux and styled-components

* Functional: Stop passing deprecated pure parameter to connect

* Tests: Change how we intercept console errors in tests to preserve stack traces

* Tests: Fix incorrect usage of act in Enzyme tests

These tests are a mix of:
1. Not calling act when performing something that will update the DOM (like clicking on a button or invoking a method) which either caused warnings or failed snapshots as changes weren't visible.
2. Calling act in weird ways (such as wrapping mount in an async act) which caused Enzyme to not function

Some of these changes just silence warnings, but most of them are required to make the test even run

* Tests: Fix incorrect usage of act in RTL tests

* Tests: Fix a few minor issues in tests

* Functional: Add note for why we're not using ReactDOM.createRoot

* Functional: Fix focus trap infinite recursion in test

* Types: Replace removed React.SFC

* Types: Fix type of functions in FormattedMessage values prop

* Functional: Fix DropdownInputHybrid placeholder

* Types: Patch type definitions of react-batched-actions

* Types: Fix mattermost-redux build failing due to type check in Redux Dev Tools

* Dependencies: Add type definitions for react-is

* Types: Update types around ReactNode and ReactElement

React's gotten more strict with these, so we need to be more careful with what
we return from a render method. In some of these places, we also misused some
types, so hopefully I've sorted those out.

* Types: Explicitly added types to all instances of useCallback

* Types/Tests: Update typing of Redux actions and hooks

useDispatch is sort of stricter now, but it doesn't seem to rely on the global type of `Dispatch` any more, so I ended up having to add an extra overload to make that work.

* Tests: Update new tests in useChannelSystemPolicies for new version of RTL

These were added on master after I updated RTL on the branch

* Tests: Update action used to test initial store state

* Functional: Remove remnants of code for hot reloading Redux store

* Types/Tests: Update typing around React Router

* Types/Functional: Update typing involving the FormattedMessage values prop

There's a couple functional changes to ensure that the value passed is either a valid string or Date

* Types: Misc fixes

* Functional: Don't pass unused props to ChannelHeader

* Functional: Ensure plugin setting text is rendered before passing to Setting component

The previous version might've allowed MessageDescriptors to be passed unformatted
into the Setting component (which would then be rendered in the DOM). As best as
I can tell, we never actually did that, so this shouldn't change anything in practice.

* Tests: Make tests for identifyElementRegion more reliable

* Tests: Update recent tests for new version of RTL

* E2E: Make editLastPostWithNewMessage more reliable

* Downgrade React to 18.2.0 and manually dedupe React versions

18.2.0 and 18.3.0 are nearly identical to one another, except 18.3.x includes
warnings when using any API that will be removed in React 19. I don't want to
flood the console and test logs with warnings for things we're not addressing
for the time being.

Also, they didn't export act from React itself until 18.3.1 for some reason
(despite the old import path printing a warning), so I needed to revert the
changes to its import path.

To get this all to work, for some reason, I had to manually delete all the
entries for `react` and `react-dom` from the lockfile to get NPM to use a
single version of React and ReactDOM everywhere. I did discover `npm dedupe`
in the process, but that didn't solve this problem where I was trying to
consistently downgrade everything.

* Revert changes to notice file build tool to speed up CI

* Add explicit version of types/scheduler

The version of `@types/react` that we use says it works with any version of
`@types/scheduler` which causes NPM to install a newer version of it which
is missing a file of types that it needs.

* Update new test to await on userEvent

* Fix Playwright test that relied on autogenerated class name

* Tests: Disable test for identifyElementRegion

* Functional: Change DynamicVirtualizedList ListItem to use useLayoutEffect

In a previous commit, I changed the RHS to use the monorepo
DynamicVirtualizedList instead of the old version that lived in its own repo.
That caused the RHS to no longer scroll to the bottom on initial mount or be
able to render additional pages (even though the posts are loaded). This seems
like it has to do with the improved size calculation that Zubair made because
that's the main difference in the monorepo version of that component.

For some reason I don't entirely understand, changing to useLayoutEffect seems
to fix that. I think that's because the old measurement code is written as a
class component, and useLayoutEffect fires at the same time as
componentDidMount/componentDidUpdate.

* Types: Revert some type changes to reduce test log output

* Functional: Fix places where useSelector returned new results when called with the same arguments

I wasn't planning on fixing this now, but I think the increased length of the warning logs in the tests are causing
the GitHub action for the unit tests to abort as it reaches around 10000 lines long.

* Tests: Fix place where mocked selector returned new results when called with the same arguments

Same reason as before, but this one only occurred because of a test's mocked selector. I replaced it with
a real one to get around that.

* Tests: Fail tests when selector returns new results when called with the same arguments

* Attempt to fix web app unit tests failing in CI

* Change CI tests to set workerIdleMemoryLimit instead of reducing maxWorkers

* Increase workerIdleMemoryLimit in CI

* Revert changes to test-ci command and revert changes to how unit test logs are collected

* Unrevert changes to test logging, re-add workerIdleMemoryLimit, and try disabling test coverage

* Actually disable coverage

* Fix flaky test

* Update a couple new tests to fit PR and remove an unnecessary act

* Replace bad mock in new unit test

* Fix types of new code

* Remove mock from new unit test
2025-10-07 11:11:12 -04:00
Jesse Hallam
8cace74692
MM-64486: Remove telemetry (#33606)
* MM-64486: Remove telemetry

Remove telemetry from Mattermost. We're no longer relying on Rudder upstream, and no longer making use of this information.

* recover mock for SystemStore.Get

* Fix TestClearPushNotificationSync by adding missing SystemStore mock

The test was failing because the SystemStore mock was missing the Get()
method that's required by the ServerId() function. Added the missing mock
to return a StringMap with SystemServerId.

* fix mocking issue

* Remove now-unused telemetry and constants

* Remove "Disable telemetry events" debug setting

* Remove empty functions

* Remove most "Telemetry tracking removed" comments

* Remove remains of DataPrefetch telemetry

* Remove now-unused prop from InviteMembersButton

* Remove trackDotMenuEvent

* Remove some more leftover comments

* Remove lingering logic related to trackingLocation

* Remove now-unused argument from useCopyText

* Remove lingering telemetry references from PreparingWorkspace

* fixup Remove trackDotMenuEvent

* Remove lingering telemetry references from signup page and password check

* Update snapshots and fix test broken by my changes

* Fix unintended behavior change in thread list filtering

Remove handleSetFilter wrapper that was accidentally modified during
telemetry removal. The function was calling clear() when switching to
unread filter, which was not the original behavior. Use setFilter
directly instead, restoring the original functionality.

* Remove unused useOpenDowngradeModal hook

The useOpenDowngradeModal hook was not being used anywhere in the codebase.

* Remove unused expandableLink from useExpandOverageUsersCheck

The expandableLink return value was not being used by any components.

* Re-add missing TeamLinkClicked performance telemetry

The mark(Mark.TeamLinkClicked) call was accidentally removed from the
handleSwitch function. This telemetry is needed for Looker-based
performance tracking.

* drop LogSettings.VerboseDiagnostics

---------

Co-authored-by: Harrison Healey <harrisonmhealey@gmail.com>
Co-authored-by: Mattermost Build <build@mattermost.com>
2025-09-04 18:46:18 +00:00
Harrison Healey
5f51497219
MM-51231 Replace react-custom-scrollbars with react-simplebar (#33783)
* Add simplebar-react at latest version supported by React 17

* Prevent sidebars and centre channel from overflowing the page vertically

* Add Scrollbars component and replace react-custom-scrollbars

* Remove react-custom-scrollbars

* Fix usage of Scrollbars in modals

The various way we reuse .more-modal, .more-modal__list, and
.filtered-user-list in slightly different ways really made painful. We
should revisit that at some point when we get the chance since those
classes are used in a bunch of contradictory ways like using
.more-modal__list in a popover list in Multiselect versus as part of the
modal in the Browse Channel modal. It also doesn't help that some modals
use Scrollbars and others just use `overflow: auto` on either the whole
modal or on the .more-modal__list.

* Fix dragging the LHS scrollbar also dragging the channel behind it

* Fix scrolling in Browse Channels modal

* Fix results in user group modals not scrolling

* Update snapshots and fix tests

* Prevent focusing simplebar divs (accessibility_sidebar_spec.ts)

* Fix admin LHS still being able to scroll (openid_spec.ts)

* Migrate Team Members modal to GenericModal and the new menu (manage_members_spec.js)

The menu was being cut off yet again by the contents of the modal, so I
migrated that to the new menu to portal it out of that. Unfortunately,
that caused the infinite recursion bug between MUI and React Bootstrap's
focus trap logic, so I had to also migrate the modal to GenericModal to
fix that.

* Update snapshot and fix test

* Update snapshot and fix test

* Fix another E2E test

* More snapshots
2025-09-03 18:30:19 -04:00
Harrison Healey
dabb443d2f
Update web app and subpackage versions to 10.12.0 (#33771) 2025-09-02 09:08:48 -04:00
Harrison Healey
dbf4e80d16
Remove dependency on Axios following Compass removal (#33761) 2025-08-21 16:28:03 -04:00
Harrison Healey
7dc6982472
Update React Bootstrap fork to support React 18 (#33661)
* Update React Bootstrap fork to support React 18

* Fix mismatched versions

* Change react-bootstrap version back to 0.34 branch
2025-08-20 18:27:13 -04:00
Harrison Healey
13a6e06093
MM-64380 Remove compass components (#33744)
* Remove Flex component

* Remove Heading component

* Remove StatusIcon component

* Migrate IconButton from Compass Components repo

* Remove unused variants of IconButton and move into GlobalHeader

We only actually used IconButton in a limited set of locations (all
currently in the global header), and if I tried to test other
variations, they seemed to often have issues (like white text on a white
background). Most of those seemed to be because the theme in the
CompassThemeProvider was missing fields and fell back to defaults that
didn't make sense, but there were also enough errors in IconButtonRoot
(like invalid transitions or other logical errors) that lead me to just
rip out everything we don't currently use.

* Remove CompassThemeProvider

* Remove remaining references to @mattermost/compass-components

* Remove prop that's no longer needed
2025-08-20 17:16:11 -04:00
Harrison Healey
51d0508c3f
MM-51230 Remove unused react-contextmenu dependency (#33671) 2025-08-19 19:00:54 -04:00
Harrison Healey
72dbc1488c
MM-64781 Update internal web app dependency versions and add script for future version updates (#33567)
* Update all web app dependencies to latest release branch version

* Add script to update web app package versions going forward
2025-08-13 10:37:29 -04:00
Pablo Vélez
a7a49784d3
Fix npm vulnerabilities (#33539)
* fix critical vulnerabilities in npm packages

* Polyfill buffer via webpack.ProvidePlugin after upgrading pbkdf2
2025-07-29 11:50:16 +02:00
Harrison Healey
5b6320b7dc
MM-62744 Change how custom URLs are autolinked to fix remote user at-mentions (#32080)
* Stop explicitly passing autocompleteUrlSchemes into text formatting code

This is the first part of changing how autocompleteUrlSchemes works so
that it can be moved to be part of the parser like in mobile instead of
happening in the renderer.

I'm not a fan of using the global store directly in utils/markdown, but
this seems like the only way to have this apply to all the Markdown
that's rendered in various helpers throughout the app. Ideally, we'd
have some getMarkdownParser selector and a hook which provides the
config, but that's a future improvement to make"

* MM-62744 Move URL filtering to the Markdown parser instead of the renderer

MM-62744 is caused by two things:

1. URL autolinking takes place in the Markdown parser which occurs
   before at-mention parsing which (despite the "parsing" part) happens
   in the Markdown renderer in the web app.
2. The autolinking in marked is very aggressive and identifies anything
   that looks like some:text as a link.

Those lead to remote mentions like `@user:server` being incorrectly
parsed by Markdown as a link to `user:server`. It isn't renderered as a
link because the URL filtering logic in the Markdown parser blocks that,
but at that point, the Markdown renderer won't check if it's an
at-mention.

By moving the URL filtering to occur earlier, like it does in the mobile
app, the Markdown code won't autolink `@user:server` (unless the server
has `user` configured as a custom URL scheme for some reason), so it's
free to be turned into an at-mention by the renderer code.

* MM-62744 Ensure various regexes and features support remote mentions

* Update marked back to master
2025-07-03 11:05:12 -04:00
M-ZubairAhmed
476b46d1d7
[MM-64501] Upgrade to web-vitals v5.0.3 (#31404) 2025-06-13 17:56:16 +05:30
Caleb Roseland
f2aa50170f
MM-63705: bump styled-components & luxon (#31030) 2025-06-05 11:35:16 -05:00
Ibrahim Serdar Acikgoz
35e06a2ee8
[MM-64422] Update icons for CEL Table Editor (#31213) 2025-05-30 22:39:24 +02:00
Harrison Healey
00af66459a
Enforce EOL newlines in CSS files (#31174) 2025-05-26 11:47:13 -04:00
Ibrahim Serdar Acikgoz
a344b3225b
[MM-61756] Attribute Based Access Control - Phase 1 (#30785)
Attribute Based Access Control - Base
* MM-63662

* MM-63919

* MM-63954

* MM-63955 

* MM-63425

* MM-63426

* MM-63458

* MM-63459

* MM-63603

* MM-63845

* MM-64146

* MM-64199

* MM-64201

* MM-64233

* MM-64247

* MM-64268

---------

Co-authored-by: Harshil Sharma <harshilsharma63@gmail.com>
Co-authored-by: Pablo Andrés Vélez Vidal <pablovv2012@gmail.com>
Co-authored-by: abhijit-singh <abhijitsingh0702@gmail.com>
Co-authored-by: Harrison Healey <harrisonmhealey@gmail.com>
2025-05-15 11:33:08 +02:00
Harrison Healey
15efbb658f
MM-63616 Remove react-hot-loader and hot-loader/react-dom (#30744) 2025-05-05 16:51:23 -04:00
Arya Khochare
faf68a6d86
MM-56630 Scroll Fix of center panel (#30144)
* pageup/pagedown button scroll for center post-list

* revert package.json

* changing id, using ? and returning in keyHandler

* added e2e test for pageup/pagedown scroll

* Fix dynamic-virtualized-list not being in lockfile and update path

Moving the package under the MM namespace wasn't necessary, but it stops
some warnings from NPM.

* Move E2E test from Cypress to Playwright

Cypress's cy.type doesn't seem to properly trigger browser functions
because it doesn't seem to use native keyboard events. A newer version
of Cypress has a new cy.press method which is supposed to use native
keyboard events, but it also only supports the tab key currently, so it
wouldn't be useful here.

* Fix new test on iPad

* Add page up/down support to RHS and Threads view

* Update type definitions for dynamic-virtualized-list

---------

Co-authored-by: Harrison Healey <harrisonmhealey@gmail.com>
2025-04-24 11:15:40 -04:00
M-ZubairAhmed
e9c54bf88e
[MM-63685] Virtualize drafts in the drafts list (#30563) 2025-04-23 11:38:04 +05:30
Harrison Healey
32ce2f13bb
MM-62382/MM-63615 Remove explicit reference to react-popper and remaining references to popper.js (#30743)
* Replace usage of react-popper in onboarding with floating-ui

* Remove direct dependency on react-popper

Compass components still depend on react-popper, but none of the web app
code does any more.

* Remove direct dependency on popper.js

* Remove unneeded dependency on @types/bootstrap and remaining indirect dependency on popper.js
2025-04-22 15:35:21 -04:00
M-ZubairAhmed
502506a517
[MM-55277] Team's menu doesn't follow standard accessible keyboard behavior (#29917) 2025-04-18 19:18:54 +05:30
Domenico Rizzo
b7d95f5368
[MM-23180] Take full-width punctuation marks as boundary for hyperlinks (#30084) 2025-02-28 10:00:45 +05:30
ayush-chauhan233
8e9a09e512
[MM-61647][MM-61651]: Upgraded react-select to v5 (#30070)
* [MM-61647]: Upgraded react-select to v5
- Updated old type definitions with new v5 packaged type definitions.
- Removed some unused props
- Updated onBlur, onFocus and handleInputChange methods in user_input_email component

* Fix incorrect usage of handleInputChange in ChannelsInput

* Remove type assertions from dropdown_input_hybrid.tsx

* Simplify typing of users_emails_input.tsx

* [MM-61647][MM-61651]: Fixed some type definitions and e2e failing test case

* [MM-61647][MM-61651]: Fixed type error in dropdown_input_hybrid

* [MM-61647][MM-61651]: Fixed failing CI type error and e2e test cases

* [MM-61647][MM-61651]: Fixed failing e2e test case

* [MM-61647][MM-61651]: Updated the styles and reverted the test case changes
- Fixed the theme not getting correctly inherited
- Fixed the timezone and language settings getting saved on enter

---------

Co-authored-by: Harrison Healey <harrisonmhealey@gmail.com>
Co-authored-by: Mattermost Build <build@mattermost.com>
2025-02-25 17:13:51 -05:00
Harrison Healey
96c2d4ae56
MM-62866 Update axios dependency (#30265)
I had to fight with NPM longer than I thought I would for the override
to take effect. I ended up having to manually tweak the
package-lock.json to get it to take.
2025-02-21 16:59:16 -05:00
enzowritescode
169274b3aa
[MM-62864] Bump katex to 0.16.21 (#30095) 2025-02-11 11:18:01 +05:30
Jesús Espino
9b87970c99
Migrating other 2 files from javascript to typescript (#29435)
* feat: Add initial store configuration for webapp channels

* refactor: Convert store/index.js to TypeScript with type definitions

* test: Add initial test file for store index

* refactor: Convert index.test.js to TypeScript with type annotations

* Removing old files

* Applying linter fixes

* Fixing some of the types errors

* fix: Type mock implementation of getState in global_actions.test.ts

* test: Add missing GlobalState import in global_actions.test.ts

* fix: Resolve TypeScript mock implementation error in global_actions.test.ts

* Some fixes

* Address CI problems

* Installing zen-observable types

* Addressing PR review comment

* Addressing PR review comment

* Addressing PR review comment

* Addressing PR review comment

* Addressing PR review comment

* Simpliying things

* Fixing CI

* Fixing types
2025-02-10 15:43:09 +01:00
Julien Tant
1b29abd857
Add typescript-eslint-language-service (#30015) 2025-02-04 15:29:29 -07:00
Harrison Healey
86aad9d0a5
Add platform/mattermost-redux package for publishing (#30020)
* Replace key-mirror with mattermost-redux/utils/key_mirror

At some point, we made our own version for mattermost-redux with proper type definitions
but we seem to have forgotten to use that everywhere in the web app.

* Remove Rudder reference from mattermost-redux

* Remove Giphy API from mattermost-redux

* Remove mattermost-webapp refernces from Client and Types packages

* Create platform/mattermost-redux without moving its source files

* Don't build mattermost-redux automatically

* Copy changes to package.json from platform/mattermost-redux to other packages

The changes to the typesVersions and exports fields are to make it
easier for tooling to know to make it so that importing a folder imports
the index file inside that folder since that's not standard to all
CommonJS packages.

The added type field is just a good pracice.

* Explicitly type re-exported selectors

For some reason, the types generated by the previous version of this didn't work
when mattermost-redux was built as a standalone package. Explicitly typing these
is a bit more verbose, but it fixes things.

* Fix import loop in selectors introduced by last commit

* Update package versions to 10.6.0

* Add explicit dependencies to mattermost-redux package

* Remove check and run scripts from mattermost-redux package

* Revert changes to NOTICE.txt
2025-02-04 22:26:46 +00:00
Saturnino Abril
95b22f47a0
MM-62426: Remove form-data from @mattermost/client (#29792) 2025-01-10 13:28:32 +08:00
Jesús Espino
4e1e7334d8
Migrate remaining javascript files in webapp/channels/src/plugins to typescript (#29386)
* feat: Migrate actions.js to TypeScript with type annotations

* feat: Migrate actions.js to TypeScript with correct action types

* feat: Add actions plugin for webapp channels

* feat: Migrate actions.js to TypeScript with type annotations

* feat: Add interactive dialog plugin for webapp channels

* feat: Migrate interactive_dialog.js to TypeScript with type definitions

* feat: Add export plugin module for webapp channels

* feat: Migrate export.js to TypeScript with type declarations

* feat: Add initial plugin index file for webapp channels

* feat: migrate plugins/index.js to TypeScript with type definitions

* test: Add export plugin test file

* feat: Migrate export.test.js to TypeScript with type assertions

* feat: Add emoji actions file to webapp channels

* feat: Migrate emoji_actions.js to TypeScript with full type support

* Fixing some issues

* Revert "feat: Migrate emoji_actions.js to TypeScript with full type support"

This reverts commit e64aabe9fc.

* fixing linter errors

* Fixing CI

* Addressing pr review comments

* Apply suggestions from code review

Co-authored-by: Harrison Healey <harrisonmhealey@gmail.com>

* Fixing linter errors

* Fixing CI

---------

Co-authored-by: Harrison Healey <harrisonmhealey@gmail.com>
2024-12-12 10:03:13 +01:00
M-ZubairAhmed
f80afad1b6
[MM-58441] Create a floating-ui Tooltip which will swap out ReactBootstrap tooltip (#29464)
Added a new tooltip
- components/team_sidebar/components/team_button.tsx
- components/post_view/reaction/reaction_tooltip/reaction_tooltip.tsx
- components/post_view/post_recent_reactions/post_recent_reactions.tsx
- components/common/comment_icon.tsx
2024-12-09 14:50:08 +00:00
Harrison Healey
c519bee236
Fixathon: Web app dependency updates part 2 (Sass) (#29037)
* Update sass-loader@16.0.2

* Update sass part 1 (actually update it)

* Update scss files to remove at-charset and use at-use instead of at-import

at-charset hasn't been needed since we switched to dart-sass, and
at-import is now deprecated. Most of this was done using sass-migrator.

We still use at-import for files imported from node_modules, but sass
doesn't seem to complain about that

* Inline at-extend rule that was causing an error

* Remove or inline at-use rules in components package
2024-11-15 12:23:11 -05:00
Harrison Healey
4136343476
Fixathon: Web app dependency updates part 1 (#29036)
* Ensure all packages remove a node_modules in their folder when cleaning

* Upgrade typescript to 5.6.3 and move to root package.json

Note that this currently fails to build the types package due to
@types/node which I'm going to try to remove

* Update @types/node to 20.11 to match .nvmrc

* Upgrade zen-observable to 0.10.0

It looks like localforage-observable uses its own version
of zen-observable because it hasn't been updated in years.
This seems like something we probably should remove.

* Update yargs to 17.7.2

* Update webpack-dev-server to 5.1.0

* Remove webpack-bundle-analyzer since we haven't used it in years

* Update webpack to 5.95.0

* Update web-vitals to 4.2.4

* Update turndown to 7.2.0

* Update tinycolor2 to 1.6.0

* Update timezones.json to 1.7.0

* Update stylelint to 16.10.0, stylelint-config-recommended-scss to 14.1.0, and stylelint-scss to 6.8.1

* Update webpack-cli to 5.1.4

* Update style-loader to 4.0.0

* Change all Webpack scripts to be ES modules

* Update strip-ansi to 7.1.0

This is a build script dependency

* Update chalk to 5.3.0

This is a build script dependency

* Update concurrently to 9.0.1

This is a build script dependency

* Update smooth-scroll-into-view-if-needed to 2.0.2

* MM-48205 Update serialize-error to 11.0.3

We didn't update this before because it's an ES module which caused Jest to complain. We can fix that by making Jest transform the it

* Update semver to 7.6.3

* Update types for semver, tinycolor2, turndown, and webpack

* Fix type issues: change Props to a type

* Fix type issues: invalid HTML attributes

* Remove unneeded option from Webpack config
2024-11-06 13:40:19 -05:00
Pablo Vélez
87cc13c590
Fixathon ICU - remove npm vulnerabilities from production version (#28999)
* fix high vulnerability present in braces

* remove vulnerabilities from pdfjs-dis and update types for node and react

* adapt the pdf preview file to the lib new version

* lock the estree version to a compatible version

* use minified version of worker and adjust webpack to support extension for ESM module process

* get working the pdf preview

* adjust jest to use babel correctly

* override asn1.js lib to keep working version

* upgrade semver version to a secure version

* remove no longer needed changes

* fix linter issues

* fix merge conflicts

* sync package-lock

* fix conflicts

* adjust lock to npm ci
2024-11-05 13:41:29 +01:00
Caleb Roseland
3ac1c9821b
MM-61198: react-hooks-testing-library and renderHookWithContext (#28886) 2024-10-29 08:56:22 -05:00
Devin Binnie
0c90b0363b
[MM-60609][MM-60612] Include Desktop App metrics in PerformanceReporter, add metrics in Prometheus for CPU/Memory usage (#28825)
* [MM-60609][MM-60612] Include Desktop App metrics in PerformanceReporter, add metrics in Prometheus for CPU/Memory usage

* Fix mocks

* PR feedback
2024-10-22 12:16:20 -04:00
Harrison Healey
e080f9f5ed
Change localizeMessage to take a MessageDescriptor as a parameter (#28141)
* Change localizeAndFormatMessage to take a MessageDescriptor

* Change localizeMessage to take a MessageDescriptor as a parameter

* Update mmjstool to support new localizeMessage signature

* Change mmjstool commit back to master branch
2024-09-24 12:07:51 -04:00
Caleb Roseland
355dd18e52
MM-60335: Upgrade to typescript 5.5.4 (#28099)
Co-authored-by: Mattermost Build <build@mattermost.com>
2024-09-24 10:39:35 -05:00
M-ZubairAhmed
5d7aa17a27
[MM-58726] Add a loading screen to initial load of the web app (#27740) 2024-08-26 12:41:59 +00:00