1586106d6SBartłomiej Klocekimport * as React from 'react';
2586106d6SBartłomiej Klocek
312abeb84SBartosz Kaszubowskiimport { A, P } from '~/ui/components/Text';
4586106d6SBartłomiej Klocek
51f61a071SBartosz Kaszubowskiconst PossibleRedirectNotification = ({ newUrl }: React.PropsWithChildren<{ newUrl: string }>) => {
6586106d6SBartłomiej Klocek  const [targetId, setTargetId] = React.useState<string | null>(null);
7586106d6SBartłomiej Klocek
8586106d6SBartłomiej Klocek  // We could add a listener on `window.onhashchange` but
9586106d6SBartłomiej Klocek  // I don't think this is actually needed.
10586106d6SBartłomiej Klocek  React.useEffect(() => {
11586106d6SBartłomiej Klocek    const hash = window.location.hash;
12586106d6SBartłomiej Klocek    const id = hash ? hash.replace('#', '') : null;
13586106d6SBartłomiej Klocek    if (hash && !document.getElementById(id as string)) {
14586106d6SBartłomiej Klocek      setTargetId(id);
15586106d6SBartłomiej Klocek    }
16586106d6SBartłomiej Klocek  }, []);
17586106d6SBartłomiej Klocek
18586106d6SBartłomiej Klocek  if (targetId) {
19586106d6SBartłomiej Klocek    return (
20*234e070fSBartosz Kaszubowski      <div className="bg-warning border border-solid border-warning p-4 mt-1 rounded-sm">
21*234e070fSBartosz Kaszubowski        <P className="mb-0">
22586106d6SBartłomiej Klocek          ⚠️ The information you are looking for (addressed by <em>"{targetId}"</em>) has moved.{' '}
23cb5b8d03SBartosz Kaszubowski          <A href={`${newUrl}#${targetId}`}>Continue to the new location.</A>
24a397ad8aSCedric van Putten        </P>
25586106d6SBartłomiej Klocek      </div>
26586106d6SBartłomiej Klocek    );
27586106d6SBartłomiej Klocek  } else {
28586106d6SBartłomiej Klocek    return null;
29586106d6SBartłomiej Klocek  }
30586106d6SBartłomiej Klocek};
31586106d6SBartłomiej Klocek
32586106d6SBartłomiej Klocekexport default PossibleRedirectNotification;
33