Skip to content

Commit e02a6fc

Browse files
authored
fix(MessageItem): enable details view if Link overflows (#6893)
1 parent bfe245a commit e02a6fc

File tree

3 files changed

+56
-6
lines changed

3 files changed

+56
-6
lines changed

cypress.config.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import codeCoverageTask from '@cypress/code-coverage/task';
1+
import codeCoverageTask from '@cypress/code-coverage/task.js';
22
import { defineConfig } from 'cypress';
33

44
export default defineConfig({

packages/main/src/components/MessageView/MessageItem.tsx

+12-5
Original file line numberDiff line numberDiff line change
@@ -94,12 +94,19 @@ const MessageItem = forwardRef<CustomListItemDomRef, MessageItemPropTypes>((prop
9494

9595
const hasChildren = Children.count(children);
9696
useEffect(() => {
97-
const titleTextObserver = new ResizeObserver(([titleTextSpan]) => {
98-
if (titleTextSpan.target.scrollWidth > titleTextSpan.target.clientWidth) {
99-
setIsTitleTextIsOverflowing(true);
100-
} else {
101-
setIsTitleTextIsOverflowing(false);
97+
const titleTextObserver = new ResizeObserver(([titleTextSpanEntry]) => {
98+
const child = titleTextSpanEntry.target.children[0];
99+
const target = titleTextSpanEntry.target;
100+
const isTargetOverflowing = target.scrollWidth > target.clientWidth;
101+
let isChildOverflowing = false;
102+
103+
if (!isTargetOverflowing) {
104+
const firstChild = child?.shadowRoot?.firstElementChild as HTMLAnchorElement | undefined;
105+
if (firstChild) {
106+
isChildOverflowing = firstChild.scrollWidth > firstChild.clientWidth;
107+
}
102108
}
109+
setIsTitleTextIsOverflowing(isTargetOverflowing || isChildOverflowing);
103110
});
104111
if (!hasChildren && titleTextRef.current) {
105112
titleTextObserver.observe(titleTextRef.current);

packages/main/src/components/MessageView/MessageView.cy.tsx

+43
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { useRef } from 'react';
22
import { ValueState } from '../../enums/index.js';
33
import { MessageItem } from './MessageItem';
44
import { MessageView } from './index.js';
5+
import { Link } from '../../webComponents/Link/index.js';
56

67
describe('MessageView', () => {
78
it('default & grouped', () => {
@@ -164,4 +165,46 @@ describe('MessageView', () => {
164165
cy.findByText('SubtitleText').should('not.exist');
165166
cy.findByText('1337').should('not.exist');
166167
});
168+
169+
it('MessageItem - titleText overflow', () => {
170+
const selectSpy = cy.spy().as('select');
171+
cy.mount(
172+
<MessageView style={{ width: '500px' }} showDetailsPageHeader onItemSelect={selectSpy}>
173+
<MessageItem
174+
data-testid="item1"
175+
titleText={
176+
<Link>
177+
Long Error Message Type without children/details including a Link as `titleText` which has
178+
wrappingType="None" applied. - The details view is only available if the `titleText` is not fully visible.
179+
It is NOT recommended to use long titles!
180+
</Link>
181+
}
182+
type={ValueState.Error}
183+
counter={3}
184+
/>
185+
<MessageItem
186+
data-testid="item2"
187+
titleText={
188+
'Long Empty Message Type (no title, no subtitle, no children/details) - The details view is only available if the `titleText` is not fully visible. It is NOT recommended to use long titles!'
189+
}
190+
groupName={'Products'}
191+
/>
192+
<MessageItem data-testid="item3" titleText="Error" type={ValueState.Negative} groupName="Group1" />
193+
</MessageView>
194+
);
195+
196+
cy.get('[name="slim-arrow-right"]').should('be.visible').and('have.length', 2);
197+
198+
cy.findByTestId('item1').click();
199+
cy.get('@select').should('have.been.calledOnce');
200+
cy.get('[name="slim-arrow-left"]').should('be.visible').and('have.length', 1).click();
201+
202+
cy.findByTestId('item2').click();
203+
cy.get('@select').should('have.been.calledTwice');
204+
cy.get('[name="slim-arrow-left"]').should('be.visible').and('have.length', 1).click();
205+
206+
cy.findByTestId('item3').click();
207+
cy.get('@select').should('have.been.calledTwice');
208+
cy.get('[name="slim-arrow-left"]').should('not.exist');
209+
});
167210
});

0 commit comments

Comments
 (0)