Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2241x 2241x 2241x 2241x 2241x 2241x 2241x 2241x 2241x 3376x 3376x 3376x 3376x 3376x 3376x 3376x 2241x 2241x 2241x 1x 1x 1x 1x 1x 1x | import { omitUndefinedValues } from "../Util"
export interface QueryParams {
[key: string]: string | undefined
}
// Deprecated. Use getWindowQueryParams() to get the params from the global URL,
// or strToQueryParams(str) to parse an arbtirary query string.
export const getQueryParams = (queryStr?: string): QueryParams =>
strToQueryParams(queryStr || getWindowQueryStr())
export const getWindowQueryParams = (): QueryParams =>
strToQueryParams(getWindowQueryStr())
/**
* Converts a query string into an object of key-value pairs.
* Handles URI-decoding of the values.
* @param queryStr
* @param doNotDecode Passing `true` will return a QueryParams object with URI-encoded values.
* Only use when absolutely necessary, for example, to distinguish between
* `+` and `%20` for legacy URLs.
*/
export const strToQueryParams = (
queryStr = "",
doNotDecode: boolean = false
): QueryParams => {
if (queryStr[0] === "?") queryStr = queryStr.substring(1)
const querySplit = queryStr.split("&").filter((s) => s)
const params: QueryParams = {}
for (const param of querySplit) {
const [key, value] = param.split("=", 2)
const decodedKey = decodeURIComponent(key.replace(/\+/g, "%20"))
const decoded =
value !== undefined
? decodeURIComponent(value.replace(/\+/g, "%20"))
: undefined
params[decodedKey] = doNotDecode ? value : decoded
}
return params
}
/**
* Converts an object to a query string.
* Expects the input object to not be encoded already, and handles the URI-encoding of the values.
*/
export const queryParamsToStr = (params: QueryParams) => {
const queryParams = new URLSearchParams(omitUndefinedValues(params))
// we're relying on `~` (%7E) to not be encoded in some places, so make sure that it never is
const newQueryStr = queryParams.toString().replace(/%7E/g, "~")
return newQueryStr.length ? `?${newQueryStr}` : ""
}
export const getWindowQueryStr = () => window.location.search
export const setWindowQueryStr = (str: string) =>
history.replaceState(
null,
document.title,
window.location.pathname + str + window.location.hash
)
|