* Refactor initial state: "me" * remove "me" from reducers/meta.jsmaster
@@ -4,12 +4,13 @@ export const PINNED_STATUSES_FETCH_REQUEST = 'PINNED_STATUSES_FETCH_REQUEST'; | |||
export const PINNED_STATUSES_FETCH_SUCCESS = 'PINNED_STATUSES_FETCH_SUCCESS'; | |||
export const PINNED_STATUSES_FETCH_FAIL = 'PINNED_STATUSES_FETCH_FAIL'; | |||
import { me } from '../initial_state'; | |||
export function fetchPinnedStatuses() { | |||
return (dispatch, getState) => { | |||
dispatch(fetchPinnedStatusesRequest()); | |||
const accountId = getState().getIn(['meta', 'me']); | |||
api(getState).get(`/api/v1/accounts/${accountId}/statuses`, { params: { pinned: true } }).then(response => { | |||
api(getState).get(`/api/v1/accounts/${me}/statuses`, { params: { pinned: true } }).then(response => { | |||
dispatch(fetchPinnedStatusesSuccess(response.data, null)); | |||
}).catch(error => { | |||
dispatch(fetchPinnedStatusesFail(error)); | |||
@@ -7,6 +7,7 @@ import Permalink from './permalink'; | |||
import IconButton from './icon_button'; | |||
import { defineMessages, injectIntl } from 'react-intl'; | |||
import ImmutablePureComponent from 'react-immutable-pure-component'; | |||
import { me } from '../initial_state'; | |||
const messages = defineMessages({ | |||
follow: { id: 'account.follow', defaultMessage: 'Follow' }, | |||
@@ -21,7 +22,6 @@ export default class Account extends ImmutablePureComponent { | |||
static propTypes = { | |||
account: ImmutablePropTypes.map.isRequired, | |||
me: PropTypes.string.isRequired, | |||
onFollow: PropTypes.func.isRequired, | |||
onBlock: PropTypes.func.isRequired, | |||
onMute: PropTypes.func.isRequired, | |||
@@ -42,7 +42,7 @@ export default class Account extends ImmutablePureComponent { | |||
} | |||
render () { | |||
const { account, me, intl, hidden } = this.props; | |||
const { account, intl, hidden } = this.props; | |||
if (!account) { | |||
return <div />; | |||
@@ -36,7 +36,6 @@ export default class Status extends ImmutablePureComponent { | |||
onBlock: PropTypes.func, | |||
onEmbed: PropTypes.func, | |||
onHeightChange: PropTypes.func, | |||
me: PropTypes.string, | |||
muted: PropTypes.bool, | |||
hidden: PropTypes.bool, | |||
onMoveUp: PropTypes.func, | |||
@@ -52,7 +51,6 @@ export default class Status extends ImmutablePureComponent { | |||
updateOnProps = [ | |||
'status', | |||
'account', | |||
'me', | |||
'muted', | |||
'hidden', | |||
] | |||
@@ -5,6 +5,7 @@ import IconButton from './icon_button'; | |||
import DropdownMenuContainer from '../containers/dropdown_menu_container'; | |||
import { defineMessages, injectIntl } from 'react-intl'; | |||
import ImmutablePureComponent from 'react-immutable-pure-component'; | |||
import { me } from '../initial_state'; | |||
const messages = defineMessages({ | |||
delete: { id: 'status.delete', defaultMessage: 'Delete' }, | |||
@@ -47,7 +48,6 @@ export default class StatusActionBar extends ImmutablePureComponent { | |||
onEmbed: PropTypes.func, | |||
onMuteConversation: PropTypes.func, | |||
onPin: PropTypes.func, | |||
me: PropTypes.string, | |||
withDismiss: PropTypes.bool, | |||
intl: PropTypes.object.isRequired, | |||
}; | |||
@@ -56,7 +56,6 @@ export default class StatusActionBar extends ImmutablePureComponent { | |||
// evaluate to false. See react-immutable-pure-component for usage. | |||
updateOnProps = [ | |||
'status', | |||
'me', | |||
'withDismiss', | |||
] | |||
@@ -116,7 +115,7 @@ export default class StatusActionBar extends ImmutablePureComponent { | |||
} | |||
render () { | |||
const { status, me, intl, withDismiss } = this.props; | |||
const { status, intl, withDismiss } = this.props; | |||
const mutingConversation = status.get('muted'); | |||
const anonymousAccess = !me; | |||
@@ -23,7 +23,6 @@ const makeMapStateToProps = () => { | |||
const mapStateToProps = (state, props) => ({ | |||
account: getAccount(state, props.id), | |||
me: state.getIn(['meta', 'me']), | |||
}); | |||
return mapStateToProps; | |||
@@ -36,7 +36,6 @@ const makeMapStateToProps = () => { | |||
const mapStateToProps = (state, props) => ({ | |||
status: getStatus(state, props.id), | |||
me: state.getIn(['meta', 'me']), | |||
}); | |||
return mapStateToProps; | |||
@@ -4,6 +4,7 @@ import PropTypes from 'prop-types'; | |||
import DropdownMenuContainer from '../../../containers/dropdown_menu_container'; | |||
import { Link } from 'react-router-dom'; | |||
import { defineMessages, injectIntl, FormattedMessage, FormattedNumber } from 'react-intl'; | |||
import { me } from '../../../initial_state'; | |||
const messages = defineMessages({ | |||
mention: { id: 'account.mention', defaultMessage: 'Mention @{name}' }, | |||
@@ -26,7 +27,6 @@ export default class ActionBar extends React.PureComponent { | |||
static propTypes = { | |||
account: ImmutablePropTypes.map.isRequired, | |||
me: PropTypes.string.isRequired, | |||
onFollow: PropTypes.func, | |||
onBlock: PropTypes.func.isRequired, | |||
onMention: PropTypes.func.isRequired, | |||
@@ -44,7 +44,7 @@ export default class ActionBar extends React.PureComponent { | |||
} | |||
render () { | |||
const { account, me, intl } = this.props; | |||
const { account, intl } = this.props; | |||
let menu = []; | |||
let extraInfo = ''; | |||
@@ -6,7 +6,7 @@ import IconButton from '../../../components/icon_button'; | |||
import Motion from '../../ui/util/optional_motion'; | |||
import spring from 'react-motion/lib/spring'; | |||
import ImmutablePureComponent from 'react-immutable-pure-component'; | |||
import { autoPlayGif } from '../../../initial_state'; | |||
import { autoPlayGif, me } from '../../../initial_state'; | |||
const messages = defineMessages({ | |||
unfollow: { id: 'account.unfollow', defaultMessage: 'Unfollow' }, | |||
@@ -67,13 +67,12 @@ export default class Header extends ImmutablePureComponent { | |||
static propTypes = { | |||
account: ImmutablePropTypes.map, | |||
me: PropTypes.string.isRequired, | |||
onFollow: PropTypes.func.isRequired, | |||
intl: PropTypes.object.isRequired, | |||
}; | |||
render () { | |||
const { account, me, intl } = this.props; | |||
const { account, intl } = this.props; | |||
if (!account) { | |||
return null; | |||
@@ -10,7 +10,6 @@ export default class Header extends ImmutablePureComponent { | |||
static propTypes = { | |||
account: ImmutablePropTypes.map, | |||
me: PropTypes.string.isRequired, | |||
onFollow: PropTypes.func.isRequired, | |||
onBlock: PropTypes.func.isRequired, | |||
onMention: PropTypes.func.isRequired, | |||
@@ -61,7 +60,7 @@ export default class Header extends ImmutablePureComponent { | |||
} | |||
render () { | |||
const { account, me } = this.props; | |||
const { account } = this.props; | |||
if (account === null) { | |||
return <MissingIndicator />; | |||
@@ -71,13 +70,11 @@ export default class Header extends ImmutablePureComponent { | |||
<div className='account-timeline__header'> | |||
<InnerHeader | |||
account={account} | |||
me={me} | |||
onFollow={this.handleFollow} | |||
/> | |||
<ActionBar | |||
account={account} | |||
me={me} | |||
onBlock={this.handleBlock} | |||
onMention={this.handleMention} | |||
onReport={this.handleReport} | |||
@@ -29,7 +29,6 @@ const makeMapStateToProps = () => { | |||
const mapStateToProps = (state, { accountId }) => ({ | |||
account: getAccount(state, accountId), | |||
me: state.getIn(['meta', 'me']), | |||
}); | |||
return mapStateToProps; | |||
@@ -16,7 +16,6 @@ const mapStateToProps = (state, props) => ({ | |||
statusIds: state.getIn(['timelines', `account:${props.params.accountId}`, 'items'], ImmutableList()), | |||
isLoading: state.getIn(['timelines', `account:${props.params.accountId}`, 'isLoading']), | |||
hasMore: !!state.getIn(['timelines', `account:${props.params.accountId}`, 'next']), | |||
me: state.getIn(['meta', 'me']), | |||
}); | |||
@connect(mapStateToProps) | |||
@@ -28,7 +27,6 @@ export default class AccountTimeline extends ImmutablePureComponent { | |||
statusIds: ImmutablePropTypes.list, | |||
isLoading: PropTypes.bool, | |||
hasMore: PropTypes.bool, | |||
me: PropTypes.string.isRequired, | |||
}; | |||
componentWillMount () { | |||
@@ -50,7 +48,7 @@ export default class AccountTimeline extends ImmutablePureComponent { | |||
} | |||
render () { | |||
const { statusIds, isLoading, hasMore, me } = this.props; | |||
const { statusIds, isLoading, hasMore } = this.props; | |||
if (!statusIds && isLoading) { | |||
return ( | |||
@@ -70,7 +68,6 @@ export default class AccountTimeline extends ImmutablePureComponent { | |||
statusIds={statusIds} | |||
isLoading={isLoading} | |||
hasMore={hasMore} | |||
me={me} | |||
onScrollToBottom={this.handleScrollToBottom} | |||
/> | |||
</Column> | |||
@@ -41,7 +41,6 @@ export default class ComposeForm extends ImmutablePureComponent { | |||
preselectDate: PropTypes.instanceOf(Date), | |||
is_submitting: PropTypes.bool, | |||
is_uploading: PropTypes.bool, | |||
me: PropTypes.string, | |||
onChange: PropTypes.func.isRequired, | |||
onSubmit: PropTypes.func.isRequired, | |||
onClearSuggestions: PropTypes.func.isRequired, | |||
@@ -22,7 +22,6 @@ const mapStateToProps = state => ({ | |||
preselectDate: state.getIn(['compose', 'preselectDate']), | |||
is_submitting: state.getIn(['compose', 'is_submitting']), | |||
is_uploading: state.getIn(['compose', 'is_uploading']), | |||
me: state.getIn(['compose', 'me']), | |||
showSearch: state.getIn(['search', 'submitted']) && !state.getIn(['search', 'hidden']), | |||
}); | |||
@@ -1,9 +1,10 @@ | |||
import { connect } from 'react-redux'; | |||
import NavigationBar from '../components/navigation_bar'; | |||
import { me } from '../../../initial_state'; | |||
const mapStateToProps = state => { | |||
return { | |||
account: state.getIn(['accounts', state.getIn(['meta', 'me'])]), | |||
account: state.getIn(['accounts', me]), | |||
}; | |||
}; | |||
@@ -3,9 +3,10 @@ import { connect } from 'react-redux'; | |||
import Warning from '../components/warning'; | |||
import PropTypes from 'prop-types'; | |||
import { FormattedMessage } from 'react-intl'; | |||
import { me } from '../../../initial_state'; | |||
const mapStateToProps = state => ({ | |||
needsLockWarning: state.getIn(['compose', 'privacy']) === 'private' && !state.getIn(['accounts', state.getIn(['meta', 'me']), 'locked']), | |||
needsLockWarning: state.getIn(['compose', 'privacy']) === 'private' && !state.getIn(['accounts', me, 'locked']), | |||
}); | |||
const WarningWrapper = ({ needsLockWarning }) => { | |||
@@ -7,6 +7,7 @@ import { connect } from 'react-redux'; | |||
import PropTypes from 'prop-types'; | |||
import ImmutablePropTypes from 'react-immutable-proptypes'; | |||
import ImmutablePureComponent from 'react-immutable-pure-component'; | |||
import { me } from '../../initial_state'; | |||
const messages = defineMessages({ | |||
heading: { id: 'getting_started.heading', defaultMessage: 'Getting started' }, | |||
@@ -27,7 +28,7 @@ const messages = defineMessages({ | |||
}); | |||
const mapStateToProps = state => ({ | |||
me: state.getIn(['accounts', state.getIn(['meta', 'me'])]), | |||
myAccount: state.getIn(['accounts', me]), | |||
columns: state.getIn(['settings', 'columns']), | |||
}); | |||
@@ -37,13 +38,13 @@ export default class GettingStarted extends ImmutablePureComponent { | |||
static propTypes = { | |||
intl: PropTypes.object.isRequired, | |||
me: ImmutablePropTypes.map.isRequired, | |||
myAccount: ImmutablePropTypes.map.isRequired, | |||
columns: ImmutablePropTypes.list, | |||
multiColumn: PropTypes.bool, | |||
}; | |||
render () { | |||
const { intl, me, columns, multiColumn } = this.props; | |||
const { intl, myAccount, columns, multiColumn } = this.props; | |||
let navItems = []; | |||
@@ -70,7 +71,7 @@ export default class GettingStarted extends ImmutablePureComponent { | |||
<ColumnLink key='5' icon='thumb-tack' text={intl.formatMessage(messages.pins)} to='/pinned' />, | |||
]); | |||
if (me.get('locked')) { | |||
if (myAccount.get('locked')) { | |||
navItems.push(<ColumnLink key='6' icon='users' text={intl.formatMessage(messages.follow_requests)} to='/follow_requests' />); | |||
} | |||
@@ -4,6 +4,7 @@ import IconButton from '../../../components/icon_button'; | |||
import ImmutablePropTypes from 'react-immutable-proptypes'; | |||
import DropdownMenuContainer from '../../../containers/dropdown_menu_container'; | |||
import { defineMessages, injectIntl } from 'react-intl'; | |||
import { me } from '../../../initial_state'; | |||
const messages = defineMessages({ | |||
delete: { id: 'status.delete', defaultMessage: 'Delete' }, | |||
@@ -36,7 +37,6 @@ export default class ActionBar extends React.PureComponent { | |||
onReport: PropTypes.func, | |||
onPin: PropTypes.func, | |||
onEmbed: PropTypes.func, | |||
me: PropTypes.string.isRequired, | |||
intl: PropTypes.object.isRequired, | |||
}; | |||
@@ -80,7 +80,7 @@ export default class ActionBar extends React.PureComponent { | |||
} | |||
render () { | |||
const { status, me, intl } = this.props; | |||
const { status, intl } = this.props; | |||
const publicStatus = ['public', 'unlisted'].includes(status.get('visibility')); | |||
@@ -43,7 +43,6 @@ const makeMapStateToProps = () => { | |||
status: getStatus(state, props.params.statusId), | |||
ancestorsIds: state.getIn(['contexts', 'ancestors', props.params.statusId]), | |||
descendantsIds: state.getIn(['contexts', 'descendants', props.params.statusId]), | |||
me: state.getIn(['meta', 'me']), | |||
}); | |||
return mapStateToProps; | |||
@@ -63,7 +62,6 @@ export default class Status extends ImmutablePureComponent { | |||
status: ImmutablePropTypes.map, | |||
ancestorsIds: ImmutablePropTypes.list, | |||
descendantsIds: ImmutablePropTypes.list, | |||
me: PropTypes.string, | |||
intl: PropTypes.object.isRequired, | |||
}; | |||
@@ -252,7 +250,7 @@ export default class Status extends ImmutablePureComponent { | |||
render () { | |||
let ancestors, descendants; | |||
const { status, ancestorsIds, descendantsIds, me } = this.props; | |||
const { status, ancestorsIds, descendantsIds } = this.props; | |||
if (status === null) { | |||
return ( | |||
@@ -293,14 +291,12 @@ export default class Status extends ImmutablePureComponent { | |||
<div className='focusable' tabIndex='0'> | |||
<DetailedStatus | |||
status={status} | |||
me={me} | |||
onOpenVideo={this.handleOpenVideo} | |||
onOpenMedia={this.handleOpenMedia} | |||
/> | |||
<ActionBar | |||
status={status} | |||
me={me} | |||
onReply={this.handleReplyClick} | |||
onFavourite={this.handleFavouriteClick} | |||
onReblog={this.handleReblogClick} | |||
@@ -11,6 +11,7 @@ import Search from '../../compose/components/search'; | |||
import NavigationBar from '../../compose/components/navigation_bar'; | |||
import ColumnHeader from './column_header'; | |||
import { List as ImmutableList } from 'immutable'; | |||
import { me } from '../../../initial_state'; | |||
const noop = () => { }; | |||
@@ -40,11 +41,11 @@ PageOne.propTypes = { | |||
domain: PropTypes.string.isRequired, | |||
}; | |||
const PageTwo = ({ me }) => ( | |||
const PageTwo = ({ myAccount }) => ( | |||
<div className='onboarding-modal__page onboarding-modal__page-two'> | |||
<div className='figure non-interactive'> | |||
<div className='pseudo-drawer'> | |||
<NavigationBar account={me} /> | |||
<NavigationBar account={myAccount} /> | |||
</div> | |||
<ComposeForm | |||
text='Awoo! #introductions' | |||
@@ -68,10 +69,10 @@ const PageTwo = ({ me }) => ( | |||
); | |||
PageTwo.propTypes = { | |||
me: ImmutablePropTypes.map.isRequired, | |||
myAccount: ImmutablePropTypes.map.isRequired, | |||
}; | |||
const PageThree = ({ me }) => ( | |||
const PageThree = ({ myAccount }) => ( | |||
<div className='onboarding-modal__page onboarding-modal__page-three'> | |||
<div className='figure non-interactive'> | |||
<Search | |||
@@ -83,7 +84,7 @@ const PageThree = ({ me }) => ( | |||
/> | |||
<div className='pseudo-drawer'> | |||
<NavigationBar account={me} /> | |||
<NavigationBar account={myAccount} /> | |||
</div> | |||
</div> | |||
@@ -93,7 +94,7 @@ const PageThree = ({ me }) => ( | |||
); | |||
PageThree.propTypes = { | |||
me: ImmutablePropTypes.map.isRequired, | |||
myAccount: ImmutablePropTypes.map.isRequired, | |||
}; | |||
const PageFour = ({ domain, intl }) => ( | |||
@@ -161,7 +162,7 @@ PageSix.propTypes = { | |||
}; | |||
const mapStateToProps = state => ({ | |||
me: state.getIn(['accounts', state.getIn(['meta', 'me'])]), | |||
myAccount: state.getIn(['accounts', me]), | |||
admin: state.getIn(['accounts', state.getIn(['meta', 'admin'])]), | |||
domain: state.getIn(['meta', 'domain']), | |||
}); | |||
@@ -173,7 +174,7 @@ export default class OnboardingModal extends React.PureComponent { | |||
static propTypes = { | |||
onClose: PropTypes.func.isRequired, | |||
intl: PropTypes.object.isRequired, | |||
me: ImmutablePropTypes.map.isRequired, | |||
myAccount: ImmutablePropTypes.map.isRequired, | |||
domain: PropTypes.string.isRequired, | |||
admin: ImmutablePropTypes.map, | |||
}; | |||
@@ -183,11 +184,11 @@ export default class OnboardingModal extends React.PureComponent { | |||
}; | |||
componentWillMount() { | |||
const { me, admin, domain, intl } = this.props; | |||
const { myAccount, admin, domain, intl } = this.props; | |||
this.pages = [ | |||
<PageOne acct={me.get('acct')} domain={domain} />, | |||
<PageTwo me={me} />, | |||
<PageThree me={me} />, | |||
<PageOne acct={myAccount.get('acct')} domain={domain} />, | |||
<PageTwo myAccount={myAccount} />, | |||
<PageThree myAccount={myAccount} />, | |||
<PageFour domain={domain} intl={intl} />, | |||
<PageSix admin={admin} domain={domain} />, | |||
]; | |||
@@ -4,13 +4,13 @@ import { scrollTopTimeline } from '../../../actions/timelines'; | |||
import { Map as ImmutableMap, List as ImmutableList } from 'immutable'; | |||
import { createSelector } from 'reselect'; | |||
import { debounce } from 'lodash'; | |||
import { me } from '../../../initial_state'; | |||
const makeGetStatusIds = () => createSelector([ | |||
(state, { type }) => state.getIn(['settings', type], ImmutableMap()), | |||
(state, { type }) => state.getIn(['timelines', type, 'items'], ImmutableList()), | |||
(state) => state.get('statuses'), | |||
(state) => state.getIn(['meta', 'me']), | |||
], (columnSettings, statusIds, statuses, me) => { | |||
], (columnSettings, statusIds, statuses) => { | |||
const rawRegex = columnSettings.getIn(['regex', 'body'], '').trim(); | |||
let regex = null; | |||
@@ -38,13 +38,13 @@ import { | |||
PinnedStatuses, | |||
} from './util/async-components'; | |||
import { HotKeys } from 'react-hotkeys'; | |||
import { me } from '../../initial_state'; | |||
// Dummy import, to make sure that <Status /> ends up in the application bundle. | |||
// Without this it ends up in ~8 very commonly used bundles. | |||
import '../../components/status'; | |||
const mapStateToProps = state => ({ | |||
me: state.getIn(['meta', 'me']), | |||
isComposing: state.getIn(['compose', 'is_composing']), | |||
}); | |||
@@ -86,7 +86,6 @@ export default class UI extends React.Component { | |||
dispatch: PropTypes.func.isRequired, | |||
children: PropTypes.node, | |||
isComposing: PropTypes.bool, | |||
me: PropTypes.string, | |||
location: PropTypes.object, | |||
}; | |||
@@ -305,7 +304,7 @@ export default class UI extends React.Component { | |||
} | |||
handleHotkeyGoToProfile = () => { | |||
this.context.router.history.push(`/accounts/${this.props.me}`); | |||
this.context.router.history.push(`/accounts/${me}`); | |||
} | |||
handleHotkeyGoToBlocked = () => { | |||
@@ -8,5 +8,6 @@ export const autoPlayGif = getMeta('auto_play_gif'); | |||
export const unfollowModal = getMeta('unfollow_modal'); | |||
export const boostModal = getMeta('boost_modal'); | |||
export const deleteModal = getMeta('delete_modal'); | |||
export const me = getMeta('me'); | |||
export default initialState; |
@@ -31,6 +31,7 @@ import { TIMELINE_DELETE } from '../actions/timelines'; | |||
import { STORE_HYDRATE } from '../actions/store'; | |||
import { Map as ImmutableMap, List as ImmutableList, OrderedSet as ImmutableOrderedSet, fromJS } from 'immutable'; | |||
import uuid from '../uuid'; | |||
import { me } from '../initial_state'; | |||
const initialState = ImmutableMap({ | |||
mounted: false, | |||
@@ -49,7 +50,6 @@ const initialState = ImmutableMap({ | |||
media_attachments: ImmutableList(), | |||
suggestion_token: null, | |||
suggestions: ImmutableList(), | |||
me: null, | |||
default_privacy: 'public', | |||
default_sensitive: false, | |||
resetFileKey: Math.floor((Math.random() * 0x10000)), | |||
@@ -58,7 +58,6 @@ const initialState = ImmutableMap({ | |||
function statusToTextMentions(state, status) { | |||
let set = ImmutableOrderedSet([]); | |||
let me = state.get('me'); | |||
if (status.getIn(['account', 'id']) !== me) { | |||
set = set.add(`@${status.getIn(['account', 'acct'])} `); | |||
@@ -4,7 +4,6 @@ import { Map as ImmutableMap } from 'immutable'; | |||
const initialState = ImmutableMap({ | |||
streaming_api_base_url: null, | |||
access_token: null, | |||
me: null, | |||
}); | |||
export default function meta(state = initialState, action) { | |||