Skip to content

Conversation

@dougfabris
Copy link
Member

@dougfabris dougfabris commented Oct 22, 2025

Proposed changes (including videos or screenshots)

Kapture 2025-10-29 at 12 42 57

Issue(s)

Steps to test or reproduce

Further comments

CORE-1213

Summary by CodeRabbit

  • Bug Fixes
    • Delete confirmation button is disabled while the deletion request is in progress, preventing duplicate deletions.
  • New Features
    • Delete confirmation dialog now provides clearer success/error feedback (toasts) and ensures UI focus/compose state is restored after deletion.
  • Quality
    • End-to-end tests updated to validate the disabled state during deletion and streamline deletion steps.

@dionisio-bot
Copy link
Contributor

dionisio-bot bot commented Oct 22, 2025

Looks like this PR is ready to merge! 🎉
If you have any trouble, please check the PR guidelines

@changeset-bot
Copy link

changeset-bot bot commented Oct 22, 2025

🦋 Changeset detected

Latest commit: 63f096b

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 41 packages
Name Type
@rocket.chat/meteor Minor
@rocket.chat/core-typings Minor
@rocket.chat/rest-typings Minor
@rocket.chat/uikit-playground Patch
@rocket.chat/api-client Patch
@rocket.chat/apps Patch
@rocket.chat/core-services Patch
@rocket.chat/cron Patch
@rocket.chat/ddp-client Patch
@rocket.chat/freeswitch Patch
@rocket.chat/fuselage-ui-kit Major
@rocket.chat/gazzodown Major
@rocket.chat/http-router Patch
@rocket.chat/livechat Patch
@rocket.chat/model-typings Patch
@rocket.chat/ui-avatar Major
@rocket.chat/ui-client Major
@rocket.chat/ui-contexts Major
@rocket.chat/web-ui-registration Major
@rocket.chat/account-service Patch
@rocket.chat/authorization-service Patch
@rocket.chat/ddp-streamer Patch
@rocket.chat/omnichannel-transcript Patch
@rocket.chat/presence-service Patch
@rocket.chat/queue-worker Patch
@rocket.chat/stream-hub-service Patch
@rocket.chat/federation-matrix Patch
@rocket.chat/license Patch
@rocket.chat/media-calls Patch
@rocket.chat/omnichannel-services Patch
@rocket.chat/pdf-worker Patch
@rocket.chat/presence Patch
rocketchat-services Patch
@rocket.chat/models Patch
@rocket.chat/network-broker Patch
@rocket.chat/omni-core-ee Patch
@rocket.chat/mock-providers Patch
@rocket.chat/ui-video-conf Major
@rocket.chat/ui-voip Major
@rocket.chat/instance-status Patch
@rocket.chat/omni-core Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@dougfabris dougfabris added this to the 7.13.0 milestone Oct 22, 2025
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Oct 22, 2025

Walkthrough

Introduces a new DeleteMessageConfirmModal component and reworks the deletion flow to delegate deletion logic and UI state to that modal. requestMessageDeletion now opens the modal (passing resolve/reject). Tests and page-object helpers updated; confirm button is disabled while deletion is in progress.

Changes

