Skip to content

Conversation

@ryan953
Copy link
Member

@ryan953 ryan953 commented Oct 15, 2025

We want to make it more obvious that permissions are needed, and make the tooltip accessible for people on mobile devices

So i've added a red banner that appears after making a selection to inform the user. This is not a scalable solution, if there were more multi-select action-buttons then it wouldn't make as much sense to throw a banner up there for each button, explaining all the different permissions. What we're trying to do though is make things more discoverable for now (short term!) because people have missed the tooltip and have been confused.

SCR-20251014-remx

Fixes https://linear.app/getsentry/issue/REPLAY-763

…bled

We want to make it more obvious that permissions are needed, and make it accessible for people on mobile devices
@ryan953 ryan953 requested a review from a team as a code owner October 15, 2025 02:47
@linear
Copy link

linear bot commented Oct 15, 2025

@github-actions github-actions bot added the Scope: Frontend Automatically applied to PRs that change frontend components label Oct 15, 2025
selectedIds={selectedIds}
/>
) : null}
</Tooltip>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Button and Tooltip Vanish on Null Project

The DeleteReplays button and its tooltip disappear when project is null, even if oneProjectEligible is true and a disabled state with an explanation is intended. This happens because the button is conditionally rendered based on project's existence, which also causes the Tooltip to receive null children.

Fix in Cursor Fix in Web


{isAllSelected && disabledMessage ? (
<FullGridAlert type="error" system>
{disabledMessage}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Permission Banner Missing for Partial Selection

The permission error banner for deleting replays only appears when all replays are selected. When only some replays are selected, the delete button is disabled, but the banner explaining the lack of permission doesn't show up, leaving users without an explanation for the disabled action.

Fix in Cursor Fix in Web

@codecov
Copy link

codecov bot commented Oct 15, 2025

❌ 3 Tests Failed:

Tests completed Failed Passed Skipped
12177 3 12174 10
View the top 3 failed test(s) by shortest run time
useDeleteReplays queryOptionsToPayload should parse a start & end into rangeStart & rangeEnd
Stack Traces | 0.007s run time
Error: expect(received).toEqual(expected) // deep equality

- Expected  - 1
+ Received  + 1

  Object {
-   "environments": Array [],
+   "environments": undefined,
    "query": "id:[1,2]",
    "rangeEnd": "2017-10-17T06:41:20.000Z",
    "rangeStart": "2017-10-16T06:41:20.000Z",
  }
    at Object.toEqual (.../utils/replays/useDeleteReplays.spec.tsx:77:9)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:829:11)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/[email protected]..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/[email protected]..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/[email protected]..../jest-runner/build/testWorker.js:494:12)
useDeleteReplays queryOptionsToPayload should parse a statsPeriod into rangeStart & rangeEnd
Stack Traces | 0.01s run time
Error: expect(received).toEqual(expected) // deep equality

- Expected  - 1
+ Received  + 1

  Object {
-   "environments": Array [],
+   "environments": undefined,
    "query": "id:[1,2]",
    "rangeEnd": "2017-10-17T02:41:20.000Z",
    "rangeStart": "2017-10-16T02:41:20.000Z",
  }
    at Object.toEqual (.../utils/replays/useDeleteReplays.spec.tsx:56:9)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:829:11)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/[email protected]..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/[email protected]..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/[email protected]..../jest-runner/build/testWorker.js:494:12)
useDeleteReplays queryOptionsToPayload should parse a an empty queryOptions into default 14d rangeStart & rangeEnd
Stack Traces | 0.031s run time
Error: expect(received).toEqual(expected) // deep equality

- Expected  - 1
+ Received  + 1

  Object {
-   "environments": Array [],
+   "environments": undefined,
    "query": "id:[1,2]",
    "rangeEnd": "2017-10-17T02:41:20.000Z",
    "rangeStart": "2017-10-03T02:41:20.000Z",
  }
    at Object.toEqual (.../utils/replays/useDeleteReplays.spec.tsx:39:68)
    at Promise.finally.completed (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:1559:28)
    at new Promise (<anonymous>)
    at callAsyncCircusFn (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:1499:10)
    at _callCircusTest (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:1009:40)
    at processTicksAndRejections (node:internal/process/task_queues:105:5)
    at _runTest (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:949:3)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:839:13)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:829:11)
    at _runTestsForDescribeBlock (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:829:11)
    at run (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:757:3)
    at runAndTransformResultsToJestFormat (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/jestAdapterInit.js:1920:21)
    at jestAdapter (.../sentry/node_modules/.pnpm/[email protected][email protected]..../jest-circus/build/runner.js:101:19)
    at runTestInternal (.../sentry/node_modules/.pnpm/[email protected]..../jest-runner/build/testWorker.js:272:16)
    at runTest (.../sentry/node_modules/.pnpm/[email protected]..../jest-runner/build/testWorker.js:340:7)
    at Object.worker (.../sentry/node_modules/.pnpm/[email protected]..../jest-runner/build/testWorker.js:494:12)

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

@getsantry
Copy link
Contributor

getsantry bot commented Nov 5, 2025

This pull request has gone three weeks without activity. In another week, I will close it.

But! If you comment or otherwise update it, I will reset the clock, and if you add the label WIP, I will leave it alone unless WIP is removed ... forever!


"A weed is but an unloved flower." ― Ella Wheeler Wilcox 🥀

@getsantry getsantry bot added the Stale label Nov 5, 2025
@ryan953
Copy link
Member Author

ryan953 commented Nov 5, 2025

@sentry review

@sentry
Copy link

sentry bot commented Nov 5, 2025

Seer had some issues with your request. Please try again.

@ryan953
Copy link
Member Author

ryan953 commented Nov 5, 2025

@sentry review

@sentry
Copy link

sentry bot commented Nov 5, 2025

Seer had some issues with your request. Please try again.

selectedIds={selectedIds}
/>
<Tooltip disabled={!disabledMessage} title={disabledMessage}>
{project ? (
Copy link
Member

@srest2021 srest2021 Nov 5, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Disabled delete button now disappears when banner is "Select a single project from the dropdown to delete replays", but not when banner is "You must have project:write or project:admin access to delete replays" -- is this intentional?

@getsantry getsantry bot removed the Stale label Nov 6, 2025
@getsantry
Copy link
Contributor

getsantry bot commented Nov 28, 2025

This issue has gone three weeks without activity. In another week, I will close it.

But! If you comment or otherwise update it, I will reset the clock, and if you remove the label Waiting for: Community, I will leave it alone ... forever!


"A weed is but an unloved flower." ― Ella Wheeler Wilcox 🥀

@getsantry getsantry bot added the Stale label Nov 28, 2025
@getsantry getsantry bot closed this Dec 6, 2025
@ryan953 ryan953 reopened this Dec 11, 2025
@getsantry getsantry bot removed the Stale label Dec 12, 2025
@getsantry
Copy link
Contributor

getsantry bot commented Jan 3, 2026

This issue has gone three weeks without activity. In another week, I will close it.

But! If you comment or otherwise update it, I will reset the clock, and if you remove the label Waiting for: Community, I will leave it alone ... forever!


"A weed is but an unloved flower." ― Ella Wheeler Wilcox 🥀

@getsantry getsantry bot added the Stale label Jan 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Scope: Frontend Automatically applied to PRs that change frontend components Stale

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants