Skip to content

Commit

Permalink
Prevent expanding/collapsing a notification when clicking the action …
Browse files Browse the repository at this point in the history
…button (#48074)

* Prevent expanding/collapsing a notification when clicking the action button

* Add a test
  • Loading branch information
gzdunek authored Oct 30, 2024
1 parent ffeb49f commit af117a3
Show file tree
Hide file tree
Showing 3 changed files with 65 additions and 3 deletions.
2 changes: 1 addition & 1 deletion web/packages/design/src/Alert/Alert.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ interface Props<K> {
export interface Action {
content: React.ReactNode;
href?: string;
onClick?: () => void;
onClick?: (event: React.MouseEvent) => void;
}

export interface AlertProps
Expand Down
49 changes: 49 additions & 0 deletions web/packages/shared/components/Notification/Notification.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/**
* Teleport
* Copyright (C) 2024 Gravitational, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

import { render } from 'design/utils/testing';
import { fireEvent, screen } from '@testing-library/react';

import { Notification } from './Notification';

test('click on action button does not expand or collapse notification', async () => {
const description = 'An error happened';

render(
<Notification
item={{
id: '865801ca',
severity: 'error',
content: {
title: 'Warning',
description,
action: { content: 'Retry' },
},
}}
onRemove={() => {}}
/>
);

fireEvent.click(screen.getByText('Retry'));

// Check if the text still has the initial, "collapsed" style (look at shortTextCss).
expect(screen.getByText(description)).toHaveStyleRule(
'-webkit-line-clamp',
'3'
);
});
17 changes: 15 additions & 2 deletions web/packages/shared/components/Notification/Notification.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,8 @@ const NotificationBody = ({
const longerTextCss = isExpanded ? textCss : shortTextCss;
const hasListOrDescription = !!content.list || !!content.description;

const { action } = content;

return (
<>
{/* Note: an empty <Text/> element would still generate a flex gap, so we
Expand All @@ -237,9 +239,20 @@ const NotificationBody = ({
{content.description}
</Text>
)}
{content.action && (
{action && (
<Box alignSelf="flex-start">
<ActionButton intent="neutral" action={content.action} />
<ActionButton
intent="neutral"
action={{
href: action.href,
content: action.content,
onClick: event => {
// Prevents toggling the isExpanded flag.
event.stopPropagation();
action.onClick?.(event);
},
}}
/>
</Box>
)}
</>
Expand Down

0 comments on commit af117a3

Please sign in to comment.