Cohort / File(s) Summary
New Modal Component
apps/meteor/client/views/room/modals/DeleteMessageConfirmModal/DeleteMessageConfirmModal.tsx, apps/meteor/client/views/room/modals/DeleteMessageConfirmModal/index.ts
Adds DeleteMessageConfirmModal (default export + re-export). Renders a danger GenericModal, uses react-query useMutation to check permissions and perform deletion, shows success/error toasts, clears editing state if needed, disables confirm button while mutation is pending, and resolves/rejects via passed promises.
Flow Refactor
apps/meteor/client/lib/chats/flows/requestMessageDeletion.ts
Replaces inline deletion modal usage with DeleteMessageConfirmModal. Removes the internal try/catch deletion handler; keeps pre-check for permission and delegates deletion/results to the modal via resolve/reject props.
E2E Tests & Page Objects
apps/meteor/tests/e2e/message-actions.spec.ts, apps/meteor/tests/e2e/page-objects/fragments/home-content.ts
Tests renamed/refactored to use deleteLastMessage() helper. openLastMessageMenu switched to role-based selectors. deleteLastMessage now asserts the modal confirm button becomes disabled during the request.
Changeset
.changeset/moody-spoons-press.md
Adds changeset noting minor bump for @rocket.chat/meteor and that delete confirmation button is disabled while the request is in progress.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant RoomUI as Room UI
    participant Modal as DeleteMessageConfirmModal
    participant API as Server/API
    participant Toast

    User->>RoomUI: click "Delete" on message
    RoomUI->>Modal: open(message, room, resolve, reject)
    Modal->>User: show confirmation (confirm enabled)

    User->>Modal: click confirm
    Note right of Modal #f8f0d8: confirm button -> disabled
    Modal->>API: canDeleteMessage && deleteMessage
    alt deletion succeeds
        API-->>Modal: success
        Modal->>RoomUI: resolve()
        Modal->>Toast: show success
        Modal->>RoomUI: stop editing / refocus composer (if needed)
    else deletion fails
        API-->>Modal: error
        Modal->>Toast: show error
        Modal->>RoomUI: reject(error)
    end
    Modal->>RoomUI: onCancel / cleanup
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Verify resolve/reject wiring in requestMessageDeletion and modal props.
  • Inspect mutation error handling and translation usage.
  • Confirm editing-state cleanup and composer focus logic in the modal.
  • Check E2E selector changes and the reliability of the disabled-button assertion.

Suggested labels

stat: ready to merge

Suggested reviewers

  • dougfabris
  • MartinSchoeler
  • tassoevan

Poem

🐰 A careful tap, a cautious click—
The modal waits, the button sticks.
One true delete, no double-spin,
A tidy chat, no noisy din.

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title Check ✅ Passed The PR title "feat: Disable confirm button while requesting delete message" directly and clearly describes the main objective of the changeset. The title is concise, specific, and accurately reflects the core feature being implemented—disabling the deletion confirmation button during a delete request to prevent duplicate actions. The changes in the DeleteMessageConfirmModal component confirm this is the primary focus, with the button being disabled via the mutation's pending state. The title is neither vague nor overly broad, making it immediately understandable to reviewers scanning the repository history.
Linked Issues Check ✅ Passed The PR fully addresses the requirements from linked issue CORE-1213 by implementing a solution that prevents double-clicking on the delete confirmation button. The core requirement—preventing the "No message found with the id" error caused by duplicate deletion requests—is met through disabling the confirm button while a deletion request is in progress. The DeleteMessageConfirmModal component uses react-query's useMutation with a pending state to disable the button during the deletion process, and the test updates verify this disabled state is properly enforced. The changes also refactor the deletion flow to use the new modal component, which centralizes the deletion logic and error handling.
Out of Scope Changes Check ✅ Passed All changes in the PR are directly in-scope and related to the feature objective. The new DeleteMessageConfirmModal component and its index export file implement the core feature. The refactoring of requestMessageDeletion.ts to use the new modal is necessary to integrate the feature. The test updates in message-actions.spec.ts and home-content.ts are appropriately scoped to verify the button disable behavior and the overall deletion flow. The changeset entry is a standard process file. No unrelated modifications or cleanup tasks appear to be present.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/disableButtonDeleteMessage

📜 Recent 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.

📥 Commits

Reviewing files that changed from the base of the PR and between 26eac87 and 63f096b.

