lbry-desktop/ui/util/query-params.js

85 lines
2.6 KiB
JavaScript
Raw Normal View History

2020-07-27 22:04:12 +02:00
// @flow
const DEFAULT_SEARCH_RESULT_FROM = 0;
const DEFAULT_SEARCH_SIZE = 20;
export function parseQueryParams(queryString: string) {
if (queryString === '') return {};
2017-11-24 15:31:05 +01:00
const parts = queryString
.split('?')
2017-11-24 15:31:05 +01:00
.pop()
.split('&')
.map((p) => p.split('='));
2017-05-07 14:50:32 +02:00
const params = {};
parts.forEach((array) => {
const [first, second] = array;
params[first] = second;
2017-06-06 23:19:12 +02:00
});
2017-05-07 14:50:32 +02:00
return params;
}
2019-07-19 16:52:42 +02:00
// https://stackoverflow.com/questions/5999118/how-can-i-add-or-update-a-query-string-parameter
2020-07-27 22:04:12 +02:00
export function updateQueryParam(uri: string, key: string, value: string) {
2019-07-17 22:49:06 +02:00
const re = new RegExp('([?&])' + key + '=.*?(&|$)', 'i');
2019-10-10 07:23:42 +02:00
const separator = uri.includes('?') ? '&' : '?';
2019-07-17 22:49:06 +02:00
if (uri.match(re)) {
return uri.replace(re, '$1' + key + '=' + value + '$2');
} else {
return uri + separator + key + '=' + value;
}
}
2020-07-27 22:04:12 +02:00
export const getSearchQueryString = (query: string, options: any = {}) => {
const encodedQuery = encodeURIComponent(query);
const queryParams = [
`s=${encodedQuery}`,
`free_only=true`,
2020-07-27 22:04:12 +02:00
`size=${options.size || DEFAULT_SEARCH_SIZE}`,
`from=${options.from || DEFAULT_SEARCH_RESULT_FROM}`,
// `mediaType=${SEARCH_OPTIONS.MEDIA_VIDEO}`,
// `claimType=${SEARCH_OPTIONS.INCLUDE_FILES}`,
2020-07-27 22:04:12 +02:00
];
// const { isBackgroundSearch } = options;
// const includeUserOptions = typeof isBackgroundSearch === 'undefined' ? false : !isBackgroundSearch;
2020-07-27 22:04:12 +02:00
// if (includeUserOptions) {
// const claimType = options[SEARCH_OPTIONS.CLAIM_TYPE];
// if (claimType) {
// queryParams.push(`claimType=${claimType}`);
2020-07-27 22:04:12 +02:00
/*
* Due to limitations in lighthouse, we can't pass
* the mediaType parameter when searching for
* channels or "everything".
*/
// if (!claimType.includes(SEARCH_OPTIONS.INCLUDE_CHANNELS)) {
// queryParams.push(
// `mediaType=${[
// SEARCH_OPTIONS.MEDIA_FILE,
// SEARCH_OPTIONS.MEDIA_AUDIO,
// SEARCH_OPTIONS.MEDIA_VIDEO,
// SEARCH_OPTIONS.MEDIA_TEXT,
// SEARCH_OPTIONS.MEDIA_IMAGE,
// SEARCH_OPTIONS.MEDIA_APPLICATION,
// ].reduce((acc, currentOption) => (options[currentOption] ? `${acc}${currentOption},` : acc), '')}`
// );
// }
// }
2020-07-27 22:04:12 +02:00
const additionalOptions = {};
const { related_to } = options;
const { nsfw } = options;
if (related_to) additionalOptions['related_to'] = related_to;
2021-01-08 23:02:40 +01:00
if (nsfw === false) additionalOptions['nsfw'] = false;
2020-07-27 22:04:12 +02:00
if (additionalOptions) {
Object.keys(additionalOptions).forEach((key) => {
2020-07-27 22:04:12 +02:00
const option = additionalOptions[key];
queryParams.push(`${key}=${option}`);
});
}
return queryParams.join('&');
};