diff --git a/frontend/src/components/dialog/share-to-other-server.js b/frontend/src/components/dialog/share-to-other-server.js
index becf89dfe0..180a730d3d 100644
--- a/frontend/src/components/dialog/share-to-other-server.js
+++ b/frontend/src/components/dialog/share-to-other-server.js
@@ -14,7 +14,8 @@ class ShareItem extends React.Component {
constructor(props) {
super(props);
this.state = {
- isOperationShow: false
+ isOperationShow: false,
+ isOpFrozen: false
};
}
@@ -27,16 +28,23 @@ class ShareItem extends React.Component {
}
deleteShareItem = () => {
+ this.setState({
+ // the 'delete' takes time,
+ // so 'lock' the op icon here to avoid multiple click on it
+ // avoid repeated requests
+ isOpFrozen: true
+ });
let item = this.props.item;
this.props.deleteShareItem(item);
}
render() {
let item = this.props.item;
+ const { isOperationShow, isOpFrozen } = this.state;
return (
{item.to_server_name} |
- {item.to_user} |
+ {item.to_user} |
{Utils.sharePerms(item.permission)} |
{/*
*/}
@@ -104,22 +112,14 @@ class ShareToOtherServer extends React.Component {
constructor(props) {
super(props);
this.state = {
- selectedOption: null,
- errorMsg: [],
- permission: 'rw',
- ocmShares: [],
+ selectedServer: null,
toUser: '',
- toServerURL: '',
+ permission: 'rw',
+ btnDisabled: true,
+ isSubmitting: false,
+ ocmShares: []
};
- this.options = [];
this.permissions = ['rw', 'r'];
- this.UnshareMessage = 'File was unshared';
-
- }
-
- handleSelectChange = (option) => {
- this.setState({selectedOption: option});
- this.options = [];
}
componentDidMount() {
@@ -127,47 +127,67 @@ class ShareToOtherServer extends React.Component {
this.setState({ocmShares: res.data.ocm_share_list});
}).catch(error => {
let errMessage = Utils.getErrorMsg(error);
- toaster.danger(errMessage);
+ this.setState({
+ errorMsg: errMessage
+ });
});
}
- startOCMShare = () => {
- let { repoID, itemPath } = this.props;
- let { toServerURL, toUser, permission } = this.state;
+ OCMShare = () => {
+ const { repoID, itemPath } = this.props;
+ const { selectedServer, toUser, permission } = this.state;
+ let toServerURL = selectedServer.value;
if (!toServerURL.endsWith('/')) {
toServerURL += '/';
}
+ this.setState({
+ btnDisabled: true,
+ isSubmitting: true
+ });
seafileAPI.addOCMSharePrepare(toUser, toServerURL, repoID, itemPath, permission).then((res) => {
- toaster.success(gettext('share success.'));
let ocmShares = this.state.ocmShares;
- ocmShares.push(res.data);
- this.setState({ocmShares: ocmShares});
+ ocmShares.unshift(res.data);
+ this.setState({
+ ocmShares: ocmShares,
+ selectedServer: null,
+ toUser: '',
+ permission: 'rw',
+ isSubmitting: false
+ });
}).catch(error => {
let errMessage = Utils.getErrorMsg(error);
toaster.danger(errMessage);
+ this.setState({
+ btnDisabled: false,
+ isSubmitting: false
+ });
});
}
handleToUserChange = (e) => {
+ const toUser = e.target.value;
this.setState({
- toUser: e.target.value,
+ toUser: toUser,
+ btnDisabled: !this.state.selectedServer || !toUser.trim()
});
}
- handleURLChange = (e) => {
+ handleServerChange = (selectedServer) => {
this.setState({
- toServerURL: e.value,
+ selectedServer,
+ btnDisabled: !this.state.toUser.trim()
});
}
deleteShareItem = (deletedItem) => {
- let { id } = deletedItem;
+ const { id } = deletedItem;
+ toaster.notify(gettext('It may take some time, please wait.'));
seafileAPI.deleteOCMSharePrepare(id).then((res) => {
- toaster.success(gettext('delete success.'));
let ocmShares = this.state.ocmShares.filter(item => {
return item.id != id;
});
this.setState({ocmShares: ocmShares});
+ toaster.success(gettext('Successfully deleted 1 item.'));
}).catch(error => {
let errMessage = Utils.getErrorMsg(error);
toaster.danger(errMessage);
@@ -178,9 +198,12 @@ class ShareToOtherServer extends React.Component {
this.setState({permission: permission});
}
-
render() {
- let { ocmShares, toUser, toServerURL, permission } = this.state;
+ const {
+ errorMsg, ocmShares,
+ toUser, selectedServer, permission,
+ btnDisabled, isSubmitting
+ } = this.state;
return (
@@ -196,8 +219,10 @@ class ShareToOtherServer extends React.Component {
|
@@ -216,15 +241,23 @@ class ShareToOtherServer extends React.Component {
/>
|
-
+
|
-
+ {errorMsg ?
+ {errorMsg} :
+
+ }
);
}
diff --git a/frontend/src/components/main-side-nav.js b/frontend/src/components/main-side-nav.js
index dbf3af99fe..84f2029220 100644
--- a/frontend/src/components/main-side-nav.js
+++ b/frontend/src/components/main-side-nav.js
@@ -219,7 +219,7 @@ class MainSideNav extends React.Component {
{enableOCM &&
this.tabItemClick(e, 'shared-with-ocm')}>
-
+
{gettext('Shared from other servers')}
diff --git a/frontend/src/pages/share-with-ocm/remote-dir-view.js b/frontend/src/pages/share-with-ocm/remote-dir-view.js
index 559767b297..eb78ce6a36 100644
--- a/frontend/src/pages/share-with-ocm/remote-dir-view.js
+++ b/frontend/src/pages/share-with-ocm/remote-dir-view.js
@@ -73,25 +73,10 @@ class DirView extends Component {
window.history.replaceState({url: url, path: path}, path, url);
});
}).catch((error) => {
- if (error.response) {
- if (error.response.status == 403) {
- this.setState({
- loading: false,
- errorMsg: gettext('Permission denied')
- });
- location.href = `${loginUrl}?next=${encodeURIComponent(location.href)}`;
- } else {
- this.setState({
- loading: false,
- errorMsg: gettext('Error')
- });
- }
- } else {
- this.setState({
- loading: false,
- errorMsg: gettext('Please check the network.')
- });
- }
+ this.setState({
+ loading: false,
+ errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403
+ });
});
}
diff --git a/frontend/src/pages/share-with-ocm/shared-with-ocm.js b/frontend/src/pages/share-with-ocm/shared-with-ocm.js
index bb88449c7e..e246b62759 100644
--- a/frontend/src/pages/share-with-ocm/shared-with-ocm.js
+++ b/frontend/src/pages/share-with-ocm/shared-with-ocm.js
@@ -32,8 +32,8 @@ class Content extends Component {
|
{gettext('Name')} |
- {gettext('Shared from')} |
- {gettext('At site')} |
+ {gettext('Shared by')} |
+ {gettext('At server')} |
{gettext('Time')} |
{/* operations */} |
@@ -43,7 +43,7 @@ class Content extends Component {
return ;
})}
@@ -66,57 +66,46 @@ class Item extends Component {
constructor(props) {
super(props);
this.state = {
- showOpIcon: false,
- isOpMenuOpen: false // for mobile
+ isOpIconShown: false
};
}
- toggleOpMenu = () => {
- this.setState({
- isOpMenuOpen: !this.state.isOpMenuOpen
- });
- }
-
handleMouseOver = () => {
this.setState({
- showOpIcon: true
+ isOpIconShown: true
});
}
handleMouseOut = () => {
this.setState({
- showOpIcon: false
+ isOpIconShown: false
});
}
- deleteShare = () => {
- this.props.deleteShare(this.props.item);
+ leaveShare = (e) => {
+ e.preventDefault();
+ this.props.leaveShare(this.props.item);
}
render() {
const item = this.props.item;
+ const { isOpIconShown } = this.state;
item.icon_url = Utils.getLibIconUrl(item);
item.icon_title = Utils.getLibIconTitle(item);
- item.url = `${siteRoot}#shared-libs/lib/${item.repo_id}/`;
let shareRepoUrl =`${siteRoot}remote-library/${this.props.item.provider_id}/${this.props.item.repo_id}/${Utils.encodePath(this.props.item.repo_name)}/`;
- let iconVisibility = this.state.showOpIcon ? '' : ' invisible';
- let deleteIcon = `action-icon sf2-icon-x3 ${iconVisibility ? 'invisible' : ''}`;
return (
-
-
-  |
- {item.repo_name} |
- {item.from_user} |
- {item.from_server_url} |
- {moment(item.ctime).fromNow()} |
-
-
- |
-
-
-
+
+  |
+ {item.repo_name} |
+ {item.from_user} |
+ {item.from_server_url} |
+ {moment(item.ctime).fromNow()} |
+
+
+ |
+
);
}
}
@@ -131,7 +120,7 @@ class SharedWithOCM extends Component {
this.state = {
loading: true,
errorMsg: '',
- items: [],
+ items: []
};
}
@@ -142,35 +131,21 @@ class SharedWithOCM extends Component {
items: res.data.ocm_share_received_list
});
}).catch((error) => {
- if (error.response) {
- if (error.response.status == 403) {
- this.setState({
- loading: false,
- errorMsg: gettext('Permission denied')
- });
- } else {
- this.setState({
- loading: false,
- errorMsg: gettext('Error')
- });
- }
- } else {
- this.setState({
- loading: false,
- errorMsg: gettext('Please check the network.')
- });
- }
+ this.setState({
+ loading: false,
+ errorMsg: Utils.getErrorMsg(error, true) // true: show login tip if 403
+ });
});
}
- deleteShare = (item) => {
- let { id } = item;
+ leaveShare = (item) => {
+ const { id, repo_name } = item;
seafileAPI.deleteOCMShareReceived(id).then((res) => {
- toaster.success(gettext('delete success.'));
let items = this.state.items.filter(item => {
return item.id != id;
});
this.setState({items: items});
+ toaster.success(gettext('Successfully unshared {name}').replace('{name}', repo_name));
}).catch(error => {
let errMessage = Utils.getErrorMsg(error);
toaster.danger(errMessage);
@@ -190,7 +165,7 @@ class SharedWithOCM extends Component {
loading={this.state.loading}
errorMsg={this.state.errorMsg}
items={this.state.items}
- deleteShare={this.deleteShare}
+ leaveShare={this.leaveShare}
/>
diff --git a/frontend/src/pages/shared-libs/shared-libs.js b/frontend/src/pages/shared-libs/shared-libs.js
index 03f09eb61d..782e2d6e56 100644
--- a/frontend/src/pages/shared-libs/shared-libs.js
+++ b/frontend/src/pages/shared-libs/shared-libs.js
@@ -203,7 +203,6 @@ class Item extends Component {
data.icon_url = Utils.getLibIconUrl(data);
data.icon_title = Utils.getLibIconTitle(data);
- data.url = `${siteRoot}#shared-libs/lib/${data.repo_id}/`;
let iconVisibility = this.state.showOpIcon ? '' : ' invisible';
let shareIconClassName = 'op-icon sf2-icon-share repo-share-btn' + iconVisibility;
diff --git a/media/css/sf_font3/iconfont.css b/media/css/sf_font3/iconfont.css
index adda71cb7f..d2f432917f 100644
--- a/media/css/sf_font3/iconfont.css
+++ b/media/css/sf_font3/iconfont.css
@@ -1,10 +1,10 @@
@font-face {font-family: "sf3-font";
- src: url('iconfont.eot?t=1593420657805'); /* IE9 */
- src: url('iconfont.eot?t=1593420657805#iefix') format('embedded-opentype'), /* IE6-IE8 */
- url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
- url('iconfont.woff?t=1593420657805') format('woff'),
- url('iconfont.ttf?t=1593420657805') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
- url('iconfont.svg?t=1593420657805#sf3-font') format('svg'); /* iOS 4.1- */
+ src: url('iconfont.eot?t=1608001670426'); /* IE9 */
+ src: url('iconfont.eot?t=1608001670426#iefix') format('embedded-opentype'), /* IE6-IE8 */
+ url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'),
+ url('iconfont.woff?t=1608001670426') format('woff'),
+ url('iconfont.ttf?t=1608001670426') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
+ url('iconfont.svg?t=1608001670426#sf3-font') format('svg'); /* iOS 4.1- */
}
.sf3-font {
@@ -15,6 +15,10 @@
-moz-osx-font-smoothing: grayscale;
}
+.sf3-font-share-from-other-servers:before {
+ content: "\e70f";
+}
+
.sf3-font-tips:before {
content: "\e6d4";
}
diff --git a/media/css/sf_font3/iconfont.eot b/media/css/sf_font3/iconfont.eot
index c42e4fbc4c..68fead9060 100644
Binary files a/media/css/sf_font3/iconfont.eot and b/media/css/sf_font3/iconfont.eot differ
diff --git a/media/css/sf_font3/iconfont.js b/media/css/sf_font3/iconfont.js
index 8d7f9a2709..b598b1d934 100644
--- a/media/css/sf_font3/iconfont.js
+++ b/media/css/sf_font3/iconfont.js
@@ -1 +1 @@
-!function(c){var t,e,l,o,h,i,s,v='',n=(t=document.getElementsByTagName("script"))[t.length-1].getAttribute("data-injectcss");if(n&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}function a(){i||(i=!0,o())}e=function(){var c,t,e,l,o,h=document.createElement("div");h.innerHTML=v,v=null,(c=h.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",t=c,(e=document.body).firstChild?(l=t,(o=e.firstChild).parentNode.insertBefore(l,o)):e.appendChild(t))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(e,0):(l=function(){document.removeEventListener("DOMContentLoaded",l,!1),e()},document.addEventListener("DOMContentLoaded",l,!1)):document.attachEvent&&(o=e,h=c.document,i=!1,(s=function(){try{h.documentElement.doScroll("left")}catch(c){return void setTimeout(s,50)}a()})(),h.onreadystatechange=function(){"complete"==h.readyState&&(h.onreadystatechange=null,a())})}(window);
\ No newline at end of file
+!function(c){var t,l,e,o,h,s,i='',v=(v=document.getElementsByTagName("script"))[v.length-1].getAttribute("data-injectcss");if(v&&!c.__iconfont__svg__cssinject__){c.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(c){console&&console.log(c)}}function n(){h||(h=!0,e())}t=function(){var c,t,l,e;(e=document.createElement("div")).innerHTML=i,i=null,(l=e.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",c=l,(t=document.body).firstChild?(e=c,(l=t.firstChild).parentNode.insertBefore(e,l)):t.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(t,0):(l=function(){document.removeEventListener("DOMContentLoaded",l,!1),t()},document.addEventListener("DOMContentLoaded",l,!1)):document.attachEvent&&(e=t,o=c.document,h=!1,(s=function(){try{o.documentElement.doScroll("left")}catch(c){return void setTimeout(s,50)}n()})(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,n())})}(window);
\ No newline at end of file
diff --git a/media/css/sf_font3/iconfont.svg b/media/css/sf_font3/iconfont.svg
index 6edbbaeef6..64cf84ae25 100644
--- a/media/css/sf_font3/iconfont.svg
+++ b/media/css/sf_font3/iconfont.svg
@@ -20,6 +20,9 @@ Created by iconfont
/>
+
+
+
@@ -38,7 +41,7 @@ Created by iconfont
-
+
diff --git a/media/css/sf_font3/iconfont.ttf b/media/css/sf_font3/iconfont.ttf
index 4684b08ff1..9eda7b5c5b 100644
Binary files a/media/css/sf_font3/iconfont.ttf and b/media/css/sf_font3/iconfont.ttf differ
diff --git a/media/css/sf_font3/iconfont.woff b/media/css/sf_font3/iconfont.woff
index 71040ec767..a427aa242c 100644
Binary files a/media/css/sf_font3/iconfont.woff and b/media/css/sf_font3/iconfont.woff differ
diff --git a/media/css/sf_font3/iconfont.woff2 b/media/css/sf_font3/iconfont.woff2
index 98fe94365c..463d1856bc 100644
Binary files a/media/css/sf_font3/iconfont.woff2 and b/media/css/sf_font3/iconfont.woff2 differ
| |