import React from 'react';
import PropTypes from 'prop-types';
import { gettext } from '../../utils/constants';
import Select from 'react-select';
import { MenuSelectStyle } from '../common/select';
import '../../css/select-editor.css';
const propTypes = {
isTextMode: PropTypes.bool.isRequired, // there will be two mode. first: text and select. second: just select
isEditing: PropTypes.bool,
isEditIconShow: PropTypes.bool.isRequired,
isWiki: PropTypes.bool,
autoFocus: PropTypes.bool,
options: PropTypes.array.isRequired,
currentOption: PropTypes.string.isRequired,
translateOption: PropTypes.func.isRequired,
translateExplanation: PropTypes.func,
onOptionChanged: PropTypes.func.isRequired,
toggleItemFreezed: PropTypes.func,
enableAddCustomPermission: PropTypes.bool,
onAddCustomPermissionToggle: PropTypes.func,
};
class SelectEditor extends React.Component {
static defaultProps = {
enableAddCustomPermission: false,
isEditing: false,
autoFocus: false,
};
constructor(props) {
super(props);
this.state = {
isEditing: props.isEditing,
options: []
};
this.options = [];
}
componentDidMount() {
this.setOptions();
}
setOptions = () => {
const { enableAddCustomPermission, options } = this.props;
this.options = [];
for (let i = 0, length = options.length; i < length; i++) {
let option = {};
option.value = options[i];
if (!options[i].length) { // it's ''. for example, intitution option in 'system admin - users' page can be ''.
option.label =
;
} else {
option.label = (
{this.props.translateOption(options[i])}
{this.props.translateExplanation &&
{this.props.translateExplanation(options[i])}
}
);
}
this.options.push(option);
}
if (enableAddCustomPermission && !this.props.isWiki) {
const option = {
value: gettext('Add custom permission'),
isDisabled: true,
label: (
{gettext('Add custom permission')}
)
};
this.options.push(option);
}
this.setState({
options: this.options
});
};
UNSAFE_componentWillReceiveProps() {
this.setOptions();
}
onEditPermission = (e) => {
e.preventDefault();
e.nativeEvent.stopImmediatePropagation();
this.setState({ isEditing: true });
this.props.toggleItemFreezed && this.props.toggleItemFreezed(true);
};
onOptionChanged = (e) => {
let permission = e.value;
if (permission !== this.props.currentOption) {
this.props.onOptionChanged(permission);
}
this.setState({ isEditing: false });
this.props.toggleItemFreezed && this.props.toggleItemFreezed(false);
};
onSelectHandler = (e) => {
e.nativeEvent.stopImmediatePropagation();
};
onMenuClose = () => {
this.setState({ isEditing: false });
this.props.toggleItemFreezed && this.props.toggleItemFreezed(false);
};
render() {
let { currentOption, isTextMode } = this.props;
return (
{(!isTextMode || this.state.isEditing) &&
);
}
}
SelectEditor.propTypes = propTypes;
export default SelectEditor;