@nosto/search-js 2.1.1 → 2.1.3

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.
Files changed (32) hide show
  1. package/dist/{InfiniteScrollWithObserver-BC15p357.cjs → InfiniteScrollWithObserver-BOtsS3zB.cjs} +1 -1
  2. package/dist/{InfiniteScrollWithObserver-_SDx8g70.js → InfiniteScrollWithObserver-D47sKLiT.js} +1 -1
  3. package/dist/{isEqual-DvCrFxWE.js → isEqual-BzZ3d1JM.js} +2 -2
  4. package/dist/preact/autocomplete.es.js +1 -1
  5. package/dist/preact/category.es.js +1 -1
  6. package/dist/preact/common.cjs.js +1 -1
  7. package/dist/preact/common.es.js +3 -3
  8. package/dist/preact/hooks.cjs.js +1 -1
  9. package/dist/preact/hooks.es.js +6 -6
  10. package/dist/preact/legacy.cjs.js +1 -1
  11. package/dist/preact/legacy.es.js +2 -2
  12. package/dist/preact/serp.cjs.js +1 -1
  13. package/dist/preact/serp.es.js +8 -8
  14. package/dist/preact/src/api/types.d.ts +1 -1
  15. package/dist/preact/src/config/pages/category/config.d.ts +0 -10
  16. package/dist/preact/src/config/pages/serp/config.d.ts +2 -2
  17. package/dist/{storeContext-hvRuqxMT.js → storeContext-jWZFJ8Kf.js} +7 -7
  18. package/dist/useLoadMore-BbcvS5k5.js +261 -0
  19. package/dist/useLoadMore-VMNS8y7r.cjs +1 -0
  20. package/dist/utils/src/deepMerge.d.ts +3 -0
  21. package/dist/utils/src/isEqual.d.ts +3 -0
  22. package/dist/utils/src/isPlainObject.d.ts +3 -0
  23. package/dist/utils/src/mergeArrays.d.ts +3 -0
  24. package/dist/utils/src/parseNumber.d.ts +3 -0
  25. package/dist/utils/src/performance.d.ts +3 -0
  26. package/dist/utils/src/unique.d.ts +3 -0
  27. package/dist/utils/utils.cjs.js +1 -1
  28. package/dist/utils/utils.d.ts +1 -1
  29. package/dist/utils/utils.es.js +12 -13
  30. package/package.json +1 -1
  31. package/dist/useLoadMore-SWC243j-.js +0 -261
  32. package/dist/useLoadMore-wwYzUkxk.cjs +0 -1
@@ -1 +1 @@
1
- "use strict";const l=require("./jsxRuntime.module-B3sGoTIU.cjs"),p=require("./useLoadMore-wwYzUkxk.cjs"),a=require("./pick-rYi1lc2m.cjs"),d=require("preact/hooks"),b=require("preact");function f(s,i){var o,e,r;const t=((o=i.products)==null?void 0:o.total)??0,c=((e=s.products)==null?void 0:e.from)??0,n=((r=s.products)==null?void 0:r.size)??0;return t>0&&t>c+n}function h(){return!!(window.IntersectionObserver&&window.IntersectionObserverEntry&&"intersectionRatio"in window.IntersectionObserverEntry.prototype)}function O({children:s,pageSize:i}){const t=d.useRef(null),{query:c,response:n}=p.useNostoAppState(e=>a.pick(e,"query","response")),{loadMore:o}=p.useLoadMore(i);return d.useEffect(()=>{let e,r;return f(c,n)&&(e=t.current,r=new IntersectionObserver(v=>{const u=v[0];u!=null&&u.isIntersecting&&o()}),e&&r.observe(e)),()=>{e&&r.unobserve(e)}},[n]),l.u(b.Fragment,{children:[s,l.u("div",{ref:t,style:{height:"1px"}})]})}exports.InfiniteScrollWithObserver=O;exports.hasMoreResults=f;exports.intersectionObserverSupported=h;
1
+ "use strict";const l=require("./jsxRuntime.module-B3sGoTIU.cjs"),p=require("./useLoadMore-VMNS8y7r.cjs"),a=require("./pick-rYi1lc2m.cjs"),d=require("preact/hooks"),b=require("preact");function f(s,i){var o,e,r;const t=((o=i.products)==null?void 0:o.total)??0,c=((e=s.products)==null?void 0:e.from)??0,n=((r=s.products)==null?void 0:r.size)??0;return t>0&&t>c+n}function h(){return!!(window.IntersectionObserver&&window.IntersectionObserverEntry&&"intersectionRatio"in window.IntersectionObserverEntry.prototype)}function O({children:s,pageSize:i}){const t=d.useRef(null),{query:c,response:n}=p.useNostoAppState(e=>a.pick(e,"query","response")),{loadMore:o}=p.useLoadMore(i);return d.useEffect(()=>{let e,r;return f(c,n)&&(e=t.current,r=new IntersectionObserver(v=>{const u=v[0];u!=null&&u.isIntersecting&&o()}),e&&r.observe(e)),()=>{e&&r.unobserve(e)}},[n]),l.u(b.Fragment,{children:[s,l.u("div",{ref:t,style:{height:"1px"}})]})}exports.InfiniteScrollWithObserver=O;exports.hasMoreResults=f;exports.intersectionObserverSupported=h;
@@ -1,5 +1,5 @@
1
1
  import { u as f } from "./jsxRuntime.module-Bzuv3cXw.js";
2
- import { u as a, a as l } from "./useLoadMore-SWC243j-.js";
2
+ import { u as a, a as l } from "./useLoadMore-BbcvS5k5.js";
3
3
  import { p as d } from "./pick-DReBictn.js";
4
4
  import { useRef as m, useEffect as v } from "preact/hooks";
5
5
  import { Fragment as b } from "preact";
@@ -34,8 +34,8 @@ function f(e, r) {
34
34
  return !1;
35
35
  }
36
36
  export {
37
- o as a,
38
- i as b,
37
+ i as a,
38
+ o as b,
39
39
  a as d,
40
40
  f as i
41
41
  };
@@ -2,7 +2,7 @@ import { s as u } from "../index.es-B8mbAxS4.js";
2
2
  import { cloneElement as a } from "preact";
3
3
  import { r as s, i as c } from "../renderHeadless-BteGML1G.js";
4
4
  import { u as n } from "../jsxRuntime.module-Bzuv3cXw.js";
5
- import { c as l, S as m, C as f } from "../storeContext-hvRuqxMT.js";
5
+ import { c as l, S as m, C as f } from "../storeContext-jWZFJ8Kf.js";
6
6
  import { d as C, u as g } from "../baseConfig-C_tlTx1w.js";
