glitch-soc/mastodon

View on GitHub
app/javascript/flavours/glitch/hooks/useSearchParam.ts

Summary

Maintainability
B
6 hrs
Test Coverage
import { useMemo, useCallback } from 'react';

import { useLocation, useHistory } from 'react-router';

export function useSearchParams() {
  const { search } = useLocation();

  return useMemo(() => new URLSearchParams(search), [search]);
}

export function useSearchParam(name: string, defaultValue?: string) {
  const searchParams = useSearchParams();
  const history = useHistory();

  const value = searchParams.get(name) ?? defaultValue;

  const setValue = useCallback(
    (value: string | null) => {
      if (value === null) {
        searchParams.delete(name);
      } else {
        searchParams.set(name, value);
      }

      history.push({ search: searchParams.toString() });
    },
    [history, name, searchParams],
  );

  return [value, setValue] as const;
}