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