UNPKG

@itznevikat/router

Version:

πŸ“¦ ΠœΠ½ΠΎΠ³ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€ΠΎΡƒΡ‚Π΅Ρ€ для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° React ΠΈ VKUI

2 lines (1 loc) β€’ 6.88 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("history"),require("react"),require("react-children-utilities"),require("@vkontakte/vkui"),require("@vkontakte/vkui/dist/lib/getNavId"),require("@vkontakte/vk-bridge")):"function"==typeof define&&define.amd?define(["exports","history","react","react-children-utilities","@vkontakte/vkui","@vkontakte/vkui/dist/lib/getNavId","@vkontakte/vk-bridge"],t):t((e||self).router={},e.history,e.react,e.reactChildrenUtilities,e.vkui,e.getNavId,e.bridge)}(this,function(e,t,n,r,o,i,a){function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=/*#__PURE__*/u(n),c=/*#__PURE__*/u(a),f=t.createHashHistory({window:window});function s(){return f.back()}function d(){return d=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},d.apply(this,arguments)}function p(e){if(n.isValidElement(e))return e.props["data-node-id"]}function v(e){if(n.isValidElement(e))return i.getNavId(e.props)}function h(e,t,r){var o={},i=r.split(/(?=\/)/),a=i.shift();return function e(r,u){if(n.isValidElement(r)&&n.isValidElement(u)){var l=v(r),c=p(u);if(l&&c&&a===l){var f=t.find(function(e){return e.nodeID===c});null!=f&&f.availableTransitionIDs.includes(l)&&(o[c]=l,a=i.shift())}r.props.children&&n.Children.toArray(r.props.children).forEach(function(t){return e(t,l?r:u)})}}(e,e),o}var m=location;function y(){var e;return null!=(e=Object.fromEntries(new URLSearchParams(f.location.search.slice(1))))?e:{}}function k(){var e=n.useState(y),t=e[0],r=e[1];return n.useEffect(function(){return f.listen(function(){return r(y)})},[]),t}function b(){var e,t;return null!=(e=null==(t=f.location.state)?void 0:t.meta)?e:{}}function E(){return f.location}var w=null;function S(){return n.useContext(o.ConfigProviderContext).platform===o.Platform.VKCOM?e.Style.DESKTOP:e.Style.MOBILE}var g,I=function(e){return l.default.createElement(o.View,d({},e),e.children)},M=function(e){return l.default.createElement(o.Root,d({},e),e.children)},P=function(e){return l.default.createElement(o.Epic,d({},e),e.children)},R=n.createContext({});e.Style=void 0,(g=e.Style||(e.Style={})).MOBILE="MOBILE",g.DESKTOP="DESKTOP",e.Epic=P,e.Match=function(i){var a=i.children,u=i.style,s=i.initialURL,m=i.fallbackURL,y=i.disableSetLocation,k=n.useState()[1],b=n.useRef(!0),E=n.useMemo(function(){return function(e){return r.deepMap(e,function(e){var t;if(!n.isValidElement(e))return e;if(!v(e)){switch(e.type){case I:case M:case P:console.warn("[router] found known navigation layout but no `nav` property. Maybe you forgot about it?");break;case o.View:case o.Root:case o.Epic:console.warn("[router] use View, Root and Epic imported from the router to work correctly.")}return e}return n.cloneElement(e,d({},e.props,((t={})["data-node-id"]=function(e){var t="";return r.deepForEach(e,function(e){var r;n.isValidElement(e)&&(t+=null!=(r=e.key)?r:e.type.name)}),t}(e),t)))})[0]}(a)},[a]),w=n.useMemo(function(){return function(e){var t=[];return r.deepForEach(e,function(e){if(n.isValidElement(e)){var r,o=v(e);if(!o)return e;switch(e.type){case I:r="view";break;case M:r="root";break;case P:r="epic";break;default:return e}var i=n.Children.toArray(e.props.children).map(function(e){return n.isValidElement(e)&&v(e)}).filter(function(e){return!!e});t.unshift(function(e,t,n,r){return{type:e,navID:t,nodeID:r,availableTransitionIDs:n,transitions:[n[0]]}}(r,o,i,e.props["data-node-id"]))}}),t}(E)},[]),g=b.current&&null!=s?s:f.location.pathname,V=null!=u?u:S();return n.useEffect(function(){var e=f.listen(function(e){var n,r,o,i=e.location,a=e.action,u=i.state,l=h(E,w,i.pathname);if(0===Object.keys(l).length&&(console.warn("[router] route not found."),m))return(null==u||null==(n=u.meta)?void 0:n.retry)>0?console.error("[router] fallback route not found."):f.replace(m,{force:!0,meta:{from:t.createPath(i),retry:null!=u&&null!=(r=u.meta)&&r.retry?(null==u||null==(o=u.meta)?void 0:o.retry)+1:1,meta:null==u?void 0:u.meta}});null!=u&&u.force&&(a=t.Action.Push),w.forEach(function(e){var n,r=e.transitions,o=null!=(n=l[e.nodeID])?n:"/";r[r.length-1]!==o&&(a===t.Action.Push&&r.push(o),a===t.Action.Replace&&r.splice(-1,1,o),a===t.Action.Pop&&(r.includes(o)?r.pop():r.push(o)))}),y||function(e){c.default.send("VKWebAppSetLocation",{location:t.createPath(e),replace_state:!0})}(i),k({})}),n=t.createPath(f.location);return s?s!==n&&(g=s,f.replace(s)):f.location.search.slice(1)?(f.replace(f.location.pathname),f.push(n)):f.location.pathname.slice(1)&&(f.replace("/"),f.push(n)),b.current=!1,e},[]),l.default.createElement(R.Provider,{value:{root:E,navs:w,style:V,initialURL:s,fallbackURL:m,disableSetLocation:y}},function(t,o,i,a){var u=h(o,i,t);return r.deepMap(o,function(t){var r;if(!n.isValidElement(t))return t;var o=p(t);if(!o)return t;var l=null!=(r=u[o])?r:"/",c=d({},t.props);switch(t.type){case I:if(c.activePanel=l,a===e.Style.MOBILE){var s=i.find(function(e){return e.nodeID===o});c.history=s.transitions,c.onSwipeBack=f.back}break;case M:c.activeView=l;break;case P:c.activeStory=l;break;default:return t}return n.cloneElement(t,c)})[0]}(g,E,w,V))},e.MatchContext=R,e.ModalRoot=function(e){var t=k().modal;return l.default.createElement(o.ModalRoot,d({activeModal:void 0===t?null:t,onClose:s},e),e.children)},e.Root=M,e.View=I,e.back=s,e.block=function(e){return f.block(e)},e.forward=function(){return f.forward()},e.go=function(e){return f.go(e)},e.listen=function(e){return f.listen(e)},e.matchPopout=function(e,t){var n;return e&&null!=(n=t.find(function(t){return v(t)===e}))?n:null},e.push=function(e,t){return f.push(e,{meta:t})},e.replace=function(e,t){return f.replace(e,{meta:t})},e.useActionRef=function(e){var t=n.useCallback(function(t){w=t,e&&e(w)},[e]),r=n.useCallback(function(t){w=null==t?void 0:t.target,e&&e(w)},[e]);return{actionRef:w,setActionRef:t,setActionRefHandler:r}},e.useDeserialized=function(){var e=n.useContext(R),t=e.root,r=e.navs,o=n.useMemo(function(){return h(t,r,f.location.pathname)},[t,f.location.pathname]),i=n.useMemo(function(){var e,t,n,i,a,u,l=null!=(e=null==(t=r.find(function(e){var t=e.type;return"root"===t||"epic"===t}))?void 0:t.nodeID)?e:"/",c=null!=(n=o[l])?n:"/",f=null!=(i=null==(a=r.find(function(e){return"view"===e.type&&e.navID===c}))?void 0:a.nodeID)?i:"/",s=null!=(u=o[f])?u:"/";return{view:c,panel:s}},[t,r,f.location.pathname]);return d({},o,{view:i.view,panel:i.panel})},e.useInitialLocation=function(){return m},e.useLocation=function(){var e=n.useState(E),t=e[0],r=e[1];return n.useEffect(function(){return f.listen(function(){return r(E)})},[]),t},e.useMeta=function(){var e=n.useState(b),r=e[0],o=e[1];return n.useEffect(function(){return f.listen(function(e){[t.Action.Push,t.Action.Replace].includes(e.action)&&o(b)})},[]),r},e.useParams=k,e.useStyle=S});