diff --git a/app/assets/javascripts/components/actions/accounts.jsx b/app/assets/javascripts/components/actions/accounts.jsx
index 0be05034..47c0d9f8 100644
--- a/app/assets/javascripts/components/actions/accounts.jsx
+++ b/app/assets/javascripts/components/actions/accounts.jsx
@@ -138,7 +138,8 @@ export function fetchAccountFail(id, error) {
return {
type: ACCOUNT_FETCH_FAIL,
id,
- error
+ error,
+ skipAlert: true
};
};
@@ -231,7 +232,8 @@ export function fetchAccountTimelineFail(id, error, skipLoading) {
type: ACCOUNT_TIMELINE_FETCH_FAIL,
id,
error,
- skipLoading
+ skipLoading,
+ skipAlert: error.response.status === 404
};
};
diff --git a/app/assets/javascripts/components/actions/cards.jsx b/app/assets/javascripts/components/actions/cards.jsx
index cc7baf37..d4c1eda6 100644
--- a/app/assets/javascripts/components/actions/cards.jsx
+++ b/app/assets/javascripts/components/actions/cards.jsx
@@ -46,6 +46,7 @@ export function fetchStatusCardFail(id, error) {
type: STATUS_CARD_FETCH_FAIL,
id,
error,
- skipLoading: true
+ skipLoading: true,
+ skipAlert: true
};
};
diff --git a/app/assets/javascripts/components/actions/statuses.jsx b/app/assets/javascripts/components/actions/statuses.jsx
index 6f43539e..19df2c36 100644
--- a/app/assets/javascripts/components/actions/statuses.jsx
+++ b/app/assets/javascripts/components/actions/statuses.jsx
@@ -28,6 +28,7 @@ export function fetchStatus(id) {
const skipLoading = getState().getIn(['statuses', id], null) !== null;
dispatch(fetchContext(id));
+ dispatch(fetchStatusCard(id));
if (skipLoading) {
return;
@@ -56,7 +57,8 @@ export function fetchStatusFail(id, error, skipLoading) {
type: STATUS_FETCH_FAIL,
id,
error,
- skipLoading
+ skipLoading,
+ skipAlert: true
};
};
@@ -101,14 +103,13 @@ export function fetchContext(id) {
api(getState).get(`/api/v1/statuses/${id}/context`).then(response => {
dispatch(fetchContextSuccess(id, response.data.ancestors, response.data.descendants));
- dispatch(fetchStatusCard(id));
+
}).catch(error => {
- if (error.response.status == 404){
- dispatch(deleteStatusSuccess(id));
+ if (error.response.status === 404) {
dispatch(deleteFromTimelines(id));
- }else{
- dispatch(fetchContextFail(id, error));
}
+
+ dispatch(fetchContextFail(id, error));
});
};
};
@@ -134,6 +135,7 @@ export function fetchContextFail(id, error) {
return {
type: CONTEXT_FETCH_FAIL,
id,
- error
+ error,
+ skipAlert: true
};
};
diff --git a/app/assets/javascripts/components/components/status_not_found.jsx b/app/assets/javascripts/components/components/status_not_found.jsx
deleted file mode 100644
index 917c1c06..00000000
--- a/app/assets/javascripts/components/components/status_not_found.jsx
+++ /dev/null
@@ -1,16 +0,0 @@
-import { FormattedMessage } from 'react-intl';
-
-const style = {
- textAlign: 'center',
- fontSize: '16px',
- fontWeight: '500',
- paddingTop: '120px'
-};
-
-const StatusNotFound = () => (
-
-
-
-);
-
-export default StatusNotFound;
diff --git a/app/assets/javascripts/components/features/account_timeline/components/header.jsx b/app/assets/javascripts/components/features/account_timeline/components/header.jsx
index 0cdfc8b0..2dd3ca7b 100644
--- a/app/assets/javascripts/components/features/account_timeline/components/header.jsx
+++ b/app/assets/javascripts/components/features/account_timeline/components/header.jsx
@@ -2,6 +2,7 @@ import PureRenderMixin from 'react-addons-pure-render-mixin';
import ImmutablePropTypes from 'react-immutable-proptypes';
import InnerHeader from '../../account/components/header';
import ActionBar from '../../account/components/action_bar';
+import MissingIndicator from '../../../components/missing_indicator';
const Header = React.createClass({
contextTypes: {
@@ -9,7 +10,7 @@ const Header = React.createClass({
},
propTypes: {
- account: ImmutablePropTypes.map.isRequired,
+ account: ImmutablePropTypes.map,
me: React.PropTypes.number.isRequired,
onFollow: React.PropTypes.func.isRequired,
onBlock: React.PropTypes.func.isRequired,
@@ -39,8 +40,8 @@ const Header = React.createClass({
render () {
const { account, me } = this.props;
- if (!account) {
- return null;
+ if (account === null) {
+ return ;
}
return (
diff --git a/app/assets/javascripts/components/features/status/index.jsx b/app/assets/javascripts/components/features/status/index.jsx
index 68509d59..6a7635cc 100644
--- a/app/assets/javascripts/components/features/status/index.jsx
+++ b/app/assets/javascripts/components/features/status/index.jsx
@@ -4,7 +4,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
import { fetchStatus } from '../../actions/statuses';
import Immutable from 'immutable';
import EmbeddedStatus from '../../components/status';
-import StatusNotFound from '../../components/status_not_found';
+import MissingIndicator from '../../components/missing_indicator';
import DetailedStatus from './components/detailed_status';
import ActionBar from './components/action_bar';
import Column from '../ui/components/column';
@@ -118,7 +118,7 @@ const Status = React.createClass({
return (
-
+
);
}
diff --git a/app/assets/javascripts/components/middleware/errors.jsx b/app/assets/javascripts/components/middleware/errors.jsx
index 74d77f0f..4aca75f1 100644
--- a/app/assets/javascripts/components/middleware/errors.jsx
+++ b/app/assets/javascripts/components/middleware/errors.jsx
@@ -5,7 +5,7 @@ const defaultFailSuffix = 'FAIL';
export default function errorsMiddleware() {
return ({ dispatch }) => next => action => {
- if (action.type) {
+ if (action.type && !action.skipAlert) {
const isFail = new RegExp(`${defaultFailSuffix}$`, 'g');
const isSuccess = new RegExp(`${defaultSuccessSuffix}$`, 'g');
diff --git a/app/assets/javascripts/components/reducers/statuses.jsx b/app/assets/javascripts/components/reducers/statuses.jsx
index 6323e0fb..ce791eab 100644
--- a/app/assets/javascripts/components/reducers/statuses.jsx
+++ b/app/assets/javascripts/components/reducers/statuses.jsx
@@ -39,14 +39,15 @@ const normalizeStatus = (state, status) => {
return state;
}
- status.account = status.account.id;
+ const normalStatus = { ...status };
+ normalStatus.account = status.account.id;
if (status.reblog && status.reblog.id) {
- state = normalizeStatus(state, status.reblog);
- status.reblog = status.reblog.id;
+ state = normalizeStatus(state, status.reblog);
+ normalStatus.reblog = status.reblog.id;
}
- return state.update(status.id, Immutable.Map(), map => map.mergeDeep(Immutable.fromJS(status)));
+ return state.update(status.id, Immutable.Map(), map => map.mergeDeep(Immutable.fromJS(normalStatus)));
};
const normalizeStatuses = (state, statuses) => {