7
7
  function E(t) {
8
8
  return t !== null && typeof t == "object" && "props" in t && typeof t.type == "string";
@@ -1,5 +1,5 @@
1
1
  import { u as t } from "../jsxRuntime.module-Bzuv3cXw.js";
2
- import { c as n, S as c, C as i } from "../storeContext-hvRuqxMT.js";
2
+ import { c as n, S as c, C as i } from "../storeContext-jWZFJ8Kf.js";
3
3
  import { d as s, u as f } from "../baseConfig-C_tlTx1w.js";
4
4
  const C = {
5
5
  ...s,
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("../unique-CGVAnKZy.cjs"),t=require("../jsxRuntime.module-B3sGoTIU.cjs"),s=require("../useLoadMore-wwYzUkxk.cjs"),p=require("../pick-rYi1lc2m.cjs"),n=require("../InfiniteScrollWithObserver-BC15p357.cjs"),q=require("preact"),r=require("../storeContext-DVs7r6Qm.cjs");function b({pageSize:o}){const{loadMore:e}=s.useLoadMore(o);return t.u("button",{onClick:e,children:"More results"})}function u({children:o,loadMoreComponent:e,pageSize:i}){const{loading:c,query:l,response:a}=s.useNostoAppState(S=>p.pick(S,"loading","query","response")),d=!c&&n.hasMoreResults(l,a);return t.u(q.Fragment,{children:[o,d&&(e?t.u(e,{pageSize:i}):t.u(b,{pageSize:i}))]})}const M=!f.isBot()&&n.intersectionObserverSupported()?n.InfiniteScrollWithObserver:u;exports.StoreContext=r.StoreContext;exports.createExtendableStore=r.createExtendableStore;exports.createStore=r.createStore;exports.defaultState=r.defaultState;exports.InfiniteScroll=M;exports.InfiniteScrollWithLink=u;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("../unique-CGVAnKZy.cjs"),t=require("../jsxRuntime.module-B3sGoTIU.cjs"),s=require("../useLoadMore-VMNS8y7r.cjs"),p=require("../pick-rYi1lc2m.cjs"),n=require("../InfiniteScrollWithObserver-BOtsS3zB.cjs"),q=require("preact"),r=require("../storeContext-DVs7r6Qm.cjs");function b({pageSize:o}){const{loadMore:e}=s.useLoadMore(o);return t.u("button",{onClick:e,children:"More results"})}function u({children:o,loadMoreComponent:e,pageSize:i}){const{loading:c,query:l,response:a}=s.useNostoAppState(S=>p.pick(S,"loading","query","response")),d=!c&&n.hasMoreResults(l,a);return t.u(q.Fragment,{children:[o,d&&(e?t.u(e,{pageSize:i}):t.u(b,{pageSize:i}))]})}const M=!f.isBot()&&n.intersectionObserverSupported()?n.InfiniteScrollWithObserver:u;exports.StoreContext=r.StoreContext;exports.createExtendableStore=r.createExtendableStore;exports.createStore=r.createStore;exports.defaultState=r.defaultState;exports.InfiniteScroll=M;exports.InfiniteScrollWithLink=u;
@@ -1,10 +1,10 @@
1
1
  import { i as l } from "../unique-Dwtu7vXB.js";
2
2
  import { u as r } from "../jsxRuntime.module-Bzuv3cXw.js";
3
- import { a as p, u as m } from "../useLoadMore-SWC243j-.js";
3
+ import { a as p, u as m } from "../useLoadMore-BbcvS5k5.js";
4
4
  import { p as u } from "../pick-DReBictn.js";
5
- import { h as d, i as f, I as S } from "../InfiniteScrollWithObserver-_SDx8g70.js";
5
+ import { h as d, i as f, I as S } from "../InfiniteScrollWithObserver-D47sKLiT.js";
6
6
  import { Fragment as h } from "preact";
7
- import { S as O, a as W, c as A, d as B } from "../storeContext-hvRuqxMT.js";
7
+ import { S as O, a as W, c as A, d as B } from "../storeContext-jWZFJ8Kf.js";
8
8
  function M({ pageSize: e }) {
9
9
  const { loadMore: o } = p(e);
10
10
  return /* @__PURE__ */ r("button", { onClick: o, children: "More results" });
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("../useLoadMore-wwYzUkxk.cjs"),P=require("../isEqual-DQXR__da.cjs"),v=require("preact/hooks"),q=require("../index.es-DlUp67LT.cjs"),N=require("../parseNumber-FsZ8w61u.cjs");function C(e){const o=m.useNostoAppState(t=>t.response);return e&&Array.isArray(e)||e&&P.isPlainObject(e)?e:o}function z(e){var a;const o=((a=e.data)==null?void 0:a.filter(c=>c.selected).length)??0,[t,n]=v.useState(o>0),{toggleProductFilter:u}=m.useActions();return{active:t,selectedFiltersCount:o,toggleActive:()=>{n(!t)},toggleProductFilter:u}}function x(){const{loading:e,facets:o}=m.useNostoAppState(t=>{var n,u;return{loading:t.loading,facets:((u=(n=t.response)==null?void 0:n.products)==null?void 0:u.facets)??[]}});return{loading:e,facets:o}}function k(e,o){const t=o-e;return!isNaN(t)&&t>0?new Array(o-e).fill(void 0).map((n,u)=>u+e):[]}function w(e){const{query:o,products:t}=m.useNostoAppState(n=>({query:n.query,products:n.response.products}));return v.useMemo(()=>{var F;if(!t)return{totalPages:0,resultsFrom:0,resultsTo:0,pages:[]};const n=((F=o.products)==null?void 0:F.from)??0,u=(e==null?void 0:e.width)??1/0,i=Math.max(Math.floor(u-1)/2,1),a=t.size>0?Math.floor(n/t.size)+1:1,c=t.size>0?Math.ceil(t.total/t.size):0,g=A=>A>=a-i&&A<=a+i,s=n+1,l=Math.min(n+t.total,t.total),r={from:n,page:a,current:!0},p=A=>({from:(A-1)*t.size,page:A,current:A===a}),S=a>1?p(a-1):void 0,d=a<c?p(a+1):void 0,y=i===1/0||a-i-1>1?p(1):void 0,f=i===1/0||a+i+1<c?p(c):void 0,h=k(1,c+1).filter(g).map(p);return{totalPages:c,resultsFrom:s,resultsTo:l,current:r,prev:S,next:d,first:y,last:f,pages:h}},[o,t,e==null?void 0:e.width])}function T(){const[e,o]=v.useState([]),[t,n]=v.useState([]);return v.useEffect(()=>{q.s(async u=>{const{products:i,segments:a}=await u.getSearchSessionParams();o(a??[]),n((i==null?void 0:i.personalizationBoost)??[])})},[]),{segments:e,boost:t}}function B(){const{facets:e}=m.useNostoAppState(s=>{var l;return{facets:((l=s.response.products)==null?void 0:l.facets)??[]}}),{replaceFilter:o,toggleProductFilter:t}=m.useActions(),n=v.useCallback(s=>{const l=e==null?void 0:e.find(r=>r.type==="stats"&&r.field===s);if(l&&"min"in l&&"max"in l)return l},[e]),u=v.useCallback(s=>{var l;return((l=e==null?void 0:e.find(r=>r.field===s))==null?void 0:l.name)??s},[e]),i=v.useCallback(s=>"field"in s&&(s.value instanceof Array||s.range instanceof Array),[]),a=v.useCallback(s=>{var l;return{...s,range:(l=s.range)==null?void 0:l.map(r=>({gt:r.gt?Number(r.gt):r.gt,gte:r.gte?Number(r.gte):r.gte,lt:r.lt?Number(r.lt):r.lt,lte:r.lte?Number(r.lte):r.lte}))}},[]),c=v.useCallback(s=>(s.value??[]).map(r=>({value:r,field:s.field,name:u(s.field),filter:a(s),remove:()=>{t(s.field,r,!1)}})),[a,u,t]),g=v.useCallback(s=>(s.range??[]).map(r=>{var d,y;const p=r.gte??r.gt??((d=n(s.field))==null?void 0:d.min),S=r.lte??r.lt??((y=n(s.field))==null?void 0:y.max);if(p!==void 0&&S!==void 0)return{value:`${p} - ${S}`,field:s.field,name:u(s.field),filter:a(s),remove:()=>{o(s.field,void 0)}}}).filter(Boolean),[a,n,u,o]);return{selectFilters:i,toValueFilter:c,toRangeFilter:g}}function M(){const{filter:e}=m.useNostoAppState(c=>{var g;return{filter:((g=c.query.products)==null?void 0:g.filter)??[]}}),{updateSearch:o}=m.useActions(),{selectFilters:t,toValueFilter:n,toRangeFilter:u}=B(),i=v.useMemo(()=>e?e.filter(t).flatMap(c=>"value"in c?n(c):"range"in c?u(c):[]).filter(Boolean):[],[e,t,u,n]),a=v.useCallback(()=>{o({products:{filter:[]}})},[o]);return{filters:i,removeAll:a}}function R(e){var r,p,S;const{replaceFilter:o}=m.useActions(),{query:t,products:n}=m.useNostoAppState(d=>({query:d.query,products:d.response.products})),u=(r=n==null?void 0:n.facets)==null?void 0:r.find(d=>d.id===e);if(!u)return{min:0,max:0,range:[0,0],updateRange:()=>{}};const i=(S=(p=t.products)==null?void 0:p.filter)==null?void 0:S.find(d=>d.field===u.field),a=i!=null&&i.range?i.range[0]:void 0,c=typeof a=="object"&&("gte"in a||"lte"in a)?[N.parseNumber(a.gte),N.parseNumber(a.lte)]:[void 0,void 0],g="min"in u?Math.floor(u.min):0,s="max"in u?Math.ceil(u.max):0,l=([d,y])=>{const f=d!==void 0?Math.floor(d):void 0,h=y!==void 0?Math.ceil(y):void 0,F=f!==void 0,A=h!==void 0;(g===f||!F)&&(s===h||!A)?o(u.field,void 0):(g===f||!F)&&A?o(u.field,{lte:h.toString()}):(s===h||!A)&&F?o(u.field,{gte:f.toString()}):F&&A&&o(u.field,{gte:f.toString(),lte:h.toString()})};return{min:g,max:s,range:[c[0]??g,c[1]??s],updateRange:l}}function D(e,o){const{min:t,max:n,range:u,updateRange:i}=R(e),{filters:a}=M(),c=v.useMemo(()=>{var y;const r=a.find(f=>{var h;return(h=f==null?void 0:f.filter)==null?void 0:h.range});let p=null;if(r){const f=(y=r.filter.range)==null?void 0:y[0];p=[N.parseNumber(f==null?void 0:f.gte),N.parseNumber(f==null?void 0:f.lte)]}const S=[];let d=Math.floor(t/o)*o;for(;d<n;){const f=d+o,h=p&&p[0]===d&&p[1]===f;S.push({min:d,max:f,selected:h}),d=f}return S},[a,t,n,o]),g=r=>{i([r,u[1]])},s=r=>{i([u[0],r])},l=t!==u[0]||n!==u[1];return{min:t,max:n,range:u,updateRange:i,ranges:c,handleMinChange:g,handleMaxChange:s,isSelected:l}}function j(){const{products:e,keywords:o}=m.useNostoAppState(t=>t.response);return{products:e??{hits:[],total:0},keywords:o??{hits:[],total:0}}}function I(){const e=m.useNostoAppState(t=>{var n;return(n=t.query.products)==null?void 0:n.filter});return v.useMemo(()=>e?e.reduce((t,n)=>t+(Array.isArray(n.value)?n.value.length:1),0):0,[e])}function b(e){return e&&!Number.isNaN(e)?e:0}function L(e,o){const{from:t,size:n,total:u}=m.useNostoAppState(s=>{var l,r,p,S,d;return{from:b(((l=s.query.products)==null?void 0:l.from)??0),size:b(((p=(r=s.response)==null?void 0:r.products)==null?void 0:p.size)??0),total:b(((d=(S=s.response)==null?void 0:S.products)==null?void 0:d.total)??0)}}),{updateSearch:i}=m.useActions(),a=t+n,c=[...e].reverse().filter(s=>s+o<u);return{from:t,to:a,total:u,size:n,sizeOptions:c,handleSizeChange:s=>{i({products:{size:s}})}}}function O(e,o){return e.length!==o.length?!1:e.every(t=>o.find(n=>t.field===n.field&&t.order===n.order))}function V(e){var i,a;const o=m.useNostoAppState(c=>c.query),{updateSearch:t}=m.useActions();return{activeSort:((i=e.find(c=>{var g;return O(c.value.sort,((g=o.products)==null?void 0:g.sort)||[])}))==null?void 0:i.id)??((a=e[0])==null?void 0:a.id),setSort:c=>{const g=e.find(s=>s.id===c);g&&t({products:{sort:g.value.sort}})}}}exports.useActions=m.useActions;exports.useLoadMore=m.useLoadMore;exports.useNostoAppState=m.useNostoAppState;exports.useDecoratedSearchResults=C;exports.useFacet=z;exports.useFacets=x;exports.usePagination=w;exports.usePersonalization=T;exports.useProductFilters=M;exports.useRange=R;exports.useRangeSelector=D;exports.useResponse=j;exports.useSelectedFiltersCount=I;exports.useSizeOptions=L;exports.useSort=V;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("../useLoadMore-VMNS8y7r.cjs"),P=require("../isEqual-DQXR__da.cjs"),v=require("preact/hooks"),q=require("../index.es-DlUp67LT.cjs"),N=require("../parseNumber-FsZ8w61u.cjs");function C(e){const o=m.useNostoAppState(t=>t.response);return e&&Array.isArray(e)||e&&P.isPlainObject(e)?e:o}function z(e){var a;const o=((a=e.data)==null?void 0:a.filter(c=>c.selected).length)??0,[t,n]=v.useState(o>0),{toggleProductFilter:u}=m.useActions();return{active:t,selectedFiltersCount:o,toggleActive:()=>{n(!t)},toggleProductFilter:u}}function x(){const{loading:e,facets:o}=m.useNostoAppState(t=>{var n,u;return{loading:t.loading,facets:((u=(n=t.response)==null?void 0:n.products)==null?void 0:u.facets)??[]}});return{loading:e,facets:o}}function k(e,o){const t=o-e;return!isNaN(t)&&t>0?new Array(o-e).fill(void 0).map((n,u)=>u+e):[]}function w(e){const{query:o,products:t}=m.useNostoAppState(n=>({query:n.query,products:n.response.products}));return v.useMemo(()=>{var F;if(!t)return{totalPages:0,resultsFrom:0,resultsTo:0,pages:[]};const n=((F=o.products)==null?void 0:F.from)??0,u=(e==null?void 0:e.width)??1/0,i=Math.max(Math.floor(u-1)/2,1),a=t.size>0?Math.floor(n/t.size)+1:1,c=t.size>0?Math.ceil(t.total/t.size):0,g=A=>A>=a-i&&A<=a+i,s=n+1,l=Math.min(n+t.total,t.total),r={from:n,page:a,current:!0},p=A=>({from:(A-1)*t.size,page:A,current:A===a}),S=a>1?p(a-1):void 0,d=a<c?p(a+1):void 0,y=i===1/0||a-i-1>1?p(1):void 0,f=i===1/0||a+i+1<c?p(c):void 0,h=k(1,c+1).filter(g).map(p);return{totalPages:c,resultsFrom:s,resultsTo:l,current:r,prev:S,next:d,first:y,last:f,pages:h}},[o,t,e==null?void 0:e.width])}function T(){const[e,o]=v.useState([]),[t,n]=v.useState([]);return v.useEffect(()=>{q.s(async u=>{const{products:i,segments:a}=await u.getSearchSessionParams();o(a??[]),n((i==null?void 0:i.personalizationBoost)??[])})},[]),{segments:e,boost:t}}function B(){const{facets:e}=m.useNostoAppState(s=>{var l;return{facets:((l=s.response.products)==null?void 0:l.facets)??[]}}),{replaceFilter:o,toggleProductFilter:t}=m.useActions(),n=v.useCallback(s=>{const l=e==null?void 0:e.find(r=>r.type==="stats"&&r.field===s);if(l&&"min"in l&&"max"in l)return l},[e]),u=v.useCallback(s=>{var l;return((l=e==null?void 0:e.find(r=>r.field===s))==null?void 0:l.name)??s},[e]),i=v.useCallback(s=>"field"in s&&(s.value instanceof Array||s.range instanceof Array),[]),a=v.useCallback(s=>{var l;return{...s,range:(l=s.range)==null?void 0:l.map(r=>({gt:r.gt?Number(r.gt):r.gt,gte:r.gte?Number(r.gte):r.gte,lt:r.lt?Number(r.lt):r.lt,lte:r.lte?Number(r.lte):r.lte}))}},[]),c=v.useCallback(s=>(s.value??[]).map(r=>({value:r,field:s.field,name:u(s.field),filter:a(s),remove:()=>{t(s.field,r,!1)}})),[a,u,t]),g=v.useCallback(s=>(s.range??[]).map(r=>{var d,y;const p=r.gte??r.gt??((d=n(s.field))==null?void 0:d.min),S=r.lte??r.lt??((y=n(s.field))==null?void 0:y.max);if(p!==void 0&&S!==void 0)return{value:`${p} - ${S}`,field:s.field,name:u(s.field),filter:a(s),remove:()=>{o(s.field,void 0)}}}).filter(Boolean),[a,n,u,o]);return{selectFilters:i,toValueFilter:c,toRangeFilter:g}}function M(){const{filter:e}=m.useNostoAppState(c=>{var g;return{filter:((g=c.query.products)==null?void 0:g.filter)??[]}}),{updateSearch:o}=m.useActions(),{selectFilters:t,toValueFilter:n,toRangeFilter:u}=B(),i=v.useMemo(()=>e?e.filter(t).flatMap(c=>"value"in c?n(c):"range"in c?u(c):[]).filter(Boolean):[],[e,t,u,n]),a=v.useCallback(()=>{o({products:{filter:[]}})},[o]);return{filters:i,removeAll:a}}function R(e){var r,p,S;const{replaceFilter:o}=m.useActions(),{query:t,products:n}=m.useNostoAppState(d=>({query:d.query,products:d.response.products})),u=(r=n==null?void 0:n.facets)==null?void 0:r.find(d=>d.id===e);if(!u)return{min:0,max:0,range:[0,0],updateRange:()=>{}};const i=(S=(p=t.products)==null?void 0:p.filter)==null?void 0:S.find(d=>d.field===u.field),a=i!=null&&i.range?i.range[0]:void 0,c=typeof a=="object"&&("gte"in a||"lte"in a)?[N.parseNumber(a.gte),N.parseNumber(a.lte)]:[void 0,void 0],g="min"in u?Math.floor(u.min):0,s="max"in u?Math.ceil(u.max):0,l=([d,y])=>{const f=d!==void 0?Math.floor(d):void 0,h=y!==void 0?Math.ceil(y):void 0,F=f!==void 0,A=h!==void 0;(g===f||!F)&&(s===h||!A)?o(u.field,void 0):(g===f||!F)&&A?o(u.field,{lte:h.toString()}):(s===h||!A)&&F?o(u.field,{gte:f.toString()}):F&&A&&o(u.field,{gte:f.toString(),lte:h.toString()})};return{min:g,max:s,range:[c[0]??g,c[1]??s],updateRange:l}}function D(e,o){const{min:t,max:n,range:u,updateRange:i}=R(e),{filters:a}=M(),c=v.useMemo(()=>{var y;const r=a.find(f=>{var h;return(h=f==null?void 0:f.filter)==null?void 0:h.range});let p=null;if(r){const f=(y=r.filter.range)==null?void 0:y[0];p=[N.parseNumber(f==null?void 0:f.gte),N.parseNumber(f==null?void 0:f.lte)]}const S=[];let d=Math.floor(t/o)*o;for(;d<n;){const f=d+o,h=p&&p[0]===d&&p[1]===f;S.push({min:d,max:f,selected:h}),d=f}return S},[a,t,n,o]),g=r=>{i([r,u[1]])},s=r=>{i([u[0],r])},l=t!==u[0]||n!==u[1];return{min:t,max:n,range:u,updateRange:i,ranges:c,handleMinChange:g,handleMaxChange:s,isSelected:l}}function j(){const{products:e,keywords:o}=m.useNostoAppState(t=>t.response);return{products:e??{hits:[],total:0},keywords:o??{hits:[],total:0}}}function I(){const e=m.useNostoAppState(t=>{var n;return(n=t.query.products)==null?void 0:n.filter});return v.useMemo(()=>e?e.reduce((t,n)=>t+(Array.isArray(n.value)?n.value.length:1),0):0,[e])}function b(e){return e&&!Number.isNaN(e)?e:0}function L(e,o){const{from:t,size:n,total:u}=m.useNostoAppState(s=>{var l,r,p,S,d;return{from:b(((l=s.query.products)==null?void 0:l.from)??0),size:b(((p=(r=s.response)==null?void 0:r.products)==null?void 0:p.size)??0),total:b(((d=(S=s.response)==null?void 0:S.products)==null?void 0:d.total)??0)}}),{updateSearch:i}=m.useActions(),a=t+n,c=[...e].reverse().filter(s=>s+o<u);return{from:t,to:a,total:u,size:n,sizeOptions:c,handleSizeChange:s=>{i({products:{size:s}})}}}function O(e,o){return e.length!==o.length?!1:e.every(t=>o.find(n=>t.field===n.field&&t.order===n.order))}function V(e){var i,a;const o=m.useNostoAppState(c=>c.query),{updateSearch:t}=m.useActions();return{activeSort:((i=e.find(c=>{var g;return O(c.value.sort,((g=o.products)==null?void 0:g.sort)||[])}))==null?void 0:i.id)??((a=e[0])==null?void 0:a.id),setSort:c=>{const g=e.find(s=>s.id===c);g&&t({products:{sort:g.value.sort}})}}}exports.useActions=m.useActions;exports.useLoadMore=m.useLoadMore;exports.useNostoAppState=m.useNostoAppState;exports.useDecoratedSearchResults=C;exports.useFacet=z;exports.useFacets=x;exports.usePagination=w;exports.usePersonalization=T;exports.useProductFilters=M;exports.useRange=R;exports.useRangeSelector=D;exports.useResponse=j;exports.useSelectedFiltersCount=I;exports.useSizeOptions=L;exports.useSort=V;
@@ -1,12 +1,12 @@
1
- import { u as F, b as R } from "../useLoadMore-SWC243j-.js";
2
- import { a as Y } from "../useLoadMore-SWC243j-.js";
3
- import { b } from "../isEqual-DvCrFxWE.js";
4
- import { useState as P, useMemo as z, useEffect as N, useCallback as M } from "preact/hooks";
1
+ import { u as F, b as R } from "../useLoadMore-BbcvS5k5.js";
2
+ import { a as Y } from "../useLoadMore-BbcvS5k5.js";
3
+ import { a as N } from "../isEqual-BzZ3d1JM.js";
4
+ import { useState as P, useMemo as z, useEffect as b, useCallback as M } from "preact/hooks";
5
5
  import { s as q } from "../index.es-B8mbAxS4.js";
6
6
  import { p as x } from "../parseNumber-QA48nJLp.js";
7
7
  function E(e) {
8
8
  const o = F((t) => t.response);
9
- return e && Array.isArray(e) || e && b(e) ? e : o;
9
+ return e && Array.isArray(e) || e && N(e) ? e : o;
10
10
  }
11
11
  function L(e) {
12
12
  var c;
@@ -81,7 +81,7 @@ function U(e) {
81
81
  }
82
82
  function _() {
83
83
  const [e, o] = P([]), [t, r] = P([]);
84
- return N(() => {
84
+ return b(() => {
85
85
  q(async (i) => {
86
86
  const { products: a, segments: c } = await i.getSearchSessionParams();
87
87
  o(c ?? []), r((a == null ? void 0 : a.personalizationBoost) ?? []);
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../InfiniteScrollWithObserver-BC15p357.cjs"),r=require("../useLoadMore-wwYzUkxk.cjs");exports.InfiniteScrollWithObserver=e.InfiniteScrollWithObserver;exports.intersectionObserverSupported=e.intersectionObserverSupported;exports.getNextPageQuery=r.getNextPageQuery;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../InfiniteScrollWithObserver-BOtsS3zB.cjs"),r=require("../useLoadMore-VMNS8y7r.cjs");exports.InfiniteScrollWithObserver=e.InfiniteScrollWithObserver;exports.intersectionObserverSupported=e.intersectionObserverSupported;exports.getNextPageQuery=r.getNextPageQuery;
@@ -1,5 +1,5 @@
1
- import { I as t, i as o } from "../InfiniteScrollWithObserver-_SDx8g70.js";
2
- import { g as s } from "../useLoadMore-SWC243j-.js";
1
+ import { I as t, i as o } from "../InfiniteScrollWithObserver-D47sKLiT.js";
2
+ import { g as s } from "../useLoadMore-BbcvS5k5.js";
3
3
  export {
4
4
  t as InfiniteScrollWithObserver,
5
5
  s as getNextPageQuery,
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("../index.es-DlUp67LT.cjs"),s=require("../storeContext-DVs7r6Qm.cjs"),S=require("../renderHeadless-xhkLegO4.cjs"),i=require("../jsxRuntime.module-B3sGoTIU.cjs"),a=require("../baseConfig-DEAGSRSp.cjs"),g="nosto:search:scrollPos";function d(){window.sessionStorage.setItem(g,window.scrollY.toString())}function C({children:e,hit:r,onClick:t}){const{pageType:o}=s.useConfig(),c=o==="autocomplete"?void 0:o;return S.renderHeadless({children:e,updateElement:(n,u)=>(u.depth>0||(n.props={...n.props,onClick:l=>{r&&c&&f.s(p=>p.recordSearchClick(c,r)),d(),typeof t=="function"&&t(l)}}),n)})}const m={...a.defaultBaseConfig,persistentSearchCache:!1,preservePageScroll:!1};function P(e={}){return{pageType:"serp",...m,...e}}function h({config:e,store:r,children:t}){const o=r??s.createStore();return a.useCheckClientScript(),i.u(s.ConfigContext,{value:P(e),children:i.u(s.StoreContext,{value:o,children:t})})}exports.SearchPageProvider=h;exports.SerpElement=C;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("../index.es-DlUp67LT.cjs"),s=require("../storeContext-DVs7r6Qm.cjs"),S=require("../renderHeadless-xhkLegO4.cjs"),a=require("../jsxRuntime.module-B3sGoTIU.cjs"),i=require("../baseConfig-DEAGSRSp.cjs"),g="nosto:search:scrollPos";function d(){window.sessionStorage.setItem(g,window.scrollY.toString())}function C({children:e,hit:t,onClick:o}){const{pageType:r}=s.useConfig(),c=r==="autocomplete"?void 0:r==="search"?"serp":r;return S.renderHeadless({children:e,updateElement:(n,u)=>(u.depth>0||(n.props={...n.props,onClick:l=>{t&&c&&f.s(p=>p.recordSearchClick(c,t)),d(),typeof o=="function"&&o(l)}}),n)})}const h={...i.defaultBaseConfig,persistentSearchCache:!1,preservePageScroll:!1};function m(e={}){return{pageType:"search",...h,...e}}function P({config:e,store:t,children:o}){const r=t??s.createStore();return i.useCheckClientScript(),a.u(s.ConfigContext,{value:m(e),children:a.u(s.StoreContext,{value:r,children:o})})}exports.SearchPageProvider=P;exports.SerpElement=C;
@@ -1,5 +1,5 @@
1
1
  import { s as l } from "../index.es-B8mbAxS4.js";
2
- import { u as f, c as u, S, C as m } from "../storeContext-hvRuqxMT.js";
2
+ import { u as f, c as u, S, C as m } from "../storeContext-jWZFJ8Kf.js";
3
3
  import { r as g } from "../renderHeadless-BteGML1G.js";
4
4
  import { u as n } from "../jsxRuntime.module-Bzuv3cXw.js";
5
5
  import { d as C, u as d } from "../baseConfig-C_tlTx1w.js";
@@ -7,14 +7,14 @@ const h = "nosto:search:scrollPos";
7
7
  function P() {
8
8
  window.sessionStorage.setItem(h, window.scrollY.toString());
9
9
  }
10
- function B({ children: e, hit: r, onClick: o }) {
11
- const { pageType: t } = f(), a = t === "autocomplete" ? void 0 : t;
10
+ function B({ children: e, hit: o, onClick: t }) {
11
+ const { pageType: r } = f(), a = r === "autocomplete" ? void 0 : r === "search" ? "serp" : r;
12
12
  return g({
13
13
  children: e,
14
14
  updateElement: (s, c) => (c.depth > 0 || (s.props = {
15
15
  ...s.props,
16
16
  onClick: (i) => {
17
- r && a && l((p) => p.recordSearchClick(a, r)), P(), typeof o == "function" && o(i);
17
+ o && a && l((p) => p.recordSearchClick(a, o)), P(), typeof t == "function" && t(i);
18
18
  }
19
19
  }), s)
20
20
  });
@@ -26,14 +26,14 @@ const k = {
26
26
  };
27
27
  function w(e = {}) {
28
28
  return {
29
- pageType: "serp",
29
+ pageType: "search",
30
30
  ...k,
31
31
  ...e
32
32
  };
33
33
  }
34
- function H({ config: e, store: r, children: o }) {
35
- const t = r ?? u();
36
- return d(), /* @__PURE__ */ n(m, { value: w(e), children: /* @__PURE__ */ n(S, { value: t, children: o }) });
34
+ function H({ config: e, store: o, children: t }) {
35
+ const r = o ?? u();
36
+ return d(), /* @__PURE__ */ n(m, { value: w(e), children: /* @__PURE__ */ n(S, { value: r, children: t }) });
37
37
  }
38
38
  export {
39
39
  H as SearchPageProvider,
@@ -1,4 +1,4 @@
1
1
  import { SearchQuery } from '@nosto/nosto-js/client';
2
- export type PageType = "serp" | "category" | "autocomplete";
2
+ export type PageType = "search" | "category" | "autocomplete";
3
3
  export type MaybeProvider<T> = T | (() => T);
4
4
  export type QueryProvider = MaybeProvider<Partial<SearchQuery>>;
@@ -7,14 +7,6 @@ export declare const defaultCategoryConfig: {
7
7
  };
8
8
  export interface CategoryConfig extends BaseConfig {
9
9
  pageType: "category";
10
- /**
11
- * returns current category id
12
- */
13
- categoryId: () => string;
14
- /**
15
- * returns current category path
16
- */
17
- categoryPath: () => string;
18
10
  /**
19
11
  * Enable persistent caching for search results.
20
12
  *
@@ -34,8 +26,6 @@ export interface CategoryConfig extends BaseConfig {
34
26
  export type PublicCategoryConfig = Omit<CategoryConfig, keyof typeof defaultCategoryConfig | "pageType"> & Partial<Pick<CategoryConfig, keyof typeof defaultCategoryConfig>>;
35
27
  export declare function makeCategoryConfig(config: PublicCategoryConfig): {
36
28
  search?: import('../../../../../core/src/types').SearchOptions | undefined;
37
- categoryId: () => string;
38
- categoryPath: () => string;
39
29
  defaultCurrency: string;
40
30
  queryModifications: (query: import('@nosto/nosto-js/client').SearchQuery, pageType: import('../../../api/types').PageType | undefined) => import('@nosto/nosto-js/client').SearchQuery;
41
31
  persistentSearchCache: boolean;
@@ -6,7 +6,7 @@ export declare const defaultSerpConfig: {
6
6
  queryModifications: (query: import('@nosto/nosto-js/client').SearchQuery) => import('@nosto/nosto-js/client').SearchQuery;
7
7
  };
8
8
  export interface SerpConfig extends BaseConfig {
9
- pageType: "serp";
9
+ pageType: "search";
10
10
  /**
11
11
  * Enable persistent caching for search results.
12
12
  *
@@ -30,5 +30,5 @@ export declare function makeSerpConfig(config?: PublicSerpConfig): {
30
30
  queryModifications: (query: import('@nosto/nosto-js/client').SearchQuery, pageType: import('../../../api/types').PageType | undefined) => import('@nosto/nosto-js/client').SearchQuery;
31
31
  persistentSearchCache: boolean;
32
32
  preservePageScroll: boolean;
33
- pageType: "serp";
33
+ pageType: "search";
34
34
  };
@@ -1,13 +1,13 @@
1
1
  import { createContext as c } from "preact";
2
2
  import { useContext as x } from "preact/hooks";
3
- import { a as u, i as h } from "./isEqual-DvCrFxWE.js";
4
- const w = c(null), v = () => {
5
- const t = x(w);
3
+ import { b as u, i as h } from "./isEqual-BzZ3d1JM.js";
4
+ const b = c(null), v = () => {
5
+ const t = x(b);
6
6
  if (!t)
7
7
  throw new Error("useConfig must be used within a ConfigProvider");
8
8
  return t;
9
9
  };
10
- function b(t, i = {}) {
10
+ function w(t, i = {}) {
11
11
  const a = /* @__PURE__ */ new Map();
12
12
  let o = u(t, i ?? {});
13
13
  const f = u(t, i);
@@ -50,13 +50,13 @@ const E = {
50
50
  initialized: !1
51
51
  };
52
52
  function q(t = {}) {
53
- return b(E, t);
53
+ return w(E, t);
54
54
  }
55
55
  const y = c(q());
56
56
  export {
57
- w as C,
57
+ b as C,
58
58
  y as S,
59
- b as a,
59
+ w as a,
60
60
  q as c,
61
61
  E as d,
62
62
  v as u
@@ -0,0 +1,261 @@
1
+ import { u as v, S as w } from "./storeContext-jWZFJ8Kf.js";
2
+ import { useContext as C, useMemo as M, useCallback as g, useState as T, useEffect as A } from "preact/hooks";
3
+ import { s as R } from "./search-B0-bVNMy.js";
4
+ import { u as N, a as f, m as Q, i as E } from "./unique-Dwtu7vXB.js";
5
+ import { i as b, d as p } from "./isEqual-BzZ3d1JM.js";
6
+ function U(e, r) {
7
+ return {
8
+ ...r,
9
+ products: {
10
+ facets: e === "autocomplete" ? void 0 : ["*"],
11
+ fields: V,
12
+ ...r.products
13
+ },
14
+ ...r.keywords ? {
15
+ keywords: {
16
+ ...r.keywords,
17
+ fields: N([...K, ...r.keywords.fields ?? []]),
18
+ highlight: r.keywords.highlight ?? {
19
+ preTag: "<strong>",
20
+ postTag: "</strong>"
21
+ }
22
+ }
23
+ } : {}
24
+ };
25
+ }
26
+ const V = [
27
+ "productId",
28
+ "url",
29
+ "name",
30
+ "imageUrl",
31
+ "imageHash",
32
+ "thumbUrl",
33
+ "description",
34
+ "brand",
35
+ "variantId",
36
+ "availability",
37
+ "price",
38
+ "priceText",
39
+ "categoryIds",
40
+ "categories",
41
+ "customFields.key",
42
+ "customFields.value",
43
+ "priceCurrencyCode",
44
+ "datePublished",
45
+ "listPrice",
46
+ "unitPricingBaseMeasure",
47
+ "unitPricingUnit",
48
+ "unitPricingMeasure",
49
+ "googleCategory",
50
+ "gtin",
51
+ "ageGroup",
52
+ "gender",
53
+ "condition",
54
+ "alternateImageUrls",
55
+ "ratingValue",
56
+ "reviewCount",
57
+ "inventoryLevel",
58
+ "skus.id",
59
+ "skus.name",
60
+ "skus.price",
61
+ "skus.listPrice",
62
+ "skus.priceText",
63
+ "skus.url",
64
+ "skus.imageUrl",
65
+ "skus.inventoryLevel",
66
+ "skus.customFields.key",
67
+ "skus.customFields.value",
68
+ "skus.availability",
69
+ "pid",
70
+ "onDiscount",
71
+ "extra.key",
72
+ "extra.value",
73
+ "saleable",
74
+ "available",
75
+ "tags1",
76
+ "tags2",
77
+ "tags3"
78
+ ], K = ["keyword", "_redirect"];
79
+ function O(e, r, t) {
80
+ const s = JSON.stringify(r);
81
+ try {
82
+ console.info("Setting storage", e, s), t.setItem(e, s);
83
+ } catch (o) {
84
+ console.warn(o);
85
+ }
86
+ }
87
+ function z(e, r) {
88
+ try {
89
+ const t = r.getItem(e);
90
+ if (t)
91
+ return JSON.parse(t);
92
+ } catch (t) {
93
+ console.warn(t);
94
+ }
95
+ }
96
+ function D(e, r) {
97
+ O(e, r, sessionStorage);
98
+ }
99
+ function L(e) {
100
+ return z(e, sessionStorage);
101
+ }
102
+ const P = "nosto:search:searchResult";
103
+ function _(e, r, t) {
104
+ if (!e)
105
+ return;
106
+ D(P, { query: r, result: t });
107
+ }
108
+ function j(e, r) {
109
+ if (!e)
110
+ return null;
111
+ const t = L(P);
112
+ if (!t || !B(t))
113
+ return null;
114
+ const s = k(t.query);
115
+ return b(k(r), s) ? t.result : null;
116
+ }
117
+ function k(e) {
118
+ return {
119
+ accountId: e.accountId,
120
+ customRules: e.customRules,
121
+ explain: e.explain,
122
+ keywords: e.keywords,
123
+ products: e.products,
124
+ query: e.query,
125
+ redirect: e.redirect,
126
+ rules: e.rules,
127
+ segments: e.segments,
128
+ sessionParams: e.sessionParams
129
+ };
130
+ }
131
+ function B(e) {
132
+ return typeof e == "object" && e !== null && "query" in e && "result" in e;
133
+ }
134
+ async function F(e, r, t) {
135
+ var u, y, h;
136
+ const s = f("newSearch"), o = e.config.pageType, c = o === "search" ? "serp" : o, n = p(e.store.getInitialState().query, r), a = p(e.config.search, t, {
137
+ track: c,
138
+ redirect: o !== "autocomplete",
139
+ isKeyword: !!(t != null && t.isKeyword)
140
+ });
141
+ e.store.updateState({
142
+ query: n,
143
+ loading: !0,
144
+ initialized: !0
145
+ });
146
+ const i = o !== "autocomplete" && e.config.persistentSearchCache, l = e.config.queryModifications(
147
+ {
148
+ ...n,
149
+ products: {
150
+ ...n.products,
151
+ // Apply filter merging to avoid overwriting base filters
152
+ filter: Q((y = (u = e.store.getInitialState().query) == null ? void 0 : u.products) == null ? void 0 : y.filter, (h = r.products) == null ? void 0 : h.filter)
153
+ }
154
+ },
155
+ o
156
+ );
157
+ try {
158
+ let d;
159
+ const S = j(i, l);
160
+ if (S)
161
+ d = S;
162
+ else {
163
+ const I = U(o, l);
164
+ d = await R(I, a), _(i, l, d);
165
+ }
166
+ e.store.updateState({
167
+ response: d,
168
+ loading: !1
169
+ });
170
+ } catch (d) {
171
+ console.error("Search action failed", d);
172
+ }
173
+ s();
174
+ }
175
+ async function m(e, r, t) {
176
+ const s = f("updateSearch"), o = p(e.store.getState().query, { products: { from: 0 } }, r);
177
+ await F(e, o, t), s();
178
+ }
179
+ async function G(e, r, t) {
180
+ var n;
181
+ const s = f("replaceFilter"), o = (n = e.store.getState().query.products) == null ? void 0 : n.filter, c = t !== void 0 ? [{ field: r, [typeof t == "object" ? "range" : "value"]: [t] }] : [];
182
+ await m(e, {
183
+ products: {
184
+ filter: [...(o == null ? void 0 : o.filter((a) => a.field !== r)) ?? [], ...c]
185
+ }
186
+ }), s();
187
+ }
188
+ async function J(e, r, t, s) {
189
+ var i, l;
190
+ const o = f("toggleProductFilter"), c = (i = e.store.getState().query.products) == null ? void 0 : i.filter, n = c == null ? void 0 : c.find((u) => u.value instanceof Array && u.field === r), a = n != null && n.value ? {
191
+ ...n,
192
+ value: [...n.value.filter((u) => !b(u, t)), ...s ? [t] : []]
193
+ } : s ? {
194
+ field: r,
195
+ value: [t]
196
+ } : void 0;
197
+ await m(e, {
198
+ products: {
199
+ filter: [...(c == null ? void 0 : c.filter((u) => u !== n)) ?? [], ...(l = a == null ? void 0 : a.value) != null && l.length ? [a] : []]
200
+ }
201
+ }), o();
202
+ }
203
+ function q() {
204
+ const e = v(), r = C(w), t = M(
205
+ () => ({
206
+ config: e,
207
+ store: r
208
+ }),
209
+ [e, r]
210
+ ), s = g(
211
+ (a, i) => F(t, a, i),
212
+ [t]
213
+ ), o = g(
214
+ (a, i) => m(t, a, i),
215
+ [t]
216
+ ), c = g(
217
+ (a, i, l) => J(t, a, i, l),
218
+ [t]
219
+ ), n = g(
220
+ (a, i) => G(t, a, i),
221
+ [t]
222
+ );
223
+ return {
224
+ newSearch: s,
225
+ updateSearch: o,
226
+ toggleProductFilter: c,
227
+ replaceFilter: n
228
+ };
229
+ }
230
+ function x(e = H) {
231
+ const r = C(w), [t, s] = T(e(r.getState()));
232
+ return r.onChange(e, s), A(() => () => r.clearOnChange(s), [r]), t;
233
+ }
234
+ const H = (e) => e;
235
+ function W({ from: e, size: r, pageSize: t }) {
236
+ return E() ? {
237
+ products: { from: e + t }
238
+ } : {
239
+ products: { size: r + t }
240
+ };
241
+ }
242
+ function te(e = 24) {
243
+ const { from: r, size: t } = x((c) => {
244
+ var n, a;
245
+ return {
246
+ from: ((n = c.query.products) == null ? void 0 : n.from) ?? 0,
247
+ size: ((a = c.query.products) == null ? void 0 : a.size) ?? 0
248
+ };
249
+ }), { updateSearch: s } = q();
250
+ return {
251
+ loadMore: g(async () => {
252
+ await s(W({ from: r, size: t, pageSize: e }));
253
+ }, [r, t, e, s])
254
+ };
255
+ }
256
+ export {
257
+ te as a,
258
+ q as b,
259
+ W as g,
260
+ x as u
261
+ };
@@ -0,0 +1 @@
1
+ "use strict";const y=require("./storeContext-DVs7r6Qm.cjs"),i=require("preact/hooks"),M=require("./search-BVJZK90N.cjs"),g=require("./unique-CGVAnKZy.cjs"),p=require("./isEqual-DQXR__da.cjs");function q(e,r){return{...r,products:{facets:e==="autocomplete"?void 0:["*"],fields:A,...r.products},...r.keywords?{keywords:{...r.keywords,fields:g.unique([...N,...r.keywords.fields??[]]),highlight:r.keywords.highlight??{preTag:"<strong>",postTag:"</strong>"}}}:{}}}const A=["productId","url","name","imageUrl","imageHash","thumbUrl","description","brand","variantId","availability","price","priceText","categoryIds","categories","customFields.key","customFields.value","priceCurrencyCode","datePublished","listPrice","unitPricingBaseMeasure","unitPricingUnit","unitPricingMeasure","googleCategory","gtin","ageGroup","gender","condition","alternateImageUrls","ratingValue","reviewCount","inventoryLevel","skus.id","skus.name","skus.price","skus.listPrice","skus.priceText","skus.url","skus.imageUrl","skus.inventoryLevel","skus.customFields.key","skus.customFields.value","skus.availability","pid","onDiscount","extra.key","extra.value","saleable","available","tags1","tags2","tags3"],N=["keyword","_redirect"];function T(e,r,t){const s=JSON.stringify(r);try{console.info("Setting storage",e,s),t.setItem(e,s)}catch(o){console.warn(o)}}function E(e,r){try{const t=r.getItem(e);if(t)return JSON.parse(t)}catch(t){console.warn(t)}}function Q(e,r){T(e,r,sessionStorage)}function R(e){return E(e,sessionStorage)}const w="nosto:search:searchResult";function U(e,r,t){if(!e)return;Q(w,{query:r,result:t})}function V(e,r){if(!e)return null;const t=R(w);if(!t||!x(t))return null;const s=C(t.query);return p.isEqual(C(r),s)?t.result:null}function C(e){return{accountId:e.accountId,customRules:e.customRules,explain:e.explain,keywords:e.keywords,products:e.products,query:e.query,redirect:e.redirect,rules:e.rules,segments:e.segments,sessionParams:e.sessionParams}}function x(e){return typeof e=="object"&&e!==null&&"query"in e&&"result"in e}async function b(e,r,t){var l,S,m;const s=g.measure("newSearch"),o=e.config.pageType,c=o==="search"?"serp":o,n=p.deepMerge(e.store.getInitialState().query,r),a=p.deepMerge(e.config.search,t,{track:c,redirect:o!=="autocomplete",isKeyword:!!(t!=null&&t.isKeyword)});e.store.updateState({query:n,loading:!0,initialized:!0});const u=o!=="autocomplete"&&e.config.persistentSearchCache,d=e.config.queryModifications({...n,products:{...n.products,filter:g.mergeArrays((S=(l=e.store.getInitialState().query)==null?void 0:l.products)==null?void 0:S.filter,(m=r.products)==null?void 0:m.filter)}},o);try{let f;const k=V(u,d);if(k)f=k;else{const v=q(o,d);f=await M.search(v,a),U(u,d,f)}e.store.updateState({response:f,loading:!1})}catch(f){console.error("Search action failed",f)}s()}async function h(e,r,t){const s=g.measure("updateSearch"),o=p.deepMerge(e.store.getState().query,{products:{from:0}},r);await b(e,o,t),s()}async function K(e,r,t){var n;const s=g.measure("replaceFilter"),o=(n=e.store.getState().query.products)==null?void 0:n.filter,c=t!==void 0?[{field:r,[typeof t=="object"?"range":"value"]:[t]}]:[];await h(e,{products:{filter:[...(o==null?void 0:o.filter(a=>a.field!==r))??[],...c]}}),s()}async function L(e,r,t,s){var u,d;const o=g.measure("toggleProductFilter"),c=(u=e.store.getState().query.products)==null?void 0:u.filter,n=c==null?void 0:c.find(l=>l.value instanceof Array&&l.field===r),a=n!=null&&n.value?{...n,value:[...n.value.filter(l=>!p.isEqual(l,t)),...s?[t]:[]]}:s?{field:r,value:[t]}:void 0;await h(e,{products:{filter:[...(c==null?void 0:c.filter(l=>l!==n))??[],...(d=a==null?void 0:a.value)!=null&&d.length?[a]:[]]}}),o()}function P(){const e=y.useConfig(),r=i.useContext(y.StoreContext),t=i.useMemo(()=>({config:e,store:r}),[e,r]),s=i.useCallback((a,u)=>b(t,a,u),[t]),o=i.useCallback((a,u)=>h(t,a,u),[t]),c=i.useCallback((a,u,d)=>L(t,a,u,d),[t]),n=i.useCallback((a,u)=>K(t,a,u),[t]);return{newSearch:s,updateSearch:o,toggleProductFilter:c,replaceFilter:n}}function F(e=O){const r=i.useContext(y.StoreContext),[t,s]=i.useState(e(r.getState()));return r.onChange(e,s),i.useEffect(()=>()=>r.clearOnChange(s),[r]),t}const O=e=>e;function I({from:e,size:r,pageSize:t}){return g.isBot()?{products:{from:e+t}}:{products:{size:r+t}}}function z(e=24){const{from:r,size:t}=F(c=>{var n,a;return{from:((n=c.query.products)==null?void 0:n.from)??0,size:((a=c.query.products)==null?void 0:a.size)??0}}),{updateSearch:s}=P();return{loadMore:i.useCallback(async()=>{await s(I({from:r,size:t,pageSize:e}))},[r,t,e,s])}}exports.getNextPageQuery=I;exports.useActions=P;exports.useLoadMore=z;exports.useNostoAppState=F;
@@ -1,5 +1,8 @@
1
1
  import { Simplify } from './simplify';
2
2
  import { Equals, Expect } from './types';
3
+ /**
4
+ * Merges multiple objects into one object.
5
+ */
3
6
  export declare function deepMerge<T extends unknown[]>(...objects: T): Merge<T>;
4
7
  export declare function deepMergePlain<T extends unknown[]>(...objects: T): PlainMerge<T>;
5
8
  type Merge<T, U = unknown> = Simplify<PlainMerge<T, U>>;
@@ -1 +1,4 @@
1
+ /**
2
+ * Compares two values for equality.
3
+ */
1
4
  export declare function isEqual(a: unknown, b: unknown): boolean;
@@ -1 +1,4 @@
1
+ /**
2
+ * Checks if a value is a plain object.
3
+ */
1
4
  export declare function isPlainObject<T = Record<string, unknown>>(value: unknown): value is T;
@@ -1,2 +1,5 @@
1
1
  import { Unfreeze } from './types';
2
+ /**
3
+ * Merges multiple arrays into one array.
4
+ */
2
5
  export declare function mergeArrays<T extends (unknown[] | readonly unknown[] | undefined | null)[]>(...objects: T): Unfreeze<T>[number];
@@ -1 +1,4 @@
1
+ /**
2
+ * Takes a value and returns it as a number if possible.
3
+ */
1
4
  export declare function parseNumber(value: unknown): number | undefined;
@@ -1 +1,4 @@
1
+ /**
2
+ * Measure the performance of a function.
3
+ */
1
4
  export declare function measure(name: string): () => void;
@@ -1 +1,4 @@
1
+ /**
2
+ * This function takes an array and returns a new array with only unique values.
3
+ */
1
4
  export declare function unique<T>(arr: T[]): T[];
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../isEqual-DQXR__da.cjs"),r=require("../unique-CGVAnKZy.cjs"),i=require("../parseNumber-FsZ8w61u.cjs"),u=require("../pick-rYi1lc2m.cjs");exports.deepMerge=e.deepMerge;exports.deepMergePlain=e.deepMergePlain;exports.isEqual=e.isEqual;exports.isPlainObject=e.isPlainObject;exports.isBot=r.isBot;exports.measure=r.measure;exports.mergeArrays=r.mergeArrays;exports.unique=r.unique;exports.parseNumber=i.parseNumber;exports.pick=u.pick;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../isEqual-DQXR__da.cjs"),e=require("../unique-CGVAnKZy.cjs"),i=require("../parseNumber-FsZ8w61u.cjs"),u=require("../pick-rYi1lc2m.cjs");exports.deepMerge=r.deepMerge;exports.isEqual=r.isEqual;exports.isPlainObject=r.isPlainObject;exports.isBot=e.isBot;exports.measure=e.measure;exports.mergeArrays=e.mergeArrays;exports.unique=e.unique;exports.parseNumber=i.parseNumber;exports.pick=u.pick;
@@ -1,5 +1,5 @@
1
1
  /** @module utils */
2
- export { deepMerge, deepMergePlain, type MergeTests } from './src/deepMerge';
2
+ export { deepMerge, type MergeTests } from './src/deepMerge';
3
3
  export { isBot } from './src/isBot';
4
4
  export { isEqual } from './src/isEqual';
5
5
  export { isPlainObject } from './src/isPlainObject';
@@ -1,16 +1,15 @@
1
- import { d as r, a as s, i as p, b as i } from "../isEqual-DvCrFxWE.js";
2
- import { i as m, a as t, m as u, u as f } from "../unique-Dwtu7vXB.js";
3
- import { p as b } from "../parseNumber-QA48nJLp.js";
4
- import { p as g } from "../pick-DReBictn.js";
1
+ import { d as r, i as s, a as o } from "../isEqual-BzZ3d1JM.js";
2
+ import { i, a as m, m as t, u } from "../unique-Dwtu7vXB.js";
3
+ import { p as x } from "../parseNumber-QA48nJLp.js";
4
+ import { p as c } from "../pick-DReBictn.js";
5
5
  export {
6
6
  r as deepMerge,
7
- s as deepMergePlain,
8
- m as isBot,
9
- p as isEqual,
10
- i as isPlainObject,
11
- t as measure,
12
- u as mergeArrays,
13
- b as parseNumber,
14
- g as pick,
15
- f as unique
7
+ i as isBot,
8
+ s as isEqual,
9
+ o as isPlainObject,
10
+ m as measure,
11
+ t as mergeArrays,
12
+ x as parseNumber,
13
+ c as pick,
14
+ u as unique
16
15
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nosto/search-js",
3
- "version": "2.1.1",
3
+ "version": "2.1.3",
4
4
  "license": "ISC",
5
5
  "type": "module",
6
6
  "files": [
@@ -1,261 +0,0 @@
1
- import { u as I, S as k } from "./storeContext-hvRuqxMT.js";
2
- import { useContext as w, useMemo as v, useCallback as g, useState as M, useEffect as T } from "preact/hooks";
3
- import { s as A } from "./search-B0-bVNMy.js";
4
- import { u as R, a as f, m as N, i as Q } from "./unique-Dwtu7vXB.js";
5
- import { i as C, d as p } from "./isEqual-DvCrFxWE.js";
6
- function E(e, r) {
7
- return {
8
- ...r,
9
- products: {
10
- facets: e === "autocomplete" ? void 0 : ["*"],
11
- fields: U,
12
- ...r.products
13
- },
14
- ...r.keywords ? {
15
- keywords: {
16
- ...r.keywords,
17
- fields: R([...V, ...r.keywords.fields ?? []]),
18
- highlight: r.keywords.highlight ?? {
19
- preTag: "<strong>",
20
- postTag: "</strong>"
21
- }
22
- }
23
- } : {}
24
- };
25
- }
26
- const U = [
27
- "productId",
28
- "url",
29
- "name",
30
- "imageUrl",
31
- "imageHash",
32
- "thumbUrl",
33
- "description",
34
- "brand",
35
- "variantId",
36
- "availability",
37
- "price",
38
- "priceText",
39
- "categoryIds",
40
- "categories",
41
- "customFields.key",
42
- "customFields.value",
43
- "priceCurrencyCode",
44
- "datePublished",
45
- "listPrice",
46
- "unitPricingBaseMeasure",
47
- "unitPricingUnit",
48
- "unitPricingMeasure",
49
- "googleCategory",
50
- "gtin",
51
- "ageGroup",
52
- "gender",
53
- "condition",
54
- "alternateImageUrls",
55
- "ratingValue",
56
- "reviewCount",
57
- "inventoryLevel",
58
- "skus.id",
59
- "skus.name",
60
- "skus.price",
61
- "skus.listPrice",
62
- "skus.priceText",
63
- "skus.url",
64
- "skus.imageUrl",
65
- "skus.inventoryLevel",
66
- "skus.customFields.key",
67
- "skus.customFields.value",
68
- "skus.availability",
69
- "pid",
70
- "onDiscount",
71
- "extra.key",
72
- "extra.value",
73
- "saleable",
74
- "available",
75
- "tags1",
76
- "tags2",
77
- "tags3"
78
- ], V = ["keyword", "_redirect"];
79
- function K(e, r, t) {
80
- const s = JSON.stringify(r);
81
- try {
82
- console.info("Setting storage", e, s), t.setItem(e, s);
83
- } catch (a) {
84
- console.warn(a);
85
- }
86
- }
87
- function O(e, r) {
88
- try {
89
- const t = r.getItem(e);
90
- if (t)
91
- return JSON.parse(t);
92
- } catch (t) {
93
- console.warn(t);
94
- }
95
- }
96
- function z(e, r) {
97
- K(e, r, sessionStorage);
98
- }
99
- function D(e) {
100
- return O(e, sessionStorage);
101
- }
102
- const b = "nosto:search:searchResult";
103
- function L(e, r, t) {
104
- if (!e)
105
- return;
106
- z(b, { query: r, result: t });
107
- }
108
- function _(e, r) {
109
- if (!e)
110
- return null;
111
- const t = D(b);
112
- if (!t || !j(t))
113
- return null;
114
- const s = S(t.query);
115
- return C(S(r), s) ? t.result : null;
116
- }
117
- function S(e) {
118
- return {
119
- accountId: e.accountId,
120
- customRules: e.customRules,
121
- explain: e.explain,
122
- keywords: e.keywords,
123
- products: e.products,
124
- query: e.query,
125
- redirect: e.redirect,
126
- rules: e.rules,
127
- segments: e.segments,
128
- sessionParams: e.sessionParams
129
- };
130
- }
131
- function j(e) {
132
- return typeof e == "object" && e !== null && "query" in e && "result" in e;
133
- }
134
- async function P(e, r, t) {
135
- var l, u, y;
136
- const s = f("newSearch"), a = e.config.pageType, n = p(e.store.getInitialState().query, r), c = p(e.config.search, t, {
137
- track: a,
138
- redirect: a !== "autocomplete",
139
- isKeyword: !!(t != null && t.isKeyword)
140
- });
141
- e.store.updateState({
142
- query: n,
143
- loading: !0,
144
- initialized: !0
145
- });
146
- const o = a !== "autocomplete" && e.config.persistentSearchCache, i = e.config.queryModifications(
147
- {
148
- ...n,
149
- products: {
150
- ...n.products,
151
- // Apply filter merging to avoid overwriting base filters
152
- filter: N((u = (l = e.store.getInitialState().query) == null ? void 0 : l.products) == null ? void 0 : u.filter, (y = r.products) == null ? void 0 : y.filter)
153
- }
154
- },
155
- a
156
- );
157
- try {
158
- let d;
159
- const h = _(o, i);
160
- if (h)
161
- d = h;
162
- else {
163
- const F = E(a, i);
164
- d = await A(F, c), L(o, i, d);
165
- }
166
- e.store.updateState({
167
- response: d,
168
- loading: !1
169
- });
170
- } catch (d) {
171
- console.error("Search action failed", d);
172
- }
173
- s();
174
- }
175
- async function m(e, r, t) {
176
- const s = f("updateSearch"), a = p(e.store.getState().query, { products: { from: 0 } }, r);
177
- await P(e, a, t), s();
178
- }
179
- async function B(e, r, t) {
180
- var c;
181
- const s = f("replaceFilter"), a = (c = e.store.getState().query.products) == null ? void 0 : c.filter, n = t !== void 0 ? [{ field: r, [typeof t == "object" ? "range" : "value"]: [t] }] : [];
182
- await m(e, {
183
- products: {
184
- filter: [...(a == null ? void 0 : a.filter((o) => o.field !== r)) ?? [], ...n]
185
- }
186
- }), s();
187
- }
188
- async function G(e, r, t, s) {
189
- var i, l;
190
- const a = f("toggleProductFilter"), n = (i = e.store.getState().query.products) == null ? void 0 : i.filter, c = n == null ? void 0 : n.find((u) => u.value instanceof Array && u.field === r), o = c != null && c.value ? {
191
- ...c,
192
- value: [...c.value.filter((u) => !C(u, t)), ...s ? [t] : []]
193
- } : s ? {
194
- field: r,
195
- value: [t]
196
- } : void 0;
197
- await m(e, {
198
- products: {
199
- filter: [...(n == null ? void 0 : n.filter((u) => u !== c)) ?? [], ...(l = o == null ? void 0 : o.value) != null && l.length ? [o] : []]
200
- }
201
- }), a();
202
- }
203
- function J() {
204
- const e = I(), r = w(k), t = v(
205
- () => ({
206
- config: e,
207
- store: r
208
- }),
209
- [e, r]
210
- ), s = g(
211
- (o, i) => P(t, o, i),
212
- [t]
213
- ), a = g(
214
- (o, i) => m(t, o, i),
215
- [t]
216
- ), n = g(
217
- (o, i, l) => G(t, o, i, l),
218
- [t]
219
- ), c = g(
220
- (o, i) => B(t, o, i),
221
- [t]
222
- );
223
- return {
224
- newSearch: s,
225
- updateSearch: a,
226
- toggleProductFilter: n,
227
- replaceFilter: c
228
- };
229
- }
230
- function q(e = x) {
231
- const r = w(k), [t, s] = M(e(r.getState()));
232
- return r.onChange(e, s), T(() => () => r.clearOnChange(s), [r]), t;
233
- }
234
- const x = (e) => e;
235
- function H({ from: e, size: r, pageSize: t }) {
236
- return Q() ? {
237
- products: { from: e + t }
238
- } : {
239
- products: { size: r + t }
240
- };
241
- }
242
- function ee(e = 24) {
243
- const { from: r, size: t } = q((n) => {
244
- var c, o;
245
- return {
246
- from: ((c = n.query.products) == null ? void 0 : c.from) ?? 0,
247
- size: ((o = n.query.products) == null ? void 0 : o.size) ?? 0
248
- };
249
- }), { updateSearch: s } = J();
250
- return {
251
- loadMore: g(async () => {
252
- await s(H({ from: r, size: t, pageSize: e }));
253
- }, [r, t, e, s])
254
- };
255
- }
256
- export {
257
- ee as a,
258
- J as b,
259
- H as g,
260
- q as u
261
- };
@@ -1 +0,0 @@
1
- "use strict";const y=require("./storeContext-DVs7r6Qm.cjs"),i=require("preact/hooks"),v=require("./search-BVJZK90N.cjs"),g=require("./unique-CGVAnKZy.cjs"),p=require("./isEqual-DQXR__da.cjs");function M(e,r){return{...r,products:{facets:e==="autocomplete"?void 0:["*"],fields:q,...r.products},...r.keywords?{keywords:{...r.keywords,fields:g.unique([...A,...r.keywords.fields??[]]),highlight:r.keywords.highlight??{preTag:"<strong>",postTag:"</strong>"}}}:{}}}const q=["productId","url","name","imageUrl","imageHash","thumbUrl","description","brand","variantId","availability","price","priceText","categoryIds","categories","customFields.key","customFields.value","priceCurrencyCode","datePublished","listPrice","unitPricingBaseMeasure","unitPricingUnit","unitPricingMeasure","googleCategory","gtin","ageGroup","gender","condition","alternateImageUrls","ratingValue","reviewCount","inventoryLevel","skus.id","skus.name","skus.price","skus.listPrice","skus.priceText","skus.url","skus.imageUrl","skus.inventoryLevel","skus.customFields.key","skus.customFields.value","skus.availability","pid","onDiscount","extra.key","extra.value","saleable","available","tags1","tags2","tags3"],A=["keyword","_redirect"];function N(e,r,t){const s=JSON.stringify(r);try{console.info("Setting storage",e,s),t.setItem(e,s)}catch(a){console.warn(a)}}function T(e,r){try{const t=r.getItem(e);if(t)return JSON.parse(t)}catch(t){console.warn(t)}}function E(e,r){N(e,r,sessionStorage)}function Q(e){return T(e,sessionStorage)}const C="nosto:search:searchResult";function R(e,r,t){if(!e)return;E(C,{query:r,result:t})}function U(e,r){if(!e)return null;const t=Q(C);if(!t||!V(t))return null;const s=k(t.query);return p.isEqual(k(r),s)?t.result:null}function k(e){return{accountId:e.accountId,customRules:e.customRules,explain:e.explain,keywords:e.keywords,products:e.products,query:e.query,redirect:e.redirect,rules:e.rules,segments:e.segments,sessionParams:e.sessionParams}}function V(e){return typeof e=="object"&&e!==null&&"query"in e&&"result"in e}async function w(e,r,t){var d,l,S;const s=g.measure("newSearch"),a=e.config.pageType,n=p.deepMerge(e.store.getInitialState().query,r),c=p.deepMerge(e.config.search,t,{track:a,redirect:a!=="autocomplete",isKeyword:!!(t!=null&&t.isKeyword)});e.store.updateState({query:n,loading:!0,initialized:!0});const o=a!=="autocomplete"&&e.config.persistentSearchCache,u=e.config.queryModifications({...n,products:{...n.products,filter:g.mergeArrays((l=(d=e.store.getInitialState().query)==null?void 0:d.products)==null?void 0:l.filter,(S=r.products)==null?void 0:S.filter)}},a);try{let f;const m=U(o,u);if(m)f=m;else{const I=M(a,u);f=await v.search(I,c),R(o,u,f)}e.store.updateState({response:f,loading:!1})}catch(f){console.error("Search action failed",f)}s()}async function h(e,r,t){const s=g.measure("updateSearch"),a=p.deepMerge(e.store.getState().query,{products:{from:0}},r);await w(e,a,t),s()}async function x(e,r,t){var c;const s=g.measure("replaceFilter"),a=(c=e.store.getState().query.products)==null?void 0:c.filter,n=t!==void 0?[{field:r,[typeof t=="object"?"range":"value"]:[t]}]:[];await h(e,{products:{filter:[...(a==null?void 0:a.filter(o=>o.field!==r))??[],...n]}}),s()}async function K(e,r,t,s){var u,d;const a=g.measure("toggleProductFilter"),n=(u=e.store.getState().query.products)==null?void 0:u.filter,c=n==null?void 0:n.find(l=>l.value instanceof Array&&l.field===r),o=c!=null&&c.value?{...c,value:[...c.value.filter(l=>!p.isEqual(l,t)),...s?[t]:[]]}:s?{field:r,value:[t]}:void 0;await h(e,{products:{filter:[...(n==null?void 0:n.filter(l=>l!==c))??[],...(d=o==null?void 0:o.value)!=null&&d.length?[o]:[]]}}),a()}function b(){const e=y.useConfig(),r=i.useContext(y.StoreContext),t=i.useMemo(()=>({config:e,store:r}),[e,r]),s=i.useCallback((o,u)=>w(t,o,u),[t]),a=i.useCallback((o,u)=>h(t,o,u),[t]),n=i.useCallback((o,u,d)=>K(t,o,u,d),[t]),c=i.useCallback((o,u)=>x(t,o,u),[t]);return{newSearch:s,updateSearch:a,toggleProductFilter:n,replaceFilter:c}}function P(e=L){const r=i.useContext(y.StoreContext),[t,s]=i.useState(e(r.getState()));return r.onChange(e,s),i.useEffect(()=>()=>r.clearOnChange(s),[r]),t}const L=e=>e;function F({from:e,size:r,pageSize:t}){return g.isBot()?{products:{from:e+t}}:{products:{size:r+t}}}function O(e=24){const{from:r,size:t}=P(n=>{var c,o;return{from:((c=n.query.products)==null?void 0:c.from)??0,size:((o=n.query.products)==null?void 0:o.size)??0}}),{updateSearch:s}=b();return{loadMore:i.useCallback(async()=>{await s(F({from:r,size:t,pageSize:e}))},[r,t,e,s])}}exports.getNextPageQuery=F;exports.useActions=b;exports.useLoadMore=O;exports.useNostoAppState=P;