import React, { Component, Fragment } from 'react';
import PropTypes from 'prop-types';
import { seafileAPI } from '../../utils/seafile-api';
import { gettext, siteRoot, loginUrl } from '../../utils/constants';
import moment from 'moment';
import { Button } from 'reactstrap';
import Toast from '../../components/toast';
import MenuControl from '../../components/menu-control';
import WikiAdd from './wiki-add';
import WikiMenu from './wiki-menu';
import WikiRename from './wiki-rename';
import NewWikiDialog from '../../components/dialog/new-wiki-dialog';
import WikiDeleteDialog from '../../components/dialog/wiki-delete-dialog';
import WikiSelectDialog from '../../components/dialog/wiki-select-dialog';
import ModalPortal from '../../components/modal-portal';
const itempropTypes = {
wiki: PropTypes.object.isRequired,
renameWiki: PropTypes.func.isRequired,
deleteWiki: PropTypes.func.isRequired,
};
class Item extends Component {
constructor(props) {
super(props);
this.state = {
isShowWikiMenu: false,
position: {top:'', left: ''},
isItemFreezed: false,
isShowDeleteDialog: false,
isShowMenuControl: false,
isRenameing: false,
highlight: '',
};
}
componentDidMount() {
document.addEventListener('click', this.onHideWikiMenu);
}
componentWillUnmount() {
document.removeEventListener('click', this.onHideWikiMenu);
}
onMenuToggle = (e) => {
e.stopPropagation();
e.nativeEvent.stopImmediatePropagation();
if (this.state.isShowWikiMenu) {
this.onHideWikiMenu();
} else {
this.onShowWikiMenu(e);
}
}
onShowWikiMenu = (e) => {
let left = e.clientX - 8*16;
let top = e.clientY + 12;
let position = {top: top, left: left};
this.setState({
isShowWikiMenu: true,
position: position,
isItemFreezed: true,
});
}
onHideWikiMenu = () => {
this.setState({
isShowWikiMenu: false,
isItemFreezed: false,
});
}
onMouseEnter = () => {
if (!this.state.isItemFreezed) {
this.setState({
isShowMenuControl: true,
highlight: 'tr-highlight',
});
}
}
onMouseLeave = () => {
if (!this.state.isItemFreezed) {
this.setState({
isShowMenuControl: false,
highlight: '',
});
}
}
onRenameToggle = () => {
this.setState({
isShowWikiMenu: false,
isItemFreezed: true,
isRenameing: true,
});
}
onRenameConfirm = (newName) => {
let wiki = this.props.wiki;
if (newName === wiki.name) {
this.onRenameCancel();
return false;
}
if (!newName) {
let errMessage = 'Name is required.';
Toast.error(gettext(errMessage));
return false;
}
if (newName.indexOf('/') > -1) {
let errMessage = 'Name should not include ' + '\'/\'' + '.';
Toast.error(gettext(errMessage));
return false;
}
this.renameWiki(newName);
this.onRenameCancel();
}
onRenameCancel = () => {
this.setState({
isRenameing: false,
isItemFreezed: false,
});
}
onDeleteToggle = () => {
this.setState({
isShowDeleteDialog: !this.state.isShowDeleteDialog,
});
}
renameWiki = (newName) => {
let wiki = this.props.wiki;
this.props.renameWiki(wiki, newName);
}
deleteWiki = () => {
let wiki = this.props.wiki;
this.props.deleteWiki(wiki);
this.setState({
isShowDeleteDialog: !this.state.isShowDeleteDialog,
});
}
render() {
let wiki = this.props.wiki;
let userProfileURL = `${siteRoot}profile/${encodeURIComponent(wiki.owner)}/`;
return (
{this.state.isShowDeleteDialog &&
{this.state.isRenameing ?
{gettext(wiki.owner_nickname)}
{moment(wiki.updated_at).fromNow()}
{errorMsg}
; } else { return ({gettext('Name')} | {gettext('Owner')} | {gettext('Last Update')} | {/* operation */} |
---|
{gettext('Seafile Wiki enables you to organize your knowledge in a simple way. The contents of wiki is stored in a normal library with pre-defined file/folder structure. This enables you to edit your wiki in your desktop and then sync back to the server.')}