From f0bdfadab7e5293b3f7855b6707a1fa95ea76ca6 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 13 Nov 2016 13:04:18 +0100 Subject: Search component --- .../javascripts/components/actions/search.jsx | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 app/assets/javascripts/components/actions/search.jsx (limited to 'app/assets/javascripts/components/actions') diff --git a/app/assets/javascripts/components/actions/search.jsx b/app/assets/javascripts/components/actions/search.jsx new file mode 100644 index 000000000..ceb0e4a0c --- /dev/null +++ b/app/assets/javascripts/components/actions/search.jsx @@ -0,0 +1,51 @@ +import api from '../api' + +export const SEARCH_CHANGE = 'SEARCH_CHANGE'; +export const SEARCH_SUGGESTIONS_CLEAR = 'SEARCH_SUGGESTIONS_CLEAR'; +export const SEARCH_SUGGESTIONS_READY = 'SEARCH_SUGGESTIONS_READY'; +export const SEARCH_RESET = 'SEARCH_RESET'; + +export function changeSearch(value) { + return { + type: SEARCH_CHANGE, + value + }; +}; + +export function clearSearchSuggestions() { + return { + type: SEARCH_SUGGESTIONS_CLEAR + }; +}; + +export function readySearchSuggestions(value, accounts) { + return { + type: SEARCH_SUGGESTIONS_READY, + value, + accounts + }; +}; + +export function fetchSearchSuggestions(value) { + return (dispatch, getState) => { + if (getState().getIn(['search', 'loaded_value']) === value) { + return; + } + + api(getState).get('/api/v1/accounts/search', { + params: { + q: value, + resolve: true, + limit: 4 + } + }).then(response => { + dispatch(readySearchSuggestions(value, response.data)); + }); + }; +}; + +export function resetSearch() { + return { + type: SEARCH_RESET + }; +}; -- cgit