All files / src/views/Search util.ts

22.22% Statements 4/18
0% Branches 0/16
0% Functions 0/5
25% Lines 4/16

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          1x                   1x               1x           1x                                    
import { CatalogSearchSort } from "../../api/catalog-search/constants";
import { CDKType } from "../../constants/constructs";
import { Language } from "../../constants/languages";
import { QUERY_PARAMS } from "../../constants/url";
 
export const toNum = (val: string) => {
  const result = parseInt(val);
 
  if (`${result}` === "NaN") {
    return 0;
  }
 
  return result;
};
 
export const parseQueryArray = <T extends string>(
  queryString: string | null
) => {
  if (!queryString) return [];
 
  return decodeURIComponent(queryString).split(",") as T[];
};
 
const getParamFromUrl = (key: string) => {
  if (typeof window === "undefined") return null;
  const queryParams = new URL(window.location.href).searchParams;
  return queryParams.get(key);
};
 
export const getSearchUrlParams = () => {
  return {
    query: getParamFromUrl(QUERY_PARAMS.SEARCH_QUERY) ?? "",
    keywords: parseQueryArray(getParamFromUrl(QUERY_PARAMS.KEYWORDS)),
    cdkType: (getParamFromUrl(QUERY_PARAMS.CDK_TYPE) as CDKType) ?? undefined,
    cdkMajor: (() => {
      const cdkMajorParam = getParamFromUrl(QUERY_PARAMS.CDK_MAJOR);
      return cdkMajorParam ? toNum(cdkMajorParam) : undefined;
    })(),
    languages: parseQueryArray(
      getParamFromUrl(QUERY_PARAMS.LANGUAGES)
    ) as Language[],
    offset: toNum(getParamFromUrl(QUERY_PARAMS.OFFSET) ?? ""),
    sort:
      (getParamFromUrl(QUERY_PARAMS.SORT) as CatalogSearchSort) ?? undefined,
    tags: parseQueryArray(getParamFromUrl(QUERY_PARAMS.TAGS)),
  };
};