1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-07-13 15:05:30 +00:00
seahub/frontend/src/components/wiki-card-view/wiki-card-view.js

150 lines
4.6 KiB
JavaScript
Raw Normal View History

2024-05-29 12:28:46 +00:00
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { gettext, username, canPublishRepo, isPro } from '../../utils/constants';
2024-05-29 12:28:46 +00:00
import WikiCardGroup from './wiki-card-group';
import wikiAPI from '../../utils/wiki-api';
import { Utils } from '../../utils/utils';
import toaster from '../toast';
2024-05-29 12:28:46 +00:00
import './wiki-card-view.css';
const propTypes = {
data: PropTypes.object.isRequired,
deleteWiki: PropTypes.func.isRequired,
renameWiki: PropTypes.func.isRequired,
leaveSharedWiki: PropTypes.func.isRequired,
unshareGroupWiki: PropTypes.func.isRequired,
toggelAddWikiDialog: PropTypes.func,
sidePanelRate: PropTypes.number,
isSidePanelFolded: PropTypes.bool,
2024-05-29 12:28:46 +00:00
};
class WikiCardView extends Component {
constructor(props) {
super(props);
this.state = {
departmentMap: {},
};
}
componentDidMount() {
2024-07-05 07:43:50 +00:00
if (!canPublishRepo || !isPro) return;
let departmentMap = {};
wikiAPI.listWikiDepartments().then(res => {
res.data.forEach(item => departmentMap[item.id] = true);
this.setState({ departmentMap });
}).catch(error => {
let errMessage = Utils.getErrorMsg(error);
toaster.danger(errMessage);
});
}
2024-05-29 12:28:46 +00:00
classifyWikis = (wikis) => {
2024-05-30 09:39:25 +00:00
let v1Wikis = [];
2024-05-29 12:28:46 +00:00
let myWikis = [];
let sharedWikis = [];
2024-05-29 12:28:46 +00:00
let department2WikisMap = {};
for (let i = 0; i < wikis.length; i++) {
2024-05-30 09:39:25 +00:00
if (wikis[i].version === 'v1') {
v1Wikis.push(wikis[i]);
} else if (wikis[i].owner === username) {
2024-05-29 12:28:46 +00:00
myWikis.push(wikis[i]);
} else if (wikis[i].type === 'shared') {
sharedWikis.push(wikis[i]);
2024-05-30 09:39:25 +00:00
} else {
if (!department2WikisMap[wikis[i].owner]) {
department2WikisMap[wikis[i].owner] = [];
}
department2WikisMap[wikis[i].owner].push(wikis[i]);
2024-05-29 12:28:46 +00:00
}
}
return { department2WikisMap, myWikis, v1Wikis, sharedWikis };
2024-05-29 12:28:46 +00:00
};
2024-05-29 12:28:46 +00:00
render() {
let { loading, errorMsg, wikis, groupWikis } = this.props.data;
const { toggelAddWikiDialog, sidePanelRate, isSidePanelFolded } = this.props;
2024-05-29 12:28:46 +00:00
if (loading) {
return <span className="loading-icon loading-tip"></span>;
}
if (errorMsg) {
return <p className="error text-center">{errorMsg}</p>;
}
const { v1Wikis, myWikis, sharedWikis } = this.classifyWikis(wikis);
2024-05-29 12:28:46 +00:00
let wikiCardGroups = [];
wikiCardGroups.push(
<WikiCardGroup
2024-05-30 09:39:25 +00:00
key='my-Wikis'
2024-05-29 12:28:46 +00:00
deleteWiki={this.props.deleteWiki}
renameWiki={this.props.renameWiki}
unshareGroupWiki={this.props.unshareGroupWiki}
sidePanelRate={sidePanelRate}
isSidePanelFolded={isSidePanelFolded}
2024-05-29 12:28:46 +00:00
wikis={myWikis}
2024-05-30 09:39:25 +00:00
title={gettext('My Wikis')}
isDepartment={false}
isShowAvatar={false}
toggelAddWikiDialog={canPublishRepo ? toggelAddWikiDialog.bind(this, null) : null}
2024-05-29 12:28:46 +00:00
/>
);
wikiCardGroups.push(
<WikiCardGroup
key='shared-Wikis'
deleteWiki={this.props.leaveSharedWiki}
renameWiki={this.props.renameWiki}
unshareGroupWiki={this.props.unshareGroupWiki}
wikis={sharedWikis}
title={gettext('Shared with me')}
isDepartment={false}
isShowAvatar={false}
sidePanelRate={sidePanelRate}
isSidePanelFolded={isSidePanelFolded}
toggelAddWikiDialog={null}
/>
);
for (let i = 0; i < groupWikis.length; i++) {
const groupWiki = groupWikis[i];
if (groupWiki.wiki_info.length !== 0) {
wikiCardGroups.push(
<WikiCardGroup
key={'group-Wikis-' + groupWiki.group_id}
deleteWiki={this.props.deleteWiki}
unshareGroupWiki={this.props.unshareGroupWiki}
renameWiki={this.props.renameWiki}
sidePanelRate={sidePanelRate}
isSidePanelFolded={isSidePanelFolded}
group={groupWiki}
wikis={groupWiki.wiki_info}
title={groupWiki.group_name}
isDepartment={true}
isShowAvatar={false}
toggelAddWikiDialog={(canPublishRepo && this.state.departmentMap[groupWiki.group_id]) ? toggelAddWikiDialog.bind(this, groupWiki.group_id) : null}
/>
);
}
2024-05-29 12:28:46 +00:00
}
2024-05-30 09:39:25 +00:00
wikiCardGroups.push(
<WikiCardGroup
key='old-Wikis'
deleteWiki={this.props.deleteWiki}
renameWiki={this.props.renameWiki}
unshareGroupWiki={this.props.unshareGroupWiki}
isSidePanelFolded={isSidePanelFolded}
sidePanelRate={sidePanelRate}
2024-05-30 09:39:25 +00:00
wikis={v1Wikis}
title={gettext('Old Wikis')}
isDepartment={false}
isShowAvatar={true}
2024-05-30 09:39:25 +00:00
/>
);
2024-05-29 12:28:46 +00:00
return wikiCardGroups;
}
}
WikiCardView.propTypes = propTypes;
export default WikiCardView;