* feat: added new check for isAudio and added the supported mime types * feat: adding the progress and audio on the audio file message * feat: finishing the layout of the audio_file * feat: play and pause audio * feat: update the progress bar when audio is playing * feat: update the timeframe of the audio * feat: update with the new design * feat: adding download and preview * feat: creates a hook for the file download and preview * feat: adding useCallback to make the return stable * fix: iOS issue when playing in loop * feat: adding localization for the error * fix: removing code tha was inserted for debug * feat: add a new line on the en.json * fix: fixing types * feat: adding the onSeek method inside the progress bar * feat: changing progress value to animated value * feat: changing to GestureDetector and making the seek method work * feat: adding a touchable without feedback to prevent the audio to triggering other page * feat: adding the drag on the seek method * feat: making the download button more gray * fix: fix tests * fix: prevent onProgress from clearing the seconds when the audio is paused * feat: clamping the position of the cursor to never be dragged offscreen * feat: enhancing the experience of dragging the cursor on the progress bar * feat: differentiate between the throttles * feat: remvoing the aac audio files support * feat: pausing if the focus has changed * feat: render differently the audio file when in the files list * refactor: optimize audio file component by using useCallback for event handlers * refactor: extract stopPropagation function for better readability in AudioFile component * feat: implement custom useThrottled hook and replace lodash throttle in AudioFile component * refactor: update useThrottled hook to accept a generic callback type * fix: loading of uri of audio files after merge * feat: add audioFile style to enhance layout for audio files * fix: tests
41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
|
|
import {forwardRef, useImperativeHandle, type ReactNode, useCallback} from 'react';
|
|
import {useIntl} from 'react-intl';
|
|
|
|
import {alertDownloadDocumentDisabled} from '@utils/document';
|
|
|
|
export type DocumentRef = {
|
|
handlePreviewPress: () => void;
|
|
}
|
|
|
|
type DocumentProps = {
|
|
canDownloadFiles: boolean;
|
|
file: FileInfo;
|
|
children: ReactNode;
|
|
downloadAndPreviewFile: (file: FileInfo) => void;
|
|
}
|
|
|
|
const Document = forwardRef<DocumentRef, DocumentProps>(({canDownloadFiles, children, downloadAndPreviewFile, file}: DocumentProps, ref) => {
|
|
const intl = useIntl();
|
|
|
|
const handlePreviewPress = useCallback(async () => {
|
|
if (!canDownloadFiles) {
|
|
alertDownloadDocumentDisabled(intl);
|
|
return;
|
|
}
|
|
|
|
downloadAndPreviewFile(file);
|
|
}, [canDownloadFiles, downloadAndPreviewFile, intl, file]);
|
|
|
|
useImperativeHandle(ref, () => ({
|
|
handlePreviewPress,
|
|
}), [handlePreviewPress]);
|
|
|
|
return children;
|
|
});
|
|
|
|
Document.displayName = 'Document';
|
|
|
|
export default Document;
|