-
+ <>
+
{gettext('Current path: ')}
{showFolder ?
this.renderFolderPath() :
{repoFolderName}
}
-
+
-
+ >
}
diff --git a/frontend/src/components/dialog/trash-dialog/table/file-records/file-record.js b/frontend/src/components/dialog/trash-dialog/table/file-records/file-record.js
index d12465b041..8f99fb69b6 100644
--- a/frontend/src/components/dialog/trash-dialog/table/file-records/file-record.js
+++ b/frontend/src/components/dialog/trash-dialog/table/file-records/file-record.js
@@ -1,6 +1,7 @@
import React from 'react';
import PropTypes from 'prop-types';
import dayjs from 'dayjs';
+import { Dropdown, DropdownToggle, DropdownItem } from 'reactstrap';
import { Utils, isMobile } from '../../../../../utils/utils';
import { gettext, siteRoot } from '../../../../../utils/constants';
import { seafileAPI } from '../../../../../utils/seafile-api';
@@ -12,10 +13,17 @@ class FileRecord extends React.Component {
super(props);
this.state = {
restored: false,
- isIconShown: false
+ isIconShown: false,
+ isOpMenuOpen: false // for mobile
};
}
+ toggleOpMenu = () => {
+ this.setState({
+ isOpMenuOpen: !this.state.isOpMenuOpen
+ });
+ };
+
handleMouseOver = () => {
this.setState({ isIconShown: true });
};
@@ -24,8 +32,12 @@ class FileRecord extends React.Component {
this.setState({ isIconShown: false });
};
- restoreItem = (e) => {
+ onRestoreClicked = (e) => {
e.preventDefault();
+ this.restoreItem();
+ };
+
+ restoreItem = () => {
const { record } = this.props;
const { commit_id, parent_dir, obj_name, is_dir } = record;
const path = parent_dir + obj_name;
@@ -55,40 +67,118 @@ class FileRecord extends React.Component {
};
render() {
- const { record } = this.props;
+ const { record, isDesktop } = this.props;
const { restored, isIconShown } = this.state;
if (restored) return null;
- return record.is_dir ? (
-
- }) |
- {record.obj_name} |
- {record.parent_dir} |
- {dayjs(record.deleted_time).format('YYYY-MM-DD')} |
- |
-
- {gettext('Restore')}
- |
-
- ) : (
-
- }) |
-
-
- {record.obj_name}
-
- |
- {record.parent_dir} |
-
- {dayjs(record.deleted_time).format('YYYY-MM-DD')}
- |
- {Utils.bytesToSize(record.size)} |
-
- {gettext('Restore')}
- |
-
- );
+ if (isDesktop) {
+ return record.is_dir ? (
+
+ }) |
+ {record.obj_name} |
+ {record.parent_dir} |
+ {dayjs(record.deleted_time).format('YYYY-MM-DD')} |
+ |
+
+ {gettext('Restore')}
+ |
+
+ ) : (
+
+ }) |
+
+
+ {record.obj_name}
+
+ |
+ {record.parent_dir} |
+
+ {dayjs(record.deleted_time).format('YYYY-MM-DD')}
+ |
+ {Utils.bytesToSize(record.size)} |
+
+ {gettext('Restore')}
+ |
+
+ );
+ } else { // for mobile
+ return record.is_dir ? (
+
+
+
+ |
+
+ {record.obj_name}
+
+ {record.parent_dir}
+
+ {dayjs(record.deleted_time).format('YYYY-MM-DD')}
+ |
+
+
+
+
+
+
+
+ {gettext('Restore')}
+
+
+
+
+ |
+
+ ) : (
+
+ }) |
+
+
+ {record.obj_name}
+
+
+ {record.parent_dir}
+
+ {Utils.bytesToSize(record.size)}
+
+ {dayjs(record.deleted_time).format('YYYY-MM-DD')}
+
+ |
+
+
+
+
+
+
+
+ {gettext('Restore')}
+
+
+
+
+ |
+
+ );
+ }
}
}
diff --git a/frontend/src/components/dialog/trash-dialog/table/file-records/index.js b/frontend/src/components/dialog/trash-dialog/table/file-records/index.js
index 4a7d4c3d5d..a871b23950 100644
--- a/frontend/src/components/dialog/trash-dialog/table/file-records/index.js
+++ b/frontend/src/components/dialog/trash-dialog/table/file-records/index.js
@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import FileRecord from './file-record';
-const FileRecords = ({ records, repoID, renderFolder }) => {
+const FileRecords = ({ records, repoID, renderFolder, isDesktop }) => {
if (!Array.isArray(records) || records.length === 0) return null;
return records.map((record, index) => {
return (
@@ -11,6 +11,7 @@ const FileRecords = ({ records, repoID, renderFolder }) => {
record={record}
repoID={repoID}
renderFolder={renderFolder}
+ isDesktop={isDesktop}
/>
);
});
diff --git a/frontend/src/components/dialog/trash-dialog/table/folder-records/folder-record.js b/frontend/src/components/dialog/trash-dialog/table/folder-records/folder-record.js
index 193b50ebff..bf6d12ac0e 100644
--- a/frontend/src/components/dialog/trash-dialog/table/folder-records/folder-record.js
+++ b/frontend/src/components/dialog/trash-dialog/table/folder-records/folder-record.js
@@ -27,33 +27,68 @@ class FolderRecord extends React.Component {
};
render() {
- const { commitID, baseDir, folderPath, record } = this.props;
+ const { commitID, baseDir, folderPath, record, isDesktop } = this.props;
- return record.type == 'dir' ? (
-
- }) |
- {record.name} |
- {record.parent_dir} |
- |
- |
- |
-
- ) : (
-
-
-
- |
-
-
- {record.name}
-
- |
- {record.parent_dir} |
- |
- {Utils.bytesToSize(record.size)} |
- |
-
- );
+ if (isDesktop) {
+ return record.type == 'dir' ? (
+
+ }) |
+ {record.name} |
+ {record.parent_dir} |
+ |
+ |
+ |
+
+ ) : (
+
+
+
+ |
+
+
+ {record.name}
+
+ |
+ {record.parent_dir} |
+ |
+ {Utils.bytesToSize(record.size)} |
+ |
+
+ );
+ } else { // for mobile
+ return record.type == 'dir' ? (
+
+
+
+ |
+
+ {record.name}
+
+ {record.parent_dir}
+ |
+ |
+
+ ) : (
+
+
+
+ |
+
+
+ {record.name}
+
+
+ {record.parent_dir}
+
+ {Utils.bytesToSize(record.size)}
+ |
+ |
+
+ );
+ }
}
}
diff --git a/frontend/src/components/dialog/trash-dialog/table/folder-records/index.js b/frontend/src/components/dialog/trash-dialog/table/folder-records/index.js
index c5e25f5ca7..54d0969b1e 100644
--- a/frontend/src/components/dialog/trash-dialog/table/folder-records/index.js
+++ b/frontend/src/components/dialog/trash-dialog/table/folder-records/index.js
@@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import FolderRecord from './folder-record';
-const FolderRecords = ({ records, repoID, commitID, baseDir, folderPath, renderFolder }) => {
+const FolderRecords = ({ records, repoID, commitID, baseDir, folderPath, renderFolder, isDesktop }) => {
if (!Array.isArray(records) || records.length === 0) return null;
return records.map((record, index) => {
return (
@@ -14,6 +14,7 @@ const FolderRecords = ({ records, repoID, commitID, baseDir, folderPath, renderF
baseDir={baseDir}
folderPath={folderPath}
renderFolder={renderFolder}
+ isDesktop={isDesktop}
/>
);
});
diff --git a/frontend/src/components/dialog/trash-dialog/table/index.js b/frontend/src/components/dialog/trash-dialog/table/index.js
index 760db85ffd..0a961040cb 100644
--- a/frontend/src/components/dialog/trash-dialog/table/index.js
+++ b/frontend/src/components/dialog/trash-dialog/table/index.js
@@ -4,8 +4,9 @@ import { gettext } from '../../../../utils/constants';
import FolderRecords from './folder-records';
import FileRecords from './file-records';
import FixedWidthTable from '../../../common/fixed-width-table';
+import LibsMobileThead from '../../../../components/libs-mobile-thead';
-const Table = ({ repoID, renderFolder, data }) => {
+const Table = ({ repoID, renderFolder, data, isDesktop }) => {
const headers = useMemo(() => [
{ isFixed: true, width: 40, className: 'pl-2 pr-2' },
{ isFixed: false, width: 0.25, children: gettext('Name') },
@@ -17,15 +18,33 @@ const Table = ({ repoID, renderFolder, data }) => {
const { items, showFolder, commitID, baseDir, folderPath, folderItems } = data;
+ const tbodyContent = (
+ <>
+ {showFolder ? (
+
+ ) : (
+
+ )}
+ >
+ );
+
return (
-
- {showFolder ? (
-
- ) : (
-
- )}
-
+ {isDesktop
+ ? (
+
+ {tbodyContent}
+
+ )
+ : (
+
+ )
+ }
);
};
diff --git a/frontend/src/repo-folder-trash.js b/frontend/src/repo-folder-trash.js
index 3bbf90903e..245b9ec7e2 100644
--- a/frontend/src/repo-folder-trash.js
+++ b/frontend/src/repo-folder-trash.js
@@ -444,4 +444,3 @@ FolderItem.propTypes = {
const root = createRoot(document.getElementById('wrapper'));
root.render(
);
-