@vueuse/router
Version:
Utilities for vue-router
2 lines (1 loc) • 2.04 kB
JavaScript
(function(V,g,e,y){"use strict";let p;function x(c,{mode:f="replace",route:l=y.useRoute(),router:m=y.useRouter()}={}){p=l.hash,g.tryOnScopeDispose(()=>{p=void 0});let a;const u=e.customRef((s,n)=>(a=n,{get(){return s(),p||e.toValue(c)},set(h){h!==p&&(p=h===null?void 0:h,n(),e.nextTick(()=>{const{params:i,query:t}=l;m[e.toValue(f)]({params:i,query:t,hash:p})}))}}));return e.watch(()=>l.hash,()=>{l.hash!==p&&(p=l.hash,a())},{flush:"sync"}),u}const w=new WeakMap;function M(c,f,l={}){const{mode:m="replace",route:a=y.useRoute(),router:u=y.useRouter(),transform:s}=l;let n=r=>r,h=r=>r;typeof s=="function"?n=s:s&&(s.get&&(n=s.get),s.set&&(h=s.set)),w.has(u)||w.set(u,new Map);const i=w.get(u);let t=a.params[c];g.tryOnScopeDispose(()=>{t=void 0});let q;const d=e.customRef((r,R)=>(q=R,{get(){return r(),n(t!==void 0&&t!==""?t:e.toValue(f))},set(o){o=h(o),t!==o&&(t=o===e.toValue(f)||o===null?void 0:o,i.set(c,o===e.toValue(f)||o===null?void 0:o),R(),e.nextTick(()=>{if(i.size===0)return;const k=Object.fromEntries(i.entries());i.clear();const{params:O,query:Q,hash:S}=a;u[e.toValue(m)]({params:{...O,...k},query:Q,hash:S})}))}}));return e.watch(()=>a.params[c],r=>{t!==n(r)&&(t=r,q())},{flush:"sync"}),d}const _=new WeakMap;function D(c,f,l={}){const{mode:m="replace",route:a=y.useRoute(),router:u=y.useRouter(),transform:s}=l;let n=r=>r,h=r=>r;typeof s=="function"?n=s:s&&(s.get&&(n=s.get),s.set&&(h=s.set)),_.has(u)||_.set(u,new Map);const i=_.get(u);let t=a.query[c];g.tryOnScopeDispose(()=>{t=void 0});let q;const d=e.customRef((r,R)=>(q=R,{get(){return r(),n(t!==void 0?t:e.toValue(f))},set(o){o=h(o),t!==o&&(t=o===e.toValue(f)?void 0:o,i.set(c,o===e.toValue(f)?void 0:o),R(),e.nextTick(()=>{if(i.size===0)return;const k=Object.fromEntries(i.entries());i.clear();const{params:O,query:Q,hash:S}=a;u[e.toValue(m)]({params:O,query:{...Q,...k},hash:S})}))}}));return e.watch(()=>a.query[c],r=>{t!==n(r)&&(t=r,q())},{flush:"sync"}),d}V.useRouteHash=x,V.useRouteParams=M,V.useRouteQuery=D})(this.VueUse=this.VueUse||{},VueUse,Vue,VueRouter);