2024-05-29 12:28:46 +00:00
|
|
|
import React, { Component } from 'react';
|
|
|
|
import PropTypes from 'prop-types';
|
2024-07-05 07:30:12 +00:00
|
|
|
import { gettext, username, canPublishRepo, isPro } from '../../utils/constants';
|
2024-05-29 12:28:46 +00:00
|
|
|
import WikiCardGroup from './wiki-card-group';
|
2024-06-17 02:19:27 +00:00
|
|
|
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,
|
2024-05-31 02:59:59 +00:00
|
|
|
renameWiki: PropTypes.func.isRequired,
|
2024-07-25 09:28:55 +00:00
|
|
|
leaveSharedWiki: PropTypes.func.isRequired,
|
|
|
|
unshareGroupWiki: PropTypes.func.isRequired,
|
2024-06-17 02:19:27 +00:00
|
|
|
toggelAddWikiDialog: PropTypes.func,
|
2024-07-15 09:23:23 +00:00
|
|
|
sidePanelRate: PropTypes.number,
|
|
|
|
isSidePanelFolded: PropTypes.bool,
|
2024-05-29 12:28:46 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
class WikiCardView extends Component {
|
|
|
|
|
2024-06-17 02:19:27 +00:00
|
|
|
constructor(props) {
|
|
|
|
super(props);
|
|
|
|
this.state = {
|
|
|
|
departmentMap: {},
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
componentDidMount() {
|
2024-07-05 07:43:50 +00:00
|
|
|
if (!canPublishRepo || !isPro) return;
|
2024-06-17 02:19:27 +00:00
|
|
|
let departmentMap = {};
|
|
|
|
wikiAPI.listWikiDepartments().then(res => {
|
2024-07-25 09:28:55 +00:00
|
|
|
res.data.forEach(item => departmentMap[item.id] = true);
|
2024-06-17 02:19:27 +00:00
|
|
|
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 = [];
|
2024-07-25 09:28:55 +00:00
|
|
|
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]);
|
2024-07-25 09:28:55 +00:00
|
|
|
} 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
|
|
|
}
|
|
|
|
}
|
2024-07-25 09:28:55 +00:00
|
|
|
return { department2WikisMap, myWikis, v1Wikis, sharedWikis };
|
2024-05-29 12:28:46 +00:00
|
|
|
};
|
|
|
|
|
2024-07-25 09:28:55 +00:00
|
|
|
|
2024-05-29 12:28:46 +00:00
|
|
|
render() {
|
2024-07-25 09:28:55 +00:00
|
|
|
let { loading, errorMsg, wikis, groupWikis } = this.props.data;
|
2024-07-15 09:23:23 +00:00
|
|
|
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>;
|
|
|
|
}
|
2024-07-25 09:28:55 +00:00
|
|
|
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}
|
2024-05-31 02:59:59 +00:00
|
|
|
renameWiki={this.props.renameWiki}
|
2024-07-25 09:28:55 +00:00
|
|
|
unshareGroupWiki={this.props.unshareGroupWiki}
|
2024-07-15 09:23:23 +00:00
|
|
|
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}
|
2024-06-01 01:09:42 +00:00
|
|
|
isShowAvatar={false}
|
2024-06-17 02:19:27 +00:00
|
|
|
toggelAddWikiDialog={canPublishRepo ? toggelAddWikiDialog.bind(this, null) : null}
|
2024-05-29 12:28:46 +00:00
|
|
|
/>
|
|
|
|
);
|
2024-07-25 09:28:55 +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}
|
|
|
|
/>
|
|
|
|
);
|
2024-09-20 08:04:35 +00:00
|
|
|
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}
|
2024-05-31 02:59:59 +00:00
|
|
|
renameWiki={this.props.renameWiki}
|
2024-07-25 09:28:55 +00:00
|
|
|
unshareGroupWiki={this.props.unshareGroupWiki}
|
2024-07-15 09:23:23 +00:00
|
|
|
isSidePanelFolded={isSidePanelFolded}
|
|
|
|
sidePanelRate={sidePanelRate}
|
2024-05-30 09:39:25 +00:00
|
|
|
wikis={v1Wikis}
|
|
|
|
title={gettext('Old Wikis')}
|
|
|
|
isDepartment={false}
|
2024-06-01 01:09:42 +00:00
|
|
|
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;
|