Skip to content

Commit f1f19f0

Browse files
Filipe Marinshugocostadevgabriellsh
authored
fix(fuselage): add message generic preview cover image (#863)
* refactor(fuselage): add external url to message generic preview image * refactor: add image preview variation * creating new component for imageLinkPreview * refactor: update tests and pass onError and alt * refactor; remove external link from image preview * refactor: add props spread * refactor: rename components * refactor: extend html and anchor attributes on preview title * removing unused props Co-authored-by: Hugo Costa <hugocarreiracosta@gmail.com> Co-authored-by: gabriellsh <40830821+gabriellsh@users.noreply.github.com>
1 parent b82cace commit f1f19f0

8 files changed

+136
-17
lines changed

packages/fuselage/src/components/Message/MessageGenericPreview/MessageGenericPreview.stories.tsx

+35-3
Large diffs are not rendered by default.

packages/fuselage/src/components/Message/MessageGenericPreview/MessageGenericPreview.styles.scss

+10-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,6 @@ $message-generic-preview-content-hover-background-color: theme(
7373
width: 100%;
7474
height: 100%;
7575

76-
cursor: zoom-in;
7776
white-space: nowrap;
7877
text-indent: 100%;
7978

@@ -152,4 +151,14 @@ $message-generic-preview-content-hover-background-color: theme(
152151

153152
margin: lengths.margin(-2);
154153
}
154+
155+
&__image {
156+
width: fit-content;
157+
max-width: inherit;
158+
max-height: inherit;
159+
160+
cursor: pointer;
161+
162+
border: lengths.border-width(2) solid $message-generic-preview-border-color;
163+
}
155164
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { render, screen } from '@testing-library/react';
2+
import React from 'react';
3+
4+
import { MessageGenericPreviewCoverImage } from './MessageGenericPreviewCoverImage';
5+
6+
describe('MessageGenericPreviewCoverImage', () => {
7+
it('renders without crashing', () => {
8+
render(<MessageGenericPreviewCoverImage url='' width={200} height={200} />);
9+
});
10+
11+
it('should render div with background image', () => {
12+
render(
13+
<MessageGenericPreviewCoverImage url='test' width={200} height={200} />
14+
);
15+
const previewImage = screen.getByTestId('preview-image');
16+
17+
expect(previewImage).toHaveStyle({
18+
background: 'test',
19+
});
20+
expect(previewImage).toHaveClass('rcx-message-generic-preview__preview');
21+
expect(previewImage).not.toHaveClass(
22+
'rcx-message-generic-preview__preview--image'
23+
);
24+
});
25+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import React from 'react';
2+
3+
import { prependClassName } from '../../../helpers/prependClassName';
4+
5+
type MessageGenericPreviewCoverImageProps = {
6+
url: string;
7+
width: number;
8+
height: number;
9+
className?: string;
10+
};
11+
12+
export const MessageGenericPreviewCoverImage = ({
13+
url,
14+
width,
15+
height,
16+
className,
17+
...props
18+
}: MessageGenericPreviewCoverImageProps) => (
19+
<div
20+
className={prependClassName(
21+
className,
22+
'rcx-message-generic-preview__preview'
23+
)}
24+
style={{ backgroundImage: `url(${url})`, maxWidth: '100%' }}
25+
data-testid='preview-image'
26+
{...props}
27+
>
28+
<div style={{ paddingTop: `${(height / width) * 100}%` }} />
29+
</div>
30+
);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { render, screen } from '@testing-library/react';
2+
import React from 'react';
3+
4+
import { MessageGenericPreviewImage } from './MessageGenericPreviewImage';
5+
6+
describe('MessageGenericPreviewImage', () => {
7+
it('renders without crashing', () => {
8+
render(<MessageGenericPreviewImage url='' />);
9+
});
10+
11+
it('should render image', () => {
12+
render(<MessageGenericPreviewImage url='test' />);
13+
const previewImage = screen.getByRole('img');
14+
15+
expect(previewImage).toBeInTheDocument();
16+
expect(previewImage).toHaveAttribute('src', 'test');
17+
});
18+
});
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,25 @@
1+
import type { ImgHTMLAttributes } from 'react';
12
import React from 'react';
23

4+
import { prependClassName } from '../../../helpers/prependClassName';
5+
36
type MessageGenericPreviewImageProps = {
47
url: string;
5-
width: number;
6-
height: number;
7-
};
8+
className?: string;
9+
} & ImgHTMLAttributes<HTMLImageElement>;
810

911
export const MessageGenericPreviewImage = ({
1012
url,
11-
width,
12-
height,
13+
className,
1314
...props
1415
}: MessageGenericPreviewImageProps) => (
15-
<div
16-
className='rcx-message-generic-preview__preview'
17-
style={{ backgroundImage: `url(${url})`, maxWidth: '100%' }}
16+
<img
17+
src={url}
18+
className={prependClassName(
19+
className,
20+
'rcx-message-generic-preview__image'
21+
)}
22+
alt=''
1823
{...props}
19-
>
20-
<div style={{ paddingTop: `${(height / width) * 100}%` }} />
21-
</div>
24+
/>
2225
);

packages/fuselage/src/components/Message/MessageGenericPreview/MessageGenericPreviewTitle.tsx

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
1-
import type { ReactNode } from 'react';
1+
import type { AnchorHTMLAttributes, HTMLAttributes, ReactNode } from 'react';
22
import React from 'react';
33

44
type MessageGenericPreviewTitleProps = {
55
children?: ReactNode;
66
externalUrl?: string;
7-
};
7+
} & HTMLAttributes<HTMLSpanElement> &
8+
AnchorHTMLAttributes<HTMLAnchorElement>;
89

910
export const MessageGenericPreviewTitle = ({
1011
externalUrl,

packages/fuselage/src/components/Message/MessageGenericPreview/index.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ export * from './MessageGenericPreview';
22
export * from './MessageGenericPreviewContent';
33
export * from './MessageGenericPreviewDescription';
44
export * from './MessageGenericPreviewFooter';
5+
export * from './MessageGenericPreviewCoverImage';
56
export * from './MessageGenericPreviewImage';
67
export * from './MessageGenericPreviewThumb';
78
export * from './MessageGenericPreviewTitle';

0 commit comments

Comments
 (0)