import IconButton from 'flavours/glitch/components/icon_button';
import TextIconButton from './text_icon_button';
import Dropdown from './dropdown';
+import PrivacyDropdown from './privacy_dropdown';
import ImmutablePureComponent from 'react-immutable-pure-component';
// Utils.
defaultMessage: 'Attach...',
id: 'compose.attach',
},
- change_privacy: {
- defaultMessage: 'Adjust status privacy',
- id: 'privacy.change',
- },
content_type: {
defaultMessage: 'Content type',
id: 'content-type.change',
},
- direct_long: {
- defaultMessage: 'Visible for mentioned users only',
- id: 'privacy.direct.long',
- },
- direct_short: {
- defaultMessage: 'Direct',
- id: 'privacy.direct.short',
- },
doodle: {
defaultMessage: 'Draw something',
id: 'compose.attach.doodle',
defaultMessage: 'Plain text',
id: 'compose.content-type.plain',
},
- private_long: {
- defaultMessage: 'Visible for followers only',
- id: 'privacy.private.long',
- },
- private_short: {
- defaultMessage: 'Followers-only',
- id: 'privacy.private.short',
- },
- public_long: {
- defaultMessage: 'Visible for all, shown in public timelines',
- id: 'privacy.public.long',
- },
- public_short: {
- defaultMessage: 'Public',
- id: 'privacy.public.short',
- },
spoiler: {
defaultMessage: 'Hide text behind warning',
id: 'compose_form.spoiler',
defaultMessage: 'Threaded mode',
id: 'advanced_options.threaded_mode.short',
},
- unlisted_long: {
- defaultMessage: 'Visible for all, but not in public timelines',
- id: 'privacy.unlisted.long',
- },
- unlisted_short: {
- defaultMessage: 'Unlisted',
- id: 'privacy.unlisted.short',
- },
upload: {
defaultMessage: 'Upload a file',
id: 'compose.attach.upload',
showContentTypeChoice,
} = this.props;
- // We predefine our privacy items so that we can easily pick the
- // dropdown icon later.
- const privacyItems = {
- direct: {
- icon: 'envelope',
- meta: <FormattedMessage {...messages.direct_long} />,
- name: 'direct',
- text: <FormattedMessage {...messages.direct_short} />,
- },
- private: {
- icon: 'lock',
- meta: <FormattedMessage {...messages.private_long} />,
- name: 'private',
- text: <FormattedMessage {...messages.private_short} />,
- },
- public: {
- icon: 'globe',
- meta: <FormattedMessage {...messages.public_long} />,
- name: 'public',
- text: <FormattedMessage {...messages.public_short} />,
- },
- unlisted: {
- icon: 'unlock',
- meta: <FormattedMessage {...messages.unlisted_long} />,
- name: 'unlisted',
- text: <FormattedMessage {...messages.unlisted_short} />,
- },
- };
-
const contentTypeItems = {
plain: {
icon: 'file-text',
/>
)}
<hr />
- <Dropdown
+ <PrivacyDropdown
disabled={disabled}
- icon={(privacyItems[privacy] || {}).icon}
- items={[
- privacyItems.public,
- privacyItems.unlisted,
- privacyItems.private,
- privacyItems.direct,
- ]}
onChange={onChangeVisibility}
onModalClose={onModalClose}
onModalOpen={onModalOpen}
- title={intl.formatMessage(messages.change_privacy)}
value={privacy}
/>
{showContentTypeChoice && (
--- /dev/null
+import PropTypes from 'prop-types';
+import React from 'react';
+import ImmutablePropTypes from 'react-immutable-proptypes';
+import { FormattedMessage, defineMessages, injectIntl } from 'react-intl';
+import Dropdown from './dropdown';
+
+const messages = defineMessages({
+ change_privacy: {
+ defaultMessage: 'Adjust status privacy',
+ id: 'privacy.change',
+ },
+ direct_long: {
+ defaultMessage: 'Visible for mentioned users only',
+ id: 'privacy.direct.long',
+ },
+ direct_short: {
+ defaultMessage: 'Direct',
+ id: 'privacy.direct.short',
+ },
+ private_long: {
+ defaultMessage: 'Visible for followers only',
+ id: 'privacy.private.long',
+ },
+ private_short: {
+ defaultMessage: 'Followers-only',
+ id: 'privacy.private.short',
+ },
+ public_long: {
+ defaultMessage: 'Visible for all, shown in public timelines',
+ id: 'privacy.public.long',
+ },
+ public_short: {
+ defaultMessage: 'Public',
+ id: 'privacy.public.short',
+ },
+ unlisted_long: {
+ defaultMessage: 'Visible for all, but not in public timelines',
+ id: 'privacy.unlisted.long',
+ },
+ unlisted_short: {
+ defaultMessage: 'Unlisted',
+ id: 'privacy.unlisted.short',
+ },
+});
+
+export default @injectIntl
+class PrivacyDropdown extends React.PureComponent {
+
+ static propTypes = {
+ isUserTouching: PropTypes.func,
+ onModalOpen: PropTypes.func,
+ onModalClose: PropTypes.func,
+ value: PropTypes.string.isRequired,
+ onChange: PropTypes.func.isRequired,
+ noDirect: PropTypes.bool,
+ container: PropTypes.func,
+ intl: PropTypes.object.isRequired,
+ };
+
+ render () {
+ const { value, onChange, onModalOpen, onModalClose, disabled, intl } = this.props;
+
+ // We predefine our privacy items so that we can easily pick the
+ // dropdown icon later.
+ const privacyItems = {
+ direct: {
+ icon: 'envelope',
+ meta: <FormattedMessage {...messages.direct_long} />,
+ name: 'direct',
+ text: <FormattedMessage {...messages.direct_short} />,
+ },
+ private: {
+ icon: 'lock',
+ meta: <FormattedMessage {...messages.private_long} />,
+ name: 'private',
+ text: <FormattedMessage {...messages.private_short} />,
+ },
+ public: {
+ icon: 'globe',
+ meta: <FormattedMessage {...messages.public_long} />,
+ name: 'public',
+ text: <FormattedMessage {...messages.public_short} />,
+ },
+ unlisted: {
+ icon: 'unlock',
+ meta: <FormattedMessage {...messages.unlisted_long} />,
+ name: 'unlisted',
+ text: <FormattedMessage {...messages.unlisted_short} />,
+ },
+ };
+
+ const items = [privacyItems.public, privacyItems.unlisted, privacyItems.private, privacyItems.direct];
+
+ return (
+ <Dropdown
+ disabled={disabled}
+ icon={(privacyItems[value] || {}).icon}
+ items={items}
+ onChange={onChange}
+ onModalClose={onModalClose}
+ onModalOpen={onModalOpen}
+ title={intl.formatMessage(messages.change_privacy)}
+ value={value}
+ />
+ );
+ }
+
+}