Web: Files: refactoring

This commit is contained in:
Artem Tarasov 2021-04-20 01:19:52 +03:00
parent d90df23ad1
commit 4320fe7e00
4 changed files with 59 additions and 79 deletions

View File

@ -1,4 +1,4 @@
import React from "react"; import React, { useState } from "react";
import { ReactSVG } from "react-svg"; import { ReactSVG } from "react-svg";
import { inject, observer } from "mobx-react"; import { inject, observer } from "mobx-react";
import { withTranslation } from "react-i18next"; import { withTranslation } from "react-i18next";
@ -44,7 +44,6 @@ const FileItem = createSelectable((props) => {
viewAs, viewAs,
setTooltipPosition, setTooltipPosition,
getIcon, getIcon,
startDrag,
filter, filter,
parentFolder, parentFolder,
setIsLoading, setIsLoading,
@ -59,7 +58,7 @@ const FileItem = createSelectable((props) => {
addExpandedKeys, addExpandedKeys,
setMediaViewerData, setMediaViewerData,
} = props; } = props;
const [isMouseDown, setIsMouseDown] = useState(false);
const { const {
id, id,
fileExst, fileExst,
@ -140,6 +139,7 @@ const FileItem = createSelectable((props) => {
}; };
const onMouseDown = (e) => { const onMouseDown = (e) => {
setIsMouseDown(true);
if (!draggable) { if (!draggable) {
return; return;
} }
@ -197,24 +197,27 @@ const FileItem = createSelectable((props) => {
} }
}; };
const onClickHandler = (e) => { const onMouseUpHandler = (e) => {
if ( if (
e.target.closest(".checkbox") || e.target.closest(".checkbox") ||
e.target.tagName === "INPUT" || e.target.tagName === "INPUT" ||
e.target.closest(".expandButton") || e.target.closest(".expandButton") ||
e.button !== 0 || e.button !== 0
startDrag
) )
return; return;
if (isFolder && viewAs === "tile") onFilesClick(); if (isFolder && viewAs === "tile") {
else { if (!isMouseDown) return;
onFilesClick();
} else {
if (checked) { if (checked) {
onContentFileSelect(!checked, item); onContentFileSelect(!checked, item);
} else { } else {
if (!isMouseDown) return;
fileContextClick && fileContextClick(item); fileContextClick && fileContextClick(item);
} }
} }
setIsMouseDown(false);
}; };
let value = fileExst || contentLength ? `file_${id}` : `folder_${id}`; let value = fileExst || contentLength ? `file_${id}` : `folder_${id}`;
@ -240,7 +243,6 @@ const FileItem = createSelectable((props) => {
let className = isDragging ? " droppable" : ""; let className = isDragging ? " droppable" : "";
if (draggable) className += " draggable not-selectable"; if (draggable) className += " draggable not-selectable";
//if (draggable) className += `${startDrag ? " not-selectable " : ""}`;
const sharedButton = const sharedButton =
!canShare || (isPrivacy && !fileExst) || isEdit || id <= 0 || isMobile !canShare || (isPrivacy && !fileExst) || isEdit || id <= 0 || isMobile
@ -248,7 +250,6 @@ const FileItem = createSelectable((props) => {
: getSharedButton(shared); : getSharedButton(shared);
const temporaryIcon = getIcon(96, fileExst, providerKey, contentLength); const temporaryIcon = getIcon(96, fileExst, providerKey, contentLength);
return ( return (
<div ref={props.selectableRef}> <div ref={props.selectableRef}>
<DragAndDrop <DragAndDrop
@ -274,7 +275,7 @@ const FileItem = createSelectable((props) => {
isPrivacy={isPrivacy} isPrivacy={isPrivacy}
thumbnailClick={onFilesClick} thumbnailClick={onFilesClick}
onDoubleClick={onFilesClick} onDoubleClick={onFilesClick}
onMouseUp={onClickHandler} onMouseUp={onMouseUpHandler}
> >
<FilesContent <FilesContent
item={item} item={item}
@ -297,7 +298,7 @@ const FileItem = createSelectable((props) => {
{...contextOptionsProps} {...contextOptionsProps}
contextButtonSpacerWidth={displayShareButton} contextButtonSpacerWidth={displayShareButton}
onDoubleClick={onFilesClick} onDoubleClick={onFilesClick}
onMouseUp={onClickHandler} onMouseUp={onMouseUpHandler}
> >
<FilesContent <FilesContent
item={item} item={item}
@ -357,7 +358,6 @@ export default inject(
setStartDrag, setStartDrag,
setTooltipPosition, setTooltipPosition,
viewAs, viewAs,
startDrag,
filter, filter,
setIsLoading, setIsLoading,
fetchFiles, fetchFiles,
@ -372,7 +372,6 @@ export default inject(
const selectedItem = selection.find( const selectedItem = selection.find(
(x) => x.id === item.id && x.fileExst === item.fileExst (x) => x.id === item.id && x.fileExst === item.fileExst
); );
const isFolder = selectedItem ? false : item.fileExst ? false : true; const isFolder = selectedItem ? false : item.fileExst ? false : true;
const draggable = const draggable =
!isRecycleBinFolder && selectedItem && selectedItem.id !== id; !isRecycleBinFolder && selectedItem && selectedItem.id !== id;
@ -406,8 +405,6 @@ export default inject(
isFolder, isFolder,
draggable, draggable,
isItemsSelected: !!selection.length,
actionId: fileActionStore.id, actionId: fileActionStore.id,
setSharingPanelVisible, setSharingPanelVisible,
setChangeOwnerPanelVisible, setChangeOwnerPanelVisible,
@ -423,7 +420,6 @@ export default inject(
setTooltipPosition, setTooltipPosition,
viewAs, viewAs,
getIcon, getIcon,
startDrag,
filter, filter,
parentFolder, parentFolder,

View File

@ -1,4 +1,4 @@
import React from "react"; import React, { memo } from "react";
import { withRouter } from "react-router"; import { withRouter } from "react-router";
import { Trans, withTranslation } from "react-i18next"; import { Trans, withTranslation } from "react-i18next";
import { isMobile } from "react-device-detect"; import { isMobile } from "react-device-detect";
@ -32,32 +32,28 @@ import Badges from "./sub-components/Badges";
const sideColor = "#A3A9AE"; const sideColor = "#A3A9AE";
const Content = ({ const Content = memo(
viewAs, ({ viewAs, sectionWidth, fileExst, onMobileRowClick, ...props }) => {
sectionWidth, return viewAs === "tile" ? (
fileExst, <SimpleTileContent
onMobileRowClick, sideColor={sideColor}
...props isFile={fileExst}
}) => { onClick={onMobileRowClick}
return viewAs === "tile" ? ( disableSideInfo
<SimpleTileContent {...props}
sideColor={sideColor} />
isFile={fileExst} ) : (
onClick={onMobileRowClick} <SimpleRowContent
disableSideInfo sectionWidth={sectionWidth}
{...props} isMobile={isMobile}
/> sideColor={sideColor}
) : ( isFile={fileExst}
<SimpleRowContent onClick={onMobileRowClick}
sectionWidth={sectionWidth} {...props}
isMobile={isMobile} />
sideColor={sideColor} );
isFile={fileExst} }
onClick={onMobileRowClick} );
{...props}
/>
);
};
class FilesContent extends React.Component { class FilesContent extends React.Component {
constructor(props) { constructor(props) {
@ -397,9 +393,24 @@ class FilesContent extends React.Component {
.catch((err) => toastr.error(err)); .catch((err) => toastr.error(err));
}; };
renderExst = (fileExst) => {
return (
<Text
className="badge-ext"
as="span"
color="#A3A9AE"
fontSize="15px"
fontWeight={600}
title={fileExst}
truncate={true}
>
{fileExst}
</Text>
);
};
render() { render() {
const { itemTitle, showConvertDialog, newItems } = this.state; const { itemTitle, showConvertDialog, newItems } = this.state;
const { const {
t, t,
viewAs, viewAs,
@ -447,6 +458,8 @@ class FilesContent extends React.Component {
? { noHover: true } ? { noHover: true }
: { onClick: onFilesClick }; : { onClick: onFilesClick };
const exstElement = this.renderExst(fileExst);
return isEdit ? ( return isEdit ? (
<EditingWrapperComponent <EditingWrapperComponent
itemTitle={itemTitle} itemTitle={itemTitle}
@ -483,34 +496,10 @@ class FilesContent extends React.Component {
isTextOverflow isTextOverflow
> >
{titleWithoutExt} {titleWithoutExt}
{fileExst && viewAs === "tile" ? ( {fileExst && viewAs === "tile" ? exstElement : null}
<Text
className="badge-ext"
as="span"
color="#A3A9AE"
fontSize="15px"
fontWeight={600}
title={fileExst}
truncate={true}
>
{fileExst}
</Text>
) : null}
</Link> </Link>
<div className="badges"> <div className="badges">
{fileExst && viewAs !== "tile" ? ( {fileExst && viewAs !== "tile" ? exstElement : null}
<Text
className="badge-ext"
as="span"
color="#A3A9AE"
fontSize="15px"
fontWeight={600}
title={fileExst}
truncate={true}
>
{fileExst}
</Text>
) : null}
<Badges <Badges
item={item} item={item}
newItems={this.state.newItems} newItems={this.state.newItems}

View File

@ -149,7 +149,7 @@ const StyledOptionButton = styled.div`
} }
`; `;
class Tile extends React.Component { class Tile extends React.PureComponent {
// shouldComponentUpdate(nextProps) { // shouldComponentUpdate(nextProps) {
// if (this.props.needForUpdate) { // if (this.props.needForUpdate) {
// return this.props.needForUpdate(this.props, nextProps); // return this.props.needForUpdate(this.props, nextProps);
@ -183,7 +183,6 @@ class Tile extends React.Component {
}; };
render() { render() {
//console.log("Row render");
const { const {
checked, checked,
children, children,

View File

@ -12,13 +12,11 @@ import {
const Badges = (props) => { const Badges = (props) => {
const { const {
newItems, newItems,
viewAs,
item, item,
canWebEdit, canWebEdit,
isTrashFolder, isTrashFolder,
canConvert, canConvert,
accessToEdit, accessToEdit,
onFilesClick, onFilesClick,
onClickLock, onClickLock,
onClickFavorite, onClickFavorite,
@ -27,7 +25,6 @@ const Badges = (props) => {
} = props; } = props;
const { id, locked, fileStatus, versionGroup, title } = item; const { id, locked, fileStatus, versionGroup, title } = item;
const { fileExst } = item; const { fileExst } = item;
const showNew = !!newItems; const showNew = !!newItems;
return fileExst ? ( return fileExst ? (
<div className="badges additional-badges"> <div className="badges additional-badges">
@ -125,13 +122,12 @@ const Badges = (props) => {
); );
}; };
export default inject(({ filesStore, treeFoldersStore }, { item }) => { export default inject(({ treeFoldersStore }, { item }) => {
const { viewAs } = filesStore;
const { isRecycleBinFolder: isTrashFolder } = treeFoldersStore; const { isRecycleBinFolder: isTrashFolder } = treeFoldersStore;
const { access } = item; const { access } = item;
const accessToEdit = const accessToEdit =
access === ShareAccessRights.FullAccess || access === ShareAccessRights.FullAccess ||
access === ShareAccessRights.None; // TODO: fix access type for owner (now - None) access === ShareAccessRights.None; // TODO: fix access type for owner (now - None)
return { viewAs, isTrashFolder, accessToEdit }; return { isTrashFolder, accessToEdit };
})(observer(Badges)); })(observer(Badges));