Feat block nsfw on search #3586
10 changed files with 49 additions and 22 deletions
|
@ -31,7 +31,7 @@
|
||||||
"koa-logger": "^3.2.1",
|
"koa-logger": "^3.2.1",
|
||||||
"koa-send": "^5.0.0",
|
"koa-send": "^5.0.0",
|
||||||
"koa-static": "^5.0.0",
|
"koa-static": "^5.0.0",
|
||||||
"lbry-redux": "lbryio/lbry-redux#71e85536dbe397df98a47a3c4b4311760b2e7419",
|
"lbry-redux": "lbryio/lbry-redux#87ae7faf1c1d5ffa86feb578899596f6ea2a5fd9",
|
||||||
"mysql": "^2.17.1"
|
"mysql": "^2.17.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -3333,9 +3333,9 @@ latest-version@^3.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
package-json "^4.0.0"
|
package-json "^4.0.0"
|
||||||
|
|
||||||
lbry-redux@lbryio/lbry-redux#71e85536dbe397df98a47a3c4b4311760b2e7419:
|
lbry-redux@lbryio/lbry-redux#87ae7faf1c1d5ffa86feb578899596f6ea2a5fd9:
|
||||||
version "0.0.1"
|
version "0.0.1"
|
||||||
resolved "https://codeload.github.com/lbryio/lbry-redux/tar.gz/71e85536dbe397df98a47a3c4b4311760b2e7419"
|
resolved "https://codeload.github.com/lbryio/lbry-redux/tar.gz/87ae7faf1c1d5ffa86feb578899596f6ea2a5fd9"
|
||||||
dependencies:
|
dependencies:
|
||||||
proxy-polyfill "0.1.6"
|
proxy-polyfill "0.1.6"
|
||||||
reselect "^3.0.0"
|
reselect "^3.0.0"
|
||||||
|
|
|
@ -130,7 +130,7 @@
|
||||||
"imagesloaded": "^4.1.4",
|
"imagesloaded": "^4.1.4",
|
||||||
"json-loader": "^0.5.4",
|
"json-loader": "^0.5.4",
|
||||||
"lbry-format": "https://github.com/lbryio/lbry-format.git",
|
"lbry-format": "https://github.com/lbryio/lbry-format.git",
|
||||||
"lbry-redux": "lbryio/lbry-redux#bfbaa0dbdd2c1b2b340c0760d0d97c99f3cefb02",
|
"lbry-redux": "lbryio/lbry-redux#87ae7faf1c1d5ffa86feb578899596f6ea2a5fd9",
|
||||||
"lbryinc": "lbryio/lbryinc#6a59102c52673502569d2c43bd4ee58c315fb2e4",
|
"lbryinc": "lbryio/lbryinc#6a59102c52673502569d2c43bd4ee58c315fb2e4",
|
||||||
"lint-staged": "^7.0.2",
|
"lint-staged": "^7.0.2",
|
||||||
"localforage": "^1.7.1",
|
"localforage": "^1.7.1",
|
||||||
|
|
|
@ -919,5 +919,7 @@
|
||||||
"Your wallet": "Your wallet",
|
"Your wallet": "Your wallet",
|
||||||
"Publish a file, or create a channel": "Publish a file, or create a channel",
|
"Publish a file, or create a channel": "Publish a file, or create a channel",
|
||||||
"Your account": "Your account",
|
"Your account": "Your account",
|
||||||
"Channel profile picture": "Channel profile picture"
|
"Channel profile picture": "Channel profile picture",
|
||||||
|
"refreshing the app": "refreshing the app",
|
||||||
|
"Follower": "Follower"
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ const select = (state, props) => ({
|
||||||
});
|
});
|
||||||
|
|
||||||
const perform = dispatch => ({
|
const perform = dispatch => ({
|
||||||
search: (query, options) => dispatch(doSearch(query, 20, undefined, true, options)),
|
search: (query, options) => dispatch(doSearch(query, options)),
|
||||||
});
|
});
|
||||||
|
|
||||||
export default connect(
|
export default connect(
|
||||||
|
|
|
@ -44,7 +44,7 @@ export default class RecommendedContent extends React.PureComponent<Props> {
|
||||||
const { claim, search, mature, claimId } = this.props;
|
const { claim, search, mature, claimId } = this.props;
|
||||||
|
|
||||||
if (claim && claim.value && claim.value) {
|
if (claim && claim.value && claim.value) {
|
||||||
const options: Options = { related_to: claimId };
|
const options: Options = { size: 20, related_to: claimId, isBackgroundSearch: true };
|
||||||
if (claim && !mature) {
|
if (claim && !mature) {
|
||||||
options['nsfw'] = false;
|
options['nsfw'] = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,10 +10,13 @@ const select = state => ({
|
||||||
query: makeSelectQueryWithOptions()(state),
|
query: makeSelectQueryWithOptions()(state),
|
||||||
});
|
});
|
||||||
|
|
||||||
const perform = dispatch => ({
|
const perform = (dispatch, ownProps) => {
|
||||||
setSearchOption: (option, value) => dispatch(doUpdateSearchOptions({ [option]: value })),
|
const additionalOptions = ownProps.additionalOptions || {};
|
||||||
|
return {
|
||||||
|
setSearchOption: (option, value) => dispatch(doUpdateSearchOptions({ [option]: value }, additionalOptions)),
|
||||||
toggleSearchExpanded: () => dispatch(doToggleSearchExpanded()),
|
toggleSearchExpanded: () => dispatch(doToggleSearchExpanded()),
|
||||||
});
|
};
|
||||||
|
};
|
||||||
|
|
||||||
export default connect(
|
export default connect(
|
||||||
select,
|
select,
|
||||||
|
|
|
@ -1,15 +1,27 @@
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
|
import * as SETTINGS from 'constants/settings';
|
||||||
import { doSearch, selectIsSearching, makeSelectSearchUris, makeSelectQueryWithOptions, doToast } from 'lbry-redux';
|
import { doSearch, selectIsSearching, makeSelectSearchUris, makeSelectQueryWithOptions, doToast } from 'lbry-redux';
|
||||||
|
import { makeSelectClientSetting } from 'redux/selectors/settings';
|
||||||
import analytics from 'analytics';
|
import analytics from 'analytics';
|
||||||
import SearchPage from './view';
|
import SearchPage from './view';
|
||||||
|
|
||||||
const select = state => ({
|
const select = state => {
|
||||||
|
const showMature = makeSelectClientSetting(SETTINGS.SHOW_MATURE)(state);
|
||||||
|
const query = makeSelectQueryWithOptions(
|
||||||
|
null,
|
||||||
|
showMature === false ? { nsfw: false, isBackgroundSearch: false } : { isBackgroundSearch: false }
|
||||||
|
)(state);
|
||||||
|
const uris = makeSelectSearchUris(query)(state);
|
||||||
|
|
||||||
|
return {
|
||||||
isSearching: selectIsSearching(state),
|
isSearching: selectIsSearching(state),
|
||||||
uris: makeSelectSearchUris(makeSelectQueryWithOptions()(state))(state),
|
showNsfw: makeSelectClientSetting(SETTINGS.SHOW_MATURE)(state),
|
||||||
});
|
uris: uris,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
const perform = dispatch => ({
|
const perform = dispatch => ({
|
||||||
search: query => dispatch(doSearch(query)),
|
search: (query, options) => dispatch(doSearch(query, options)),
|
||||||
onFeedbackPositive: query => {
|
onFeedbackPositive: query => {
|
||||||
analytics.apiSearchFeedback(query, 1);
|
analytics.apiSearchFeedback(query, 1);
|
||||||
dispatch(
|
dispatch(
|
||||||
|
|
|
@ -9,19 +9,29 @@ import SearchOptions from 'component/searchOptions';
|
||||||
import Button from 'component/button';
|
import Button from 'component/button';
|
||||||
import ClaimUri from 'component/claimUri';
|
import ClaimUri from 'component/claimUri';
|
||||||
|
|
||||||
|
type AdditionalOptions = {
|
||||||
|
isBackgroundSearch: boolean,
|
||||||
|
nsfw?: boolean,
|
||||||
|
};
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
search: string => void,
|
search: (string, AdditionalOptions) => void,
|
||||||
isSearching: boolean,
|
isSearching: boolean,
|
||||||
location: UrlLocation,
|
location: UrlLocation,
|
||||||
uris: Array<string>,
|
uris: Array<string>,
|
||||||
onFeedbackNegative: string => void,
|
onFeedbackNegative: string => void,
|
||||||
onFeedbackPositive: string => void,
|
onFeedbackPositive: string => void,
|
||||||
|
showNsfw: boolean,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function SearchPage(props: Props) {
|
export default function SearchPage(props: Props) {
|
||||||
const { search, uris, onFeedbackPositive, onFeedbackNegative, location, isSearching } = props;
|
const { search, uris, onFeedbackPositive, onFeedbackNegative, location, isSearching, showNsfw } = props;
|
||||||
const urlParams = new URLSearchParams(location.search);
|
const urlParams = new URLSearchParams(location.search);
|
||||||
const urlQuery = urlParams.get('q');
|
const urlQuery = urlParams.get('q');
|
||||||
|
const additionalOptions: AdditionalOptions = { isBackgroundSearch: false };
|
||||||
|
if (!showNsfw) {
|
||||||
|
additionalOptions['nsfw'] = false;
|
||||||
|
}
|
||||||
|
|
||||||
let normalizedUri;
|
let normalizedUri;
|
||||||
let isUriValid;
|
let isUriValid;
|
||||||
|
@ -42,7 +52,7 @@ export default function SearchPage(props: Props) {
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (urlQuery) {
|
if (urlQuery) {
|
||||||
search(urlQuery);
|
search(urlQuery, additionalOptions);
|
||||||
}
|
}
|
||||||
}, [search, urlQuery]);
|
}, [search, urlQuery]);
|
||||||
|
|
||||||
|
@ -63,7 +73,7 @@ export default function SearchPage(props: Props) {
|
||||||
<ClaimList
|
<ClaimList
|
||||||
uris={uris}
|
uris={uris}
|
||||||
loading={isSearching}
|
loading={isSearching}
|
||||||
header={<SearchOptions />}
|
header={<SearchOptions additionalOptions={additionalOptions} />}
|
||||||
headerAltControls={
|
headerAltControls={
|
||||||
<Fragment>
|
<Fragment>
|
||||||
<span>{__('Find what you were looking for?')}</span>
|
<span>{__('Find what you were looking for?')}</span>
|
||||||
|
|
|
@ -7277,9 +7277,9 @@ lazy-val@^1.0.4:
|
||||||
yargs "^13.2.2"
|
yargs "^13.2.2"
|
||||||
zstd-codec "^0.1.1"
|
zstd-codec "^0.1.1"
|
||||||
|
|
||||||
lbry-redux@lbryio/lbry-redux#bfbaa0dbdd2c1b2b340c0760d0d97c99f3cefb02:
|
lbry-redux@lbryio/lbry-redux#87ae7faf1c1d5ffa86feb578899596f6ea2a5fd9:
|
||||||
version "0.0.1"
|
version "0.0.1"
|
||||||
resolved "https://codeload.github.com/lbryio/lbry-redux/tar.gz/bfbaa0dbdd2c1b2b340c0760d0d97c99f3cefb02"
|
resolved "https://codeload.github.com/lbryio/lbry-redux/tar.gz/87ae7faf1c1d5ffa86feb578899596f6ea2a5fd9"
|
||||||
dependencies:
|
dependencies:
|
||||||
proxy-polyfill "0.1.6"
|
proxy-polyfill "0.1.6"
|
||||||
reselect "^3.0.0"
|
reselect "^3.0.0"
|
||||||
|
|
Loading…
Reference in a new issue