Skip to content

Commit 4bad59f

Browse files
authored
feat(view): openFilesGallery returns true if the gallery was opened (#769)
1 parent d93964e commit 4bad59f

File tree

2 files changed

+49
-42
lines changed

2 files changed

+49
-42
lines changed

src/view/hooks/useFilesGallery/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ _useFilesGallery returns function `openFilesGallery` with the following args_:
2525
| :------- | :--------------------------------- | :------- | :----- | :------ | :-------------- |
2626
| event | `React.MouseEvent<HTMLDivElement>` | Yes | | | The click event |
2727

28+
`openFilesGallery` function returns a boolean flag, which is true if the gallery has been opened.
29+
2830
### Usage
2931

3032
First you should install @gravity-ui/components library and wrap your content into the GalleryProvider to be able to use the hook

src/view/hooks/useFilesGallery/useFilesGallery.tsx

Lines changed: 47 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -11,57 +11,62 @@ export function useFilesGallery(customFiles?: GalleryItemPropsWithUrl[]) {
1111
return {
1212
openFilesGallery: React.useCallback(
1313
(event: React.MouseEvent<HTMLDivElement>) => {
14-
if (event.target instanceof HTMLElement) {
15-
let fileLink = '';
14+
if (!(event.target instanceof HTMLElement)) {
15+
return false;
16+
}
1617

17-
if (event.target.tagName === 'IMG' && !event.target.closest('a')) {
18-
fileLink = event.target.getAttribute('src') ?? '';
19-
} else if (event.target.tagName === 'A') {
20-
fileLink = event.target.getAttribute('href') ?? '';
21-
}
18+
let fileLink = '';
2219

23-
if (!fileLink) {
24-
return;
25-
}
20+
if (event.target.tagName === 'IMG' && !event.target.closest('a')) {
21+
fileLink = event.target.getAttribute('src') ?? '';
22+
} else if (event.target.tagName === 'A') {
23+
fileLink = event.target.getAttribute('href') ?? '';
24+
}
2625

27-
const filesFromContent = [
28-
...(event.currentTarget?.querySelectorAll('img,a') ?? []),
29-
].reduce<GalleryItemPropsWithUrl[]>((result, element) => {
30-
const isImage = element.tagName === 'IMG';
31-
const link = isImage
32-
? element.getAttribute('src')
33-
: element.getAttribute('href');
34-
35-
if (link && !customFiles?.some((item) => item.url === link)) {
36-
const extension = link.match(extensionRegex)?.[0] || '';
37-
38-
if (isImage || supportedExtensions.includes(extension)) {
39-
const name =
40-
(isImage
41-
? element.getAttribute('alt')
42-
: element.getAttribute('title')) || '';
43-
44-
result.push({
45-
...(supportedVideoExtensions.includes(extension)
46-
? getGalleryItemVideo({src: link, name: name})
47-
: getGalleryItemImage({src: link, name: name})),
48-
url: link,
49-
});
50-
}
51-
}
26+
if (!fileLink) {
27+
return false;
28+
}
5229

53-
return result;
54-
}, []);
30+
const filesFromContent = [
31+
...(event.currentTarget?.querySelectorAll('img,a') ?? []),
32+
].reduce<GalleryItemPropsWithUrl[]>((result, element) => {
33+
const isImage = element.tagName === 'IMG';
34+
const link = isImage
35+
? element.getAttribute('src')
36+
: element.getAttribute('href');
5537

56-
const files = [...(customFiles ?? []), ...filesFromContent];
38+
if (link && !customFiles?.some((item) => item.url === link)) {
39+
const extension = link.match(extensionRegex)?.[0] || '';
5740

58-
const initialItemIndex = files.findIndex((item) => item.url === fileLink);
41+
if (isImage || supportedExtensions.includes(extension)) {
42+
const name =
43+
(isImage
44+
? element.getAttribute('alt')
45+
: element.getAttribute('title')) || '';
5946

60-
if (initialItemIndex !== -1) {
61-
event.preventDefault();
62-
openGallery(files, initialItemIndex);
47+
result.push({
48+
...(supportedVideoExtensions.includes(extension)
49+
? getGalleryItemVideo({src: link, name: name})
50+
: getGalleryItemImage({src: link, name: name})),
51+
url: link,
52+
});
53+
}
6354
}
55+
56+
return result;
57+
}, []);
58+
59+
const files = [...(customFiles ?? []), ...filesFromContent];
60+
61+
const initialItemIndex = files.findIndex((item) => item.url === fileLink);
62+
63+
if (initialItemIndex !== -1) {
64+
event.preventDefault();
65+
openGallery(files, initialItemIndex);
66+
return true;
6467
}
68+
69+
return false;
6570
},
6671
[customFiles, openGallery],
6772
),

0 commit comments

Comments
 (0)