feat: autoplay videos when previewing (#1036)

This commit is contained in:
Aman Harwara
2022-05-23 15:18:42 +05:30
committed by GitHub
parent 6401da2570
commit ce39fe55db
2 changed files with 40 additions and 33 deletions

View File

@@ -4,7 +4,7 @@ import { DialogContent, DialogOverlay } from '@reach/dialog'
import { addToast, ToastType } from '@standardnotes/stylekit' import { addToast, ToastType } from '@standardnotes/stylekit'
import { NoPreviewIllustration } from '@standardnotes/icons' import { NoPreviewIllustration } from '@standardnotes/icons'
import { FunctionComponent } from 'preact' import { FunctionComponent } from 'preact'
import { useCallback, useEffect, useRef, useState } from 'preact/hooks' import { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks'
import { getFileIconComponent } from '@/Components/AttachedFilesPopover/PopoverFileItem' import { getFileIconComponent } from '@/Components/AttachedFilesPopover/PopoverFileItem'
import { Button } from '@/Components/Button/Button' import { Button } from '@/Components/Button/Button'
import { Icon } from '@/Components/Icon/Icon' import { Icon } from '@/Components/Icon/Icon'
@@ -87,34 +87,46 @@ export const FilePreviewModal: FunctionComponent<Props> = observer(({ applicatio
} }
}, [currentFile, getObjectUrl, objectUrl]) }, [currentFile, getObjectUrl, objectUrl])
const keyDownHandler = (event: KeyboardEvent) => { const keyDownHandler = useCallback(
if (event.key !== KeyboardKey.Left && event.key !== KeyboardKey.Right) { (event: KeyboardEvent) => {
return if (event.key !== KeyboardKey.Left && event.key !== KeyboardKey.Right) {
} return
event.preventDefault()
const currentFileIndex = otherFiles.findIndex((fileFromArray) => fileFromArray.uuid === currentFile.uuid)
switch (event.key) {
case KeyboardKey.Left: {
const previousFileIndex = currentFileIndex - 1 >= 0 ? currentFileIndex - 1 : otherFiles.length - 1
const previousFile = otherFiles[previousFileIndex]
if (previousFile) {
setCurrentFile(previousFile)
}
break
} }
case KeyboardKey.Right: {
const nextFileIndex = currentFileIndex + 1 < otherFiles.length ? currentFileIndex + 1 : 0 event.preventDefault()
const nextFile = otherFiles[nextFileIndex]
if (nextFile) { const currentFileIndex = otherFiles.findIndex((fileFromArray) => fileFromArray.uuid === currentFile.uuid)
setCurrentFile(nextFile)
switch (event.key) {
case KeyboardKey.Left: {
const previousFileIndex = currentFileIndex - 1 >= 0 ? currentFileIndex - 1 : otherFiles.length - 1
const previousFile = otherFiles[previousFileIndex]
if (previousFile) {
setCurrentFile(previousFile)
}
break
}
case KeyboardKey.Right: {
const nextFileIndex = currentFileIndex + 1 < otherFiles.length ? currentFileIndex + 1 : 0
const nextFile = otherFiles[nextFileIndex]
if (nextFile) {
setCurrentFile(nextFile)
}
break
} }
break
} }
} },
} [currentFile.uuid, otherFiles, setCurrentFile],
)
const IconComponent = useMemo(
() =>
getFileIconComponent(
application.iconsController.getIconForFileType(currentFile.mimeType),
'w-6 h-6 flex-shrink-0',
),
[application.iconsController, currentFile.mimeType],
)
return ( return (
<DialogOverlay <DialogOverlay
@@ -139,12 +151,7 @@ export const FilePreviewModal: FunctionComponent<Props> = observer(({ applicatio
onKeyDown={keyDownHandler} onKeyDown={keyDownHandler}
> >
<div className="flex items-center"> <div className="flex items-center">
<div className="w-6 h-6"> <div className="w-6 h-6">{IconComponent}</div>
{getFileIconComponent(
application.iconsController.getIconForFileType(currentFile.mimeType),
'w-6 h-6 flex-shrink-0',
)}
</div>
<span className="ml-3 font-medium">{currentFile.name}</span> <span className="ml-3 font-medium">{currentFile.name}</span>
</div> </div>
<div className="flex items-center"> <div className="flex items-center">

View File

@@ -13,7 +13,7 @@ export const PreviewComponent: FunctionComponent<Props> = ({ file, objectUrl })
} }
if (file.mimeType.startsWith('video/')) { if (file.mimeType.startsWith('video/')) {
return <video className="w-full h-full" src={objectUrl} controls /> return <video className="w-full h-full" src={objectUrl} controls autoPlay />
} }
if (file.mimeType.startsWith('audio/')) { if (file.mimeType.startsWith('audio/')) {