1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-15 14:49:09 +00:00

share wiki (#6413)

* share wiki

update leave and return

update get group info

* format optimize

* Update wikis.js

* Update wiki2.py

* fix empty group_wikis

* update

* remove-useless-code

* add-owner-nickname

* Update wiki2.py

* Update wiki2.py

* Update wiki2.py

---------

Co-authored-by: 孙永强 <11704063+s-yongqiang@user.noreply.gitee.com>
Co-authored-by: r350178982 <32759763+r350178982@users.noreply.github.com>
This commit is contained in:
awu0403
2024-07-25 17:28:55 +08:00
committed by GitHub
parent aa477190f2
commit 9d227661b3
14 changed files with 597 additions and 122 deletions

View File

@@ -9,6 +9,8 @@ import EmptyTip from '../../components/empty-tip';
import AddWikiDialog from '../../components/dialog/add-wiki-dialog';
import wikiAPI from '../../utils/wiki-api';
import WikiCardView from '../../components/wiki-card-view/wiki-card-view';
import { seafileAPI } from '../../utils/seafile-api';
const propTypes = {
sidePanelRate: PropTypes.number,
@@ -23,6 +25,7 @@ class Wikis extends Component {
errorMsg: '',
currentDeptEmail: '',
wikis: [],
groupWikis: [],
isShowAddWikiMenu: false,
isShowAddDialog: false,
isDropdownMenuShown: false,
@@ -35,6 +38,7 @@ class Wikis extends Component {
getWikis = () => {
let wikis = [];
let groupWikis = [];
wikiAPI.listWikis().then(res => {
wikis = wikis.concat(res.data.data);
wikis.map(wiki => {
@@ -42,12 +46,20 @@ class Wikis extends Component {
});
wikiAPI.listWikis2().then(res => {
let wikis2 = res.data.wikis;
groupWikis = res.data.group_wikis;
groupWikis.forEach(group => {
group.wiki_info.forEach(wiki => {
wiki.version = 'v2';
wiki.admins = group.group_admins;
});
});
wikis2.map(wiki => {
return wiki['version'] = 'v2';
});
this.setState({
loading: false,
wikis: wikis.concat(wikis2)
wikis: wikis.concat(wikis2),
groupWikis: groupWikis
});
}).catch((error) => {
this.setState({
@@ -89,12 +101,24 @@ class Wikis extends Component {
addWiki = (wikiName, currentDeptID) => {
wikiAPI.addWiki2(wikiName, currentDeptID).then((res) => {
let wikis = this.state.wikis.slice(0);
let groupWikis = this.state.groupWikis;
let new_wiki = res.data;
new_wiki['version'] = 'v2';
wikis.push(new_wiki);
if (currentDeptID) {
groupWikis.filter(group => {
if (group.group_id === currentDeptID) {
group.wiki_info.push(new_wiki);
}
return group;
});
} else {
wikis.push(new_wiki);
}
this.setState({
wikis,
currentDeptEmail: '',
groupWikis,
currentDeptID: '',
});
}).catch((error) => {
if (error.response) {
@@ -110,7 +134,14 @@ class Wikis extends Component {
let wikis = this.state.wikis.filter(item => {
return item.id !== wiki.id;
});
this.setState({ wikis: wikis });
let groupWikis = this.state.groupWikis.filter(group => {
group.wiki_info = group.wiki_info.filter(item => item.name !== wiki.name);
return group;
});
this.setState({
wikis: wikis,
groupWikis: groupWikis,
});
}).catch((error) => {
if (error.response) {
let errorMsg = error.response.data.error_msg;
@@ -122,7 +153,14 @@ class Wikis extends Component {
let wikis = this.state.wikis.filter(item => {
return item.id !== wiki.id;
});
this.setState({ wikis: wikis });
let groupWikis = this.state.groupWikis.filter(group => {
group.wiki_info = group.wiki_info.filter(item => item.name !== wiki.name);
return group;
});
this.setState({
wikis: wikis,
groupWikis: groupWikis,
});
}).catch((error) => {
if (error.response) {
let errorMsg = error.response.data.error_msg;
@@ -132,6 +170,57 @@ class Wikis extends Component {
}
};
leaveSharedWiki = (wiki) => {
if (!wiki.owner.includes('@seafile_group')) {
let options = {
'share_type': 'personal',
'from': wiki.owner
};
seafileAPI.leaveShareRepo(wiki.repo_id, options).then(res => {
let wikis = this.state.wikis.filter(item => {
return item.name !== wiki.name;
});
this.setState({
wikis: wikis,
});
}).catch((error) => {
let errorMsg = Utils.getErrorMsg(error, true);
toaster.danger(errorMsg);
});
} else {
seafileAPI.leaveShareGroupOwnedRepo(wiki.repo_id).then(res => {
let wikis = this.state.wikis.filter(item => {
return item.name !== wiki.name;
});
this.setState({
wikis: wikis,
});
}).catch((error) => {
let errorMsg = Utils.getErrorMsg(error, true);
toaster.danger(errorMsg);
});
}
};
unshareGroupWiki = (wiki, groupId) => {
seafileAPI.unshareRepoToGroup(wiki.repo_id, groupId).then(() => {
let groupWikis = this.state.groupWikis.map(group => {
if (group.group_id === groupId) {
return {
...group,
wiki_info: group.wiki_info.filter(item => item.name !== wiki.name)
};
}
return group;
});
this.setState({ groupWikis: groupWikis });
}).catch(error => {
let errMessage = Utils.getErrorMsg(error);
toaster.danger(errMessage);
});
};
renameWiki = (wiki, newName) => {
if (wiki.version === 'v1') {
wikiAPI.renameWiki(wiki.id, newName).then(() => {
@@ -150,13 +239,7 @@ class Wikis extends Component {
});
} else {
wikiAPI.renameWiki2(wiki.id, newName).then(() => {
let wikis = this.state.wikis.map(item => {
if (item.id === wiki.id && item.version === 'v2') {
item.name = newName;
}
return item;
});
this.setState({ wikis: wikis });
this.getWikis();
}).catch((error) => {
if (error.response) {
let errorMsg = error.response.data.error_msg;
@@ -208,11 +291,13 @@ class Wikis extends Component {
}
</div>
</div>
{(this.state.loading || this.state.wikis.length !== 0) &&
{(this.state.loading || this.state.wikis.length !== 0 || this.state.groupWikis.length !== 0) &&
<div className="cur-view-content pb-4">
<WikiCardView
data={this.state}
deleteWiki={this.deleteWiki}
leaveSharedWiki={this.leaveSharedWiki}
unshareGroupWiki={this.unshareGroupWiki}
renameWiki={this.renameWiki}
toggelAddWikiDialog={this.toggelAddWikiDialog}
sidePanelRate={this.props.sidePanelRate}
@@ -220,7 +305,7 @@ class Wikis extends Component {
/>
</div>
}
{(!this.state.loading && this.state.wikis.length === 0) &&
{(!this.state.loading && this.state.wikis.length === 0 && this.state.groupWikis.length === 0) &&
<div className="cur-view-content">
<EmptyTip>
<h2>{gettext('No Wikis')}</h2>