Skip to content

Commit 05dfba2

Browse files
feat(replays): add banner about masking config docs to breadcrumbs tab (#62042)
- Shows for every user on the replay details breadcrumb tab - Is dismissible, only comes back if local storage is cleared - Links to https://docs.sentry.io/platforms/javascript/session-replay/privacy/ <img width="618" alt="SCR-20231219-oqpr" src="https://github.com/getsentry/sentry/assets/56095982/5cce0ea0-a32f-4c0e-b9d5-a55f182010ac"> Closes getsentry/team-replay#322
1 parent 8e789a2 commit 05dfba2

File tree

1 file changed

+36
-1
lines changed
  • static/app/views/replays/detail/breadcrumbs

1 file changed

+36
-1
lines changed

static/app/views/replays/detail/breadcrumbs/index.tsx

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,21 @@ import {
55
List as ReactVirtualizedList,
66
ListRowProps,
77
} from 'react-virtualized';
8+
import styled from '@emotion/styled';
89

10+
import Alert from 'sentry/components/alert';
11+
import {Button} from 'sentry/components/button';
12+
import ExternalLink from 'sentry/components/links/externalLink';
913
import Placeholder from 'sentry/components/placeholder';
1014
import JumpButtons from 'sentry/components/replays/jumpButtons';
1115
import {useReplayContext} from 'sentry/components/replays/replayContext';
1216
import useJumpButtons from 'sentry/components/replays/useJumpButtons';
13-
import {t} from 'sentry/locale';
17+
import {IconClose} from 'sentry/icons';
18+
import {t, tct} from 'sentry/locale';
19+
import {space} from 'sentry/styles/space';
1420
import useCrumbHandlers from 'sentry/utils/replays/hooks/useCrumbHandlers';
1521
import useExtractedDomNodes from 'sentry/utils/replays/hooks/useExtractedDomNodes';
22+
import useDismissAlert from 'sentry/utils/useDismissAlert';
1623
import useOrganization from 'sentry/utils/useOrganization';
1724
import useVirtualizedInspector from 'sentry/views/replays/detail//useVirtualizedInspector';
1825
import BreadcrumbFilters from 'sentry/views/replays/detail/breadcrumbs/breadcrumbFilters';
@@ -27,6 +34,8 @@ import TabItemContainer from 'sentry/views/replays/detail/tabItemContainer';
2734
import useVirtualizedList from 'sentry/views/replays/detail/useVirtualizedList';
2835
import useVirtualListDimentionChange from 'sentry/views/replays/detail/useVirtualListDimentionChange';
2936

37+
const LOCAL_STORAGE_KEY = 'replay-details-mask-config-instructions-dismissed';
38+
3039
// Ensure this object is created once as it is an input to
3140
// `useVirtualizedList`'s memoization
3241
const cellMeasurer = {
@@ -35,6 +44,7 @@ const cellMeasurer = {
3544
};
3645

3746
function Breadcrumbs() {
47+
const {dismiss, isDismissed} = useDismissAlert({key: LOCAL_STORAGE_KEY});
3848
const {currentTime, replay} = useReplayContext();
3949
const organization = useOrganization();
4050
const hasPerfTab = organization.features.includes('session-replay-trace-table');
@@ -126,6 +136,27 @@ function Breadcrumbs() {
126136
<FilterLoadingIndicator isLoading={isFetchingExtractions || isFetchingTraces}>
127137
<BreadcrumbFilters frames={frames} {...filterProps} />
128138
</FilterLoadingIndicator>
139+
{isDismissed ? null : (
140+
<StyledAlert
141+
type="info"
142+
showIcon
143+
trailingItems={
144+
<Button
145+
aria-label={t('Dismiss banner')}
146+
icon={<IconClose />}
147+
onClick={dismiss}
148+
size="zero"
149+
borderless
150+
/>
151+
}
152+
>
153+
{tct('Learn how to unmask text (****) and unblock media [link:here].', {
154+
link: (
155+
<ExternalLink href="https://docs.sentry.io/platforms/javascript/session-replay/privacy/" />
156+
),
157+
})}
158+
</StyledAlert>
159+
)}
129160
<TabItemContainer data-test-id="replay-details-breadcrumbs-tab">
130161
{frames ? (
131162
<AutoSizer onResize={updateList}>
@@ -172,4 +203,8 @@ function Breadcrumbs() {
172203
);
173204
}
174205

206+
const StyledAlert = styled(Alert)`
207+
margin-bottom: ${space(1)};
208+
`;
209+
175210
export default Breadcrumbs;

0 commit comments

Comments
 (0)