jinrai 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.js
CHANGED
|
@@ -1,2 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
See https://nuqs.dev/NUQS-${e}`}var T=Je({useAdapter(){throw new Error(N(404))}});T.displayName="NuqsAdapterContext";Z&&typeof window<"u"&&(window.__NuqsAdapterContext&&window.__NuqsAdapterContext!==T&&console.error(N(303)),window.__NuqsAdapterContext=T);function Se(e){let t=Y(T);if(!("useAdapter"in t))throw new Error(N(404));return t.useAdapter(e)}var ye=()=>Y(T).defaultOptions,be=()=>Y(T).processUrlSearchParams;import{useCallback as we,useRef as ke,useSyncExternalStore as Ke}from"react";function We(){if(typeof window>"u"||!window.GestureEvent)return 50;try{let e=navigator.userAgent?.match(/version\/([\d\.]+) safari/i);return parseFloat(e[1])>=17?120:320}catch{return 320}}function qe(e){return{method:"throttle",timeMs:e}}var L=qe(We());function ve(e){return e===null||Array.isArray(e)&&e.length===0}function Oe(e,t,r){if(typeof e=="string")r.set(t,e);else{r.delete(t);for(let n of e)r.append(t,n);r.has(t)||r.set(t,"")}return r}function ne(){let e=new Map;return{on(t,r){let n=e.get(t)||[];return n.push(r),e.set(t,n),()=>this.off(t,r)},off(t,r){let n=e.get(t);n&&e.set(t,n.filter(s=>s!==r))},emit(t,r){e.get(t)?.forEach(n=>n(r))}}}function ee(e,t,r){function n(){e(),r.removeEventListener("abort",o)}let s=setTimeout(n,t);function o(){clearTimeout(s),r.removeEventListener("abort",o)}r.addEventListener("abort",o)}function te(){let e=Promise;if(Promise.hasOwnProperty("withResolvers"))return Promise.withResolvers();let t=()=>{},r=()=>{};return{promise:new e((n,s)=>{t=n,r=s}),resolve:t,reject:r}}function Be(e,t){let r=t;for(let n=e.length-1;n>=0;n--){let s=e[n];if(!s)continue;let o=r;r=()=>s(o)}r()}function re(){return new URLSearchParams(location.search)}var Ae=class{updateMap=new Map;options={history:"replace",scroll:!1,shallow:!0};timeMs=L.timeMs;transitions=new Set;resolvers=null;controller=null;lastFlushedAt=0;resetQueueOnNextPush=!1;push({key:e,query:t,options:r},n=L.timeMs){this.resetQueueOnNextPush&&(this.reset(),this.resetQueueOnNextPush=!1),l("[nuqs gtq] Enqueueing %s=%s %O",e,t,r),this.updateMap.set(e,t),r.history==="push"&&(this.options.history="push"),r.scroll&&(this.options.scroll=!0),r.shallow===!1&&(this.options.shallow=!1),r.startTransition&&this.transitions.add(r.startTransition),(!Number.isFinite(this.timeMs)||n>this.timeMs)&&(this.timeMs=n)}getQueuedQuery(e){return this.updateMap.get(e)}getPendingPromise({getSearchParamsSnapshot:e=re}){return this.resolvers?.promise??Promise.resolve(e())}flush({getSearchParamsSnapshot:e=re,rateLimitFactor:t=1,...r},n){if(this.controller??=new AbortController,!Number.isFinite(this.timeMs))return l("[nuqs gtq] Skipping flush due to throttleMs=Infinity"),Promise.resolve(e());if(this.resolvers)return this.resolvers.promise;this.resolvers=te();let s=()=>{this.lastFlushedAt=performance.now();let[i,h]=this.applyPendingUpdates({...r,autoResetQueueOnUpdate:r.autoResetQueueOnUpdate??!0,getSearchParamsSnapshot:e},n);h===null?(this.resolvers.resolve(i),this.resetQueueOnNextPush=!0):this.resolvers.reject(i),this.resolvers=null};return ee(()=>{let i=performance.now()-this.lastFlushedAt,h=this.timeMs,a=t*Math.max(0,h-i);l("[nuqs gtq] Scheduling flush in %f ms. Throttled at %f ms (x%f)",a,h,t),a===0?s():ee(s,a,this.controller.signal)},0,this.controller.signal),this.resolvers.promise}abort(){return this.controller?.abort(),this.controller=new AbortController,this.resolvers?.resolve(new URLSearchParams),this.resolvers=null,this.reset()}reset(){let e=Array.from(this.updateMap.keys());return l("[nuqs gtq] Resetting queue %s",JSON.stringify(Object.fromEntries(this.updateMap))),this.updateMap.clear(),this.transitions.clear(),this.options={history:"replace",scroll:!1,shallow:!0},this.timeMs=L.timeMs,e}applyPendingUpdates(e,t){let{updateUrl:r,getSearchParamsSnapshot:n}=e,s=n();if(l("[nuqs gtq] Applying %d pending update(s) on top of %s",this.updateMap.size,s.toString()),this.updateMap.size===0)return[s,null];let o=Array.from(this.updateMap.entries()),i={...this.options},h=Array.from(this.transitions);e.autoResetQueueOnUpdate&&this.reset(),l("[nuqs gtq] Flushing queue %O with options %O",o,i);for(let[a,c]of o)c===null?s.delete(a):s=Oe(c,a,s);t&&(s=t(s));try{return Be(h,()=>{r(s,i)}),[s,null]}catch(a){return console.error(N(429),o.map(([c])=>c).join(),a),[s,a]}}},I=new Ae;function He(e,t,r){let n=we(()=>{let o=Object.fromEntries(e.map(i=>[i,r(i)]));return[JSON.stringify(o),o]},[e.join(","),r]),s=ke(null);return s.current===null&&(s.current=n()),Ke(we(o=>{let i=e.map(h=>t(h,o));return()=>i.forEach(h=>h())},[e.join(","),t]),()=>{let[o,i]=n();return s.current[0]===o?s.current[1]:(s.current=[o,i],i)},()=>s.current[1])}var Ge=class{callback;resolvers=te();controller=new AbortController;queuedValue=void 0;constructor(e){this.callback=e}abort(){this.controller.abort(),this.queuedValue=void 0}push(e,t){return this.queuedValue=e,this.controller.abort(),this.controller=new AbortController,ee(()=>{let r=this.resolvers;try{l("[nuqs dq] Flushing debounce queue",e);let n=this.callback(e);l("[nuqs dq] Reset debounce queue %O",this.queuedValue),this.queuedValue=void 0,this.resolvers=te(),n.then(s=>r.resolve(s)).catch(s=>r.reject(s))}catch(n){this.queuedValue=void 0,r.reject(n)}},t,this.controller.signal),this.resolvers.promise}},Xe=class{throttleQueue;queues=new Map;queuedQuerySync=ne();constructor(e=new Ae){this.throttleQueue=e}useQueuedQueries(e){return He(e,(t,r)=>this.queuedQuerySync.on(t,r),t=>this.getQueuedQuery(t))}push(e,t,r){if(!Number.isFinite(t)){let o=r.getSearchParamsSnapshot??re;return Promise.resolve(o())}let n=e.key;if(!this.queues.has(n)){l("[nuqs dqc] Creating debounce queue for `%s`",n);let o=new Ge(i=>(this.throttleQueue.push(i),this.throttleQueue.flush(r).finally(()=>{this.queues.get(i.key)?.queuedValue===void 0&&(l("[nuqs dqc] Cleaning up empty queue for `%s`",i.key),this.queues.delete(i.key)),this.queuedQuerySync.emit(i.key)})));this.queues.set(n,o)}l("[nuqs dqc] Enqueueing debounce update %O",e);let s=this.queues.get(n).push(e,t);return this.queuedQuerySync.emit(n),s}abort(e){let t=this.queues.get(e);return t?(l("[nuqs dqc] Aborting debounce queue %s=%s",e,t.queuedValue?.query),this.queues.delete(e),t.abort(),this.queuedQuerySync.emit(e),r=>(r.then(t.resolvers.resolve,t.resolvers.reject),r)):r=>r}abortAll(){for(let[e,t]of this.queues.entries())l("[nuqs dqc] Aborting debounce queue %s=%s",e,t.queuedValue?.query),t.abort(),t.resolvers.resolve(new URLSearchParams),this.queuedQuerySync.emit(e);this.queues.clear()}getQueuedQuery(e){let t=this.queues.get(e)?.queuedValue?.query;return t!==void 0?t:this.throttleQueue.getQueuedQuery(e)}},z=new Xe(I);function xe(e,t){return e===t?!0:e===null||t===null||typeof e=="string"||typeof t=="string"||e.length!==t.length?!1:e.every((r,n)=>r===t[n])}import{useCallback as je,useEffect as Pe,useId as Ye,useMemo as se,useRef as Re,useState as Ze}from"react";function ue(e,t,r){try{return e(t)}catch(n){return ge("[nuqs] Error while parsing value `%s`: %O"+(r?" (for key `%s`)":""),t,n,r),null}}function O(e){function t(r){if(typeof r>"u")return null;let n="";if(Array.isArray(r)){if(r[0]===void 0)return null;n=r[0]}return typeof r=="string"&&(n=r),ue(e.parse,n)}return{type:"single",eq:(r,n)=>r===n,...e,parseServerSide:t,withDefault(r){return{...this,defaultValue:r,parseServerSide(n){return t(n)??r}}},withOptions(r){return{...this,...r}}}}var Ve=O({parse:e=>e,serialize:String}),zt=O({parse:e=>{let t=parseInt(e);return t==t?t:null},serialize:e=>""+Math.round(e)}),Ft=O({parse:e=>{let t=parseInt(e);return t==t?t-1:null},serialize:e=>""+Math.round(e+1)}),kt=O({parse:e=>{let t=parseInt(e,16);return t==t?t:null},serialize:e=>{let t=Math.round(e).toString(16);return(t.length&1?"0":"")+t}}),Kt=O({parse:e=>{let t=parseFloat(e);return t==t?t:null},serialize:String}),Wt=O({parse:e=>e.toLowerCase()==="true",serialize:String});function ae(e,t){return e.valueOf()===t.valueOf()}var Bt=O({parse:e=>{let t=parseInt(e);return t==t?new Date(t):null},serialize:e=>""+e.valueOf(),eq:ae}),Ht=O({parse:e=>{let t=new Date(e);return t.valueOf()==t.valueOf()?t:null},serialize:e=>e.toISOString(),eq:ae}),Gt=O({parse:e=>{let t=new Date(e.slice(0,10));return t.valueOf()==t.valueOf()?t:null},serialize:e=>e.toISOString().slice(0,10),eq:ae});function Ne(e,t=","){let r=e.eq??((s,o)=>s===o),n=encodeURIComponent(t);return O({parse:s=>s===""?[]:s.split(t).map((o,i)=>ue(e.parse,o.replaceAll(n,t),`[${i}]`)).filter(o=>o!=null),serialize:s=>s.map(o=>(e.serialize?e.serialize(o):String(o)).replaceAll(t,n)).join(t),eq(s,o){return s===o?!0:s.length!==o.length?!1:s.every((i,h)=>r(i,o[h]))}})}var oe=ne(),et={};function tt(e,t={}){let r=Ye(),n=ye(),s=be(),{history:o="replace",scroll:i=n?.scroll??!1,shallow:h=n?.shallow??!0,throttleMs:a=L.timeMs,limitUrlUpdates:c=n?.limitUrlUpdates,clearOnDefault:y=n?.clearOnDefault??!0,startTransition:S,urlKeys:w=et}=t,d=Object.keys(e).join(","),m=se(()=>Object.fromEntries(Object.keys(e).map(u=>[u,w[u]??u])),[d,JSON.stringify(w)]),R=Se(Object.values(m)),A=R.searchParams,U=Re({}),D=se(()=>Object.fromEntries(Object.keys(e).map(u=>[u,e[u].defaultValue??null])),[Object.values(e).map(({defaultValue:u})=>u).join(",")]),E=z.useQueuedQueries(Object.values(m)),[_,k]=Ze(()=>ie(e,w,A??new URLSearchParams,E).state),q=Re(_);if(l("[nuq+ %s `%s`] render - state: %O, iSP: %s",r,d,_,A),Object.keys(U.current).join("&")!==Object.values(m).join("&")){let{state:u,hasChanged:f}=ie(e,w,A,E,U.current,q.current);f&&(l("[nuq+ %s `%s`] State changed: %O",r,d,{state:u,initialSearchParams:A,queuedQueries:E,queryRef:U.current,stateRef:q.current}),q.current=u,k(u)),U.current=Object.fromEntries(Object.entries(m).map(([g,v])=>[v,e[g]?.type==="multi"?A?.getAll(v):A?.get(v)??null]))}Pe(()=>{let{state:u,hasChanged:f}=ie(e,w,A,E,U.current,q.current);f&&(l("[nuq+ %s `%s`] State changed: %O",r,d,{state:u,initialSearchParams:A,queuedQueries:E,queryRef:U.current,stateRef:q.current}),q.current=u,k(u))},[Object.values(m).map(u=>`${u}=${A?.getAll(u)}`).join("&"),JSON.stringify(E)]),Pe(()=>{let u=Object.keys(e).reduce((f,g)=>(f[g]=({state:v,query:J})=>{k(C=>{let{defaultValue:j}=e[g],Q=m[g],$=v??j??null,x=C[g]??j??null;return Object.is(x,$)?(l("[nuq+ %s `%s`] Cross-hook key sync %s: %O (default: %O). no change, skipping, resolved: %O",r,d,Q,v,j,q.current),C):(q.current={...q.current,[g]:$},U.current[Q]=J,l("[nuq+ %s `%s`] Cross-hook key sync %s: %O (default: %O). updateInternalState, resolved: %O",r,d,Q,v,j,q.current),q.current)})},f),{});for(let f of Object.keys(e)){let g=m[f];l("[nuq+ %s `%s`] Subscribing to sync for `%s`",r,g,d),oe.on(g,u[f])}return()=>{for(let f of Object.keys(e)){let g=m[f];l("[nuq+ %s `%s`] Unsubscribing to sync for `%s`",r,g,d),oe.off(g,u[f])}}},[d,m]);let Le=je((u,f={})=>{let g=Object.fromEntries(Object.keys(e).map(x=>[x,null])),v=typeof u=="function"?u(Ue(q.current,D))??g:u??g;l("[nuq+ %s `%s`] setState: %O",r,d,v);let J,C=0,j=!1,Q=[];for(let[x,P]of Object.entries(v)){let b=e[x],K=m[x];if(!b)continue;(f.clearOnDefault??b.clearOnDefault??y)&&P!==null&&b.defaultValue!==void 0&&(b.eq??((V,B)=>V===B))(P,b.defaultValue)&&(P=null);let fe=P===null?null:(b.serialize??String)(P);oe.emit(K,{state:P,query:fe});let W={key:K,query:fe,options:{history:f.history??b.history??o,shallow:f.shallow??b.shallow??h,scroll:f.scroll??b.scroll??i,startTransition:f.startTransition??b.startTransition??S}};if(f?.limitUrlUpdates?.method==="debounce"||c?.method==="debounce"||b.limitUrlUpdates?.method==="debounce"){W.options.shallow===!0&&console.warn(N(422));let V=f?.limitUrlUpdates?.timeMs??c?.timeMs??b.limitUrlUpdates?.timeMs??L.timeMs,B=z.push(W,V,R);C<V&&(J=B,C=V)}else{let V=f?.limitUrlUpdates?.timeMs??b?.limitUrlUpdates?.timeMs??c?.timeMs??f.throttleMs??b.throttleMs??a;Q.push(z.abort(K)),I.push(W,V),j=!0}}let $=Q.reduce((x,P)=>P(x),j?I.flush(R,s):I.getPendingPromise(R));return J??$},[d,o,h,i,a,c?.method,c?.timeMs,S,m,R.updateUrl,R.getSearchParamsSnapshot,R.rateLimitFactor,s,D]);return[se(()=>Ue(_,D),[_,D]),Le]}function ie(e,t,r,n,s,o){let i=!1,h=Object.entries(e).reduce((a,[c,y])=>{let S=t?.[c]??c,w=n[S],d=y.type==="multi"?[]:null,m=w===void 0?(y.type==="multi"?r?.getAll(S):r?.get(S))??d:w;return s&&o&&xe(s[S]??d,m)?(a[c]=o[c]??null,a):(i=!0,a[c]=(ve(m)?null:ue(y.parse,m,S))??null,s&&(s[S]=m),a)},{});if(!i){let a=Object.keys(e),c=Object.keys(o??{});i=a.length!==c.length||a.some(y=>!c.includes(y))}return{state:h,hasChanged:i}}function Ue(e,t){return Object.fromEntries(Object.keys(e).map(r=>[r,e[r]??t[r]??null]))}function ce(e,t={}){let{parse:r,type:n,serialize:s,eq:o,defaultValue:i,...h}=t,[{[e]:a},c]=tt({[e]:{parse:r??(y=>y),type:n,serialize:s,eq:o,defaultValue:i}},h);return[a,je((y,S={})=>c(w=>({[e]:typeof y=="function"?y(w[e]):y}),S),[e,c])]}import{useMemo as le}from"react";function Ee(){return p.exportParams?this.source:this}String.prototype.source=void 0,String.prototype.toJSON=Ee,String.prototype.bindSource=function(e){let t=new String(this);return t.source=e,t},Array.prototype.toJSON||(Array.prototype.toJSON=Ee),Array.prototype.bindSource||(Array.prototype.bindSource=function(e){return this.source=e,this});var rt=(e,t)=>{let[r,n]=ce(e,{defaultValue:t});return[le(()=>p.current?r.bindSource(M(e,"searchString","",t)):r,[e,r]),n]},nt=(e,t=[],r=",")=>{let n=le(()=>t,[]),[s,o]=ce(e,Ne(Ve,r).withDefault(n));return[le(()=>p.current?s.bindSource(M(e,"searchArray",r,t)):s,[e,s]),o]},M=(e,t,r,n)=>`@JV[[${JSON.stringify({key:e,type:t,separator:r,def:n})}]]`;import{createContext as st}from"react";var F=st({deps:[],children:void 0});var it=(e,t="")=>{let{deps:r}=ot(F),n=Qe(()=>location.pathname.split("/")[e+1]??t,r||[]);return Qe(()=>p.current?n.bindSource(M(e.toString(),"paramsIndex","",t)):n,[n])};import{useContext as ut,useMemo as Te}from"react";var at=()=>{let{deps:e}=ut(F),t=Te(()=>location.search.substring(1),e||[]);return Te(()=>p.current?t.bindSource(M("","search","","")):t,[t])};var ct=({name:e,props:t,children:r})=>p.current?`<custom>${JSON.stringify({name:e,props:t})}<custom>`:r;export{ct as Custom,De as real,it as useParamsIndex,at as useSearch,nt as useSearchArray,rt as useSearchValue,Ie as useServerState};
|
|
1
|
+
export { useServerState } from './src/front/server-state/useServerState.js';
|
|
2
|
+
export { real } from './src/front/server-state/real.js';
|
|
3
|
+
export { useParamsIndex } from './src/front/url/params/useParamsIndex.js';
|
|
4
|
+
export { useSearchArray, useSearchValue } from './src/front/url/search/useSearchValue.js';
|
|
5
|
+
export { useSearch } from './src/front/url/search/useSearch.js';
|
|
6
|
+
export { Custom } from './src/front/wrapper/Custom.js';
|
|
@@ -4,9 +4,11 @@ import { useLocation } from 'react-router-dom';
|
|
|
4
4
|
import { JinraiContext } from '../JinraiContext.js';
|
|
5
5
|
|
|
6
6
|
const Adapter = (props) => {
|
|
7
|
-
|
|
7
|
+
// useLocation требует, чтобы компонент был внутри RouterProvider
|
|
8
|
+
// NuqsAdapter должен быть установлен на верхнем уровне, но может работать внутри роутера
|
|
9
|
+
// для React Router v6 адаптера
|
|
8
10
|
const { pathname } = useLocation();
|
|
9
|
-
return (jsx(NuqsAdapter, { children: jsx(JinraiContext.Provider, { value: { deps: [...(props.deps ?? [],
|
|
11
|
+
return (jsx(NuqsAdapter, { children: jsx(JinraiContext.Provider, { value: { deps: [...(props.deps ?? []), pathname] }, ...props }) }));
|
|
10
12
|
};
|
|
11
13
|
|
|
12
14
|
export { Adapter };
|
|
@@ -4,8 +4,11 @@ import { useLocation } from 'react-router-dom';
|
|
|
4
4
|
import { JinraiContext } from '../JinraiContext.js';
|
|
5
5
|
|
|
6
6
|
const Adapter = (props) => {
|
|
7
|
+
// useLocation требует, чтобы компонент был внутри RouterProvider
|
|
8
|
+
// NuqsAdapter должен быть установлен на верхнем уровне, но может работать внутри роутера
|
|
9
|
+
// для React Router v7 адаптера
|
|
7
10
|
const { pathname } = useLocation();
|
|
8
|
-
return (jsx(NuqsAdapter, { children: jsx(JinraiContext.Provider, { value: { deps: [...(props.deps ?? [],
|
|
11
|
+
return (jsx(NuqsAdapter, { children: jsx(JinraiContext.Provider, { value: { deps: [...(props.deps ?? []), pathname] }, ...props }) }));
|
|
9
12
|
};
|
|
10
13
|
|
|
11
14
|
export { Adapter };
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jinrai",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"description": "A powerful library that analyzes your modern web application and automatically generates a perfectly rendered, static snapshot of its pages. Experience unparalleled loading speed and SEO clarity without the complexity of traditional SSR setups. Simply point Jinrai at your SPA and witness divine speed.",
|
|
5
5
|
"main": "lib/index.ts",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"test": "vitest",
|
|
8
8
|
"dev": "nodemon --watch './src' --watch './vite' --ext 'ts' --exec \"npm run build\"",
|
|
9
|
-
"build": "npm run build-
|
|
9
|
+
"build": "npm run build-config && npm run build-index && npm run build-plugin && npm run build:types && npm run build-plugin-config && npm run build-front",
|
|
10
10
|
"build:types": "tsc",
|
|
11
11
|
"build-index": "npx esbuild index.ts --bundle --platform=node --format=esm --outfile=lib/index.js --external:jiti --external:node:* --external:playwright --external:react --minify",
|
|
12
12
|
"build-plugin-config": "npx esbuild config.ts --bundle --platform=node --format=esm --outfile=lib/config/config.js --external:jiti --external:node:* --external:playwright --external:react --minify",
|
|
@@ -37,17 +37,15 @@
|
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@types/prettier": "^2.7.3",
|
|
39
39
|
"jiti": "^2.6.0",
|
|
40
|
-
"nuqs": "^2.0.0",
|
|
41
40
|
"ora": "^9.0.0",
|
|
42
41
|
"playwright": "^1.55.1",
|
|
43
42
|
"prettier": "^3.6.2"
|
|
44
43
|
},
|
|
45
44
|
"peerDependencies": {
|
|
46
|
-
"@types/react": "^18.0.0 || ^19.0.0",
|
|
47
|
-
"nuqs": "^2.0.0",
|
|
48
45
|
"react": "^18.0.0 || ^19.0.0",
|
|
49
46
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
50
|
-
"react-router-dom": "^6.0.0"
|
|
47
|
+
"react-router-dom": "^6.0.0",
|
|
48
|
+
"nuqs": "^2.0.0"
|
|
51
49
|
},
|
|
52
50
|
"exports": {
|
|
53
51
|
".": {
|
package/rollup.front.config.mjs
CHANGED
|
@@ -24,6 +24,11 @@ const entryPoints = [
|
|
|
24
24
|
]
|
|
25
25
|
|
|
26
26
|
const isExternal = (id) => {
|
|
27
|
+
// важно: nuqs, react и т.п. всегда должны оставаться внешними зависимостями
|
|
28
|
+
if (id === "nuqs" || id.startsWith("nuqs/")) {
|
|
29
|
+
return true
|
|
30
|
+
}
|
|
31
|
+
|
|
27
32
|
if (id.startsWith(".") || path.isAbsolute(id)) {
|
|
28
33
|
return false
|
|
29
34
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import React from "react"
|
|
1
2
|
import { NuqsAdapter } from "nuqs/adapters/react-router/v6"
|
|
2
3
|
|
|
3
4
|
// @ts-ignore
|
|
@@ -5,12 +6,14 @@ import { useLocation } from "react-router-dom"
|
|
|
5
6
|
import { JinraiContext, JinraiProps } from "../JinraiContext"
|
|
6
7
|
|
|
7
8
|
export const Adapter = (props: JinraiProps) => {
|
|
8
|
-
|
|
9
|
+
// useLocation требует, чтобы компонент был внутри RouterProvider
|
|
10
|
+
// NuqsAdapter должен быть установлен на верхнем уровне, но может работать внутри роутера
|
|
11
|
+
// для React Router v6 адаптера
|
|
9
12
|
const { pathname } = useLocation()
|
|
10
13
|
|
|
11
14
|
return (
|
|
12
15
|
<NuqsAdapter>
|
|
13
|
-
<JinraiContext.Provider value={{ deps: [...(props.deps ?? [],
|
|
16
|
+
<JinraiContext.Provider value={{ deps: [...(props.deps ?? []), pathname] }} {...props} />
|
|
14
17
|
</NuqsAdapter>
|
|
15
18
|
)
|
|
16
19
|
}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from "react"
|
|
2
2
|
import { NuqsAdapter } from "nuqs/adapters/react-router/v7"
|
|
3
3
|
// @ts-ignore
|
|
4
4
|
import { useLocation } from "react-router-dom"
|
|
5
5
|
import { JinraiContext, JinraiProps } from "../JinraiContext"
|
|
6
6
|
|
|
7
7
|
export const Adapter = (props: JinraiProps) => {
|
|
8
|
+
// useLocation требует, чтобы компонент был внутри RouterProvider
|
|
9
|
+
// NuqsAdapter должен быть установлен на верхнем уровне, но может работать внутри роутера
|
|
10
|
+
// для React Router v7 адаптера
|
|
8
11
|
const { pathname } = useLocation()
|
|
9
12
|
|
|
10
13
|
return (
|
|
11
14
|
<NuqsAdapter>
|
|
12
|
-
<JinraiContext.Provider value={{ deps: [...(props.deps ?? [],
|
|
15
|
+
<JinraiContext.Provider value={{ deps: [...(props.deps ?? []), pathname] }} {...props} />
|
|
13
16
|
</NuqsAdapter>
|
|
14
17
|
)
|
|
15
18
|
}
|