|
|
|
@ -1,10 +1,15 @@
|
|
|
|
|
import React from 'react';
|
|
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
|
import ImmutablePropTypes from 'react-immutable-proptypes';
|
|
|
|
|
import { injectIntl, FormattedMessage } from 'react-intl';
|
|
|
|
|
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
|
|
|
|
import Toggle from 'react-toggle';
|
|
|
|
|
import AsyncSelect from 'react-select/lib/Async';
|
|
|
|
|
|
|
|
|
|
const messages = defineMessages({
|
|
|
|
|
placeholder: { id: 'hashtag.column_settings.select.placeholder', defaultMessage: 'Enter hashtags…' },
|
|
|
|
|
noOptions: { id: 'hashtag.column_settings.select.no_options_message', defaultMessage: 'No suggestions found' },
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
export default @injectIntl
|
|
|
|
|
class ColumnSettings extends React.PureComponent {
|
|
|
|
|
|
|
|
|
@ -25,6 +30,7 @@ class ColumnSettings extends React.PureComponent {
|
|
|
|
|
|
|
|
|
|
tags (mode) {
|
|
|
|
|
let tags = this.props.settings.getIn(['tags', mode]) || [];
|
|
|
|
|
|
|
|
|
|
if (tags.toJSON) {
|
|
|
|
|
return tags.toJSON();
|
|
|
|
|
} else {
|
|
|
|
@ -32,33 +38,36 @@ class ColumnSettings extends React.PureComponent {
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
onSelect = (mode) => {
|
|
|
|
|
return (value) => {
|
|
|
|
|
this.props.onChange(['tags', mode], value);
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
onSelect = mode => value => this.props.onChange(['tags', mode], value);
|
|
|
|
|
|
|
|
|
|
onToggle = () => {
|
|
|
|
|
if (this.state.open && this.hasTags()) {
|
|
|
|
|
this.props.onChange('tags', {});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.setState({ open: !this.state.open });
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
noOptionsMessage = () => this.props.intl.formatMessage(messages.noOptions);
|
|
|
|
|
|
|
|
|
|
modeSelect (mode) {
|
|
|
|
|
return (
|
|
|
|
|
<div className='column-settings__section'>
|
|
|
|
|
<div className='column-settings__row'>
|
|
|
|
|
<span className='column-settings__section'>
|
|
|
|
|
{this.modeLabel(mode)}
|
|
|
|
|
</span>
|
|
|
|
|
|
|
|
|
|
<AsyncSelect
|
|
|
|
|
isMulti
|
|
|
|
|
autoFocus
|
|
|
|
|
value={this.tags(mode)}
|
|
|
|
|
settings={this.props.settings}
|
|
|
|
|
settingPath={['tags', mode]}
|
|
|
|
|
onChange={this.onSelect(mode)}
|
|
|
|
|
loadOptions={this.props.onLoad}
|
|
|
|
|
classNamePrefix='column-settings__hashtag-select'
|
|
|
|
|
className='column-select__container'
|
|
|
|
|
classNamePrefix='column-select'
|
|
|
|
|
name='tags'
|
|
|
|
|
placeholder={this.props.intl.formatMessage(messages.placeholder)}
|
|
|
|
|
noOptionsMessage={this.noOptionsMessage}
|
|
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
@ -66,11 +75,15 @@ class ColumnSettings extends React.PureComponent {
|
|
|
|
|
|
|
|
|
|
modeLabel (mode) {
|
|
|
|
|
switch(mode) {
|
|
|
|
|
case 'any': return <FormattedMessage id='hashtag.column_settings.tag_mode.any' defaultMessage='Any of these' />;
|
|
|
|
|
case 'all': return <FormattedMessage id='hashtag.column_settings.tag_mode.all' defaultMessage='All of these' />;
|
|
|
|
|
case 'none': return <FormattedMessage id='hashtag.column_settings.tag_mode.none' defaultMessage='None of these' />;
|
|
|
|
|
}
|
|
|
|
|
case 'any':
|
|
|
|
|
return <FormattedMessage id='hashtag.column_settings.tag_mode.any' defaultMessage='Any of these' />;
|
|
|
|
|
case 'all':
|
|
|
|
|
return <FormattedMessage id='hashtag.column_settings.tag_mode.all' defaultMessage='All of these' />;
|
|
|
|
|
case 'none':
|
|
|
|
|
return <FormattedMessage id='hashtag.column_settings.tag_mode.none' defaultMessage='None of these' />;
|
|
|
|
|
default:
|
|
|
|
|
return '';
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
render () {
|
|
|
|
@ -78,23 +91,21 @@ class ColumnSettings extends React.PureComponent {
|
|
|
|
|
<div>
|
|
|
|
|
<div className='column-settings__row'>
|
|
|
|
|
<div className='setting-toggle'>
|
|
|
|
|
<Toggle
|
|
|
|
|
id='hashtag.column_settings.tag_toggle'
|
|
|
|
|
onChange={this.onToggle}
|
|
|
|
|
checked={this.state.open}
|
|
|
|
|
/>
|
|
|
|
|
<Toggle id='hashtag.column_settings.tag_toggle' onChange={this.onToggle} checked={this.state.open} />
|
|
|
|
|
|
|
|
|
|
<span className='setting-toggle__label'>
|
|
|
|
|
<FormattedMessage id='hashtag.column_settings.tag_toggle' defaultMessage='Include additional tags in this column' />
|
|
|
|
|
</span>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
{this.state.open &&
|
|
|
|
|
|
|
|
|
|
{this.state.open && (
|
|
|
|
|
<div className='column-settings__hashtags'>
|
|
|
|
|
{this.modeSelect('any')}
|
|
|
|
|
{this.modeSelect('all')}
|
|
|
|
|
{this.modeSelect('none')}
|
|
|
|
|
</div>
|
|
|
|
|
}
|
|
|
|
|
)}
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|