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.icon_title} - {item.repo_name} - {item.from_user} - {item.from_server_url} - {moment(item.ctime).fromNow()} - - - - - - + + {item.icon_title} + {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,d09GMgABAAAAAAlkAAsAAAAAEjwAAAkXAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCEbgqUbJBOATYCJAM8CyAABCAFhG0HgT0bMw9RlFFWAtmPBONm8nBCCCHbkiGho0tnnfoWXPQQD1/78Tv37T6Tr9EMk+zT8RBJNP50RBOkSGJotOZ/26t0rM35n+2iupbqVr17gQchf8DBy1SdTleZ1tZVyAqdI9q02buL7SEx8Ihr1TioCaH1WE2O1qF1OEKV1FQJtM4bqevnar9f/oJLNG2E4qkT4r3vJ18WF0tEaAwhiXqjZDwUphMaoXRCiUA84vm7vO2DQaW0A3g6gc6WyMD90+s7Ni7TJCj3wmhg46UQucMsNKrKs2sWX8FDU3wmvgF8iV8//kN6jFMoE32mB89PJNv/hdz2IbaJ1Tu9ADu7KLztRcIFTCa+e2O+IVN8IaadryrlHbBpXo5e/SLc3dwa9wB3jXuMe7f7sPuY297vs4hGSrCTf68lPTtsWjeC7X/gMaPJoNdpNWqlSpYUgqhAB9H6kTvxCzkvRn4RYlg3wADTAHrYAEAHqwG0sDGABrYTUMN2AUrYbkAFOwzIsGOABLsHKGB2pKcUncNdtjBXsfSUsbwKWnkW5yShUDEhXwCIo2RJqxwW38LGxvT0Td5wpXX3KEVtqnQLb423GzKDj+UJlpZXVp7g1/3gbHxs+O/e/u+zYTPi1YXYQtPGbYjUb8Xdy1rAQ0U1Dofa6dRYs4YGpojdrsIGrhlb2k+1QqzmDIEqkzWKNpoBWBOu5P3+IAkfcRKLWVRhZgO1po0S1BPw+uNSwnoiigZ80RGu5xC55lzBJnpJ8MQZc7Pn5nRUh6PH9sTUWFqlwRrT+kB2fzG3UxKzyWwaY7BHbzwbzOmjDjSIOEe0zQ7hLCJmyY6lNE0i+MAjMMlDfLKXH/hOIlIi8ISQk96poLXKyMEr1sg5Tmw31W29eNwWxwjWH2dPRAlVm/NFtlxIMNC1GGgNJZAWYeBvCcC6KiaK3I4h4z6IYDt9vZfwwJ0gauXtTMHBu8Eea+5NWv4ivVP0HMaV3cC6heYbLSiZcwSvc1ZsT/GWrNTLohdzgSq1yzKxIkYVJJolGgau6WnURudIw1a5h8q0Hm88KdevkGgsm2hjHGNduX1/vJqybp7InpjmKqf0J6N567f34G9Kk46D9cSn2136nZhn2J6yYzCirxoajMxwtG5VMXNAeNT3I9x0SuGx/GR0P9q4BYDdjLFhK0L6bT3KgeH71asvuKvZSZ+u0iSit+yRWY8c2iVfvjV649V4TmOS1u2ONW2RSLZdi9m0a/XRSINJXbfTFqU3XIkzbxOLt+6VL294OpNJdbr5+u0ys1m0xaiwoBX7EixizqCz2zsfT7Q3MNYTcSowbxAZT+LDxWg2XKCdmo1bFfvt2XhjNGcKxCr7LBySSBQKy3Lx0eSzjoxdBaecrQ5lXWgoMu+QWesBNh0QidY4kncW33WoLzb1u0L5CqhrBoXhV6i8ikDw6o0wQxjglM3isPKVBZk6HPxYHM4zzkbdUeXMJUP4/JFmdjgYFKIUlVAtEVWi7h1FhvNsPtex29JH47ds596/bwbd3PufsQZ6Ko0Nc1go/OHlc8n7BV6xG9/m2wfUZ6sZnb8uuLFhM9++9l2HS65Zwi08KvNh+9upbcvWeiR6705cwxwPg1UGX2p5UShW0rwSb92k3eTLl2Sg2C0ccvktYsdHLaiPa7voQsisfFGPz0c+UVfPh+05fCRbZc9q7lUD5yr2d/EL2NTTImbPHi4pWRjUEUEe2yO2WxQT2UU+LEXbHSLJUlZHQ8kpCS5EDcEAFgG5hFgBsI85OW5E5QfDdMIPiccGDp0wmH2sjH395eD7uaW9XKc/fjylo7VnZhMIKt+59JXbPHMdcRGvz7nOxVuFSLDuSG3ccddx/rnj6wRIeDl7GXiLb61lIo/Ti5v7nPZpvjheBJTr+mvRrFlIa2xnzdQSwTNn5o81c1bkoF/4Ge/0eMJmI8aryTr/rfgN71d0YEtBuW8nnxKGqK5B3bCtrelG0BouU1Uj4w321b592qZ9p/ZP3+p8K9q0a9NG56d986Smad0+5FpQ9Lw+Zc3g54H0Ld1lYI0hh67y8+Ix8040XuxOS9NPNZ4TfnCV+41R5a1KrXkhD5AWSQMy/auKFn/MWzipyj8r4+TEChkRkH2q6u/Mf6SnJJ/kso/wYIOpjcViUTKdKW/lBq7RptiWgVmcYWPj+WFN00YhCN2YBLxKX5T95ofu1/9n9ueANUvrrGS39cqxLW5oK0rNxHqcrmro8ga1rQ+3htdFZLa9y+iu6dT4oI17n/j/s8X18oi68Hnp5RsSx7RkZh4J7bnbzuh04hFaSHT9Dmhry5g7D+EuD9t6zSggmMqIdrg+ufm5Bam83nw6ZTc5kCSvM3E/GvbaQ3tJTkf/Xp28Vfjc5QHvm1Et4sLJVI+8xK4VslLtqmOb6GlXRcK5w9Od+9Y1Dk0f8m56zaGLCp602bVwKb8TWcmEs8WtvebCtP8BAJpspIvsDwD3apGeQZ4h3vsim04PGVrKpNPodDnIppMURTaLsZH2UeeeJD+SEZOYsSTkvR5qJCWvyauBc6PrVj9h4Rdv+nl6xqOQ69UxNNlmW60/AHgDAZqgGYhegRtQCKDpN0W9yyRUSH23s5OuTHEQwhbwAckiAACbQQCvvwn+8HRxatErURQC75LkzZkALwjCpE8rElNoJTp7AA063MAVWrecO+ed7d1b4w2J3OKcT5zD4su5MPmJE1o/OKP151za9K+oMIoh586zWDpk7yjM5JFHIJS81uVG2EzZYjQZVCWXlL9B3UzAF2Wx3QP6YNJ5KV+s5p9hhn4WW4SWLhMprrxN+WnvbJgkljtvGygoXydy1UJB+bbMC5uySfd4CFDoXuJqut4Nwcqojcikl5SKXO3lbyCtKQF8R7M/MQ9wBGpYOFeSV4R3RrORml0VRNEWrYwkSuEuy7PSVHk6WRRKTI7FOf9KDUggefUJspyqgupOjUrzG6lMj3eMVujt5ygiRY4yqqijifaV6QljiDGmmGOB4TPjwmjTJRbkaGK1bdK4NJkmSOIxzA5kosbRLNzB2/aEA425YHo4Uj7aCEEtwQUBmcAkZ7KWIaBDvNJwsJ6GQMop2Uly04QF3HfbeedNwFwbRR2IMQ==') 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