1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-06 17:33:18 +00:00

repair heighlight bug

This commit is contained in:
shanshuirenjia
2018-12-11 11:20:40 +08:00
parent 197995e34a
commit 48e855452f
5 changed files with 66 additions and 34 deletions

View File

@@ -51,7 +51,7 @@ class WikiSelectDialog extends React.Component {
return ( return (
<Modal isOpen={true}> <Modal isOpen={true}>
<ModalHeader toggle={this.toggle}>{gettext('Choose a library as Wiki')}</ModalHeader> <ModalHeader toggle={this.toggle}>{gettext('Choose a library as Wiki')}</ModalHeader>
<ModalBody> <ModalBody className="dialog-list-container">
<table> <table>
<thead> <thead>
<tr> <tr>

View File

@@ -9,10 +9,13 @@ import Toast from '../toast';
import WikiMenu from './wiki-menu'; import WikiMenu from './wiki-menu';
import WikiRename from './wiki-rename'; import WikiRename from './wiki-rename';
const itempropTypes = { const propTypes = {
wiki: PropTypes.object.isRequired, wiki: PropTypes.object.isRequired,
renameWiki: PropTypes.func.isRequired, renameWiki: PropTypes.func.isRequired,
deleteWiki: PropTypes.func.isRequired, deleteWiki: PropTypes.func.isRequired,
isItemFreezed: PropTypes.bool.isRequired,
onFreezedItem: PropTypes.func.isRequired,
onUnfreezedItem: PropTypes.func.isRequired,
}; };
class WikiListItem extends Component { class WikiListItem extends Component {
@@ -21,7 +24,6 @@ class WikiListItem extends Component {
this.state = { this.state = {
isShowWikiMenu: false, isShowWikiMenu: false,
position: {top:'', left: ''}, position: {top:'', left: ''},
isItemFreezed: false,
isShowDeleteDialog: false, isShowDeleteDialog: false,
isShowMenuControl: false, isShowMenuControl: false,
isRenameing: false, isRenameing: false,
@@ -55,19 +57,21 @@ class WikiListItem extends Component {
this.setState({ this.setState({
isShowWikiMenu: true, isShowWikiMenu: true,
position: position, position: position,
isItemFreezed: true,
}); });
this.props.onFreezedItem();
} }
onHideWikiMenu = () => { onHideWikiMenu = () => {
this.setState({ this.setState({
isShowWikiMenu: false, isShowWikiMenu: false,
isItemFreezed: false, isShowMenuControl: false,
highlight: '',
}); });
this.props.onUnfreezedItem();
} }
onMouseEnter = () => { onMouseEnter = () => {
if (!this.state.isItemFreezed) { if (!this.props.isItemFreezed) {
this.setState({ this.setState({
isShowMenuControl: true, isShowMenuControl: true,
highlight: 'tr-highlight', highlight: 'tr-highlight',
@@ -76,7 +80,7 @@ class WikiListItem extends Component {
} }
onMouseLeave = () => { onMouseLeave = () => {
if (!this.state.isItemFreezed) { if (!this.props.isItemFreezed) {
this.setState({ this.setState({
isShowMenuControl: false, isShowMenuControl: false,
highlight: '', highlight: '',
@@ -84,10 +88,12 @@ class WikiListItem extends Component {
} }
} }
onRenameToggle = () => { onRenameToggle = (e) => {
e.nativeEvent.stopImmediatePropagation();
this.props.onFreezedItem();
this.setState({ this.setState({
isShowWikiMenu: false, isShowWikiMenu: false,
isItemFreezed: true, isShowMenuControl: false,
isRenameing: true, isRenameing: true,
}); });
} }
@@ -114,10 +120,8 @@ class WikiListItem extends Component {
} }
onRenameCancel = () => { onRenameCancel = () => {
this.setState({ this.setState({isRenameing: false});
isRenameing: false, this.props.onUnfreezedItem();
isItemFreezed: false,
});
} }
onDeleteToggle = () => { onDeleteToggle = () => {
@@ -146,7 +150,7 @@ class WikiListItem extends Component {
return ( return (
<Fragment> <Fragment>
<tr className={this.state.highlight} onMouseEnter={this.onMouseEnter} onMouseLeave={this.onMouseLeave}> <tr className={this.state.highlight} onMouseEnter={this.onMouseEnter} onMouseLeave={this.onMouseLeave}>
<td> <td className="name">
{this.state.isRenameing ? {this.state.isRenameing ?
<WikiRename wiki={wiki} onRenameConfirm={this.onRenameConfirm} onRenameCancel={this.onRenameCancel}/> : <WikiRename wiki={wiki} onRenameConfirm={this.onRenameConfirm} onRenameCancel={this.onRenameCancel}/> :
<a href={wiki.link}>{gettext(wiki.name)}</a> <a href={wiki.link}>{gettext(wiki.name)}</a>
@@ -154,7 +158,7 @@ class WikiListItem extends Component {
</td> </td>
<td><a href={userProfileURL} target='_blank'>{gettext(wiki.owner_nickname)}</a></td> <td><a href={userProfileURL} target='_blank'>{gettext(wiki.owner_nickname)}</a></td>
<td>{moment(wiki.updated_at).fromNow()}</td> <td>{moment(wiki.updated_at).fromNow()}</td>
<td className="menu-toggle" onClick={this.onMenuToggle}> <td className="menu-toggle">
<MenuControl <MenuControl
isShow={this.state.isShowMenuControl} isShow={this.state.isShowMenuControl}
onClick={this.onMenuToggle} onClick={this.onMenuToggle}
@@ -181,6 +185,6 @@ class WikiListItem extends Component {
} }
} }
WikiListItem.propTypes = itempropTypes; WikiListItem.propTypes = propTypes;
export default WikiListItem; export default WikiListItem;

View File

@@ -1,9 +1,9 @@
import React, { Component, Fragment } from 'react'; import React, { Component } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { gettext } from '../../utils/constants'; import { gettext } from '../../utils/constants';
import WikiListItem from './wiki-list-item'; import WikiListItem from './wiki-list-item';
const contentpropTypes = { const propTypes = {
data: PropTypes.object.isRequired, data: PropTypes.object.isRequired,
renameWiki: PropTypes.func.isRequired, renameWiki: PropTypes.func.isRequired,
deleteWiki: PropTypes.func.isRequired, deleteWiki: PropTypes.func.isRequired,
@@ -11,6 +11,21 @@ const contentpropTypes = {
class WikiListView extends Component { class WikiListView extends Component {
constructor(props) {
super(props);
this.state = {
isItemFreezed: false,
}
}
onFreezedItem = () => {
this.setState({isItemFreezed: true});
}
onUnfreezedItem = () => {
this.setState({isItemFreezed: false});
}
render() { render() {
let {loading, errorMsg, wikis} = this.props.data; let {loading, errorMsg, wikis} = this.props.data;
@@ -32,9 +47,14 @@ class WikiListView extends Component {
<tbody> <tbody>
{wikis.map((wiki, index) => { {wikis.map((wiki, index) => {
return( return(
<WikiListItem key={index} wiki={wiki} <WikiListItem
key={index}
wiki={wiki}
renameWiki={this.props.renameWiki} renameWiki={this.props.renameWiki}
deleteWiki={this.props.deleteWiki} deleteWiki={this.props.deleteWiki}
isItemFreezed={this.state.isItemFreezed}
onFreezedItem={this.onFreezedItem}
onUnfreezedItem={this.onUnfreezedItem}
/>); />);
})} })}
</tbody> </tbody>
@@ -44,6 +64,6 @@ class WikiListView extends Component {
} }
} }
WikiListView.propTypes = contentpropTypes; WikiListView.propTypes = propTypes;
export default WikiListView; export default WikiListView;

View File

@@ -3,7 +3,7 @@ import PropTypes from 'prop-types';
import { seafileAPI } from '../../utils/seafile-api'; import { seafileAPI } from '../../utils/seafile-api';
import { gettext, loginUrl } from '../../utils/constants'; import { gettext, loginUrl } from '../../utils/constants';
import WikiAdd from './wiki-add'; import WikiAdd from './wiki-add';
import Toast from '../../components/toast'; import toaster from '../../components/toast';
import ModalPortal from '../../components/modal-portal'; import ModalPortal from '../../components/modal-portal';
import NewWikiDialog from '../../components/dialog/new-wiki-dialog'; import NewWikiDialog from '../../components/dialog/new-wiki-dialog';
import WikiSelectDialog from '../../components/dialog/wiki-select-dialog'; import WikiSelectDialog from '../../components/dialog/wiki-select-dialog';
@@ -110,7 +110,7 @@ class Wikis extends Component {
}).catch((error) => { }).catch((error) => {
if(error.response) { if(error.response) {
let errorMsg = error.response.data.error_msg; let errorMsg = error.response.data.error_msg;
Toast.error(errorMsg); toaster.danger(errorMsg);
} }
}); });
} }
@@ -123,28 +123,25 @@ class Wikis extends Component {
} }
return item; return item;
}); });
this.setState({ this.setState({wikis: wikis});
wikis: wikis
});
}).catch((error) => { }).catch((error) => {
if(error.response) { if(error.response) {
let errorMsg = error.response.data.error_msg; let errorMsg = error.response.data.error_msg;
Toast.error(errorMsg); toaster.danger(errorMsg);
} }
}); });
} }
deleteWiki = (wiki) => { deleteWiki = (wiki) => {
seafileAPI.deleteWiki(wiki.slug).then(() => { seafileAPI.deleteWiki(wiki.slug).then(() => {
this.setState({ let wikis = this.state.wikis.filter(item => {
wikis: this.state.wikis.filter(item => { return item.name !== wiki.name;
return item.name !== wiki.name
})
}); });
this.setState({wikis: wikis});
}).catch((error) => { }).catch((error) => {
if(error.response) { if(error.response) {
let errorMsg = error.response.data.error_msg; let errorMsg = error.response.data.error_msg;
Toast.error(errorMsg); toaster.danger(errorMsg);
} }
}); });
} }
@@ -155,9 +152,11 @@ class Wikis extends Component {
<div className="main-panel-center"> <div className="main-panel-center">
<div className="cur-view-container" id="wikis"> <div className="cur-view-container" id="wikis">
<div className="cur-view-path"> <div className="cur-view-path">
<h3 className="sf-heading">{gettext('Wikis')}</h3> <div className="path-container">
<div style={{float:'right'}} className="operation"> <h3 className="sf-heading">{gettext('Wikis')}</h3>
<button className="btn btn-secondary operation-item" onClick={this.onAddMenuToggle}> </div>
<div className="path-toolbar">
<button className="btn btn-secondary operation-item" style={{marginTop: '-0.25rem'}} onClick={this.onAddMenuToggle}>
<i className="fa fa-plus-square op-icon"></i> <i className="fa fa-plus-square op-icon"></i>
{gettext('Add Wiki')} {gettext('Add Wiki')}
</button> </button>

View File

@@ -163,6 +163,11 @@ ul,ol,li {
user-select: none; user-select: none;
} }
.dialog-list-container { /*for content is list dialog*/
height: 20rem;
overflow: auto;
}
/* UI Widget */ /* UI Widget */
/**** caret ****/ /**** caret ****/
@@ -812,6 +817,10 @@ table .star .empty {
color: #d0d0d0; color: #d0d0d0;
} }
table .name {
line-height: 1.5rem; /*for wiki height*/
}
table .rename-container input { table .rename-container input {
box-sizing: content-box; box-sizing: content-box;
padding: 2px 3px; padding: 2px 3px;