lbry-desktop/ui/js/redux/actions/search.js

65 lines
1.7 KiB
JavaScript
Raw Normal View History

2017-06-06 23:19:12 +02:00
import * as types from "constants/action_types";
import lbryuri from "lbryuri";
2017-11-13 22:02:23 +01:00
import { doResolveUri } from "redux/actions/content";
import { doNavigate } from "redux/actions/navigation";
import { selectCurrentPage } from "redux/selectors/navigation";
import batchActions from "util/batchActions";
2017-04-24 16:17:36 +02:00
export function doSearch(rawQuery) {
2017-04-24 16:17:36 +02:00
return function(dispatch, getState) {
2017-06-06 23:19:12 +02:00
const state = getState();
const page = selectCurrentPage(state);
2017-04-30 05:31:20 +02:00
2017-10-13 15:32:49 +02:00
const query = rawQuery.replace(/^lbry:\/\//i, "");
2017-04-25 07:47:21 +02:00
if (!query) {
return dispatch({
type: types.SEARCH_CANCELLED,
2017-06-06 23:19:12 +02:00
});
2017-04-25 07:47:21 +02:00
}
2017-05-07 14:50:32 +02:00
dispatch({
type: types.SEARCH_STARTED,
2017-06-06 23:19:12 +02:00
data: { query },
});
2017-05-07 14:50:32 +02:00
2017-06-06 23:19:12 +02:00
if (page != "search") {
dispatch(doNavigate("search", { query: query }));
} else {
fetch("https://lighthouse.lbry.io/search?s=" + query)
.then(response => {
return response.status === 200
? Promise.resolve(response.json())
: Promise.reject(new Error(response.statusText));
})
.then(data => {
let uris = [];
let actions = [];
data.forEach(result => {
const uri = lbryuri.build({
name: result.name,
claimId: result.claimId,
});
actions.push(doResolveUri(uri));
uris.push(uri);
2017-06-06 23:19:12 +02:00
});
2017-05-07 14:50:32 +02:00
actions.push({
type: types.SEARCH_COMPLETED,
data: {
query,
uris,
},
});
dispatch(batchActions(...actions));
})
.catch(err => {
dispatch({
type: types.SEARCH_CANCELLED,
});
2017-06-06 23:19:12 +02:00
});
}
2017-06-06 23:19:12 +02:00
};
2017-05-07 14:50:32 +02:00
}