Skip to content

Commit

Permalink
refactor: section (#6224)
Browse files Browse the repository at this point in the history
* refactor: section

* feat: update code

---------

Co-authored-by: 杨国璇 <[email protected]>
  • Loading branch information
YangGuoXuan-0503 and 杨国璇 authored Jun 19, 2024
1 parent 9fcef01 commit e252f50
Show file tree
Hide file tree
Showing 16 changed files with 466 additions and 318 deletions.
69 changes: 31 additions & 38 deletions frontend/src/components/dir-view-mode/dir-column-nav.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ import CreateFolder from '../../components/dialog/create-folder-dialog';
import CreateFile from '../../components/dialog/create-file-dialog';
import ImageDialog from '../../components/dialog/image-dialog';
import { siteRoot, thumbnailSizeForOriginal } from '../../utils/constants';
import seahubMetadataAPI from '../metadata-manage/seahub-metadata-api';
import { gettext } from '../../utils/constants';
import { Utils } from '../../utils/utils';
import toaster from '../../components/toast';
import TreeSection from '../../components/tree-section';
import DirViews from './dir-views';

const propTypes = {
currentPath: PropTypes.string.isRequired,
Expand Down Expand Up @@ -102,22 +102,6 @@ class DirColumnNav extends React.Component {
case 'Open in New Tab':
this.onOpenFile(node);
break;
case 'Enable Metadata':
if (confirm(gettext('Enable metadata management?'))){
seahubMetadataAPI.enableMetadataManagement(this.props.repoID).catch((error) => {
let errMessage = Utils.getErrorMsg(error);
toaster.danger(errMessage);
});
}
break;
case 'Disable Metadata':
if (confirm(gettext('Disable metadata management?'))){
seahubMetadataAPI.disableMetadataManagement(this.props.repoID).catch((error) => {
let errMessage = Utils.getErrorMsg(error);
toaster.danger(errMessage);
});
}
break;
}
};

Expand Down Expand Up @@ -261,32 +245,41 @@ class DirColumnNav extends React.Component {
e.stopPropagation();
};

renderContent = () => {
if (this.props.isTreeDataLoading) return (<Loading/>);
return (
<>
<TreeSection title={gettext('Files')}>
<TreeView
userPerm={this.props.userPerm}
isNodeMenuShow={this.isNodeMenuShow}
treeData={this.props.treeData}
currentPath={this.props.currentPath}
onNodeClick={this.onNodeClick}
onNodeExpanded={this.props.onNodeExpanded}
onNodeCollapse={this.props.onNodeCollapse}
onMenuItemClick={this.onMenuItemClick}
onFreezedItem={this.onFreezedItem}
onUnFreezedItem={this.onUnFreezedItem}
onItemMove={this.props.onItemMove}
currentRepoInfo={this.props.currentRepoInfo}
selectedDirentList={this.props.selectedDirentList}
onItemsMove={this.props.onItemsMove}
repoID={this.props.repoID}
/>
</TreeSection>
<DirViews repoID={this.props.repoID} userPerm={this.props.userPerm} />
</>
);
};

render() {
let flex = this.props.navRate ? '0 0 ' + this.props.navRate * 100 + '%' : '0 0 25%';
const select = this.props.inResizing ? 'none' : '';
return (
<Fragment>
<div className="dir-content-nav" role="navigation" style={{flex: (flex), userSelect: select}} onScroll={this.stopTreeScrollPropagation}>
{this.props.isTreeDataLoading ?
(<Loading/>) :
(<TreeView
userPerm={this.props.userPerm}
isNodeMenuShow={this.isNodeMenuShow}
treeData={this.props.treeData}
currentPath={this.props.currentPath}
onNodeClick={this.onNodeClick}
onNodeExpanded={this.props.onNodeExpanded}
onNodeCollapse={this.props.onNodeCollapse}
onMenuItemClick={this.onMenuItemClick}
onFreezedItem={this.onFreezedItem}
onUnFreezedItem={this.onUnFreezedItem}
onItemMove={this.props.onItemMove}
currentRepoInfo={this.props.currentRepoInfo}
selectedDirentList={this.props.selectedDirentList}
onItemsMove={this.props.onItemsMove}
repoID={this.props.repoID}
/>)
}
{this.renderContent()}
</div>
{this.state.isAddFolderDialogShow && (
<ModalPortal>
Expand Down
Empty file.
75 changes: 75 additions & 0 deletions frontend/src/components/dir-view-mode/dir-views/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import React, { useCallback, useEffect, useMemo, useState } from 'react';
import PropTypes from 'prop-types';
import { gettext } from '../../../utils/constants';
import { Utils } from '../../../utils/utils';
import TreeSection from '../../tree-section';
import MetadataStatusManagementDialog from '../../metadata-manage/metadata-status-manage-dialog';
import metadataManagerAPI from '../../metadata-manage/api';
import toaster from '../../toast';
import MetadataViews from '../../metadata-manage/metadata-views';

const DirViews = ({ userPerm, repoID }) => {
const enableMetadataManagement = useMemo(() => {
return window.app.pageOptions.enableMetadataManagement;
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [window.app.pageOptions.enableMetadataManagement]);

const [loading, setLoading] = useState(true);
const [showMetadataStatusManagementDialog, setShowMetadataStatusManagementDialog] = useState(false);
const [metadataStatus, setMetadataStatus] = useState(false);
const moreOperations = useMemo(() => {
if (!enableMetadataManagement) return [];
if (userPerm !== 'rw' && userPerm !== 'admin') return [];
return [
{ key: 'extended-properties', value: gettext('Extended properties') }
];
}, [enableMetadataManagement, userPerm]);

useEffect(() => {
const repoMetadataManagementEnabledStatusRes = metadataManagerAPI.getRepoMetadataManagementEnabledStatus(repoID);
Promise.all([repoMetadataManagementEnabledStatusRes]).then(results => {
const [repoMetadataManagementEnabledStatusRes] = results;
setMetadataStatus(repoMetadataManagementEnabledStatusRes.data.enabled);
setLoading(false);
}).catch(error => {
const errorMsg = Utils.getErrorMsg(error, true);
toaster.danger(errorMsg);
setLoading(false);
});
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);

const moreOperationClick = useCallback((operationKey) => {
if (operationKey === 'extended-properties') {
setShowMetadataStatusManagementDialog(true);
return;
}
}, []);

const closeMetadataManagementDialog = useCallback(() => {
setShowMetadataStatusManagementDialog(false);
}, []);

const toggleMetadataStatus = useCallback((value) => {
if (metadataStatus === value) return;
setMetadataStatus(value);
}, [metadataStatus]);

return (
<>
<TreeSection title={gettext('Views')} moreKey={{ name: 'views' }} moreOperations={moreOperations} moreOperationClick={moreOperationClick}>
{!loading && metadataStatus && (<MetadataViews repoID={repoID} />)}
</TreeSection>
{showMetadataStatusManagementDialog && (
<MetadataStatusManagementDialog value={metadataStatus} repoID={repoID} toggle={closeMetadataManagementDialog} submit={toggleMetadataStatus} />
)}
</>
);
};

DirViews.propTypes = {
userPerm: PropTypes.string,
repoID: PropTypes.string,
};

export default DirViews;
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import axios from 'axios';
import cookie from 'react-cookies';
import { siteRoot } from '../../utils/constants';

class SeahubMetadataAPI {
class MetadataManagerAPI {
init({ server, username, password, token }) {
this.server = server;
this.username = username;
Expand Down Expand Up @@ -43,17 +43,17 @@ class SeahubMetadataAPI {
}
}

getMetadataManagementEnabledStatus(repoID) {
getRepoMetadataManagementEnabledStatus(repoID) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/';
return this.req.get(url);
}

enableMetadataManagement(repoID) {
openRepoMetadataManagement(repoID) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/';
return this.req.put(url);
}

disableMetadataManagement(repoID) {
closeRepoMetadataManagement(repoID) {
const url = this.server + '/api/v2.1/repos/' + repoID + '/metadata/';
return this.req.delete(url);
}
Expand Down Expand Up @@ -91,8 +91,8 @@ class SeahubMetadataAPI {
}
}

const seahubMetadataAPI = new SeahubMetadataAPI();
const metadataManagerAPI = new MetadataManagerAPI();
const xcsrfHeaders = cookie.load('sfcsrftoken');
seahubMetadataAPI.initForSeahubUsage({ siteRoot, xcsrfHeaders });
metadataManagerAPI.initForSeahubUsage({ siteRoot, xcsrfHeaders });

export default seahubMetadataAPI;
export default metadataManagerAPI;
129 changes: 0 additions & 129 deletions frontend/src/components/metadata-manage/metadata-manage-view.js

This file was deleted.

Loading

0 comments on commit e252f50

Please sign in to comment.