39 lines
927 B
TypeScript
39 lines
927 B
TypeScript
import {ImagePickerAsset} from 'expo-image-picker'
|
|
import {useMutation} from '@tanstack/react-query'
|
|
|
|
import {cancelable} from '#/lib/async/cancelable'
|
|
import {CompressedVideo} from '#/lib/media/video/types'
|
|
import {compressVideo} from 'lib/media/video/compress'
|
|
|
|
export function useCompressVideoMutation({
|
|
onProgress,
|
|
onSuccess,
|
|
onError,
|
|
signal,
|
|
}: {
|
|
onProgress: (progress: number) => void
|
|
onError: (e: any) => void
|
|
onSuccess: (video: CompressedVideo) => void
|
|
signal: AbortSignal
|
|
}) {
|
|
return useMutation({
|
|
mutationKey: ['video', 'compress'],
|
|
mutationFn: cancelable(
|
|
(asset: ImagePickerAsset) =>
|
|
compressVideo(asset.uri, {
|
|
onProgress: num => onProgress(trunc2dp(num)),
|
|
signal,
|
|
}),
|
|
signal,
|
|
),
|
|
onError,
|
|
onSuccess,
|
|
onMutate: () => {
|
|
onProgress(0)
|
|
},
|
|
})
|
|
}
|
|
|
|
function trunc2dp(num: number) {
|
|
return Math.trunc(num * 100) / 100
|
|
}
|