,
): VNode {
if (result.clientError && result.isUnauthorized) {
route(safe);
return ;
}
if (result.clientError && result.isNotfound) {
route(safe);
return (
Page not found, you are going to be redirected to {safe}
);
}
if (result.loading) return ;
if (!result.ok) {
switch (result.type) {
case ErrorType.TIMEOUT: {
saveError({
title: i18n.str`Request timeout, try again later.`,
});
break;
}
case ErrorType.CLIENT: {
const errorData = result.error;
saveError({
title: i18n.str`Could not load due to a client error`,
description: errorData.error.description,
debug: JSON.stringify(result),
});
break;
}
case ErrorType.SERVER: {
const errorData = result.error;
saveError({
title: i18n.str`Server returned with error`,
description: errorData.error.description,
debug: JSON.stringify(result),
});
break;
}
case ErrorType.UNEXPECTED: {
saveError({
title: i18n.str`Unexpected error.`,
description: `Diagnostic from ${result.info?.url} is "${result.message}"`,
debug: JSON.stringify(result.error),
});
break;
}
default:
{
assertUnreachable(result);
}
route(safe);
}
}
return ;
};
}
export function Routing(): VNode {
const history = createHashHistory();
const { pageStateSetter } = usePageContext();
function saveError(error: PageStateType["error"]): void {
pageStateSetter((prev) => ({ ...prev, error }));
}
const { i18n } = useTranslationContext();
return (
(
)}
/>
(
{
route("/account");
}}
/>
)}
/>
(
{
route("/business");
}}
>
{
route("/register");
}}
/>
)}
/>
(
{
route("/account");
}}
onRegister={() => {
route("/register");
}}
onLoadNotOk={handleNotOkResult("/account", saveError, i18n)}
/>
)}
/>
);
}
function Redirect({ to }: { to: string }): VNode {
useEffect(() => {
route(to, true);
}, []);
return being redirected to {to}
;
}
export function assertUnreachable(x: never): never {
throw new Error("Didn't expect to get here");
}