|
|
|
@ -11,28 +11,38 @@ const initialState = Immutable.Map({ |
|
|
|
|
suggestions: [] |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
const normalizeSuggestions = (state, value, accounts) => { |
|
|
|
|
let newSuggestions = [ |
|
|
|
|
{ |
|
|
|
|
const normalizeSuggestions = (state, value, accounts, hashtags, statuses) => { |
|
|
|
|
let newSuggestions = []; |
|
|
|
|
|
|
|
|
|
if (accounts.length > 0) { |
|
|
|
|
newSuggestions.push({ |
|
|
|
|
title: 'account', |
|
|
|
|
items: accounts.map(item => ({ |
|
|
|
|
type: 'account', |
|
|
|
|
id: item.id, |
|
|
|
|
value: item.acct |
|
|
|
|
})) |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (value.indexOf('@') === -1 && value.indexOf(' ') === -1 || hashtags.length > 0) { |
|
|
|
|
let hashtagItems = hashtags.map(item => ({ |
|
|
|
|
type: 'hashtag', |
|
|
|
|
id: item, |
|
|
|
|
value: `#${item}` |
|
|
|
|
})); |
|
|
|
|
|
|
|
|
|
if (value.indexOf('@') === -1 && value.indexOf(' ') === -1 && hashtags.indexOf(value) === -1) { |
|
|
|
|
hashtagItems.unshift({ |
|
|
|
|
type: 'hashtag', |
|
|
|
|
id: value, |
|
|
|
|
value: `#${value}` |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
]; |
|
|
|
|
|
|
|
|
|
if (value.indexOf('@') === -1 && value.indexOf(' ') === -1) { |
|
|
|
|
newSuggestions.push({ |
|
|
|
|
title: 'hashtag', |
|
|
|
|
items: [ |
|
|
|
|
{ |
|
|
|
|
type: 'hashtag', |
|
|
|
|
id: value, |
|
|
|
|
value: `#${value}` |
|
|
|
|
} |
|
|
|
|
] |
|
|
|
|
items: hashtagItems |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -44,17 +54,17 @@ const normalizeSuggestions = (state, value, accounts) => { |
|
|
|
|
|
|
|
|
|
export default function search(state = initialState, action) { |
|
|
|
|
switch(action.type) { |
|
|
|
|
case SEARCH_CHANGE: |
|
|
|
|
return state.set('value', action.value); |
|
|
|
|
case SEARCH_SUGGESTIONS_READY: |
|
|
|
|
return normalizeSuggestions(state, action.value, action.accounts); |
|
|
|
|
case SEARCH_RESET: |
|
|
|
|
return state.withMutations(map => { |
|
|
|
|
map.set('suggestions', []); |
|
|
|
|
map.set('value', ''); |
|
|
|
|
map.set('loaded_value', ''); |
|
|
|
|
}); |
|
|
|
|
default: |
|
|
|
|
return state; |
|
|
|
|
case SEARCH_CHANGE: |
|
|
|
|
return state.set('value', action.value); |
|
|
|
|
case SEARCH_SUGGESTIONS_READY: |
|
|
|
|
return normalizeSuggestions(state, action.value, action.accounts, action.hashtags, action.statuses); |
|
|
|
|
case SEARCH_RESET: |
|
|
|
|
return state.withMutations(map => { |
|
|
|
|
map.set('suggestions', []); |
|
|
|
|
map.set('value', ''); |
|
|
|
|
map.set('loaded_value', ''); |
|
|
|
|
}); |
|
|
|
|
default: |
|
|
|
|
return state; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|