diff --git a/app/javascript/mastodon/actions/compose.js b/app/javascript/mastodon/actions/compose.js
index cd9955505..c27c53df0 100644
--- a/app/javascript/mastodon/actions/compose.js
+++ b/app/javascript/mastodon/actions/compose.js
@@ -418,16 +418,16 @@ export function selectComposeSuggestion(position, token, suggestion, path) {
return (dispatch, getState) => {
let completion, startPosition;
- if (typeof suggestion === 'object' && suggestion.id) {
+ if (suggestion.type === 'emoji') {
completion = suggestion.native || suggestion.colons;
startPosition = position - 1;
dispatch(useEmoji(suggestion));
- } else if (typeof suggestion === 'object' && suggestion.name) {
+ } else if (suggestion.type === 'hashtag') {
completion = `#${suggestion.name}`;
startPosition = position - 1;
- } else {
- completion = getState().getIn(['accounts', suggestion, 'acct']);
+ } else if (suggestion.type === 'account') {
+ completion = getState().getIn(['accounts', suggestion.id, 'acct']);
startPosition = position;
}
diff --git a/app/javascript/mastodon/components/autosuggest_input.js b/app/javascript/mastodon/components/autosuggest_input.js
index 0df8bf64e..6d2035add 100644
--- a/app/javascript/mastodon/components/autosuggest_input.js
+++ b/app/javascript/mastodon/components/autosuggest_input.js
@@ -168,15 +168,15 @@ export default class AutosuggestInput extends ImmutablePureComponent {
const { selectedSuggestion } = this.state;
let inner, key;
- if (typeof suggestion === 'object' && suggestion.shortcode) {
+ if (suggestion.type === 'emoji') {
inner = ;
key = suggestion.id;
- } else if (typeof suggestion === 'object' && suggestion.name) {
+ } else if (suggestion.type ==='hashtag') {
inner = ;
key = suggestion.name;
- } else {
- inner = ;
- key = suggestion;
+ } else if (suggestion.type === 'account') {
+ inner = ;
+ key = suggestion.id;
}
return (
diff --git a/app/javascript/mastodon/components/autosuggest_textarea.js b/app/javascript/mastodon/components/autosuggest_textarea.js
index 2bd06d28a..ac2a6366a 100644
--- a/app/javascript/mastodon/components/autosuggest_textarea.js
+++ b/app/javascript/mastodon/components/autosuggest_textarea.js
@@ -174,15 +174,15 @@ export default class AutosuggestTextarea extends ImmutablePureComponent {
const { selectedSuggestion } = this.state;
let inner, key;
- if (typeof suggestion === 'object' && suggestion.shortcode) {
+ if (suggestion.type === 'emoji') {
inner = ;
key = suggestion.id;
- } else if (typeof suggestion === 'object' && suggestion.name) {
+ } else if (suggestion.type === 'hashtag') {
inner = ;
key = suggestion.name;
- } else {
- inner = ;
- key = suggestion;
+ } else if (suggestion.type === 'account') {
+ inner = ;
+ key = suggestion.id;
}
return (
diff --git a/app/javascript/mastodon/reducers/compose.js b/app/javascript/mastodon/reducers/compose.js
index fc6d5f30f..e683a9c1a 100644
--- a/app/javascript/mastodon/reducers/compose.js
+++ b/app/javascript/mastodon/reducers/compose.js
@@ -207,11 +207,11 @@ const expiresInFromExpiresAt = expires_at => {
const normalizeSuggestions = (state, { accounts, emojis, tags }) => {
if (accounts) {
- return accounts.map(item => item.id);
+ return accounts.map(item => ({ id: item.id, type: 'account' }));
} else if (emojis) {
- return emojis;
+ return emojis.map(item => ({ ...item, type: 'emoji' }));
} else {
- return sortHashtagsByUse(state, tags);
+ return sortHashtagsByUse(state, tags.map(item => ({ ...item, type: 'hashtag' })));
}
};