📒 Files selected for processing (1)
  • apps/meteor/tests/e2e/page-objects/fragments/home-content.ts (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/meteor/tests/e2e/page-objects/fragments/home-content.ts
⏰ 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

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov
Copy link

codecov bot commented Oct 22, 2025

Codecov Report

❌ Patch coverage is 61.11111% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 67.93%. Comparing base (65fbcbe) to head (63f096b).
⚠️ Report is 1 commits behind head on develop.

Additional details and impacted files

Impacted file tree graph

@@             Coverage Diff             @@
##           develop   #37276      +/-   ##
===========================================
+ Coverage    67.92%   67.93%   +0.01%     
===========================================
  Files         3356     3357       +1     
  Lines       114894   114897       +3     
  Branches     20754    20794      +40     
===========================================
+ Hits         78040    78057      +17     
+ Misses       34171    34155      -16     
- Partials      2683     2685       +2     
Flag Coverage Δ
e2e 57.46% <61.11%> (+<0.01%) ⬆️
unit 72.01% <ø> (+0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@dougfabris dougfabris marked this pull request as ready for review October 29, 2025 17:05
@dougfabris dougfabris requested a review from a team as a code owner October 29, 2025 17:05
Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

🧹 Nitpick comments (1)
apps/meteor/client/views/room/modals/DeleteMessageConfirmModal/DeleteMessageConfirmModal.tsx (1)

59-59: Use JSX children syntax instead of children prop.

React's canonical way to pass children is to use JSX elements between the component tags rather than the children prop.

Apply this diff to follow React best practices:

 	return (
 		<GenericModal
 			variant='danger'
 			title={t('Are_you_sure')}
 			confirmText={t('Yes_delete_it')}
-			children={room ? t('The_message_is_a_discussion_you_will_not_be_able_to_recover') : t('You_will_not_be_able_to_recover')}
 			onConfirm={deleteMessageMutation.mutate}
 			onCancel={onCancel}
 			confirmDisabled={deleteMessageMutation.isPending}
-		/>
+		>
+			{room ? t('The_message_is_a_discussion_you_will_not_be_able_to_recover') : t('You_will_not_be_able_to_recover')}
+		</GenericModal>
 	);
📜 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.

📥 Commits

Reviewing files that changed from the base of the PR and between 01aa489 and 26eac87.

📒 Files selected for processing (6)
  • .changeset/moody-spoons-press.md (1 hunks)
  • apps/meteor/client/lib/chats/flows/requestMessageDeletion.ts (2 hunks)
  • apps/meteor/client/views/room/modals/DeleteMessageConfirmModal/DeleteMessageConfirmModal.tsx (1 hunks)
  • apps/meteor/client/views/room/modals/DeleteMessageConfirmModal/index.ts (1 hunks)
  • apps/meteor/tests/e2e/message-actions.spec.ts (1 hunks)
  • apps/meteor/tests/e2e/page-objects/fragments/home-content.ts (2 hunks)
🧰 Additional context used
📓 Path-based instructions (4)
apps/meteor/tests/e2e/page-objects/**/*.ts

📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)

Utilize and place Page Object implementations under apps/meteor/tests/e2e/page-objects/

Files:

  • apps/meteor/tests/e2e/page-objects/fragments/home-content.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/page-objects/fragments/home-content.ts
  • apps/meteor/tests/e2e/message-actions.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/page-objects/fragments/home-content.ts
  • apps/meteor/tests/e2e/message-actions.spec.ts
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/message-actions.spec.ts
🧠 Learnings (15)
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
PR: RocketChat/Rocket.Chat#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/page-objects/fragments/home-content.ts
  • apps/meteor/tests/e2e/message-actions.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
PR: RocketChat/Rocket.Chat#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/tests/e2e/page-objects/fragments/home-content.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
PR: RocketChat/Rocket.Chat#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/tests/e2e/page-objects/fragments/home-content.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
PR: RocketChat/Rocket.Chat#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/page-objects/fragments/home-content.ts
  • apps/meteor/tests/e2e/message-actions.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
PR: RocketChat/Rocket.Chat#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/page-objects/fragments/home-content.ts
  • apps/meteor/tests/e2e/message-actions.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
PR: RocketChat/Rocket.Chat#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/page-objects/fragments/home-content.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
PR: RocketChat/Rocket.Chat#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/page-objects/fragments/home-content.ts
  • apps/meteor/tests/e2e/message-actions.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
PR: RocketChat/Rocket.Chat#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/tests/e2e/page-objects/fragments/home-content.ts
📚 Learning: 2025-09-23T19:22:59.217Z
Learnt from: dougfabris
PR: RocketChat/Rocket.Chat#36987
File: apps/meteor/tests/e2e/page-objects/fragments/room-toolbar.ts:10-20
Timestamp: 2025-09-23T19:22:59.217Z
Learning: In Playwright e2e tests, prefer stable selectors like data-qa-id attributes over localized text in getByRole() or getByText() calls to prevent test failures when UI language changes. Test translations separately by validating actual text content after ensuring UI interactions work with stable selectors.

Applied to files:

  • apps/meteor/tests/e2e/page-objects/fragments/home-content.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
PR: RocketChat/Rocket.Chat#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/page-objects/fragments/home-content.ts
  • apps/meteor/tests/e2e/message-actions.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
PR: RocketChat/Rocket.Chat#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/message-actions.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
PR: RocketChat/Rocket.Chat#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/tests/e2e/message-actions.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
PR: RocketChat/Rocket.Chat#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/tests/e2e/message-actions.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
PR: RocketChat/Rocket.Chat#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/message-actions.spec.ts
📚 Learning: 2025-09-16T22:08:51.490Z
Learnt from: CR
PR: RocketChat/Rocket.Chat#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/message-actions.spec.ts
🧬 Code graph analysis (1)
apps/meteor/client/views/room/modals/DeleteMessageConfirmModal/DeleteMessageConfirmModal.tsx (3)
packages/core-typings/src/IRoom.ts (1)
  • IRoom (21-95)
apps/meteor/client/lib/chats/ChatAPI.ts (1)
  • ChatAPI (108-163)
packages/core-typings/src/IMessage/IMessage.ts (1)
  • IMessage (138-239)
🪛 Biome (2.1.2)
apps/meteor/client/views/room/modals/DeleteMessageConfirmModal/DeleteMessageConfirmModal.tsx

[error] 59-59: Avoid passing children using a prop

The canonical way to pass children in React is to use JSX elements

(lint/correctness/noChildrenProp)

🔇 Additional comments (5)
apps/meteor/tests/e2e/message-actions.spec.ts (1)

119-126: LGTM! Test refactoring improves maintainability.

The test name is now more descriptive, and extracting the deletion steps into a helper function follows the DRY principle while maintaining the same test coverage.

Based on coding guidelines

apps/meteor/client/lib/chats/flows/requestMessageDeletion.ts (1)

31-42: LGTM! Clean separation of concerns.

The refactoring delegates deletion logic to the modal component while maintaining the promise-based control flow. This improves maintainability by having the modal own both the UI state and deletion logic.

apps/meteor/tests/e2e/page-objects/fragments/home-content.ts (2)

428-432: LGTM! Improved selector strategy.

The refactoring to use role-based selectors scoped to lastUserMessage follows the coding guidelines and provides more stable, semantic element targeting.

Based on coding guidelines


565-565: LGTM! Tests the core fix.

The assertion validates that the delete button becomes disabled during the deletion request, which directly addresses the double-click issue described in the PR objectives.

apps/meteor/client/views/room/modals/DeleteMessageConfirmModal/DeleteMessageConfirmModal.tsx (1)

62-62: LGTM! Core fix correctly implemented.

The confirmDisabled={deleteMessageMutation.isPending} prop correctly disables the confirm button while the deletion request is in progress, preventing the double-click issue described in the PR objectives.

@dougfabris dougfabris added the stat: QA assured Means it has been tested and approved by a company insider label Oct 30, 2025
@dionisio-bot dionisio-bot bot added the stat: ready to merge PR tested and approved waiting for merge label Oct 30, 2025
@dionisio-bot dionisio-bot bot removed the stat: ready to merge PR tested and approved waiting for merge label Oct 30, 2025
@dougfabris dougfabris added stat: QA assured Means it has been tested and approved by a company insider and removed stat: QA assured Means it has been tested and approved by a company insider labels Oct 31, 2025
@dionisio-bot dionisio-bot bot added the stat: ready to merge PR tested and approved waiting for merge label Oct 31, 2025
@kodiakhq kodiakhq bot merged commit 79c67c7 into develop Oct 31, 2025
53 checks passed
@kodiakhq kodiakhq bot deleted the feat/disableButtonDeleteMessage branch October 31, 2025 01:34
Layyzyy pushed a commit to Layyzyy/Rocket.Chat that referenced this pull request Nov 8, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stat: QA assured Means it has been tested and approved by a company insider stat: ready to merge PR tested and approved waiting for merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants