* Add icons for file types * Compress image files for file type icons * Add constants for file types * Add utils for file metadata * Add actions & reducers for fetching file attachments * Render file attachments in posts * Add reducers for handling files requests * Refactor getFileType in file utils * Refactor getFileIconPath in file utils * Refactor getFormattedFileSize in file utils * Trim trailing whitespace in getTruncatedFilename * Style file attachment metadata * Remove entity store reducer for files fetch failure * Change filesForPost to fileIdsForPost in files store * Use a selector for getFilesForPost * Memoize getFilesForPost selector * Dispatch postId with getFilesForPost * Add test for getFilesForPost * Upload seed file in getFilesForPost test * Display correct icon for image attachments * Fix reducers for receiving files for post Expect response data to be array not object * Style attachment post * Merge headers (defaults + opts) in Client.doFetch * Upload file as FormData * Use form-data lib instead of built-in polyfill * Associate file with post in getFilesForPost test * Improve assertions in getFilesForPost test * Check for createPost failure in getFilesForPost test * Use correct post id in getFilesForPost test * Use client not action to create post in getFilesForPost test * Fix file upload in getFilesForPost test * Add assertion for name of uploaded file * Update attachment post style * Fix spelling of loadFilesForPostIfNecessary * Remove eslint-disable no-magic-numbers from file_utils.js * Remove unused index prop from FileAttachment * Clarify code for merging headers in Client.getOptions * Dynamically truncate file attachment names * Extract component for FileAttachmentIcon * Use white bg for FileAttachmentIcon to match webapp styles * Match webapp styles for file attachment borders * Move file icon path lookup to FileAttachmentIcon * Use more logical ordering for file type lookup
42 lines
1.1 KiB
JavaScript
42 lines
1.1 KiB
JavaScript
// Copyright (c) 2017 Mattermost, Inc. All Rights Reserved.
|
|
// See License.txt for license information.
|
|
|
|
import {Constants} from 'service/constants';
|
|
|
|
export function getFormattedFileSize(file) {
|
|
const bytes = file.size;
|
|
const fileSizes = [
|
|
['TB', 1024 * 1024 * 1024 * 1024],
|
|
['GB', 1024 * 1024 * 1024],
|
|
['MB', 1024 * 1024],
|
|
['KB', 1024]
|
|
];
|
|
const size = fileSizes.find((unitAndMinBytes) => {
|
|
const minBytes = unitAndMinBytes[1];
|
|
return bytes > minBytes;
|
|
});
|
|
if (size) {
|
|
return `${Math.floor(bytes / size[1])} ${size[0]}`;
|
|
}
|
|
return `${bytes} B`;
|
|
}
|
|
|
|
export function getFileType(file) {
|
|
const fileExt = file.extension.toLowerCase();
|
|
const fileTypes = [
|
|
'image',
|
|
'code',
|
|
'pdf',
|
|
'video',
|
|
'audio',
|
|
'spreadsheet',
|
|
'word',
|
|
'presentation',
|
|
'patch'
|
|
];
|
|
return fileTypes.find((fileType) => {
|
|
const constForFileTypeExtList = `${fileType}_types`.toUpperCase();
|
|
const fileTypeExts = Constants[constForFileTypeExtList];
|
|
return fileTypeExts.indexOf(fileExt) > -1;
|
|
}) || 'other';
|
|
}
|