-
Notifications
You must be signed in to change notification settings - Fork 13k
chore: links module #37347
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
chore: links module #37347
Conversation
|
Looks like this PR is ready to merge! 🎉 |
|
WalkthroughCentralizes external URLs by adding a typed Changes
Sequence Diagram(s)No sequence diagrams provided. Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes
Possibly related PRs
Suggested labels
Suggested reviewers
Poem
Pre-merge checks and finishing touches✅ Passed checks (2 passed)
✨ Finishing touches🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro Disabled knowledge base sources:
📒 Files selected for processing (1)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## develop #37347 +/- ##
===========================================
+ Coverage 66.94% 68.02% +1.08%
===========================================
Files 3412 3359 -53
Lines 117434 115376 -2058
Branches 21503 20846 -657
===========================================
- Hits 78611 78481 -130
+ Misses 36147 34217 -1930
- Partials 2676 2678 +2
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 12
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
apps/meteor/client/views/admin/workspace/VersionCard/VersionCard.tsx (1)
99-106: Harden window.open with noopener/noreferrer to prevent reverse-tabnabbingThe
window.opencall at line 102 lacks security hardening for external links. Add the third parameter to includenoopenerandnoreferrer:- window.open(RELEASES_EXTERNAL_LINK, '_blank'); + window.open(RELEASES_EXTERNAL_LINK, '_blank', 'noopener,noreferrer');Additionally, the codebase has at least two other instances with the same vulnerability:
apps/meteor/client/views/outlookCalendar/OutlookEventsList/OutlookEventsList.tsx:91apps/meteor/client/views/admin/AdministrationRouter.tsx:41Both should receive the same hardening treatment for consistency and security.
🧹 Nitpick comments (4)
packages/i18n/src/locales/fa.i18n.json (1)
2086-2086: Consider adding quotes around the href placeholder for robustness.The updated
RetentionPolicyRoom_ReadTheDocsstring uses an unquoted template placeholder in the anchor href:href={{retentionPolicyUrl}}. While this may work depending on your templating framework, best practice for HTML attributes is to quote placeholder values:href="{{retentionPolicyUrl}}". This ensures better compatibility and guards against potential parsing issues.apps/meteor/client/sidebar/sections/OverMacLimitSection.tsx (1)
11-11: Consider simplifying:useEffectEventis unnecessary here.Since
links.go.pricingis a constant with no reactive dependencies, you can simplify this to an inline arrow function.Apply this diff to simplify:
- const handleClick = useEffectEvent(() => window.open(links.go.pricing));And update line 18:
- onClick={handleClick} + onClick={() => window.open(links.go.pricing)}Then remove the
useEffectEventimport from line 2:-import { useEffectEvent } from '@rocket.chat/fuselage-hooks';packages/i18n/src/locales/sv.i18n.json (1)
5283-5283: Quote href attribute and add rel="noopener noreferrer" for security best practice.The variable
fingerPrintChangedFaqis properly supplied atgit/apps/meteor/client/lib/links.ts:17and passed through the translation function inFingerprintChangeModal.tsx:39andFingerprintChangeModalConfirmation.tsx:47. The HTML is sanitized via DOMPurify before DOM insertion, which mitigates XSS risks. However, quoting the href attribute and addingrel="noopener noreferrer"follows HTML and security best practices fortarget="_blank"links:- "Unique_ID_change_detected_learn_more_link": "<a href={{fingerPrintChangedFaq}} target=\"_blank\">Läs mer om detta</a>", + "Unique_ID_change_detected_learn_more_link": "<a href=\"{{fingerPrintChangedFaq}}\" target=\"_blank\" rel=\"noopener noreferrer\">Läs mer om detta</a>",Verify manually for similar unquoted href patterns in other i18n locale files.
apps/meteor/client/components/GenericUpsellModal/hooks/useUpsellActions.ts (1)
6-10: Use of links.go.contactSales is appropriate; minor consistency nit.Adopting the centralized sales link is good. Optional: you use two hook vars (
handleOpenLinkandopenExternalLink) for the same purpose; consider using one for consistency.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Jira integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (107)
apps/meteor/app/cloud/server/functions/getCheckoutUrl.ts(1 hunks)apps/meteor/client/components/FingerprintChangeModal.tsx(2 hunks)apps/meteor/client/components/FingerprintChangeModalConfirmation.tsx(2 hunks)apps/meteor/client/components/GenericUpsellModal/hooks/useUpsellActions.ts(1 hunks)apps/meteor/client/components/Omnichannel/OutboundMessage/constants.ts(1 hunks)apps/meteor/client/lib/createSidebarItems.ts(2 hunks)apps/meteor/client/lib/links.ts(1 hunks)apps/meteor/client/omnichannel/cannedResponses/CannedResponsesTable.tsx(2 hunks)apps/meteor/client/omnichannel/monitors/MonitorsTable.tsx(2 hunks)apps/meteor/client/omnichannel/slaPolicies/SlaTable.tsx(2 hunks)apps/meteor/client/omnichannel/tags/TagsTable.tsx(2 hunks)apps/meteor/client/omnichannel/units/UnitsTable.tsx(2 hunks)apps/meteor/client/sidebar/footer/SidebarFooterWatermark.tsx(2 hunks)apps/meteor/client/sidebar/sections/AirGappedRestrictionBanner/AirGappedRestrictionBanner.tsx(1 hunks)apps/meteor/client/sidebar/sections/OverMacLimitSection.tsx(1 hunks)apps/meteor/client/sidebarv2/footer/SidebarFooterWatermark.tsx(2 hunks)apps/meteor/client/sidebarv2/sections/AirGappedRestrictionBanner/AirGappedRestrictionBanner.tsx(2 hunks)apps/meteor/client/views/account/accessibility/AccessibilityPage.tsx(2 hunks)apps/meteor/client/views/admin/customUserStatus/CustomUserStatusService.tsx(3 hunks)apps/meteor/client/views/admin/settings/Setting/Setting.tsx(1 hunks)apps/meteor/client/views/admin/settings/groups/LDAPGroupPage.tsx(2 hunks)apps/meteor/client/views/admin/subscription/utils/links.ts(1 hunks)apps/meteor/client/views/admin/workspace/VersionCard/VersionCard.tsx(1 hunks)apps/meteor/client/views/admin/workspace/VersionCard/modals/RegisterWorkspaceModal.tsx(1 hunks)apps/meteor/client/views/admin/workspace/VersionCard/modals/RegisterWorkspaceSetupModal/RegisterWorkspaceSetupStepOneModal.tsx(2 hunks)apps/meteor/client/views/e2e/SaveE2EPasswordModal.tsx(1 hunks)apps/meteor/client/views/home/cards/DesktopAppsCard.tsx(1 hunks)apps/meteor/client/views/home/cards/DocumentationCard.tsx(1 hunks)apps/meteor/client/views/home/cards/MobileAppsCard.tsx(1 hunks)apps/meteor/client/views/marketplace/AppsPage/UnsupportedEmptyState.tsx(2 hunks)apps/meteor/client/views/marketplace/components/UninstallGrandfatheredAppModal/UninstallGrandfatheredAppModal.tsx(2 hunks)apps/meteor/client/views/marketplace/components/UpdateRocketChatButton.tsx(1 hunks)apps/meteor/client/views/marketplace/sidebarItems.tsx(2 hunks)apps/meteor/client/views/omnichannel/agents/AgentsTable/AgentsTable.tsx(2 hunks)apps/meteor/client/views/omnichannel/businessHours/BusinessHoursDisabledPage.tsx(2 hunks)apps/meteor/client/views/omnichannel/contactInfo/AdvancedContactModal.tsx(2 hunks)apps/meteor/client/views/omnichannel/currentChats/CurrentChatsPage.tsx(2 hunks)apps/meteor/client/views/omnichannel/customFields/CustomFieldsTable.tsx(2 hunks)apps/meteor/client/views/omnichannel/departments/DepartmentsTable/DepartmentsTable.tsx(2 hunks)apps/meteor/client/views/omnichannel/directory/calls/CallTable.tsx(2 hunks)apps/meteor/client/views/omnichannel/directory/chats/ChatsTable/ChatsTable.tsx(2 hunks)apps/meteor/client/views/omnichannel/directory/contacts/ContactTable.tsx(2 hunks)apps/meteor/client/views/omnichannel/managers/ManagersTable.tsx(2 hunks)apps/meteor/client/views/omnichannel/triggers/TriggersTable.tsx(2 hunks)apps/meteor/client/views/omnichannel/webhooks/WebhooksPage.tsx(2 hunks)apps/meteor/client/views/room/E2EESetup/RoomE2EENotAllowed.tsx(1 hunks)apps/meteor/client/views/room/composer/ComposerFederation/ComposerFederationInvalidVersion.tsx(1 hunks)apps/meteor/client/views/room/contextualBar/Info/EditRoomInfo/EditRoomInfo.tsx(2 hunks)apps/meteor/client/views/room/contextualBar/RoomMembers/InviteUsers/InviteUsers.stories.tsx(2 hunks)apps/meteor/client/views/room/modals/E2EEModals/ResetKeysE2EEModal.tsx(1 hunks)apps/meteor/client/views/setupWizard/steps/RegisterServerStep.tsx(2 hunks)apps/meteor/client/voip/modals/DeviceSettingsModal.tsx(2 hunks)apps/meteor/tests/e2e/calendar.spec.ts(2 hunks)apps/meteor/tests/e2e/presence.spec.ts(5 hunks)packages/i18n/src/locales/af.i18n.json(1 hunks)packages/i18n/src/locales/ar.i18n.json(1 hunks)packages/i18n/src/locales/az.i18n.json(1 hunks)packages/i18n/src/locales/be-BY.i18n.json(1 hunks)packages/i18n/src/locales/bg.i18n.json(1 hunks)packages/i18n/src/locales/bs.i18n.json(1 hunks)packages/i18n/src/locales/ca.i18n.json(1 hunks)packages/i18n/src/locales/cs.i18n.json(1 hunks)packages/i18n/src/locales/cy.i18n.json(1 hunks)packages/i18n/src/locales/da.i18n.json(1 hunks)packages/i18n/src/locales/de-AT.i18n.json(1 hunks)packages/i18n/src/locales/de-IN.i18n.json(1 hunks)packages/i18n/src/locales/de.i18n.json(1 hunks)packages/i18n/src/locales/el.i18n.json(1 hunks)packages/i18n/src/locales/en.i18n.json(2 hunks)packages/i18n/src/locales/eo.i18n.json(1 hunks)packages/i18n/src/locales/es.i18n.json(1 hunks)packages/i18n/src/locales/fa.i18n.json(1 hunks)packages/i18n/src/locales/fi.i18n.json(1 hunks)packages/i18n/src/locales/fr.i18n.json(1 hunks)packages/i18n/src/locales/hi-IN.i18n.json(2 hunks)packages/i18n/src/locales/hr.i18n.json(1 hunks)packages/i18n/src/locales/hu.i18n.json(1 hunks)packages/i18n/src/locales/id.i18n.json(1 hunks)packages/i18n/src/locales/it.i18n.json(1 hunks)packages/i18n/src/locales/ja.i18n.json(1 hunks)packages/i18n/src/locales/ka-GE.i18n.json(1 hunks)packages/i18n/src/locales/km.i18n.json(1 hunks)packages/i18n/src/locales/ko.i18n.json(1 hunks)packages/i18n/src/locales/ku.i18n.json(1 hunks)packages/i18n/src/locales/lo.i18n.json(1 hunks)packages/i18n/src/locales/lt.i18n.json(1 hunks)packages/i18n/src/locales/lv.i18n.json(1 hunks)packages/i18n/src/locales/mn.i18n.json(1 hunks)packages/i18n/src/locales/ms-MY.i18n.json(1 hunks)packages/i18n/src/locales/nb.i18n.json(2 hunks)packages/i18n/src/locales/nl.i18n.json(1 hunks)packages/i18n/src/locales/nn.i18n.json(2 hunks)packages/i18n/src/locales/pl.i18n.json(1 hunks)packages/i18n/src/locales/pt-BR.i18n.json(2 hunks)packages/i18n/src/locales/pt.i18n.json(1 hunks)packages/i18n/src/locales/ro.i18n.json(1 hunks)packages/i18n/src/locales/ru.i18n.json(1 hunks)packages/i18n/src/locales/sk-SK.i18n.json(0 hunks)packages/i18n/src/locales/sl-SI.i18n.json(1 hunks)packages/i18n/src/locales/sq.i18n.json(1 hunks)packages/i18n/src/locales/sr.i18n.json(0 hunks)packages/i18n/src/locales/sv.i18n.json(2 hunks)packages/i18n/src/locales/ta-IN.i18n.json(1 hunks)packages/i18n/src/locales/th-TH.i18n.json(1 hunks)packages/i18n/src/locales/tr.i18n.json(1 hunks)packages/i18n/src/locales/uk.i18n.json(1 hunks)packages/i18n/src/locales/vi-VN.i18n.json(1 hunks)
⛔ Files not processed due to max files limit (3)
- packages/i18n/src/locales/zh-HK.i18n.json
- packages/i18n/src/locales/zh-TW.i18n.json
- packages/i18n/src/locales/zh.i18n.json
💤 Files with no reviewable changes (2)
- packages/i18n/src/locales/sk-SK.i18n.json
- packages/i18n/src/locales/sr.i18n.json
🧰 Additional context used
📓 Path-based instructions (3)
apps/meteor/tests/e2e/**/*.spec.ts
📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)
apps/meteor/tests/e2e/**/*.spec.ts: All Playwright test files must be located under apps/meteor/tests/e2e/ and use the .spec.ts extension (e.g., login.spec.ts)
Use descriptive test names that clearly communicate expected behavior
Use test.beforeAll() and test.afterAll() for setup and teardown
Use test.step() to organize complex test scenarios
Group related tests in the same file
Utilize Playwright fixtures (test, page, expect) consistently
Prefer web-first assertions (e.g., toBeVisible, toHaveText)
Use expect matchers (toEqual, toContain, toBeTruthy, toHaveLength, etc.) instead of assert statements
Maintain test isolation between test cases
Ensure a clean state for each test execution
Ensure tests run reliably in parallel without shared state conflicts
Files:
apps/meteor/tests/e2e/presence.spec.tsapps/meteor/tests/e2e/calendar.spec.ts
apps/meteor/tests/e2e/**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)
apps/meteor/tests/e2e/**/*.{ts,tsx,js,jsx}: Write concise, technical TypeScript/JavaScript with accurate typing
Follow DRY by extracting reusable logic into helper functions or page objects
Avoid code comments in the implementation
Files:
apps/meteor/tests/e2e/presence.spec.tsapps/meteor/tests/e2e/calendar.spec.ts
apps/meteor/tests/e2e/**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)
apps/meteor/tests/e2e/**/*.{ts,tsx}: Avoid using page.locator(); prefer semantic locators like page.getByRole, page.getByLabel, page.getByText, and page.getByTitle
Store commonly used locators in variables/constants for reuse
Use page.waitFor() with specific conditions and avoid hardcoded timeouts
Implement proper wait strategies for dynamic content
Follow the Page Object Model pattern consistently
Files:
apps/meteor/tests/e2e/presence.spec.tsapps/meteor/tests/e2e/calendar.spec.ts
🧠 Learnings (22)
📚 Learning: 2025-09-16T22:09:18.041Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/test-cases.mdc:0-0
Timestamp: 2025-09-16T22:09:18.041Z
Learning: Use Rocket.Chat primary documentation and provided reference files for guidance
Applied to files:
apps/meteor/client/lib/links.tsapps/meteor/client/components/Omnichannel/OutboundMessage/constants.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Use descriptive test names that clearly communicate expected behavior
Applied to files:
apps/meteor/tests/e2e/presence.spec.tsapps/meteor/tests/e2e/calendar.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Ensure tests run reliably in parallel without shared state conflicts
Applied to files:
apps/meteor/tests/e2e/presence.spec.tsapps/meteor/tests/e2e/calendar.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Utilize Playwright fixtures (test, page, expect) consistently
Applied to files:
apps/meteor/tests/e2e/presence.spec.tsapps/meteor/tests/e2e/calendar.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Maintain test isolation between test cases
Applied to files:
apps/meteor/tests/e2e/presence.spec.tsapps/meteor/tests/e2e/calendar.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Ensure a clean state for each test execution
Applied to files:
apps/meteor/tests/e2e/presence.spec.tsapps/meteor/tests/e2e/calendar.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Use expect matchers (toEqual, toContain, toBeTruthy, toHaveLength, etc.) instead of assert statements
Applied to files:
apps/meteor/tests/e2e/presence.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,tsx} : Implement proper wait strategies for dynamic content
Applied to files:
apps/meteor/tests/e2e/presence.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Prefer web-first assertions (e.g., toBeVisible, toHaveText)
Applied to files:
apps/meteor/tests/e2e/presence.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : All Playwright test files must be located under apps/meteor/tests/e2e/ and use the .spec.ts extension (e.g., login.spec.ts)
Applied to files:
apps/meteor/tests/e2e/presence.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Group related tests in the same file
Applied to files:
apps/meteor/tests/e2e/presence.spec.tsapps/meteor/tests/e2e/calendar.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,tsx} : Follow the Page Object Model pattern consistently
Applied to files:
apps/meteor/tests/e2e/presence.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,tsx} : Store commonly used locators in variables/constants for reuse
Applied to files:
apps/meteor/tests/e2e/presence.spec.tsapps/meteor/client/views/room/E2EESetup/RoomE2EENotAllowed.tsxapps/meteor/client/views/e2e/SaveE2EPasswordModal.tsxapps/meteor/tests/e2e/calendar.spec.tsapps/meteor/client/views/home/cards/MobileAppsCard.tsx
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,tsx,js,jsx} : Avoid code comments in the implementation
Applied to files:
apps/meteor/client/views/room/E2EESetup/RoomE2EENotAllowed.tsxapps/meteor/client/views/e2e/SaveE2EPasswordModal.tsxapps/meteor/tests/e2e/calendar.spec.tsapps/meteor/client/views/home/cards/MobileAppsCard.tsx
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,tsx} : Avoid using page.locator(); prefer semantic locators like page.getByRole, page.getByLabel, page.getByText, and page.getByTitle
Applied to files:
apps/meteor/client/views/room/E2EESetup/RoomE2EENotAllowed.tsxapps/meteor/client/views/account/accessibility/AccessibilityPage.tsxapps/meteor/client/views/e2e/SaveE2EPasswordModal.tsx
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,tsx,js,jsx} : Write concise, technical TypeScript/JavaScript with accurate typing
Applied to files:
apps/meteor/client/views/room/E2EESetup/RoomE2EENotAllowed.tsxapps/meteor/tests/e2e/calendar.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/page-objects/**/*.ts : Utilize and place Page Object implementations under apps/meteor/tests/e2e/page-objects/
Applied to files:
apps/meteor/client/views/room/E2EESetup/RoomE2EENotAllowed.tsx
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.{ts,tsx,js,jsx} : Follow DRY by extracting reusable logic into helper functions or page objects
Applied to files:
apps/meteor/client/views/room/E2EESetup/RoomE2EENotAllowed.tsxapps/meteor/client/views/e2e/SaveE2EPasswordModal.tsxapps/meteor/tests/e2e/calendar.spec.ts
📚 Learning: 2025-10-28T16:53:42.761Z
Learnt from: ricardogarim
Repo: RocketChat/Rocket.Chat PR: 37205
File: ee/packages/federation-matrix/src/FederationMatrix.ts:296-301
Timestamp: 2025-10-28T16:53:42.761Z
Learning: In the Rocket.Chat federation-matrix integration (ee/packages/federation-matrix/), the createRoom method from rocket.chat/federation-sdk will support a 4-argument signature (userId, roomName, visibility, displayName) in newer versions. Code using this 4-argument call is forward-compatible with planned library updates and should not be flagged as an error.
Applied to files:
apps/meteor/client/views/room/E2EESetup/RoomE2EENotAllowed.tsxapps/meteor/client/views/room/composer/ComposerFederation/ComposerFederationInvalidVersion.tsx
📚 Learning: 2025-10-06T20:32:23.658Z
Learnt from: d-gubert
Repo: RocketChat/Rocket.Chat PR: 37152
File: packages/apps-engine/tests/test-data/utilities.ts:557-573
Timestamp: 2025-10-06T20:32:23.658Z
Learning: In packages/apps-engine/tests/test-data/utilities.ts, the field name `isSubscripbedViaBundle` in the `IMarketplaceSubscriptionInfo` type should not be flagged as a typo, as it may match the upstream API's field name.
Applied to files:
apps/meteor/client/views/admin/subscription/utils/links.ts
📚 Learning: 2025-09-19T15:15:04.642Z
Learnt from: rodrigok
Repo: RocketChat/Rocket.Chat PR: 36991
File: apps/meteor/server/services/federation/infrastructure/rocket-chat/adapters/Settings.ts:219-221
Timestamp: 2025-09-19T15:15:04.642Z
Learning: The Federation_Matrix_homeserver_domain setting in apps/meteor/server/services/federation/infrastructure/rocket-chat/adapters/Settings.ts is part of the old federation system and is being deprecated/removed, so configuration issues with this setting should not be flagged for improvement.
Applied to files:
apps/meteor/client/views/admin/settings/Setting/Setting.tsxapps/meteor/client/views/room/composer/ComposerFederation/ComposerFederationInvalidVersion.tsx
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
Repo: RocketChat/Rocket.Chat PR: 0
File: .cursor/rules/playwright.mdc:0-0
Timestamp: 2025-09-16T22:08:51.490Z
Learning: Applies to apps/meteor/tests/e2e/**/*.spec.ts : Use test.beforeAll() and test.afterAll() for setup and teardown
Applied to files:
apps/meteor/tests/e2e/calendar.spec.ts
🧬 Code graph analysis (52)
apps/meteor/client/omnichannel/cannedResponses/CannedResponsesTable.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/omnichannel/departments/DepartmentsTable/DepartmentsTable.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/sidebar/sections/AirGappedRestrictionBanner/AirGappedRestrictionBanner.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/omnichannel/directory/calls/CallTable.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/omnichannel/monitors/MonitorsTable.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/admin/workspace/VersionCard/modals/RegisterWorkspaceModal.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/sidebarv2/sections/AirGappedRestrictionBanner/AirGappedRestrictionBanner.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/omnichannel/directory/contacts/ContactTable.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/omnichannel/units/UnitsTable.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/omnichannel/businessHours/BusinessHoursDisabledPage.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/home/cards/DocumentationCard.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/omnichannel/slaPolicies/SlaTable.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/tests/e2e/presence.spec.ts (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/sidebar/footer/SidebarFooterWatermark.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/omnichannel/agents/AgentsTable/AgentsTable.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/omnichannel/webhooks/WebhooksPage.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/room/E2EESetup/RoomE2EENotAllowed.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/account/accessibility/AccessibilityPage.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/marketplace/components/UninstallGrandfatheredAppModal/UninstallGrandfatheredAppModal.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/omnichannel/currentChats/CurrentChatsPage.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/home/cards/DesktopAppsCard.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/voip/modals/DeviceSettingsModal.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/omnichannel/managers/ManagersTable.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/admin/subscription/utils/links.ts (2)
apps/meteor/client/components/Omnichannel/OutboundMessage/constants.ts (1)
CONTACT_SALES_LINK(4-4)apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/room/modals/E2EEModals/ResetKeysE2EEModal.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/admin/customUserStatus/CustomUserStatusService.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/omnichannel/contactInfo/AdvancedContactModal.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/room/contextualBar/RoomMembers/InviteUsers/InviteUsers.stories.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/omnichannel/customFields/CustomFieldsTable.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/e2e/SaveE2EPasswordModal.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/components/GenericUpsellModal/hooks/useUpsellActions.ts (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/omnichannel/directory/chats/ChatsTable/ChatsTable.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/admin/settings/Setting/Setting.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/components/Omnichannel/OutboundMessage/constants.ts (2)
apps/meteor/client/lib/links.ts (1)
links(3-46)apps/meteor/client/views/admin/subscription/utils/links.ts (1)
CONTACT_SALES_LINK(3-3)
apps/meteor/client/views/room/contextualBar/Info/EditRoomInfo/EditRoomInfo.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/admin/workspace/VersionCard/modals/RegisterWorkspaceSetupModal/RegisterWorkspaceSetupStepOneModal.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/admin/workspace/VersionCard/VersionCard.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/tests/e2e/calendar.spec.ts (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/marketplace/components/UpdateRocketChatButton.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/setupWizard/steps/RegisterServerStep.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/marketplace/AppsPage/UnsupportedEmptyState.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/sidebarv2/footer/SidebarFooterWatermark.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/sidebar/sections/OverMacLimitSection.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/omnichannel/tags/TagsTable.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/admin/settings/groups/LDAPGroupPage.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/components/FingerprintChangeModal.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/room/composer/ComposerFederation/ComposerFederationInvalidVersion.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/marketplace/sidebarItems.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/views/home/cards/MobileAppsCard.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/components/FingerprintChangeModalConfirmation.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
apps/meteor/client/lib/createSidebarItems.ts (2)
packages/ui-contexts/src/RouterContext.ts (1)
LocationPathname(16-16)apps/meteor/client/lib/links.ts (1)
GO_ROCKET_CHAT_PREFIX(1-1)
apps/meteor/client/views/omnichannel/triggers/TriggersTable.tsx (1)
apps/meteor/client/lib/links.ts (1)
links(3-46)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
♻️ Duplicate comments (3)
packages/i18n/src/locales/de.i18n.json (1)
3457-3457: Insert the missing space after the closing link; verify quoted href is allowed.Fix the typography; current string lacks a space after . Also, please confirm that quoting the href placeholder matches your i18n/template processing conventions.
- "RetentionPolicyRoom_ReadTheDocs": "Achtung! Eine fehlerhafte Anpassung dieser Einstellungen kann den gesamten Nachrichtenverlauf zerstören. Bitte lesen Sie die Dokumentation, bevor Sie das Feature <a href=\"{{retentionPolicyUrl}}\">hier</a>aktivieren.", + "RetentionPolicyRoom_ReadTheDocs": "Achtung! Eine fehlerhafte Anpassung dieser Einstellungen kann den gesamten Nachrichtenverlauf zerstören. Bitte lesen Sie die Dokumentation, bevor Sie das Feature <a href=\"{{retentionPolicyUrl}}\">hier</a> aktivieren.",packages/i18n/src/locales/af.i18n.json (1)
1815-1815: Spacing issue remains unfixed—duplicate of previous review.The spacing issue flagged in the past review still exists on line 1815. There is a missing space between the closing
</a>tag and the word "verander". The text currently reads:...hier</a>verander.It should read:
...hier</a> verander.See the previous review for details and suggested fix.
packages/i18n/src/locales/en.i18n.json (1)
5392-5392: Quote the href value (consistency and robustness).Use quotes around the interpolated URL to avoid edge cases with special chars and match surrounding patterns.
Apply this diff:
- "Unique_ID_change_detected_learn_more_link": "<a href={{fingerPrintChangedFaq}} target=\"_blank\">Learn more</a>", + "Unique_ID_change_detected_learn_more_link": "<a href=\"{{fingerPrintChangedFaq}}\" target=\"_blank\">Learn more</a>",Optionally add rel for safety:
- "Unique_ID_change_detected_learn_more_link": "<a href=\"{{fingerPrintChangedFaq}}\" target=\"_blank\">Learn more</a>", + "Unique_ID_change_detected_learn_more_link": "<a href=\"{{fingerPrintChangedFaq}}\" target=\"_blank\" rel=\"noopener noreferrer\">Learn more</a>",To catch any other unquoted hrefs:
#!/bin/bash rg -nP 'href=\{\{[^}]+\}\}' packages/i18n/src/locales --glob '*.json' -C1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Jira integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (55)
apps/meteor/client/lib/links.ts(1 hunks)packages/i18n/src/locales/af.i18n.json(1 hunks)packages/i18n/src/locales/ar.i18n.json(1 hunks)packages/i18n/src/locales/az.i18n.json(1 hunks)packages/i18n/src/locales/be-BY.i18n.json(1 hunks)packages/i18n/src/locales/bg.i18n.json(1 hunks)packages/i18n/src/locales/bs.i18n.json(1 hunks)packages/i18n/src/locales/ca.i18n.json(1 hunks)packages/i18n/src/locales/cs.i18n.json(1 hunks)packages/i18n/src/locales/cy.i18n.json(1 hunks)packages/i18n/src/locales/da.i18n.json(1 hunks)packages/i18n/src/locales/de-AT.i18n.json(1 hunks)packages/i18n/src/locales/de-IN.i18n.json(1 hunks)packages/i18n/src/locales/de.i18n.json(1 hunks)packages/i18n/src/locales/el.i18n.json(1 hunks)packages/i18n/src/locales/en.i18n.json(2 hunks)packages/i18n/src/locales/eo.i18n.json(1 hunks)packages/i18n/src/locales/es.i18n.json(1 hunks)packages/i18n/src/locales/fa.i18n.json(1 hunks)packages/i18n/src/locales/fi.i18n.json(1 hunks)packages/i18n/src/locales/fr.i18n.json(1 hunks)packages/i18n/src/locales/hi-IN.i18n.json(2 hunks)packages/i18n/src/locales/hr.i18n.json(1 hunks)packages/i18n/src/locales/hu.i18n.json(1 hunks)packages/i18n/src/locales/id.i18n.json(1 hunks)packages/i18n/src/locales/it.i18n.json(1 hunks)packages/i18n/src/locales/ja.i18n.json(1 hunks)packages/i18n/src/locales/ka-GE.i18n.json(1 hunks)packages/i18n/src/locales/km.i18n.json(1 hunks)packages/i18n/src/locales/ko.i18n.json(1 hunks)packages/i18n/src/locales/ku.i18n.json(1 hunks)packages/i18n/src/locales/lo.i18n.json(1 hunks)packages/i18n/src/locales/lt.i18n.json(1 hunks)packages/i18n/src/locales/lv.i18n.json(1 hunks)packages/i18n/src/locales/mn.i18n.json(1 hunks)packages/i18n/src/locales/ms-MY.i18n.json(1 hunks)packages/i18n/src/locales/nb.i18n.json(2 hunks)packages/i18n/src/locales/nl.i18n.json(1 hunks)packages/i18n/src/locales/nn.i18n.json(2 hunks)packages/i18n/src/locales/pl.i18n.json(1 hunks)packages/i18n/src/locales/pt-BR.i18n.json(2 hunks)packages/i18n/src/locales/pt.i18n.json(1 hunks)packages/i18n/src/locales/ro.i18n.json(1 hunks)packages/i18n/src/locales/ru.i18n.json(1 hunks)packages/i18n/src/locales/sl-SI.i18n.json(1 hunks)packages/i18n/src/locales/sq.i18n.json(1 hunks)packages/i18n/src/locales/sv.i18n.json(2 hunks)packages/i18n/src/locales/ta-IN.i18n.json(1 hunks)packages/i18n/src/locales/th-TH.i18n.json(1 hunks)packages/i18n/src/locales/tr.i18n.json(1 hunks)packages/i18n/src/locales/uk.i18n.json(1 hunks)packages/i18n/src/locales/vi-VN.i18n.json(1 hunks)packages/i18n/src/locales/zh-HK.i18n.json(1 hunks)packages/i18n/src/locales/zh-TW.i18n.json(1 hunks)packages/i18n/src/locales/zh.i18n.json(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (37)
- packages/i18n/src/locales/th-TH.i18n.json
- packages/i18n/src/locales/az.i18n.json
- packages/i18n/src/locales/ar.i18n.json
- packages/i18n/src/locales/pt.i18n.json
- packages/i18n/src/locales/eo.i18n.json
- packages/i18n/src/locales/fr.i18n.json
- packages/i18n/src/locales/pt-BR.i18n.json
- packages/i18n/src/locales/sl-SI.i18n.json
- packages/i18n/src/locales/mn.i18n.json
- apps/meteor/client/lib/links.ts
- packages/i18n/src/locales/el.i18n.json
- packages/i18n/src/locales/hu.i18n.json
- packages/i18n/src/locales/ko.i18n.json
- packages/i18n/src/locales/ru.i18n.json
- packages/i18n/src/locales/hi-IN.i18n.json
- packages/i18n/src/locales/fa.i18n.json
- packages/i18n/src/locales/cs.i18n.json
- packages/i18n/src/locales/ta-IN.i18n.json
- packages/i18n/src/locales/nb.i18n.json
- packages/i18n/src/locales/fi.i18n.json
- packages/i18n/src/locales/lv.i18n.json
- packages/i18n/src/locales/be-BY.i18n.json
- packages/i18n/src/locales/lt.i18n.json
- packages/i18n/src/locales/ja.i18n.json
- packages/i18n/src/locales/es.i18n.json
- packages/i18n/src/locales/lo.i18n.json
- packages/i18n/src/locales/cy.i18n.json
- packages/i18n/src/locales/id.i18n.json
- packages/i18n/src/locales/ku.i18n.json
- packages/i18n/src/locales/ca.i18n.json
- packages/i18n/src/locales/sv.i18n.json
- packages/i18n/src/locales/nl.i18n.json
- packages/i18n/src/locales/de-AT.i18n.json
- packages/i18n/src/locales/ka-GE.i18n.json
- packages/i18n/src/locales/nn.i18n.json
- packages/i18n/src/locales/da.i18n.json
- packages/i18n/src/locales/pl.i18n.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: 📦 Build Packages
- GitHub Check: CodeQL-Build
- GitHub Check: CodeQL-Build
🔇 Additional comments (15)
packages/i18n/src/locales/hr.i18n.json (1)
1930-1930: Localization update correctly enables dynamic URL injection.The change replaces the hard-coded href with a
{{retentionPolicyUrl}}template placeholder, enabling runtime injection of the centralized URL from the links module. The Croatian translation text and HTML structure remain intact. This aligns with the PR's objective to centralize external URL management.packages/i18n/src/locales/sq.i18n.json (1)
1813-1813: Clean alignment with centralized links module pattern.The replacement of a hard-coded URL with the
{{retentionPolicyUrl}}template placeholder is consistent with the PR's objective to centralize external links. The HTML structure and template syntax are correct.packages/i18n/src/locales/vi-VN.i18n.json (1)
1905-1905: ✓ Approve: Template variable correctly replaces hardcoded URL.The change at line 1905 properly updates
RetentionPolicyRoom_ReadTheDocsto use the dynamic placeholder{{retentionPolicyUrl}}instead of an inline hardcoded documentation link. This aligns with the PR objective to centralize external link management.The template syntax is correct, HTML structure is preserved, and the Vietnamese translation remains unchanged and readable.
packages/i18n/src/locales/de-IN.i18n.json (1)
2059-2059: Successfully centralizes retention policy documentation URL to dynamic placeholder.The translation string correctly replaces the hard-coded URL with the
{{retentionPolicyUrl}}template placeholder. This aligns with the PR's objective to centralize external links via a dedicated links module, enabling URL management from a single source rather than scattered throughout i18n files.packages/i18n/src/locales/it.i18n.json (1)
2259-2259: ✓ Appropriate use of template placeholder for URL management in i18n.The change replaces a hardcoded documentation URL with the
{{retentionPolicyUrl}}placeholder, which is the correct pattern for i18n files. This decouples the localized UI text from dynamic link values, allowing the URL to be centrally managed via the links module while keeping translations clean and maintainable.packages/i18n/src/locales/zh.i18n.json (1)
2716-2716: Template placeholder correctly replaces hard-coded URL.The translation string for
RetentionPolicyRoom_ReadTheDocsnow uses{{retentionPolicyUrl}}as a dynamic template variable instead of a hard-coded URL. The HTML anchor structure is preserved, and the Chinese text remains accurate. This change aligns with the PR's objective to centralize external link management.packages/i18n/src/locales/uk.i18n.json (1)
2277-2277: Centralize external link reference correctly. ✓The replacement of the hard-coded documentation URL with
{{retentionPolicyUrl}}placeholder aligns with the PR objective to centralize external links. The Ukrainian translation and HTML structure are preserved correctly.Verification needed: Confirm that the links module (
apps/meteor/client/lib/links.ts) exports aretentionPolicyUrlconstant and that the template substitution logic properly resolves this placeholder at runtime.packages/i18n/src/locales/ms-MY.i18n.json (1)
1816-1816: Verify that{{retentionPolicyUrl}}placeholder is properly defined and interpolated at runtime.The change replaces a hard-coded documentation URL with the
{{retentionPolicyUrl}}template placeholder, which is consistent with the PR's link centralization goal. Ensure that:
- The placeholder is defined in the links module referenced by the PR (e.g.,
packages/linksor similar).- The i18n system properly interpolates this placeholder before rendering the HTML string to users.
- All other locales have been updated consistently with the same placeholder (not different URLs).
packages/i18n/src/locales/tr.i18n.json (1)
2156-2156: Correct centralized URL placeholder implementation for Turkish locale.The change replaces the hardcoded documentation URL with a dynamic
{{retentionPolicyUrl}}placeholder, aligning with the PR's objective to centralize link management. The Turkish translation structure and semantics are preserved correctly.Verify that the component or view rendering this i18n string properly injects the
retentionPolicyUrlvariable from the centralized links module (e.g., fromapps/meteor/client/lib/links.tsor similar).packages/i18n/src/locales/bs.i18n.json (1)
1809-1809: ✓ Localization placeholder substitution looks good.The change correctly replaces the hardcoded documentation URL with the
{{retentionPolicyUrl}}template placeholder, aligning with the PR's centralized links module approach. The string remains valid JSON with proper HTML escaping.To ensure this integrates correctly with the links module, verify that:
- The placeholder
{{retentionPolicyUrl}}is defined and populated at runtime by the links module- All language files (not just bs.i18n.json) use the same placeholder name consistently
packages/i18n/src/locales/bg.i18n.json (1)
1812-1812: ✓ Replace hardcoded URL with template placeholder for centralized link management.This change aligns with the PR's goal to centralize external links. The
{{retentionPolicyUrl}}placeholder syntax is consistent with other dynamic template variables in localization files.Please verify that:
- The template variable
{{retentionPolicyUrl}}is properly injected at runtime by the component that renders this localization string.- This placeholder is defined in the centralized links module mentioned in the PR objectives, and a corresponding value is provided during template rendering.
packages/i18n/src/locales/zh-TW.i18n.json (1)
3011-3011: URL externalization applied correctly to locale string.The hard-coded documentation URL has been successfully replaced with the
{{retentionPolicyUrl}}template variable. The HTML structure and translation text remain intact. This change aligns with the PR objective to centralize external links.packages/i18n/src/locales/km.i18n.json (1)
2093-2093: Verify placeholder name matches centralized links module.The template placeholder syntax
{{retentionPolicyUrl}}looks correct and the HTML structure is preserved. However, this change requires verification that:
- The constant
retentionPolicyUrlis defined and exported from the centralizedlinksmodule- The placeholder name is consistent with naming conventions used elsewhere in the links module (e.g., camelCase with descriptive suffix
Url)Note: The file contains mixed placeholder styles—some entries use
[Bracket_Style](e.g.,[Verification_Url]at line 2591) while this change uses{{BraceStyle}}. Consider whether this inconsistency should be addressed across the i18n files for clarity.packages/i18n/src/locales/ro.i18n.json (1)
1813-1813: Verify that the{{retentionPolicyUrl}}placeholder is properly resolved at runtime.The placeholder format
{{retentionPolicyUrl}}differs from the file's email template placeholders ([Site_Name],[email], etc.) but aligns with other HTML content placeholders (e.g.,{{download_link}}at line 2212). Ensure that the code rendering this translation string properly substitutes{{retentionPolicyUrl}}with the actual URL from the centralized links module.Verify that related UI components (e.g.,
EditRoomInfo.tsxmentioned in the PR context) have been updated to passretentionPolicyUrlwhen rendering this translation, and test end-to-end to confirm the link renders correctly.packages/i18n/src/locales/en.i18n.json (1)
4427-4427: LGTM — href now quoted.The interpolation is correctly quoted and consistent with the file’s pattern. No further action needed.
Proposed changes (including videos or screenshots)
Create
linksmodule that holds all external links and replace them.Issue(s)
Steps to test or reproduce
Further comments
Summary by CodeRabbit
Refactor
Localization
Tests