// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import React, {useCallback, useMemo} from 'react';
import {LayoutAnimation, View, StyleSheet} from 'react-native';
import RemoveButton from '@components/upload_item_shared/remove_button';
import {MAX_RESOLUTION} from '@constants/image';
import {removeShareExtensionFile} from '@share/state';
import {toFileInfo} from '@share/utils';
import {isImage, isVideo} from '@utils/file';
import SharedUploadItem from './shared_upload_item';
import type {SharedItem} from '@mattermost/rnshare';
type Props = {
file: SharedItem;
maxFileSize: number;
isSmall?: boolean;
};
const layoutAnimConfig = {
duration: 300,
update: {
type: LayoutAnimation.Types.easeInEaseOut,
},
delete: {
duration: 100,
type: LayoutAnimation.Types.easeInEaseOut,
property: LayoutAnimation.Properties.opacity,
},
};
const styles = StyleSheet.create({
container: {
position: 'relative',
},
smallContainer: {
marginBottom: 8,
},
});
const Single = ({file, isSmall, maxFileSize}: Props) => {
const fileInfo = useMemo(() => toFileInfo(file), [file]);
const type = useMemo(() => {
if (isImage(fileInfo)) {
return 'image';
}
if (isVideo(fileInfo)) {
return 'video';
}
return undefined;
}, [fileInfo]);
const hasError = useMemo(() => {
const size = file.size || 0;
if (size > maxFileSize) {
return true;
}
if (type === 'image' && file.height && file.width) {
return (file.width * file.height) > MAX_RESOLUTION;
}
return false;
}, [file, maxFileSize, type]);
const onPress = useCallback(() => {
LayoutAnimation.configureNext(layoutAnimConfig);
removeShareExtensionFile(file);
}, [file]);
if (isSmall) {
return (
);
}
return (
);
};
export default Single;