refactor and batch-resolve for related content component #81
3 changed files with 2 additions and 99 deletions
|
@ -6,7 +6,6 @@ import {
|
||||||
makeSelectTitleForUri,
|
makeSelectTitleForUri,
|
||||||
selectIsSearching,
|
selectIsSearching,
|
||||||
} from 'lbry-redux';
|
} from 'lbry-redux';
|
||||||
import { doNativeSearch } from 'redux/actions/native';
|
|
||||||
import RelatedContent from './view';
|
import RelatedContent from './view';
|
||||||
|
|
||||||
const select = (state, props) => ({
|
const select = (state, props) => ({
|
||||||
|
@ -17,7 +16,6 @@ const select = (state, props) => ({
|
||||||
});
|
});
|
||||||
|
|
||||||
const perform = dispatch => ({
|
const perform = dispatch => ({
|
||||||
search: query => dispatch(doNativeSearch(query, 20, undefined, true)),
|
|
||||||
resolveUris: uris => dispatch(doResolveUris(uris)),
|
resolveUris: uris => dispatch(doResolveUris(uris)),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@ import {
|
||||||
doPurchaseUri,
|
doPurchaseUri,
|
||||||
doDeletePurchasedUri,
|
doDeletePurchasedUri,
|
||||||
doResolveUri,
|
doResolveUri,
|
||||||
|
doSearch,
|
||||||
doSendTip,
|
doSendTip,
|
||||||
doToast,
|
doToast,
|
||||||
makeSelectIsUriResolving,
|
makeSelectIsUriResolving,
|
||||||
|
@ -44,7 +45,6 @@ import {
|
||||||
doStopDownloadingFile,
|
doStopDownloadingFile,
|
||||||
} from 'redux/actions/file';
|
} from 'redux/actions/file';
|
||||||
import { doPopDrawerStack, doSetPlayerVisible } from 'redux/actions/drawer';
|
import { doPopDrawerStack, doSetPlayerVisible } from 'redux/actions/drawer';
|
||||||
import { doNativeSearch } from 'redux/actions/native';
|
|
||||||
import { selectDrawerStack } from 'redux/selectors/drawer';
|
import { selectDrawerStack } from 'redux/selectors/drawer';
|
||||||
import FilePage from './view';
|
import FilePage from './view';
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ const perform = dispatch => ({
|
||||||
purchaseUri: (uri, costInfo, saveFile) => dispatch(doPurchaseUri(uri, costInfo, saveFile)),
|
purchaseUri: (uri, costInfo, saveFile) => dispatch(doPurchaseUri(uri, costInfo, saveFile)),
|
||||||
deletePurchasedUri: uri => dispatch(doDeletePurchasedUri(uri)),
|
deletePurchasedUri: uri => dispatch(doDeletePurchasedUri(uri)),
|
||||||
resolveUri: uri => dispatch(doResolveUri(uri)),
|
resolveUri: uri => dispatch(doResolveUri(uri)),
|
||||||
searchRecommended: query => dispatch(doNativeSearch(query, 20, undefined, true)),
|
searchRecommended: query => dispatch(doSearch(query, 20, undefined, true)),
|
||||||
sendTip: (amount, claimId, isSupport, successCallback, errorCallback) =>
|
sendTip: (amount, claimId, isSupport, successCallback, errorCallback) =>
|
||||||
dispatch(doSendTip(amount, claimId, isSupport, successCallback, errorCallback)),
|
dispatch(doSendTip(amount, claimId, isSupport, successCallback, errorCallback)),
|
||||||
setPlayerVisible: () => dispatch(doSetPlayerVisible(true)),
|
setPlayerVisible: () => dispatch(doSetPlayerVisible(true)),
|
||||||
|
|
|
@ -1,95 +0,0 @@
|
||||||
// @flow
|
|
||||||
import { NativeModules } from 'react-native';
|
|
||||||
import {
|
|
||||||
ACTIONS,
|
|
||||||
batchActions,
|
|
||||||
buildURI,
|
|
||||||
doResolveUri,
|
|
||||||
doUpdateSearchQuery,
|
|
||||||
makeSelectSearchUris,
|
|
||||||
selectSuggestions,
|
|
||||||
makeSelectQueryWithOptions,
|
|
||||||
selectSearchValue,
|
|
||||||
} from 'lbry-redux';
|
|
||||||
|
|
||||||
let CONNECTION_STRING = 'https://lighthouse.lbry.com/';
|
|
||||||
|
|
||||||
const handleNativeFetchResponse = str => {
|
|
||||||
const json = JSON.parse(str);
|
|
||||||
if (json.error) {
|
|
||||||
return Promise.reject(new Error(json.error));
|
|
||||||
}
|
|
||||||
|
|
||||||
return Promise.resolve(json);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Use a native asyncTask to call the lighthouse api
|
|
||||||
export const doNativeSearch = (
|
|
||||||
rawQuery: string, // pass in a query if you don't want to search for what's in the search bar
|
|
||||||
size: ?number, // only pass in if you don't want to use the users setting (ex: related content)
|
|
||||||
from: ?number,
|
|
||||||
isBackgroundSearch: boolean = false
|
|
||||||
) => (dispatch: Dispatch, getState: GetState) => {
|
|
||||||
const query = rawQuery.replace(/^lbry:\/\//i, '').replace(/\//, ' ');
|
|
||||||
|
|
||||||
if (!query) {
|
|
||||||
dispatch({
|
|
||||||
type: ACTIONS.SEARCH_FAIL,
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const state = getState();
|
|
||||||
const queryWithOptions = makeSelectQueryWithOptions(query, size, from, isBackgroundSearch)(state);
|
|
||||||
|
|
||||||
// If we have already searched for something, we don't need to do anything
|
|
||||||
const urisForQuery = makeSelectSearchUris(queryWithOptions)(state);
|
|
||||||
if (urisForQuery && !!urisForQuery.length) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
dispatch({
|
|
||||||
type: ACTIONS.SEARCH_START,
|
|
||||||
});
|
|
||||||
|
|
||||||
// If the user is on the file page with a pre-populated uri and they select
|
|
||||||
// the search option without typing anything, searchQuery will be empty
|
|
||||||
// We need to populate it so the input is filled on the search page
|
|
||||||
// isBackgroundSearch means the search is happening in the background, don't update the search query
|
|
||||||
if (!state.search.searchQuery && !isBackgroundSearch) {
|
|
||||||
dispatch(doUpdateSearchQuery(query));
|
|
||||||
}
|
|
||||||
|
|
||||||
const url = `${CONNECTION_STRING}search?${queryWithOptions}`;
|
|
||||||
NativeModules.Requests.get(url)
|
|
||||||
.then(handleNativeFetchResponse)
|
|
||||||
.then((data: Array<{ name: String, claimId: string }>) => {
|
|
||||||
const uris = [];
|
|
||||||
const actions = [];
|
|
||||||
|
|
||||||
data.forEach(result => {
|
|
||||||
if (result.name) {
|
|
||||||
const uri = buildURI({
|
|
||||||
claimName: result.name,
|
|
||||||
claimId: result.claimId,
|
|
||||||
});
|
|
||||||
actions.push(doResolveUri(uri));
|
|
||||||
uris.push(uri);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
actions.push({
|
|
||||||
type: ACTIONS.SEARCH_SUCCESS,
|
|
||||||
data: {
|
|
||||||
query: queryWithOptions,
|
|
||||||
uris,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
dispatch(batchActions(...actions));
|
|
||||||
})
|
|
||||||
.catch(e => {
|
|
||||||
dispatch({
|
|
||||||
type: ACTIONS.SEARCH_FAIL,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
Loading…
Reference in a new issue