diff --git a/frontend/src/components/repo-view/share-repo-view.js b/frontend/src/components/repo-view/share-repo-view.js
index ca66487259..49d06c6a07 100644
--- a/frontend/src/components/repo-view/share-repo-view.js
+++ b/frontend/src/components/repo-view/share-repo-view.js
@@ -73,7 +73,7 @@ class ShareRepoView extends React.Component {
{(!this.props.isLoading && this.state.repoList.length === 0) && emptyTip}
{(!this.props.isLoading && this.state.repoList.length > 0) &&
diff --git a/frontend/src/components/shared-repo-list-view/shared-repo-list-item.js b/frontend/src/components/shared-repo-list-view/shared-repo-list-item.js
index 07628fa712..2ac4ef4c02 100644
--- a/frontend/src/components/shared-repo-list-view/shared-repo-list-item.js
+++ b/frontend/src/components/shared-repo-list-view/shared-repo-list-item.js
@@ -10,6 +10,7 @@ const propTypes = {
repo: PropTypes.object.isRequired,
isItemFreezed: PropTypes.bool.isRequired,
isShowRepoOwner: PropTypes.bool.isRequired,
+ onFreezedItem: PropTypes.func.isRequired,
};
class RepoListItem extends React.Component {
@@ -21,26 +22,45 @@ class RepoListItem extends React.Component {
isOperationShow: false,
isItemMenuShow: false,
};
+ this.isDeparementOnwerGroupMember = false;
}
onMouseEnter = () => {
- this.setState({
- highlight: true,
- isOperationShow: true,
- });
+ if (!this.props.isItemFreezed) {
+ this.setState({
+ highlight: true,
+ isOperationShow: true,
+ });
+ }
}
onMouseLeave = () => {
- this.setState({
- highlight: false,
- isOperationShow: false,
- });
+ if (!this.props.isItemFreezed) {
+ this.setState({
+ highlight: false,
+ isOperationShow: false,
+ });
+ }
+ }
+
+ clickOperationMenuToggle = (e) => {
+ e.preventDefault();
+ this.toggleOperationMenu();
}
toggleOperationMenu = () => {
- this.setState({
- isItemMenuShow: !this.state.isItemMenuShow
- });
+ if (this.props.isItemFreezed) {
+ this.setState({
+ highlight: false,
+ isOperationShow: false,
+ isItemMenuShow: !this.state.isItemMenuShow
+ });
+ } else {
+ this.setState({
+ isItemMenuShow: !this.state.isItemMenuShow
+ });
+ }
+ this.props.onFreezedItem();
}
getRepoComputeParams = () => {
@@ -67,132 +87,179 @@ class RepoListItem extends React.Component {
return { iconUrl, iconTitle, libPath };
}
+ onMenuItemClick = (e) => {
+ let operation = e.target.dataset.toggle;
+ switch(operation) {
+ case 'Rename':
+ this.onItemRename();
+ break;
+ case 'Folder Permission':
+ this.onItemPermisionChanged();
+ break;
+ case 'Details':
+ this.onItemDetails();
+ break;
+ case 'Share':
+ this.onItemShared();
+ break;
+ case 'Unshare':
+ this.onItemUnshared();
+ break;
+ default:
+ break;
+ }
+ }
+
+ onItemRename = () => {
+ // todo
+ }
+
+ onItemPermisionChanged = () => {
+ // todo
+ }
+
+ onItemDetails = () => {
+ // todo
+ }
+
+ onItemShared = () => {
+ // todo
+ }
+
+ onItemUnshared = () => {
+ // todo
+ }
+
+ onItemDelete = () => {
+ // todo
+ }
+
generatorOperations = () => {
let { repo, currentGroup } = this.props;
let isStaff = currentGroup.admins.indexOf(username) > -1; //for group repolist;
let isRepoOwner = repo.owner_email === username;
let isAdmin = repo.is_admin;
-
- let iconVisibility = this.state.isOperationShow ? '' : ' invisible';
- let shareIconClassName = 'sf2-icon-share sf2-x repo-share-btn op-icon' + iconVisibility;
- let unshareIconClassName = 'sf2-icon-x3 sf2-x op-icon' + iconVisibility;
- let deleteIconClassName = 'sf2-icon-delete sf2-x op-icon' + iconVisibility;
- let operationMenuToggleIconClassName = 'sf2-icon-caret-down item-operation-menu-toggle-icon op-icon';
- if (window.innerWidth >= 768) {
- operationMenuToggleIconClassName += iconVisibility;
- }
-
- const commonToggle = (
-
-
- );
-
- const commonOperationsInMenu = (
-
- {gettext('Rename')}
- {folderPermEnabled ? {gettext('Folder Permission')} : null}
- {gettext('Details')}
-
- );
-
- let desktopOperations;
- let mobileOperationMenu;
-
- const share = ;
- const unshare =
- const deleteOperation = ;
-
- const shareDropdownItem = {gettext('Share')};
- const unshareDropdownItem = {gettext('Unshare')};
+ let operations = [];
+ // todo ,shared width me shared width all;
if (isPro) {
- if (repo.owner_email.indexOf('@seafile_group') != -1) { // group owned repo
- if (isStaff) {
- if (repo.owner_email == currentGroup.id + '@seafile_group') { // this repo belongs to the current group
- desktopOperations = (
-
- {share}
- {deleteOperation}
-
- {commonToggle}
-
- {commonOperationsInMenu}
-
-
-
- );
- mobileOperationMenu = (
-
- {shareDropdownItem}
- {gettext('Delete')}
- {commonOperationsInMenu}
-
- );
+ if (repo.owner_email.indexOf('@seafile_group') != -1) { //current repo is belong to a group;
+ if (isStaff && repo.owner_email == currentGroup.id + '@seafile_group') { //is a member of this current group,
+ this.isDeparementOnwerGroupMember = true;
+ if (folderPermEnabled) {
+ operations = ['Rename', 'Folder Permission', 'deatils'];
} else {
- desktopOperations = unshare;
- mobileOperationMenu = unshareDropdownItem;
+ operations = ['Rename', 'Details']
}
+ } else {
+ operations.push('Unshare');
}
} else {
- desktopOperations = (
-
- {isRepoOwner || isAdmin ? share : null}
- {isStaff || isRepoOwner || isAdmin ? unshare : null}
-
- );
- mobileOperationMenu = (
-
- {isRepoOwner || isAdmin ? shareDropdownItem : null}
- {isStaff || isRepoOwner || isAdmin ? unshareDropdownItem : null}
-
- );
+ if (isRepoOwner || isAdmin) {
+ operations.push('Share');
+ }
+ if (isStaff || isRepoOwner || isAdmin) {
+ operations.push('Unshare');
+ }
}
} else {
- desktopOperations = (
-
- {isRepoOwner ? share : null}
- {isStaff || isRepoOwner ? unshare : null}
-
- );
- mobileOperationMenu = (
-
- {isRepoOwner ? shareDropdownItem : null}
- {isStaff || isRepoOwner ? unshareDropdownItem : null}
-
- );
+ if (isRepoOwner) {
+ operations.push('share');
+ }
+ if (isStaff || isRepoOwner) {
+ operations.push('Unshare');
+ }
}
+ return operations;
+ }
- const mobileOperations = (
+ generatorMobileMenu = () => {
+ let operations = this.generatorOperations();
+ if (this.isDeparementOnwerGroupMember) {
+ operations.unshift('unshare');
+ operations.unshift('share');
+ }
+ return (
- {commonToggle}
+
- {mobileOperationMenu}
+ {operations.map((item, index) => {
+ return (
+ {gettext(item)}
+ );
+ })}
);
+ }
- return { desktopOperations, mobileOperations }
+ generatorPCMenu = () => {
+ // scene one: (share, delete, itemToggle and other operations);
+ // scene two: (share, unshare), (share), (unshare)
+ let operations = this.generatorOperations();
+ const shareOperation = ;
+ const unshareOperation =
+ const deleteOperation = ;
+
+ if (this.isDeparementOnwerGroupMember) {
+ return (
+
+ {shareOperation}
+ {deleteOperation}
+
+
+
+ {operations.map((item, index) => {
+ return {gettext(item)}
+ })}
+
+
+
+ );
+ } else {
+ if (operations.length == 2) {
+ return (
+
+ {shareOperation}
+ {unshareOperation}
+
+ );
+ }
+ if (operations.length == 1 && operations[0] === 'share') {
+ return shareOperation;
+ }
+
+ if (operations.length == 1 && operations[0] === 'unshare') {
+ return unshareOperation;
+ }
+ }
+ return null;
}
renderPCUI = () => {
let { iconUrl, iconTitle, libPath } = this.getRepoComputeParams();
let { repo, isShowRepoOwner } = this.props;
- let { desktopOperations } = this.generatorOperations();
return (
 |
{repo.repo_name} |
- {desktopOperations} |
+ {this.state.isOperationShow && this.generatorPCMenu()} |
{repo.size} |
{moment(repo.last_modified).fromNow()} |
{isShowRepoOwner && {repo.owner_name} | }
@@ -203,7 +270,6 @@ class RepoListItem extends React.Component {
renderMobileUI = () => {
let { iconUrl, iconTitle, libPath } = this.getRepoComputeParams();
let { repo, isShowRepoOwner } = this.props;
- let { mobileOperations } = this.generatorOperations();
return (
 |
@@ -213,7 +279,7 @@ class RepoListItem extends React.Component {
{repo.size}
{moment(repo.last_modified).fromNow()}
- {mobileOperations} |
+ {this.generatorMobileMenu()} |
);
}
diff --git a/frontend/src/components/shared-repo-list-view/shared-repo-list-view.js b/frontend/src/components/shared-repo-list-view/shared-repo-list-view.js
index 0fe38a33aa..973272da82 100644
--- a/frontend/src/components/shared-repo-list-view/shared-repo-list-view.js
+++ b/frontend/src/components/shared-repo-list-view/shared-repo-list-view.js
@@ -18,6 +18,31 @@ class SharedRepoListView extends React.Component {
};
}
+ onFreezedItem = () => {
+ this.setState({
+ isItemFreezed: !this.state.isItemFreezed,
+ });
+ }
+
+ renderRepoListView = () => {
+ return (
+
+ {this.props.repoList.map(repo => {
+ return (
+
+ );
+ })}
+
+ );
+ }
+
renderPCUI = () => {
let isShowRepoOwner = this.props.isShowRepoOwner;
return (
@@ -37,17 +62,7 @@ class SharedRepoListView extends React.Component {
- {this.props.repoList.map(repo => {
- return (
-
- );
- })}
+ {this.renderRepoListView()}
);
@@ -75,17 +90,7 @@ class SharedRepoListView extends React.Component {
- {this.props.repoList.map(repo => {
- return (
-
- );
- })}
+ {this.renderRepoListView()}
);