@tanstack/solid-router
Version:
Modern and scalable routing for Solid applications
52 lines (51 loc) • 2.08 kB
JavaScript
import { Dynamic, createComponent, delegateEvents, insert, memo, template } from "solid-js/web";
import * as Solid from "solid-js";
//#region src/CatchBoundary.tsx
var _tmpl$ = /* @__PURE__ */ template(`<div style=padding:.5rem;max-width:100%><div style=display:flex;align-items:center;gap:.5rem><strong style=font-size:1rem>Something went wrong!</strong><button style="appearance:none;font-size:.6em;border:1px solid currentColor;padding:.1rem .2rem;font-weight:bold;border-radius:.25rem"></button></div><div style=height:.25rem>`), _tmpl$2 = /* @__PURE__ */ template(`<div><pre style="font-size:.7em;border:1px solid red;border-radius:.25rem;padding:.3rem;color:red;overflow:auto">`), _tmpl$3 = /* @__PURE__ */ template(`<code>`);
function CatchBoundary(props) {
return createComponent(Solid.ErrorBoundary, {
fallback: (error, reset) => {
props.onCatch?.(error);
Solid.createEffect(Solid.on([props.getResetKey], () => reset(), { defer: true }));
return createComponent(Dynamic, {
get component() {
return props.errorComponent ?? ErrorComponent;
},
error,
reset
});
},
get children() {
return props.children;
}
});
}
function ErrorComponent({ error }) {
const [show, setShow] = Solid.createSignal(process.env.NODE_ENV !== "production");
return (() => {
var _el$ = _tmpl$(), _el$2 = _el$.firstChild, _el$4 = _el$2.firstChild.nextSibling;
_el$2.nextSibling;
_el$4.$$click = () => setShow((d) => !d);
insert(_el$4, () => show() ? "Hide Error" : "Show Error");
insert(_el$, (() => {
var _c$ = memo(() => !!show());
return () => _c$() ? (() => {
var _el$6 = _tmpl$2(), _el$7 = _el$6.firstChild;
insert(_el$7, (() => {
var _c$2 = memo(() => !!error.message);
return () => _c$2() ? (() => {
var _el$8 = _tmpl$3();
insert(_el$8, () => error.message);
return _el$8;
})() : null;
})());
return _el$6;
})() : null;
})(), null);
return _el$;
})();
}
delegateEvents(["click"]);
//#endregion
export { CatchBoundary, ErrorComponent };
//# sourceMappingURL=CatchBoundary.js.map