You've already forked matrix-react-sdk
							
							
				mirror of
				https://github.com/matrix-org/matrix-react-sdk.git
				synced 2025-11-03 00:33:22 +03:00 
			
		
		
		
	Merge pull request #6871 from psrpinto/fix/close-url-preview-button
Fix issue with preview panel close button not appearing for certain messages containing a URL
This commit is contained in:
		@@ -16,7 +16,7 @@ limitations under the License.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import React, { useContext, useEffect } from "react";
 | 
					import React, { useContext, useEffect } from "react";
 | 
				
			||||||
import { MatrixEvent } from "matrix-js-sdk/src/models/event";
 | 
					import { MatrixEvent } from "matrix-js-sdk/src/models/event";
 | 
				
			||||||
import { IPreviewUrlResponse } from "matrix-js-sdk/src/client";
 | 
					import { IPreviewUrlResponse, MatrixClient } from "matrix-js-sdk/src/client";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { useStateToggle } from "../../../hooks/useStateToggle";
 | 
					import { useStateToggle } from "../../../hooks/useStateToggle";
 | 
				
			||||||
import LinkPreviewWidget from "./LinkPreviewWidget";
 | 
					import LinkPreviewWidget from "./LinkPreviewWidget";
 | 
				
			||||||
@@ -40,13 +40,7 @@ const LinkPreviewGroup: React.FC<IProps> = ({ links, mxEvent, onCancelClick, onH
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    const ts = mxEvent.getTs();
 | 
					    const ts = mxEvent.getTs();
 | 
				
			||||||
    const previews = useAsyncMemo<[string, IPreviewUrlResponse][]>(async () => {
 | 
					    const previews = useAsyncMemo<[string, IPreviewUrlResponse][]>(async () => {
 | 
				
			||||||
        return Promise.all<[string, IPreviewUrlResponse] | void>(links.map(async link => {
 | 
					        return fetchPreviews(cli, links, ts);
 | 
				
			||||||
            try {
 | 
					 | 
				
			||||||
                return [link, await cli.getUrlPreview(link, ts)];
 | 
					 | 
				
			||||||
            } catch (error) {
 | 
					 | 
				
			||||||
                console.error("Failed to get URL preview: " + error);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        })).then(a => a.filter(Boolean)) as Promise<[string, IPreviewUrlResponse][]>;
 | 
					 | 
				
			||||||
    }, [links, ts], []);
 | 
					    }, [links, ts], []);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    useEffect(() => {
 | 
					    useEffect(() => {
 | 
				
			||||||
@@ -89,4 +83,18 @@ const LinkPreviewGroup: React.FC<IProps> = ({ links, mxEvent, onCancelClick, onH
 | 
				
			|||||||
    </div>;
 | 
					    </div>;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const fetchPreviews = (cli: MatrixClient, links: string[], ts: number):
 | 
				
			||||||
 | 
					        Promise<[string, IPreviewUrlResponse][]> => {
 | 
				
			||||||
 | 
					    return Promise.all<[string, IPreviewUrlResponse] | void>(links.map(async link => {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            const preview = await cli.getUrlPreview(link, ts);
 | 
				
			||||||
 | 
					            if (preview && Object.keys(preview).length > 0) {
 | 
				
			||||||
 | 
					                return [link, preview];
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } catch (error) {
 | 
				
			||||||
 | 
					            console.error("Failed to get URL preview: " + error);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    })).then(a => a.filter(Boolean)) as Promise<[string, IPreviewUrlResponse][]>;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default LinkPreviewGroup;
 | 
					export default LinkPreviewGroup;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user