siegel
Version:
Web application development ecosystem
1 lines • 2.25 kB
JavaScript
import e,{Suspense as t,useState as r,useLayoutEffect as a}from"react";import n from"../../../common/is/nullable/index.js";import i,{SYMBOL__VALUES_EQUAL as l}from"../../../common/deep/diff/index.js";import s from"../history/index.js";import o from"./get_children_array.js";function h(r){let{El:a,urlParams:n,onEnter:i,resultElement:l,fallback:s}=r,o=e.createElement(a,{urlParams:n,children:l,onEnterData:i?.(n)});return a._init?e.createElement(t,{fallback:s||"",children:o}):o}function m(e){return a(()=>()=>{e.onLeave()},[]),h(e)}function u(e){return e.prevChildrenArray=[],e.transitionTimeoutID=void 0,e}export default function(t){let c,v,[d,p]=r({pathname:location.pathname,prevChildrenArray:[],transitionTimeoutID:void 0,prevPathnameParseResult:null}),{transitionTimeoutID:P,prevChildrenArray:f,prevPathnameParseResult:y}=d,{pathname:E}=d;d.prevPathnameParseResult=null,s(t.basename,(e,r,a)=>{let{pathname:s}=d,h=o(t,e,r),{newPathname:m,newHistoryState:u}=h;d.pathname=m,(s!=m||(n(u)||n(history.state)?u!==history.state:i(u,history.state)!=l))&&(a(h),d.prevPathnameParseResult=h,p({...d}))});let{childrenArray:g,newHistoryState:T,newPathname:_,urlParams:j,transitionData:x}=y||o(t,E,history.state);_!=E&&(d.pathname=E=_,history.replaceState(T,"",_));let D=g.length;if(a(()=>{P&&clearTimeout(P)},[E]),u(d),x&&f.length>D){let e=D-1;f[e].traversePath==g[e].traversePath&&(g.push({El:()=>"",traversePath:`${g[e].traversePath}/`,historyState:null}),D++)}for(let t=D-1;t>=0;t--){let{El:r,onEnter:a,onLeave:n,fallback:i,traversePath:l,historyState:s}=g[t],o={resultElement:c,urlParams:j,El:r,onEnter:a,onLeave:n,fallback:i};if(c=n?e.createElement(m,{...o}):h(o),x){let{duration:r,wrapperClassName:a,performOnHistoryStateChange:n}=x;d.prevChildrenArray[t]={resultElement:c,traversePath:l,historyState:s};let i=n&&f.length&&f[t]?.historyState!=g[t].historyState;f.length&&(!f[t]||i&&!v||f[t].traversePath!=g[t].traversePath&&f[t-1].traversePath==g[t-1].traversePath)&&(P||(d.transitionTimeoutID=setTimeout(()=>{p({...u(d)})},r),d.prevPathnameParseResult=y),c=e.createElement("div",{className:a,style:{"--ui-route_transition_duration":`${r}ms`}},e.createElement("div",{children:f[t]?.resultElement}),e.createElement("div",{children:c}))),v=i}}return c};