@nosto/search-js 2.1.0 → 2.1.2
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/dist/InfiniteScrollWithObserver-BC15p357.cjs +1 -0
- package/dist/InfiniteScrollWithObserver-DcV-Ny_9.js +33 -0
- package/dist/isEqual-BzZ3d1JM.js +41 -0
- package/dist/isEqual-DQXR__da.cjs +1 -0
- package/dist/parseNumber-FsZ8w61u.cjs +1 -0
- package/dist/parseNumber-QA48nJLp.js +11 -0
- package/dist/pick-DReBictn.js +9 -0
- package/dist/pick-rYi1lc2m.cjs +1 -0
- package/dist/preact/autocomplete.cjs.js +1 -1
- package/dist/preact/autocomplete.es.js +1 -1
- package/dist/preact/category.cjs.js +1 -1
- package/dist/preact/category.es.js +1 -1
- package/dist/preact/common.cjs.js +1 -1
- package/dist/preact/common.es.js +20 -19
- package/dist/preact/hooks.cjs.js +1 -1
- package/dist/preact/hooks.es.js +45 -52
- package/dist/preact/legacy.cjs.js +1 -1
- package/dist/preact/legacy.es.js +2 -2
- package/dist/preact/serp.cjs.js +1 -1
- package/dist/preact/serp.es.js +1 -1
- package/dist/storeContext-DVs7r6Qm.cjs +1 -0
- package/dist/storeContext-jWZFJ8Kf.js +63 -0
- package/dist/unique-CGVAnKZy.cjs +1 -0
- package/dist/unique-Dwtu7vXB.js +44 -0
- package/dist/useLoadMore-1PzDu__A.js +261 -0
- package/dist/useLoadMore-wwYzUkxk.cjs +1 -0
- package/dist/utils/src/deepMerge.d.ts +4 -1
- package/dist/utils/src/isEqual.d.ts +3 -0
- package/dist/utils/src/isPlainObject.d.ts +3 -0
- package/dist/utils/src/mergeArrays.d.ts +3 -0
- package/dist/utils/src/parseNumber.d.ts +3 -0
- package/dist/utils/src/performance.d.ts +3 -0
- package/dist/utils/src/unique.d.ts +3 -0
- package/dist/utils/utils.cjs.js +1 -1
- package/dist/utils/utils.d.ts +9 -0
- package/dist/utils/utils.es.js +13 -18
- package/package.json +1 -1
- package/dist/InfiniteScrollWithObserver-BoKdnFuB.cjs +0 -1
- package/dist/InfiniteScrollWithObserver-CkdVKocm.js +0 -39
- package/dist/storeContext-12dN1l9r.cjs +0 -1
- package/dist/storeContext-CBqmmTUC.js +0 -99
- package/dist/useLoadMore-BBrbOkyq.cjs +0 -1
- package/dist/useLoadMore-DnvHCsYl.js +0 -281
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { u as I, S as k } from "./storeContext-jWZFJ8Kf.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-BzZ3d1JM.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
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
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;
|
|
@@ -1,8 +1,11 @@
|
|
|
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
|
-
type Merge<T, U = unknown> = T
|
|
8
|
+
type Merge<T, U = unknown> = Simplify<PlainMerge<T, U>>;
|
|
6
9
|
type PlainMerge<T, U = unknown> = T extends [infer First, ...infer Rest] ? PlainMerge<Rest, U & First> : U;
|
|
7
10
|
export type MergeTests = [
|
|
8
11
|
Expect<Equals<Merge<[{
|
package/dist/utils/utils.cjs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});
|
|
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;
|
package/dist/utils/utils.d.ts
CHANGED
|
@@ -1,2 +1,11 @@
|
|
|
1
1
|
/** @module utils */
|
|
2
|
+
export { deepMerge, type MergeTests } from './src/deepMerge';
|
|
2
3
|
export { isBot } from './src/isBot';
|
|
4
|
+
export { isEqual } from './src/isEqual';
|
|
5
|
+
export { isPlainObject } from './src/isPlainObject';
|
|
6
|
+
export { mergeArrays } from './src/mergeArrays';
|
|
7
|
+
export { parseNumber } from './src/parseNumber';
|
|
8
|
+
export { measure } from './src/performance';
|
|
9
|
+
export { pick } from './src/pick';
|
|
10
|
+
export type { Simplify, simplifyTests } from './src/simplify';
|
|
11
|
+
export { unique } from './src/unique';
|
package/dist/utils/utils.es.js
CHANGED
|
@@ -1,20 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
try {
|
|
6
|
-
e = new RegExp(r, "i");
|
|
7
|
-
} catch {
|
|
8
|
-
e = t;
|
|
9
|
-
}
|
|
10
|
-
return e;
|
|
11
|
-
}
|
|
12
|
-
function s(a) {
|
|
13
|
-
return !!a && o().test(a);
|
|
14
|
-
}
|
|
15
|
-
function c() {
|
|
16
|
-
return s(navigator.userAgent);
|
|
17
|
-
}
|
|
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";
|
|
18
5
|
export {
|
|
19
|
-
|
|
6
|
+
r as deepMerge,
|
|
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
|
|
20
15
|
};
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const d=require("./jsxRuntime.module-B3sGoTIU.cjs"),f=require("./useLoadMore-BBrbOkyq.cjs"),l=require("preact/hooks"),b=require("preact");function p(t,...o){return o.reduce((r,n)=>(r[n]=t[n],r),{})}function v(t,o){var c,e,s;const r=((c=o.products)==null?void 0:c.total)??0,n=((e=t.products)==null?void 0:e.from)??0,i=((s=t.products)==null?void 0:s.size)??0;return r>0&&r>n+i}function h(){return!!(window.IntersectionObserver&&window.IntersectionObserverEntry&&"intersectionRatio"in window.IntersectionObserverEntry.prototype)}function O({children:t,pageSize:o}){const r=l.useRef(null),{query:n,response:i}=f.useNostoAppState(e=>p(e,"query","response")),{loadMore:c}=f.useLoadMore(o);return l.useEffect(()=>{let e,s;return v(n,i)&&(e=r.current,s=new IntersectionObserver(a=>{const u=a[0];u!=null&&u.isIntersecting&&c()}),e&&s.observe(e)),()=>{e&&s.unobserve(e)}},[i]),d.u(b.Fragment,{children:[t,d.u("div",{ref:r,style:{height:"1px"}})]})}exports.InfiniteScrollWithObserver=O;exports.hasMoreResults=v;exports.intersectionObserverSupported=h;exports.pick=p;
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { u as f } from "./jsxRuntime.module-Bzuv3cXw.js";
|
|
2
|
-
import { a, u as d } from "./useLoadMore-DnvHCsYl.js";
|
|
3
|
-
import { useRef as l, useEffect as m } from "preact/hooks";
|
|
4
|
-
import { Fragment as v } from "preact";
|
|
5
|
-
function b(t, ...s) {
|
|
6
|
-
return s.reduce(
|
|
7
|
-
(r, o) => (r[o] = t[o], r),
|
|
8
|
-
{}
|
|
9
|
-
);
|
|
10
|
-
}
|
|
11
|
-
function w(t, s) {
|
|
12
|
-
var c, e, n;
|
|
13
|
-
const r = ((c = s.products) == null ? void 0 : c.total) ?? 0, o = ((e = t.products) == null ? void 0 : e.from) ?? 0, i = ((n = t.products) == null ? void 0 : n.size) ?? 0;
|
|
14
|
-
return r > 0 && r > o + i;
|
|
15
|
-
}
|
|
16
|
-
function R() {
|
|
17
|
-
return !!(window.IntersectionObserver && window.IntersectionObserverEntry && "intersectionRatio" in window.IntersectionObserverEntry.prototype);
|
|
18
|
-
}
|
|
19
|
-
function E({ children: t, pageSize: s }) {
|
|
20
|
-
const r = l(null), { query: o, response: i } = a((e) => b(e, "query", "response")), { loadMore: c } = d(s);
|
|
21
|
-
return m(() => {
|
|
22
|
-
let e, n;
|
|
23
|
-
return w(o, i) && (e = r.current, n = new IntersectionObserver((p) => {
|
|
24
|
-
const u = p[0];
|
|
25
|
-
u != null && u.isIntersecting && c();
|
|
26
|
-
}), e && n.observe(e)), () => {
|
|
27
|
-
e && n.unobserve(e);
|
|
28
|
-
};
|
|
29
|
-
}, [i]), /* @__PURE__ */ f(v, { children: [
|
|
30
|
-
t,
|
|
31
|
-
/* @__PURE__ */ f("div", { ref: r, style: { height: "1px" } })
|
|
32
|
-
] });
|
|
33
|
-
}
|
|
34
|
-
export {
|
|
35
|
-
E as I,
|
|
36
|
-
w as h,
|
|
37
|
-
R as i,
|
|
38
|
-
b as p
|
|
39
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const d=require("preact"),E=require("preact/hooks"),S=d.createContext(null),b=()=>{const e=E.useContext(S);if(!e)throw new Error("useConfig must be used within a ConfigProvider");return e},g=e=>String(e)==="[object Object]";function u(e){if(!g(e))return!1;const t=e.constructor;if(t===void 0)return!0;const n=t.prototype;return!(!g(n)||!n.hasOwnProperty("isPrototypeOf"))}function m(...e){return e.reduce((t,n)=>a(t,n))}function C(...e){return e.reduce((t,n)=>a(t,n))}function a(e,t){return u(e)&&u(t)?Object.entries(t).reduce((n,[r,c])=>(n[r]=a(n[r],c),n),{...e}):u(e)?e:t}function s(e,t){if(e===t)return!0;if(e instanceof Date&&t instanceof Date)return e.getTime()===t.getTime();if(Array.isArray(e)&&Array.isArray(t))return e.length!==t.length?!1:e.every((n,r)=>s(n,t[r]));if(u(e)&&u(t)){const n=Object.entries(e);return n.length!==Object.keys(t).length?!1:n.every(([r,c])=>s(c,t[r]))}return!1}function p(e,t={}){const n=new Map;let r=C(e,t??{});const c=C(e,t);function x(o){r=o(r);for(const i of n.values())i(r)}function O(o){x(i=>({...i,...o}))}function j(){return r}function P(){return structuredClone(c)}function q(o,i){let l;n.set(i,A=>{const f=o(A);s(f,l)||(l=f,i(f))})}function w(o){n.delete(o)}return{updateState:O,getState:j,getInitialState:P,onChange:q,clearOnChange:w}}const h={loading:!0,query:{},response:{},initialized:!1};function y(e={}){return p(h,e)}const M=d.createContext(y());exports.ConfigContext=S;exports.StoreContext=M;exports.createExtendableStore=p;exports.createStore=y;exports.deepMerge=m;exports.defaultState=h;exports.isEqual=s;exports.isPlainObject=u;exports.useConfig=b;
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { createContext as C } from "preact";
|
|
2
|
-
import { useContext as x } from "preact/hooks";
|
|
3
|
-
const w = C(null), q = () => {
|
|
4
|
-
const e = x(w);
|
|
5
|
-
if (!e)
|
|
6
|
-
throw new Error("useConfig must be used within a ConfigProvider");
|
|
7
|
-
return e;
|
|
8
|
-
}, g = (e) => String(e) === "[object Object]";
|
|
9
|
-
function s(e) {
|
|
10
|
-
if (!g(e))
|
|
11
|
-
return !1;
|
|
12
|
-
const t = e.constructor;
|
|
13
|
-
if (t === void 0)
|
|
14
|
-
return !0;
|
|
15
|
-
const n = t.prototype;
|
|
16
|
-
return !(!g(n) || !n.hasOwnProperty("isPrototypeOf"));
|
|
17
|
-
}
|
|
18
|
-
function D(...e) {
|
|
19
|
-
return e.reduce((t, n) => a(t, n));
|
|
20
|
-
}
|
|
21
|
-
function p(...e) {
|
|
22
|
-
return e.reduce((t, n) => a(t, n));
|
|
23
|
-
}
|
|
24
|
-
function a(e, t) {
|
|
25
|
-
return s(e) && s(t) ? Object.entries(t).reduce(
|
|
26
|
-
(n, [r, u]) => (n[r] = a(n[r], u), n),
|
|
27
|
-
{ ...e }
|
|
28
|
-
) : s(e) ? e : t;
|
|
29
|
-
}
|
|
30
|
-
function f(e, t) {
|
|
31
|
-
if (e === t)
|
|
32
|
-
return !0;
|
|
33
|
-
if (e instanceof Date && t instanceof Date)
|
|
34
|
-
return e.getTime() === t.getTime();
|
|
35
|
-
if (Array.isArray(e) && Array.isArray(t))
|
|
36
|
-
return e.length !== t.length ? !1 : e.every((n, r) => f(n, t[r]));
|
|
37
|
-
if (s(e) && s(t)) {
|
|
38
|
-
const n = Object.entries(e);
|
|
39
|
-
return n.length !== Object.keys(t).length ? !1 : n.every(([r, u]) => f(u, t[r]));
|
|
40
|
-
}
|
|
41
|
-
return !1;
|
|
42
|
-
}
|
|
43
|
-
function A(e, t = {}) {
|
|
44
|
-
const n = /* @__PURE__ */ new Map();
|
|
45
|
-
let r = p(e, t ?? {});
|
|
46
|
-
const u = p(e, t);
|
|
47
|
-
function d(o) {
|
|
48
|
-
r = o(r);
|
|
49
|
-
for (const i of n.values())
|
|
50
|
-
i(r);
|
|
51
|
-
}
|
|
52
|
-
function y(o) {
|
|
53
|
-
d((i) => ({ ...i, ...o }));
|
|
54
|
-
}
|
|
55
|
-
function h() {
|
|
56
|
-
return r;
|
|
57
|
-
}
|
|
58
|
-
function S() {
|
|
59
|
-
return structuredClone(u);
|
|
60
|
-
}
|
|
61
|
-
function O(o, i) {
|
|
62
|
-
let l;
|
|
63
|
-
n.set(i, (j) => {
|
|
64
|
-
const c = o(j);
|
|
65
|
-
f(c, l) || (l = c, i(c));
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
function m(o) {
|
|
69
|
-
n.delete(o);
|
|
70
|
-
}
|
|
71
|
-
return {
|
|
72
|
-
updateState: y,
|
|
73
|
-
getState: h,
|
|
74
|
-
getInitialState: S,
|
|
75
|
-
onChange: O,
|
|
76
|
-
clearOnChange: m
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
const P = {
|
|
80
|
-
loading: !0,
|
|
81
|
-
query: {},
|
|
82
|
-
response: {},
|
|
83
|
-
initialized: !1
|
|
84
|
-
};
|
|
85
|
-
function b(e = {}) {
|
|
86
|
-
return A(P, e);
|
|
87
|
-
}
|
|
88
|
-
const T = C(b());
|
|
89
|
-
export {
|
|
90
|
-
w as C,
|
|
91
|
-
T as S,
|
|
92
|
-
A as a,
|
|
93
|
-
D as b,
|
|
94
|
-
b as c,
|
|
95
|
-
P as d,
|
|
96
|
-
s as e,
|
|
97
|
-
f as i,
|
|
98
|
-
q as u
|
|
99
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const d=require("./storeContext-12dN1l9r.cjs"),i=require("preact/hooks"),I=require("./search-BVJZK90N.cjs"),A=require("./utils/utils.cjs.js");function M(e){return Array.from(new Set(e))}function N(e,t){return{...t,products:{facets:e==="autocomplete"?void 0:["*"],fields:T,...t.products},...t.keywords?{keywords:{...t.keywords,fields:M([...$,...t.keywords.fields??[]]),highlight:t.keywords.highlight??{preTag:"<strong>",postTag:"</strong>"}}}:{}}}const T=["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"],$=["keyword","_redirect"];function Q(...e){if(!e.every(t=>t==null))return e.filter(t=>Array.isArray(t)).reduce((t,r)=>t.concat(r),[])}const k="nosto.search.";function R(e){var r;const t=`${k}${e}`;(r=window.performance)==null||r.mark(`${t}.start`)}function q(e){var r,s;const t=`${k}${e}`;(r=window.performance)==null||r.mark(`${t}.end`),(s=window.performance)==null||s.measure(t,`${t}.start`,`${t}.end`)}function p(e){return R(e),()=>q(e)}function E(e,t,r){const s=JSON.stringify(t);try{console.info("Setting storage",e,s),r.setItem(e,s)}catch(n){console.warn(n)}}function x(e,t){try{const r=t.getItem(e);if(r)return JSON.parse(r)}catch(r){console.warn(r)}}function U(e,t){E(e,t,sessionStorage)}function V(e){return x(e,sessionStorage)}const w="nosto:search:searchResult";function K(e,t,r){if(!e)return;U(w,{query:t,result:r})}function L(e,t){if(!e)return null;const r=V(w);if(!r||!O(r))return null;const s=S(r.query);return d.isEqual(S(t),s)?r.result:null}function S(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 O(e){return typeof e=="object"&&e!==null&&"query"in e&&"result"in e}async function C(e,t,r){var g,l,h;const s=p("newSearch"),n=e.config.pageType,a=d.deepMerge(e.store.getInitialState().query,t),c=d.deepMerge(e.config.search,r,{track:n,redirect:n!=="autocomplete",isKeyword:!!(r!=null&&r.isKeyword)});e.store.updateState({query:a,loading:!0,initialized:!0});const o=n!=="autocomplete"&&e.config.persistentSearchCache,u=e.config.queryModifications({...a,products:{...a.products,filter:Q((l=(g=e.store.getInitialState().query)==null?void 0:g.products)==null?void 0:l.filter,(h=t.products)==null?void 0:h.filter)}},n);try{let f;const m=L(o,u);if(m)f=m;else{const F=N(n,u);f=await I.search(F,c),K(o,u,f)}e.store.updateState({response:f,loading:!1})}catch(f){console.error("Search action failed",f)}s()}async function y(e,t,r){const s=p("updateSearch"),n=d.deepMerge(e.store.getState().query,{products:{from:0}},t);await C(e,n,r),s()}async function z(e,t,r){var c;const s=p("replaceFilter"),n=(c=e.store.getState().query.products)==null?void 0:c.filter,a=r!==void 0?[{field:t,[typeof r=="object"?"range":"value"]:[r]}]:[];await y(e,{products:{filter:[...(n==null?void 0:n.filter(o=>o.field!==t))??[],...a]}}),s()}async function D(e,t,r,s){var u,g;const n=p("toggleProductFilter"),a=(u=e.store.getState().query.products)==null?void 0:u.filter,c=a==null?void 0:a.find(l=>l.value instanceof Array&&l.field===t),o=c!=null&&c.value?{...c,value:[...c.value.filter(l=>!d.isEqual(l,r)),...s?[r]:[]]}:s?{field:t,value:[r]}:void 0;await y(e,{products:{filter:[...(a==null?void 0:a.filter(l=>l!==c))??[],...(g=o==null?void 0:o.value)!=null&&g.length?[o]:[]]}}),n()}function b(){const e=d.useConfig(),t=i.useContext(d.StoreContext),r=i.useMemo(()=>({config:e,store:t}),[e,t]),s=i.useCallback((o,u)=>C(r,o,u),[r]),n=i.useCallback((o,u)=>y(r,o,u),[r]),a=i.useCallback((o,u,g)=>D(r,o,u,g),[r]),c=i.useCallback((o,u)=>z(r,o,u),[r]);return{newSearch:s,updateSearch:n,toggleProductFilter:a,replaceFilter:c}}function P(e=_){const t=i.useContext(d.StoreContext),[r,s]=i.useState(e(t.getState()));return t.onChange(e,s),i.useEffect(()=>()=>t.clearOnChange(s),[t]),r}const _=e=>e;function v({from:e,size:t,pageSize:r}){return A.isBot()?{products:{from:e+r}}:{products:{size:t+r}}}function B(e=24){const{from:t,size:r}=P(a=>{var c,o;return{from:((c=a.query.products)==null?void 0:c.from)??0,size:((o=a.query.products)==null?void 0:o.size)??0}}),{updateSearch:s}=b();return{loadMore:i.useCallback(async()=>{await s(v({from:t,size:r,pageSize:e}))},[t,r,e,s])}}exports.getNextPageQuery=v;exports.useActions=b;exports.useLoadMore=B;exports.useNostoAppState=P;
|