1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-07-19 01:29:05 +00:00
seahub/frontend/src/components/permission-editor.js

97 lines
2.6 KiB
JavaScript
Raw Normal View History

2018-12-25 08:28:17 +00:00
import React from 'react';
import PropTypes from 'prop-types';
import { Input } from 'reactstrap';
2018-12-26 08:07:22 +00:00
import { Utils } from '../utils/utils';
import { gettext } from '../utils/constants';
2018-12-25 08:28:17 +00:00
const propTypes = {
isTextMode: PropTypes.bool.isRequired, // there will be two mode. first: text and select. second: just select
2018-12-26 08:07:22 +00:00
isEditIconShow: PropTypes.bool.isRequired,
2018-12-25 12:45:40 +00:00
currentPermission: PropTypes.string.isRequired,
2018-12-25 13:04:03 +00:00
permissions: PropTypes.array.isRequired,
2018-12-25 08:28:17 +00:00
onPermissionChangedHandler: PropTypes.func.isRequired,
};
class PermissionEditor extends React.Component {
constructor(props) {
super(props);
this.state = {
isEditing: false,
}
}
componentDidMount() {
document.addEventListener('click', this.onHideSelect);
}
componentWillUnmount() {
document.removeEventListener('click', this.onHideSelect);
}
onEidtPermission = (e) => {
e.nativeEvent.stopImmediatePropagation();
this.setState({isEditing: true});
}
onPermissionChangedHandler = (e) => {
e.nativeEvent.stopImmediatePropagation();
let permission = e.target.value;
2018-12-25 12:45:40 +00:00
if (permission !== this.props.currentPermission) {
2018-12-25 08:28:17 +00:00
this.props.onPermissionChangedHandler(permission);
}
this.setState({isEditing: false});
}
onSelectHandler = (e) => {
e.nativeEvent.stopImmediatePropagation();
}
onHideSelect = () => {
this.setState({isEditing: false});
}
render() {
2018-12-25 13:04:03 +00:00
let { currentPermission, permissions, isTextMode } = this.props;
2018-12-25 08:28:17 +00:00
// scence1: isTextMode (text)editor-icon --> select
// scence2: !isTextMode select
let selectStyle = {
height: '1.5rem',
padding: 0
};
if (!isTextMode) {
selectStyle = {};
}
return (
<div className="permission-editor">
{(!isTextMode || this.state.isEditing) &&
2018-12-25 12:45:40 +00:00
<Input style={selectStyle} type="select" onChange={this.onPermissionChangedHandler} onClick={this.onSelectHandler} value={currentPermission}>
2018-12-25 13:04:03 +00:00
{permissions.map((item, index) => {
2018-12-25 08:28:17 +00:00
return (
<option key={index} value={item}>{Utils.sharePerms(item)}</option>
)
})}
</Input>
}
{(isTextMode && !this.state.isEditing) &&
<div>
2018-12-25 12:45:40 +00:00
{Utils.sharePerms(currentPermission)}
2018-12-26 08:07:22 +00:00
{this.props.isEditIconShow && (
<span
title={gettext('Edit')}
2018-12-28 08:34:04 +00:00
className="fa fa-pencil attr-action-icon"
2018-12-26 08:07:22 +00:00
onClick={this.onEidtPermission}>
</span>
)}
2018-12-25 08:28:17 +00:00
</div>
}
</div>
);
}
}
PermissionEditor.propTypes = propTypes;
export default PermissionEditor;