box-ui-elements
Version:
Box UI Elements
88 lines (81 loc) • 2.98 kB
Flow
import * as React from 'react';
import { injectIntl } from 'react-intl';
import type { IntlShape } from 'react-intl';
import { Archive, FolderArchive } from '@box/blueprint-web-assets/icons/Content';
import FileIcon from '../../../icons/file-icon/FileIcon';
import FolderIcon from '../../../icons/folder-icon/FolderIcon';
import BookmarkIcon from '../../../icons/bookmark-icon/BookmarkIcon';
import type { BoxItem } from '../../../common/types/core';
import { TYPE_FOLDER, TYPE_FILE, TYPE_WEBLINK } from '../../../constants';
import messages from '../messages';
import './IconCell.scss';
type Props = {
dimension?: number,
intl: IntlShape,
rowData: BoxItem
};
const IconCell = ({
intl,
rowData,
dimension,
}: Props) => {
const {
type,
extension,
has_collaborations,
is_externally_owned,
archive_type,
}: BoxItem = rowData;
let title;
const is_archive = archive_type === 'archive';
const is_archive_folder = archive_type === 'folder_archive';
switch (type) {
case TYPE_FILE:
title = intl.formatMessage(messages.file);
return <FileIcon dimension={dimension} extension={extension} title={title} />;
case TYPE_FOLDER:
if (is_archive) {
return (
<Archive
aria-label={intl.formatMessage(messages.archive)}
data-testid="archive-icon-cell"
height={dimension}
width={dimension}
/>
);
}
if (is_archive_folder) {
return (
<FolderArchive
aria-label={intl.formatMessage(messages.archivedFolder)}
data-testid="folder-archive-icon-cell"
height={dimension}
width={dimension}
/>
);
}
if (has_collaborations) {
title = intl.formatMessage(messages.collaboratedFolder);
} else if (is_externally_owned) {
title = intl.formatMessage(messages.externalFolder);
} else {
title = intl.formatMessage(messages.personalFolder);
}
return (
<FolderIcon
dimension={dimension}
isCollab={has_collaborations}
isExternal={is_externally_owned}
title={title}
/>
);
case TYPE_WEBLINK:
title = intl.formatMessage(messages.bookmark);
return <BookmarkIcon height={dimension} width={dimension} title={title} />;
default:
title = intl.formatMessage(messages.file);
return <FileIcon dimension={dimension} title={title} />;
}
};
export { IconCell as IconCellBase };
export default injectIntl(IconCell);