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

53 lines
1.3 KiB
JavaScript

import * as types from "constants/action_types";
import lbryuri from "lbryuri";
import lighthouse from "lighthouse";
import { doResolveUri } from "actions/content";
import { doNavigate, doHistoryPush } from "actions/app";
import { selectCurrentPage } from "selectors/app";
import batchActions from "util/batchActions";
export function doSearch(query) {
return function(dispatch, getState) {
const state = getState();
const page = selectCurrentPage(state);
if (!query) {
return dispatch({
type: types.SEARCH_CANCELLED,
});
}
dispatch({
type: types.SEARCH_STARTED,
data: { query },
});
if (page != "search") {
dispatch(doNavigate("search", { query: query }));
} else {
lighthouse.search(query).then(results => {
const actions = [];
results.forEach(result => {
const uri = lbryuri.build({
channelName: result.channel_name,
contentName: result.name,
claimId: result.channel_id || result.claim_id,
});
actions.push(doResolveUri(uri));
});
actions.push({
type: types.SEARCH_COMPLETED,
data: {
query,
results,
},
});
dispatch(batchActions(...actions));
});
}
};
}