stream-chat-react-native-core
Version:
The official React Native and Expo components for Stream Chat, a service for building chat applications
46 lines (38 loc) • 1.16 kB
text/typescript
export type GenerateVideoThumbnailResult = {
error?: string | null;
uri?: string | null;
};
export const createGenerateVideoThumbnails = ({
createVideoThumbnails,
}: {
createVideoThumbnails: (uris: string[]) => Promise<GenerateVideoThumbnailResult[]>;
}) => {
return async (uris: string[]): Promise<Record<string, GenerateVideoThumbnailResult>> => {
if (!uris.length) {
return {};
}
const uniqueUris: string[] = [];
const seenUris = new Set<string>();
uris.forEach((uri) => {
if (!seenUris.has(uri)) {
seenUris.add(uri);
uniqueUris.push(uri);
}
});
const uniqueResults = await createVideoThumbnails(uniqueUris);
return uniqueUris.reduce<Record<string, GenerateVideoThumbnailResult>>(
(resultMap, uri, index) => {
const result = uniqueResults[index] ?? {
error: 'Thumbnail generation returned no result',
uri: null,
};
if (result.error) {
console.warn(`Failed to generate thumbnail for ${uri}: ${result.error}`);
}
resultMap[uri] = result;
return resultMap;
},
{},
);
};
};