@searchcraft/javascript-sdk 0.4.0 → 0.4.1
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/README.md +2 -3
- package/dist/cjs/{index-c8a8e492.js → index-6916cc47.js} +2 -1
- package/dist/cjs/index-6916cc47.js.map +1 -0
- package/dist/cjs/index.cjs.js +2 -2
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/{package-ccc7e307.js → package-38f7e2c7.js} +2 -2
- package/dist/cjs/package-38f7e2c7.js.map +1 -0
- package/dist/cjs/searchcraft-auto-search-form.cjs.entry.js +27 -44
- package/dist/cjs/searchcraft-auto-search-form.cjs.entry.js.map +1 -1
- package/dist/cjs/searchcraft-base-search-form.cjs.entry.js +3 -3
- package/dist/cjs/searchcraft-base-search-result.cjs.entry.js +2 -2
- package/dist/cjs/searchcraft-base-search-results.cjs.entry.js +10 -30
- package/dist/cjs/searchcraft-base-search-results.cjs.entry.js.map +1 -1
- package/dist/cjs/searchcraft-button-icon.cjs.entry.js +1 -1
- package/dist/cjs/searchcraft-button.cjs.entry.js +1 -1
- package/dist/cjs/searchcraft-check-icon_2.cjs.entry.js +1 -1
- package/dist/cjs/searchcraft-clear-icon-set.cjs.entry.js +1 -1
- package/dist/cjs/searchcraft-error-message_3.cjs.entry.js +2 -2
- package/dist/cjs/searchcraft-facet-list_3.cjs.entry.js +91 -38
- package/dist/cjs/searchcraft-facet-list_3.cjs.entry.js.map +1 -1
- package/dist/cjs/searchcraft-filter-panel.cjs.entry.js +7 -26
- package/dist/cjs/searchcraft-filter-panel.cjs.entry.js.map +1 -1
- package/dist/cjs/searchcraft-javascript-sdk.cjs.js +2 -2
- package/dist/cjs/searchcraft-results-info.cjs.entry.js +3 -3
- package/dist/cjs/searchcraft-search-icon-set.cjs.entry.js +1 -1
- package/dist/cjs/searchcraft-spinner-dark.cjs.entry.js +1 -1
- package/dist/cjs/searchcraft-spinner-light.cjs.entry.js +1 -1
- package/dist/cjs/{store-72205332.js → store-afa727af.js} +11 -5
- package/dist/cjs/{store-72205332.js.map → store-afa727af.js.map} +1 -1
- package/dist/cjs/{utils-4ee2b88d.js → utils-0f309f6d.js} +80 -23
- package/dist/cjs/utils-0f309f6d.js.map +1 -0
- package/dist/collection/components/searchcraft-auto-search-form/searchcraft-auto-search-form.js +35 -50
- package/dist/collection/components/searchcraft-auto-search-form/searchcraft-auto-search-form.js.map +1 -1
- package/dist/collection/components/searchcraft-base-search-results/searchcraft-base-search-results.js +19 -39
- package/dist/collection/components/searchcraft-base-search-results/searchcraft-base-search-results.js.map +1 -1
- package/dist/collection/components/searchcraft-facet-list/searchcraft-facet-list.js +51 -20
- package/dist/collection/components/searchcraft-facet-list/searchcraft-facet-list.js.map +1 -1
- package/dist/collection/components/searchcraft-filter-panel/searchcraft-filter-panel.js +16 -34
- package/dist/collection/components/searchcraft-filter-panel/searchcraft-filter-panel.js.map +1 -1
- package/dist/collection/components/searchcraft-slider/searchcraft-slider.js +23 -15
- package/dist/collection/components/searchcraft-slider/searchcraft-slider.js.map +1 -1
- package/dist/collection/components/searchcraft-slider/searchcraft-slider.module.css +11 -11
- package/dist/collection/components/searchcraft-toggle-button/searchcraft-toggle-button.js +21 -3
- package/dist/collection/components/searchcraft-toggle-button/searchcraft-toggle-button.js.map +1 -1
- package/dist/collection/provider/store.js +10 -4
- package/dist/collection/provider/store.js.map +1 -1
- package/dist/collection/utils/utils.js +79 -22
- package/dist/collection/utils/utils.js.map +1 -1
- package/dist/components/index.js +2 -2
- package/dist/components/{p-e3c8b1ef.js → p-08e421ca.js} +26 -18
- package/dist/components/p-08e421ca.js.map +1 -0
- package/dist/components/{p-be63dcac.js → p-3c181808.js} +11 -5
- package/dist/components/{p-be63dcac.js.map → p-3c181808.js.map} +1 -1
- package/dist/components/{p-b1a59f07.js → p-415f7b11.js} +2 -2
- package/dist/components/{p-b1a59f07.js.map → p-415f7b11.js.map} +1 -1
- package/dist/components/{p-68897c11.js → p-4353a2b8.js} +54 -23
- package/dist/components/p-4353a2b8.js.map +1 -0
- package/dist/components/{p-69eed21e.js → p-4c89f065.js} +2 -2
- package/dist/components/p-4c89f065.js.map +1 -0
- package/dist/components/{p-8062f0ea.js → p-4fad3388.js} +2 -2
- package/dist/components/{p-8062f0ea.js.map → p-4fad3388.js.map} +1 -1
- package/dist/components/{p-0deddac7.js → p-9982883f.js} +80 -23
- package/dist/components/p-9982883f.js.map +1 -0
- package/dist/components/{p-ebf021b5.js → p-9b9df0ca.js} +22 -4
- package/dist/components/p-9b9df0ca.js.map +1 -0
- package/dist/components/searchcraft-auto-search-form.js +29 -47
- package/dist/components/searchcraft-auto-search-form.js.map +1 -1
- package/dist/components/searchcraft-base-search-form.js +3 -3
- package/dist/components/searchcraft-base-search-result.js +1 -1
- package/dist/components/searchcraft-base-search-results.js +12 -35
- package/dist/components/searchcraft-base-search-results.js.map +1 -1
- package/dist/components/searchcraft-facet-list.js +1 -1
- package/dist/components/searchcraft-filter-panel.js +11 -33
- package/dist/components/searchcraft-filter-panel.js.map +1 -1
- package/dist/components/searchcraft-input.js +1 -1
- package/dist/components/searchcraft-results-info.js +2 -2
- package/dist/components/searchcraft-slider.js +1 -1
- package/dist/components/searchcraft-toggle-button.js +1 -1
- package/dist/esm/{index-88dc5f88.js → index-921fe029.js} +2 -2
- package/dist/esm/index-921fe029.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/loader.js +3 -3
- package/dist/esm/{package-ee16f835.js → package-e62ac63a.js} +2 -2
- package/dist/esm/package-e62ac63a.js.map +1 -0
- package/dist/esm/searchcraft-auto-search-form.entry.js +27 -44
- package/dist/esm/searchcraft-auto-search-form.entry.js.map +1 -1
- package/dist/esm/searchcraft-base-search-form.entry.js +3 -3
- package/dist/esm/searchcraft-base-search-result.entry.js +2 -2
- package/dist/esm/searchcraft-base-search-results.entry.js +10 -30
- package/dist/esm/searchcraft-base-search-results.entry.js.map +1 -1
- package/dist/esm/searchcraft-button-icon.entry.js +1 -1
- package/dist/esm/searchcraft-button.entry.js +1 -1
- package/dist/esm/searchcraft-check-icon_2.entry.js +1 -1
- package/dist/esm/searchcraft-clear-icon-set.entry.js +1 -1
- package/dist/esm/searchcraft-error-message_3.entry.js +2 -2
- package/dist/esm/searchcraft-facet-list_3.entry.js +91 -38
- package/dist/esm/searchcraft-facet-list_3.entry.js.map +1 -1
- package/dist/esm/searchcraft-filter-panel.entry.js +7 -26
- package/dist/esm/searchcraft-filter-panel.entry.js.map +1 -1
- package/dist/esm/searchcraft-javascript-sdk.js +3 -3
- package/dist/esm/searchcraft-results-info.entry.js +3 -3
- package/dist/esm/searchcraft-search-icon-set.entry.js +1 -1
- package/dist/esm/searchcraft-spinner-dark.entry.js +1 -1
- package/dist/esm/searchcraft-spinner-light.entry.js +1 -1
- package/dist/esm/{store-52436995.js → store-8d82e948.js} +11 -5
- package/dist/esm/{store-52436995.js.map → store-8d82e948.js.map} +1 -1
- package/dist/esm/{utils-89a02921.js → utils-ee63b542.js} +80 -23
- package/dist/esm/utils-ee63b542.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/index.esm.js +1 -1
- package/dist/searchcraft-javascript-sdk/p-15e0ce05.entry.js +2 -0
- package/dist/searchcraft-javascript-sdk/p-15e0ce05.entry.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/p-2816782c.entry.js +2 -0
- package/dist/searchcraft-javascript-sdk/p-2816782c.entry.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/{p-f4612b94.entry.js → p-3292e706.entry.js} +2 -2
- package/dist/searchcraft-javascript-sdk/{p-bf80bbee.entry.js → p-4a2d1f44.entry.js} +2 -2
- package/dist/searchcraft-javascript-sdk/{p-69eed21e.js → p-4c89f065.js} +2 -2
- package/dist/searchcraft-javascript-sdk/{p-4c32c87d.js → p-80e3f29f.js} +2 -2
- package/dist/searchcraft-javascript-sdk/{p-4c32c87d.js.map → p-80e3f29f.js.map} +1 -1
- package/dist/searchcraft-javascript-sdk/p-8a9b0762.entry.js +2 -0
- package/dist/searchcraft-javascript-sdk/{p-acc645c7.entry.js.map → p-8a9b0762.entry.js.map} +1 -1
- package/dist/searchcraft-javascript-sdk/{p-9647ae41.entry.js → p-92d080a7.entry.js} +2 -2
- package/dist/searchcraft-javascript-sdk/p-9982883f.js +2 -0
- package/dist/searchcraft-javascript-sdk/p-9982883f.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/{p-93e9de71.entry.js → p-9f29b018.entry.js} +2 -2
- package/dist/searchcraft-javascript-sdk/p-a148febe.entry.js +2 -0
- package/dist/searchcraft-javascript-sdk/p-a148febe.entry.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/{p-bb03e946.js → p-a2801518.js} +2 -2
- package/dist/searchcraft-javascript-sdk/p-a2801518.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/{p-4278ff89.entry.js → p-bcc68b15.entry.js} +2 -2
- package/dist/searchcraft-javascript-sdk/{p-7c59b3cd.entry.js → p-c70b31ae.entry.js} +2 -2
- package/dist/searchcraft-javascript-sdk/{p-343adbe3.entry.js → p-cc614ce6.entry.js} +2 -2
- package/dist/searchcraft-javascript-sdk/p-cc614ce6.entry.js.map +1 -0
- package/dist/searchcraft-javascript-sdk/{p-3a2d9be9.entry.js → p-d4a7d8bd.entry.js} +2 -2
- package/dist/searchcraft-javascript-sdk/{p-a613a6ba.entry.js → p-e108dd2e.entry.js} +2 -2
- package/dist/searchcraft-javascript-sdk/{p-69f64bdd.entry.js → p-e8a96dca.entry.js} +2 -2
- package/dist/searchcraft-javascript-sdk/{p-08bd95f1.entry.js → p-efb41d6d.entry.js} +2 -2
- package/dist/searchcraft-javascript-sdk/searchcraft-javascript-sdk.esm.js +1 -1
- package/dist/searchcraft-javascript-sdk/searchcraft-javascript-sdk.esm.js.map +1 -1
- package/dist/types/components/searchcraft-auto-search-form/searchcraft-auto-search-form.d.ts +5 -5
- package/dist/types/components/searchcraft-base-search-results/searchcraft-base-search-results.d.ts +1 -6
- package/dist/types/components/searchcraft-facet-list/searchcraft-facet-list.d.ts +4 -1
- package/dist/types/components/searchcraft-filter-panel/searchcraft-filter-panel.d.ts +3 -6
- package/dist/types/components/searchcraft-slider/searchcraft-slider.d.ts +4 -6
- package/dist/types/components/searchcraft-toggle-button/searchcraft-toggle-button.d.ts +4 -0
- package/dist/types/components.d.ts +10 -6
- package/dist/types/provider/store.d.ts +0 -5
- package/dist/types/utils/utils.d.ts +1 -1
- package/package.json +1 -1
- package/dist/cjs/index-c8a8e492.js.map +0 -1
- package/dist/cjs/package-ccc7e307.js.map +0 -1
- package/dist/cjs/utils-4ee2b88d.js.map +0 -1
- package/dist/components/p-0deddac7.js.map +0 -1
- package/dist/components/p-68897c11.js.map +0 -1
- package/dist/components/p-69eed21e.js.map +0 -1
- package/dist/components/p-e3c8b1ef.js.map +0 -1
- package/dist/components/p-ebf021b5.js.map +0 -1
- package/dist/esm/index-88dc5f88.js.map +0 -1
- package/dist/esm/package-ee16f835.js.map +0 -1
- package/dist/esm/utils-89a02921.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-0deddac7.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-0deddac7.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-15f9891d.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-15f9891d.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-2419a8c5.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-2419a8c5.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-343adbe3.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-56413bef.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-56413bef.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-acc645c7.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-bb03e946.js.map +0 -1
- /package/dist/searchcraft-javascript-sdk/{p-f4612b94.entry.js.map → p-3292e706.entry.js.map} +0 -0
- /package/dist/searchcraft-javascript-sdk/{p-bf80bbee.entry.js.map → p-4a2d1f44.entry.js.map} +0 -0
- /package/dist/searchcraft-javascript-sdk/{p-69eed21e.js.map → p-4c89f065.js.map} +0 -0
- /package/dist/searchcraft-javascript-sdk/{p-9647ae41.entry.js.map → p-92d080a7.entry.js.map} +0 -0
- /package/dist/searchcraft-javascript-sdk/{p-93e9de71.entry.js.map → p-9f29b018.entry.js.map} +0 -0
- /package/dist/searchcraft-javascript-sdk/{p-4278ff89.entry.js.map → p-bcc68b15.entry.js.map} +0 -0
- /package/dist/searchcraft-javascript-sdk/{p-7c59b3cd.entry.js.map → p-c70b31ae.entry.js.map} +0 -0
- /package/dist/searchcraft-javascript-sdk/{p-3a2d9be9.entry.js.map → p-d4a7d8bd.entry.js.map} +0 -0
- /package/dist/searchcraft-javascript-sdk/{p-a613a6ba.entry.js.map → p-e108dd2e.entry.js.map} +0 -0
- /package/dist/searchcraft-javascript-sdk/{p-69f64bdd.entry.js.map → p-e8a96dca.entry.js.map} +0 -0
- /package/dist/searchcraft-javascript-sdk/{p-08bd95f1.entry.js.map → p-efb41d6d.entry.js.map} +0 -0
|
@@ -110,18 +110,52 @@ function deepMergeWithSpread(obj1, obj2) {
|
|
|
110
110
|
}
|
|
111
111
|
return result;
|
|
112
112
|
}
|
|
113
|
-
function
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
113
|
+
function facetToRecord(facet) {
|
|
114
|
+
const records = {};
|
|
115
|
+
const traverseAndAddToFragments = (facetChild) => {
|
|
116
|
+
var _a;
|
|
117
|
+
records[facetChild.path] = {
|
|
118
|
+
count: facetChild.count,
|
|
119
|
+
path: facetChild.path,
|
|
120
|
+
};
|
|
121
|
+
(_a = facetChild.children) === null || _a === void 0 ? void 0 : _a.forEach((child) => {
|
|
122
|
+
traverseAndAddToFragments(child);
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
traverseAndAddToFragments(facet);
|
|
126
|
+
return records;
|
|
127
|
+
}
|
|
128
|
+
function recordToObject(record) {
|
|
129
|
+
const root = {
|
|
130
|
+
count: 0,
|
|
131
|
+
path: '/',
|
|
117
132
|
children: {},
|
|
118
133
|
};
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
134
|
+
Object.keys(record).forEach((key) => {
|
|
135
|
+
const fragment = record[key];
|
|
136
|
+
if (fragment.path === '/') {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const pathParts = fragment.path.substring(1).split('/');
|
|
140
|
+
let currentRoot = root;
|
|
141
|
+
let currentPath = '';
|
|
142
|
+
pathParts.forEach((part, index) => {
|
|
143
|
+
const nextPath = `${currentPath}/${part}`;
|
|
144
|
+
if (!currentRoot.children[nextPath]) {
|
|
145
|
+
currentRoot.children[nextPath] = {
|
|
146
|
+
count: 0,
|
|
147
|
+
path: nextPath,
|
|
148
|
+
children: {},
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
if (index === pathParts.length - 1) {
|
|
152
|
+
currentRoot.children[nextPath].count = fragment.count;
|
|
153
|
+
}
|
|
154
|
+
currentPath = nextPath;
|
|
155
|
+
currentRoot = currentRoot.children[nextPath];
|
|
122
156
|
});
|
|
123
|
-
}
|
|
124
|
-
return
|
|
157
|
+
});
|
|
158
|
+
return root;
|
|
125
159
|
}
|
|
126
160
|
function objectToFacet(childObject) {
|
|
127
161
|
const transformed = {
|
|
@@ -134,25 +168,48 @@ function objectToFacet(childObject) {
|
|
|
134
168
|
}
|
|
135
169
|
return transformed;
|
|
136
170
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
171
|
+
/**
|
|
172
|
+
* Filters records with the parent paths from record2 OUT of record1
|
|
173
|
+
*/
|
|
174
|
+
function filterRecordByParentPaths(record1, record2) {
|
|
175
|
+
// Extract all paths (keys) both records
|
|
176
|
+
const paths1 = Object.keys(record1);
|
|
177
|
+
const paths2 = Object.keys(record2);
|
|
178
|
+
// Find all parent paths in record2
|
|
179
|
+
const parentPaths = new Set(paths2
|
|
180
|
+
.filter((path) => path.split('/').length > 2) // Only consider paths with more than one level
|
|
181
|
+
.map((path) => path.substring(0, path.lastIndexOf('/'))));
|
|
182
|
+
// Filter out keys in record1 that share a parent path with any of the identified parent paths
|
|
183
|
+
const filteredRecord = Object.fromEntries(paths1
|
|
184
|
+
.filter((path) => !parentPaths.has(path.substring(0, path.lastIndexOf('/'))))
|
|
185
|
+
.map((path) => [path, record1[path]]));
|
|
186
|
+
return filteredRecord;
|
|
187
|
+
}
|
|
188
|
+
function mergeFacetRoots(fieldName, currentRoot, incomingRoot) {
|
|
189
|
+
const currentArray = currentRoot[fieldName];
|
|
190
|
+
const incomingArray = incomingRoot[fieldName];
|
|
191
|
+
const currentRootFacetChild = {
|
|
141
192
|
count: 0,
|
|
142
193
|
path: '/',
|
|
143
|
-
children:
|
|
194
|
+
children: currentArray,
|
|
144
195
|
};
|
|
145
|
-
const
|
|
196
|
+
const incomingRootFacetChild = {
|
|
146
197
|
count: 0,
|
|
147
198
|
path: '/',
|
|
148
|
-
children:
|
|
199
|
+
children: incomingArray,
|
|
149
200
|
};
|
|
150
|
-
//
|
|
151
|
-
const
|
|
152
|
-
const
|
|
153
|
-
//
|
|
154
|
-
|
|
155
|
-
const
|
|
201
|
+
// Flatten them into records
|
|
202
|
+
const currentRecord = facetToRecord(currentRootFacetChild);
|
|
203
|
+
const incomingRecord = facetToRecord(incomingRootFacetChild);
|
|
204
|
+
// Filter out the records from record1 (the current set of records)
|
|
205
|
+
// that share a parent path with record2 (the incoming records)
|
|
206
|
+
const filteredCurrentRecord = filterRecordByParentPaths(currentRecord, incomingRecord);
|
|
207
|
+
// Deep merge the records together
|
|
208
|
+
const mergedRecord = deepMergeWithSpread(filteredCurrentRecord, incomingRecord);
|
|
209
|
+
// Convert into a heirarchical object
|
|
210
|
+
const mergedObject = recordToObject(mergedRecord);
|
|
211
|
+
// Convert the heirarchical object back to the Facet child structure
|
|
212
|
+
const mergedFacetChild = objectToFacet(mergedObject);
|
|
156
213
|
return {
|
|
157
214
|
[fieldName]: mergedFacetChild.children,
|
|
158
215
|
};
|
|
@@ -166,4 +223,4 @@ exports.parseCustomStyles = parseCustomStyles;
|
|
|
166
223
|
exports.removeSubstringMatches = removeSubstringMatches;
|
|
167
224
|
exports.serializeStyles = serializeStyles;
|
|
168
225
|
|
|
169
|
-
//# sourceMappingURL=utils-
|
|
226
|
+
//# sourceMappingURL=utils-0f309f6d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"file":"utils-0f309f6d.js","mappings":"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","names":[],"sources":["src/utils/utils.ts"],"sourcesContent":["import type {\n FacetChild,\n FacetChildObject,\n FacetRoot,\n} from '@searchcraft/core';\nimport type { SearchResultMapping } from 'types';\n\nexport function parseCustomStyles(\n styles: string | Record<string, string>,\n): Record<string, string> {\n if (typeof styles === 'string') {\n try {\n return JSON.parse(styles);\n } catch (error) {\n console.error('Invalid customStyles format:', styles);\n return {};\n }\n }\n return styles || {};\n}\n\nexport function serializeStyles(\n styles: Record<string, Record<string, string>>,\n): string {\n try {\n return JSON.stringify(styles);\n } catch (error) {\n console.error('Error serializing styles:', error);\n return '{}';\n }\n}\n\n/**\n * Given a timestamp value, returns a formatted time string for the time\n * since now.\n *\n * @param timestamp\n * @returns {string} Formatted string value\n */\nexport function getFormattedTimeFromNow(timestamp: string): string {\n const now = new Date();\n const inputTime = new Date(timestamp);\n const diffInSeconds = Math.floor(\n (now.getTime() - inputTime.getTime()) / 1000,\n );\n\n const minutes = Math.floor(diffInSeconds / 60);\n const hours = Math.floor(minutes / 60);\n const days = Math.floor(hours / 24);\n const years = Math.floor(days / 365);\n\n if (minutes < 60) {\n return `${minutes}m ago`;\n }\n if (hours < 24) {\n return `${hours}h ago`;\n }\n if (days < 365) {\n return `${days}d ago`;\n }\n return `${years}y ago`;\n}\n\nexport function filterPaths(paths) {\n return paths.filter((path) => {\n const parts = path.split('/').filter(Boolean);\n\n if (parts.length > 1) {\n return true;\n }\n\n return !paths.some(\n (otherPath) => otherPath.startsWith(`${path}/`) && otherPath !== path,\n );\n });\n}\n\nexport function formatNumberWithCommas(number) {\n return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\n}\n\nexport function getMillis(unit: 'year' | 'month' | 'day' | 'hour'): number {\n const millisInHour = 60 * 60 * 1000;\n const millisInDay = 24 * millisInHour;\n const millisInMonth = 30 * millisInDay;\n const millisInYear = 365 * millisInDay;\n\n switch (unit) {\n case 'hour':\n return millisInHour;\n case 'day':\n return millisInDay;\n case 'month':\n return millisInMonth;\n case 'year':\n return millisInYear;\n default:\n return 3600000;\n }\n}\n/**\n * Given an array of facet paths, removes parent facet paths.\n */\nexport function removeSubstringMatches(arr: string[]): string[] {\n return arr.filter(\n (entry, index, array) =>\n !array.some(\n (otherEntry, otherIndex) =>\n otherIndex !== index && otherEntry.includes(entry),\n ),\n );\n}\n\n/**\n * Given a document and a SearchResultMapping, return a mapped value from the document.\n *\n * @param document\n * @param {SearchResultMapping} mapping\n * @returns {string | undefined}\n */\nexport function getDocumentValueFromSearchResultMapping(\n document: Record<string, unknown> | undefined,\n mapping: SearchResultMapping | undefined,\n): string | undefined {\n if (document && mapping) {\n return mapping.fieldNames\n .map((fieldNameDetails) => {\n let valueFound = document[fieldNameDetails.fieldName];\n\n if (valueFound && fieldNameDetails.dataType === 'date') {\n valueFound = getFormattedTimeFromNow(valueFound as string);\n }\n\n return valueFound;\n })\n .filter((value) => !!value)\n .join(mapping.delimeter || ' ');\n }\n}\n\nfunction deepMergeWithSpread(obj1, obj2) {\n const result = { ...obj1 };\n\n for (const key in obj2) {\n // biome-ignore lint/suspicious/noPrototypeBuiltins: <explanation>\n if (obj2.hasOwnProperty(key)) {\n if (obj2[key] instanceof Object && obj1[key] instanceof Object) {\n result[key] = deepMergeWithSpread(obj1[key], obj2[key]);\n } else {\n result[key] = obj2[key];\n }\n }\n }\n\n return result;\n}\n\ntype FacetChildFragment = {\n count: number;\n path: string;\n};\n\nfunction facetToRecord(facet: FacetChild): Record<string, FacetChildFragment> {\n const records: Record<string, FacetChildFragment> = {};\n\n const traverseAndAddToFragments = (facetChild: FacetChild) => {\n records[facetChild.path] = {\n count: facetChild.count,\n path: facetChild.path,\n };\n\n facetChild.children?.forEach((child) => {\n traverseAndAddToFragments(child);\n });\n };\n\n traverseAndAddToFragments(facet);\n\n return records;\n}\n\nfunction recordToObject(\n record: Record<string, FacetChildFragment>,\n): FacetChildObject {\n const root: FacetChildObject = {\n count: 0,\n path: '/',\n children: {},\n };\n\n Object.keys(record).forEach((key) => {\n const fragment = record[key];\n if (fragment.path === '/') {\n return;\n }\n const pathParts = fragment.path.substring(1).split('/');\n let currentRoot = root;\n let currentPath = '';\n\n pathParts.forEach((part, index) => {\n const nextPath = `${currentPath}/${part}`;\n if (!currentRoot.children[nextPath]) {\n currentRoot.children[nextPath] = {\n count: 0,\n path: nextPath,\n children: {},\n };\n }\n\n if (index === pathParts.length - 1) {\n currentRoot.children[nextPath].count = fragment.count;\n }\n\n currentPath = nextPath;\n currentRoot = currentRoot.children[nextPath];\n });\n });\n\n return root;\n}\n\nfunction objectToFacet(childObject: FacetChildObject): FacetChild {\n const transformed: FacetChild = {\n count: childObject.count,\n path: childObject.path,\n children: [],\n };\n\n if (Object.keys(childObject.children).length > 0) {\n transformed.children = Object.values(childObject.children).map(\n (subChildObject) => objectToFacet(subChildObject),\n );\n }\n\n return transformed;\n}\n\n/**\n * Filters records with the parent paths from record2 OUT of record1\n */\nfunction filterRecordByParentPaths(\n record1: Record<string, FacetChild>,\n record2: Record<string, FacetChild>,\n): Record<string, FacetChild> {\n // Extract all paths (keys) both records\n const paths1 = Object.keys(record1);\n const paths2 = Object.keys(record2);\n\n // Find all parent paths in record2\n const parentPaths = new Set(\n paths2\n .filter((path) => path.split('/').length > 2) // Only consider paths with more than one level\n .map((path) => path.substring(0, path.lastIndexOf('/'))),\n );\n\n // Filter out keys in record1 that share a parent path with any of the identified parent paths\n const filteredRecord = Object.fromEntries(\n paths1\n .filter(\n (path) => !parentPaths.has(path.substring(0, path.lastIndexOf('/'))),\n )\n .map((path) => [path, record1[path]]), // Reconstruct the key-value pairs\n );\n\n return filteredRecord;\n}\n\nexport function mergeFacetRoots(\n fieldName: string,\n currentRoot: FacetRoot,\n incomingRoot: FacetRoot,\n): FacetRoot {\n const currentArray = currentRoot[fieldName];\n const incomingArray = incomingRoot[fieldName];\n\n const currentRootFacetChild: FacetChild = {\n count: 0,\n path: '/',\n children: currentArray,\n };\n\n const incomingRootFacetChild: FacetChild = {\n count: 0,\n path: '/',\n children: incomingArray,\n };\n\n // Flatten them into records\n const currentRecord: Record<string, FacetChildFragment> = facetToRecord(\n currentRootFacetChild,\n );\n\n const incomingRecord: Record<string, FacetChildFragment> = facetToRecord(\n incomingRootFacetChild,\n );\n\n // Filter out the records from record1 (the current set of records)\n // that share a parent path with record2 (the incoming records)\n const filteredCurrentRecord = filterRecordByParentPaths(\n currentRecord,\n incomingRecord,\n );\n\n // Deep merge the records together\n const mergedRecord: Record<string, FacetChildFragment> = deepMergeWithSpread(\n filteredCurrentRecord,\n incomingRecord,\n );\n\n // Convert into a heirarchical object\n const mergedObject: FacetChildObject = recordToObject(mergedRecord);\n\n // Convert the heirarchical object back to the Facet child structure\n const mergedFacetChild = objectToFacet(mergedObject);\n\n return {\n [fieldName]: mergedFacetChild.children,\n };\n}\n"],"version":3}
|
package/dist/collection/components/searchcraft-auto-search-form/searchcraft-auto-search-form.js
CHANGED
|
@@ -8,25 +8,12 @@ export class SearchcraftAutoSearchForm {
|
|
|
8
8
|
this.debounceTimeout = null;
|
|
9
9
|
this.debounceDelay = 0;
|
|
10
10
|
this.searchStore = useSearchcraftStore.getState();
|
|
11
|
-
this.setConfigFromString = (configString) => {
|
|
12
|
-
if (configString) {
|
|
13
|
-
try {
|
|
14
|
-
const parsedConfig = JSON.parse(configString);
|
|
15
|
-
this.config = parsedConfig;
|
|
16
|
-
}
|
|
17
|
-
catch (_a) {
|
|
18
|
-
console.error('Error: Invalid config passed to searchcraft-auto-search-form.');
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
11
|
this.handleInputChange = (event) => {
|
|
23
12
|
const target = event.detail;
|
|
24
13
|
if (target === this.query) {
|
|
25
14
|
return;
|
|
26
15
|
}
|
|
27
16
|
this.query = target;
|
|
28
|
-
// TODO: When input changes, reset any active filters
|
|
29
|
-
// this.searchStore.resetAllFilters();
|
|
30
17
|
const performSearchActions = () => {
|
|
31
18
|
if (this.query.trim() === '') {
|
|
32
19
|
this.searchStore.setQuery('');
|
|
@@ -92,44 +79,39 @@ export class SearchcraftAutoSearchForm {
|
|
|
92
79
|
};
|
|
93
80
|
this.autoSearchFormClass = '';
|
|
94
81
|
this.clearInput = () => { };
|
|
95
|
-
this.
|
|
82
|
+
this.config = undefined;
|
|
96
83
|
this.customStylesForInput = {};
|
|
97
84
|
this.inputCaptionValue = '';
|
|
98
85
|
this.labelForInput = '';
|
|
99
86
|
this.placeholderValue = 'Search here';
|
|
100
87
|
this.searchContainerClass = '';
|
|
101
|
-
this.config = {
|
|
102
|
-
readKey: '',
|
|
103
|
-
endpointURL: '',
|
|
104
|
-
index: [],
|
|
105
|
-
};
|
|
106
88
|
this.error = false;
|
|
107
89
|
this.isRequesting = false;
|
|
108
90
|
this.query = '';
|
|
109
91
|
this.searchResults = null;
|
|
110
92
|
}
|
|
111
|
-
init(
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
this.
|
|
120
|
-
this.
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
if (this.configString) {
|
|
125
|
-
this.init(this.configString);
|
|
93
|
+
init() {
|
|
94
|
+
var _a;
|
|
95
|
+
if (this.config) {
|
|
96
|
+
const searchcraft = new SearchcraftCore(this.config, {
|
|
97
|
+
sdkName: packageJson.name,
|
|
98
|
+
sdkVersion: packageJson.version,
|
|
99
|
+
});
|
|
100
|
+
this.searchStore.initialize(searchcraft, true);
|
|
101
|
+
(_a = this.unsubscribe) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
102
|
+
this.unsubscribe = useSearchcraftStore.subscribe((state) => {
|
|
103
|
+
this.isRequesting = state.isRequesting;
|
|
104
|
+
this.searchResults = Object.assign({}, state.searchResults);
|
|
105
|
+
});
|
|
126
106
|
}
|
|
127
107
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
108
|
+
componentDidLoad() {
|
|
109
|
+
this.init();
|
|
110
|
+
}
|
|
111
|
+
onConfigChange() {
|
|
112
|
+
this.init();
|
|
132
113
|
}
|
|
114
|
+
connectedCallback() { }
|
|
133
115
|
disconnectedCallback() {
|
|
134
116
|
if (this.unsubscribe) {
|
|
135
117
|
this.unsubscribe();
|
|
@@ -137,7 +119,7 @@ export class SearchcraftAutoSearchForm {
|
|
|
137
119
|
}
|
|
138
120
|
render() {
|
|
139
121
|
const parsedCustomStyles = parseCustomStyles(this.customStylesForInput);
|
|
140
|
-
return (h("form", { key: '
|
|
122
|
+
return (h("form", { key: '3c1069cbaf543e9b06616d7440eb784010a7b601', class: 'searchcraft-auto-search-form', onSubmit: this.handleFormSubmit }, h("searchcraft-input-label", { key: '7ba138f9335b59ee2205a22ef3a8af306db102d1', label: this.labelForInput }), h("searchcraft-input", { key: 'a7400629e259ea15cd58d5f2c87f1659c8d6addb', customStyles: parsedCustomStyles, "input-caption-value": this.inputCaptionValue, "is-requesting": this.isRequesting, onClearInput: this.handleClearInput, onInputChange: this.handleInputChange.bind(this), "placeholder-value": this.placeholderValue, query: this.query }), this.error && (h("searchcraft-error-message", { key: 'f304152c611d3e8849a9d24b07a9db3d5d71197f', errorMessage: 'Please enter a search query.' }))));
|
|
141
123
|
}
|
|
142
124
|
static get is() { return "searchcraft-auto-search-form"; }
|
|
143
125
|
static get originalStyleUrls() {
|
|
@@ -186,23 +168,26 @@ export class SearchcraftAutoSearchForm {
|
|
|
186
168
|
},
|
|
187
169
|
"defaultValue": "() => {}"
|
|
188
170
|
},
|
|
189
|
-
"
|
|
190
|
-
"type": "
|
|
171
|
+
"config": {
|
|
172
|
+
"type": "unknown",
|
|
191
173
|
"mutable": false,
|
|
192
174
|
"complexType": {
|
|
193
|
-
"original": "
|
|
194
|
-
"resolved": "
|
|
195
|
-
"references": {
|
|
175
|
+
"original": "SearchcraftConfig | undefined",
|
|
176
|
+
"resolved": "SearchcraftConfig",
|
|
177
|
+
"references": {
|
|
178
|
+
"SearchcraftConfig": {
|
|
179
|
+
"location": "import",
|
|
180
|
+
"path": "@searchcraft/core",
|
|
181
|
+
"id": "../core-sdk/dist/index.d.ts::SearchcraftConfig"
|
|
182
|
+
}
|
|
183
|
+
}
|
|
196
184
|
},
|
|
197
185
|
"required": false,
|
|
198
186
|
"optional": false,
|
|
199
187
|
"docs": {
|
|
200
188
|
"tags": [],
|
|
201
189
|
"text": ""
|
|
202
|
-
}
|
|
203
|
-
"attribute": "config-string",
|
|
204
|
-
"reflect": false,
|
|
205
|
-
"defaultValue": "''"
|
|
190
|
+
}
|
|
206
191
|
},
|
|
207
192
|
"customStylesForInput": {
|
|
208
193
|
"type": "string",
|
|
@@ -303,7 +288,6 @@ export class SearchcraftAutoSearchForm {
|
|
|
303
288
|
}
|
|
304
289
|
static get states() {
|
|
305
290
|
return {
|
|
306
|
-
"config": {},
|
|
307
291
|
"error": {},
|
|
308
292
|
"isRequesting": {},
|
|
309
293
|
"query": {},
|
|
@@ -343,9 +327,10 @@ export class SearchcraftAutoSearchForm {
|
|
|
343
327
|
}
|
|
344
328
|
}];
|
|
345
329
|
}
|
|
330
|
+
static get elementRef() { return "element"; }
|
|
346
331
|
static get watchers() {
|
|
347
332
|
return [{
|
|
348
|
-
"propName": "
|
|
333
|
+
"propName": "config",
|
|
349
334
|
"methodName": "onConfigChange"
|
|
350
335
|
}];
|
|
351
336
|
}
|
package/dist/collection/components/searchcraft-auto-search-form/searchcraft-auto-search-form.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchcraft-auto-search-form.js","sourceRoot":"","sources":["../../../../src/components/searchcraft-auto-search-form/searchcraft-auto-search-form.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Prop,\n State,\n Event,\n type EventEmitter,\n h,\n Watch,\n} from '@stencil/core';\n\nimport {\n type SearchcraftConfig,\n SearchcraftCore,\n type SearchcraftResponse,\n} from '@searchcraft/core';\n\nimport { useSearchcraftStore } from '@provider/store';\nimport { parseCustomStyles } from '@utils/utils';\nimport type { ScInputCustomEvent } from '@components/searchcraft-input/searchcraft-input';\n\nimport packageJson from '../../../package.json';\n\n@Component({\n tag: 'searchcraft-auto-search-form',\n styleUrl: 'searchcraft-auto-search-form.module.scss',\n shadow: false,\n})\nexport class SearchcraftAutoSearchForm {\n @Prop() autoSearchFormClass = '';\n @Prop() clearInput: () => void = () => {};\n @Prop() configString = '';\n @Prop() customStylesForInput: string | Record<string, string> = {};\n @Prop() inputCaptionValue = '';\n @Prop() labelForInput = '';\n @Prop() placeholderValue = 'Search here';\n @Prop() searchContainerClass = '';\n\n @Event() inputClearedOrNoResults: EventEmitter<void>;\n @Event() querySubmit: EventEmitter<string>;\n\n @State() config: SearchcraftConfig = {\n readKey: '',\n endpointURL: '',\n index: [],\n };\n @State() error = false;\n @State() isRequesting = false;\n @State() query = '';\n @State() searchResults: SearchcraftResponse | null = null;\n\n private debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n private debounceDelay = 0;\n private searchStore = useSearchcraftStore.getState();\n unsubscribe: () => void;\n\n private setConfigFromString = (configString: string) => {\n if (configString) {\n try {\n const parsedConfig = JSON.parse(configString) as SearchcraftConfig;\n this.config = parsedConfig;\n } catch {\n console.error(\n 'Error: Invalid config passed to searchcraft-auto-search-form.',\n );\n }\n }\n };\n\n init(configString: string) {\n this.setConfigFromString(configString);\n const searchcraft = new SearchcraftCore(this.config, {\n sdkName: packageJson.name,\n sdkVersion: packageJson.version,\n });\n this.searchStore.initialize(searchcraft, true);\n\n this.unsubscribe = useSearchcraftStore.subscribe((state) => {\n this.isRequesting = state.isRequesting;\n this.searchResults = { ...state.searchResults };\n });\n }\n\n connectedCallback() {\n if (this.configString) {\n this.init(this.configString);\n }\n }\n\n @Watch('configString')\n onConfigChange(configString: string) {\n if (configString) {\n this.init(configString);\n }\n }\n\n disconnectedCallback() {\n if (this.unsubscribe) {\n this.unsubscribe();\n }\n }\n\n handleInputChange = (event: ScInputCustomEvent<string>) => {\n const target = event.detail;\n if (target === this.query) {\n return;\n }\n this.query = target;\n // TODO: When input changes, reset any active filters\n // this.searchStore.resetAllFilters();\n\n const performSearchActions = () => {\n if (this.query.trim() === '') {\n this.searchStore.setQuery('');\n this.searchResults = null;\n this.searchStore.setSearchResults(null);\n this.inputClearedOrNoResults.emit();\n } else {\n this.searchStore.setQuery(this.query);\n this.querySubmit.emit();\n this.runSearch();\n }\n };\n\n // Only set a timeout if debounceDelay > 0\n if (this.debounceDelay > 0) {\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n this.debounceTimeout = setTimeout(\n performSearchActions,\n this.debounceDelay,\n );\n } else {\n // Otherwise just call search actions directly\n performSearchActions();\n }\n };\n\n handleClearInput = () => {\n if (this.query === '' && !this.searchResults) {\n return;\n }\n this.query = '';\n this.searchResults = null;\n this.searchStore.setQuery('');\n this.searchStore.setSearchResults(null);\n\n if (typeof this.clearInput === 'function') {\n this.clearInput();\n }\n\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n\n this.error = false;\n this.inputClearedOrNoResults.emit();\n };\n\n private runSearch = async () => {\n if (this.query.trim() === '') {\n this.error = true;\n this.inputClearedOrNoResults.emit();\n } else {\n this.error = false;\n this.searchStore.setQuery(this.query);\n\n try {\n await this.searchStore.search();\n } catch (error) {\n this.error = true;\n this.inputClearedOrNoResults.emit();\n }\n }\n };\n\n handleFormSubmit = async (event: Event) => {\n event.preventDefault();\n await this.runSearch();\n };\n\n render() {\n const parsedCustomStyles = parseCustomStyles(this.customStylesForInput);\n return (\n <form\n class='searchcraft-auto-search-form'\n onSubmit={this.handleFormSubmit}\n >\n <searchcraft-input-label label={this.labelForInput} />\n <searchcraft-input\n customStyles={parsedCustomStyles}\n input-caption-value={this.inputCaptionValue}\n is-requesting={this.isRequesting}\n onClearInput={this.handleClearInput}\n onInputChange={this.handleInputChange.bind(this)}\n placeholder-value={this.placeholderValue}\n query={this.query}\n />\n {this.error && (\n <searchcraft-error-message errorMessage='Please enter a search query.' />\n )}\n </form>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"searchcraft-auto-search-form.js","sourceRoot":"","sources":["../../../../src/components/searchcraft-auto-search-form/searchcraft-auto-search-form.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Prop,\n State,\n Event,\n type EventEmitter,\n h,\n Element,\n Watch,\n} from '@stencil/core';\n\nimport {\n type SearchcraftConfig,\n SearchcraftCore,\n type SearchcraftResponse,\n} from '@searchcraft/core';\n\nimport { useSearchcraftStore } from '@provider/store';\nimport { parseCustomStyles } from '@utils/utils';\nimport type { ScInputCustomEvent } from '@components/searchcraft-input/searchcraft-input';\n\nimport packageJson from '../../../package.json';\n\n@Component({\n tag: 'searchcraft-auto-search-form',\n styleUrl: 'searchcraft-auto-search-form.module.scss',\n shadow: false,\n})\nexport class SearchcraftAutoSearchForm {\n @Prop() autoSearchFormClass = '';\n @Prop() clearInput: () => void = () => {};\n @Prop() config: SearchcraftConfig | undefined;\n @Prop() customStylesForInput: string | Record<string, string> = {};\n @Prop() inputCaptionValue = '';\n @Prop() labelForInput = '';\n @Prop() placeholderValue = 'Search here';\n @Prop() searchContainerClass = '';\n\n @Event() inputClearedOrNoResults: EventEmitter<void>;\n @Event() querySubmit: EventEmitter<string>;\n\n @State() error = false;\n @State() isRequesting = false;\n @State() query = '';\n @State() searchResults: SearchcraftResponse | null = null;\n\n @Element() element: HTMLElement;\n\n private debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n private debounceDelay = 0;\n private searchStore = useSearchcraftStore.getState();\n unsubscribe: () => void;\n\n init() {\n if (this.config) {\n const searchcraft = new SearchcraftCore(this.config, {\n sdkName: packageJson.name,\n sdkVersion: packageJson.version,\n });\n this.searchStore.initialize(searchcraft, true);\n\n this.unsubscribe?.();\n this.unsubscribe = useSearchcraftStore.subscribe((state) => {\n this.isRequesting = state.isRequesting;\n this.searchResults = { ...state.searchResults };\n });\n }\n }\n\n componentDidLoad() {\n this.init();\n }\n\n @Watch('config')\n onConfigChange() {\n this.init();\n }\n\n connectedCallback() {}\n\n disconnectedCallback() {\n if (this.unsubscribe) {\n this.unsubscribe();\n }\n }\n\n handleInputChange = (event: ScInputCustomEvent<string>) => {\n const target = event.detail;\n if (target === this.query) {\n return;\n }\n this.query = target;\n\n const performSearchActions = () => {\n if (this.query.trim() === '') {\n this.searchStore.setQuery('');\n this.searchResults = null;\n this.searchStore.setSearchResults(null);\n this.inputClearedOrNoResults.emit();\n } else {\n this.searchStore.setQuery(this.query);\n this.querySubmit.emit();\n this.runSearch();\n }\n };\n\n // Only set a timeout if debounceDelay > 0\n if (this.debounceDelay > 0) {\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n this.debounceTimeout = setTimeout(\n performSearchActions,\n this.debounceDelay,\n );\n } else {\n // Otherwise just call search actions directly\n performSearchActions();\n }\n };\n\n handleClearInput = () => {\n if (this.query === '' && !this.searchResults) {\n return;\n }\n this.query = '';\n this.searchResults = null;\n this.searchStore.setQuery('');\n this.searchStore.setSearchResults(null);\n\n if (typeof this.clearInput === 'function') {\n this.clearInput();\n }\n\n if (this.debounceTimeout) {\n clearTimeout(this.debounceTimeout);\n }\n\n this.error = false;\n this.inputClearedOrNoResults.emit();\n };\n\n private runSearch = async () => {\n if (this.query.trim() === '') {\n this.error = true;\n this.inputClearedOrNoResults.emit();\n } else {\n this.error = false;\n this.searchStore.setQuery(this.query);\n\n try {\n await this.searchStore.search();\n } catch (error) {\n this.error = true;\n this.inputClearedOrNoResults.emit();\n }\n }\n };\n\n handleFormSubmit = async (event: Event) => {\n event.preventDefault();\n await this.runSearch();\n };\n\n render() {\n const parsedCustomStyles = parseCustomStyles(this.customStylesForInput);\n return (\n <form\n class='searchcraft-auto-search-form'\n onSubmit={this.handleFormSubmit}\n >\n <searchcraft-input-label label={this.labelForInput} />\n <searchcraft-input\n customStyles={parsedCustomStyles}\n input-caption-value={this.inputCaptionValue}\n is-requesting={this.isRequesting}\n onClearInput={this.handleClearInput}\n onInputChange={this.handleInputChange.bind(this)}\n placeholder-value={this.placeholderValue}\n query={this.query}\n />\n {this.error && (\n <searchcraft-error-message errorMessage='Please enter a search query.' />\n )}\n </form>\n );\n }\n}\n"]}
|
|
@@ -3,16 +3,6 @@ import { useSearchcraftStore } from "../../provider/store";
|
|
|
3
3
|
import { getDocumentValueFromSearchResultMapping, serializeStyles, } from "../../utils/utils";
|
|
4
4
|
export class SearchcraftBaseSearchResults {
|
|
5
5
|
constructor() {
|
|
6
|
-
this.parseSearchResultMappings = (mappingString) => {
|
|
7
|
-
if (mappingString) {
|
|
8
|
-
try {
|
|
9
|
-
this.parsedMappings = JSON.parse(this.searchResultMappings);
|
|
10
|
-
}
|
|
11
|
-
catch (_a) {
|
|
12
|
-
console.error('Error: Invalid searchResultsMappings passed to searchcraft-base-search-results.');
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
};
|
|
16
6
|
this.adInterval = 4;
|
|
17
7
|
this.customStylesForResults = undefined;
|
|
18
8
|
this.searchResultMappings = undefined;
|
|
@@ -27,13 +17,6 @@ export class SearchcraftBaseSearchResults {
|
|
|
27
17
|
this.hasSearched = false;
|
|
28
18
|
this.query = '';
|
|
29
19
|
this.searchResults = null;
|
|
30
|
-
this.parsedMappings = undefined;
|
|
31
|
-
}
|
|
32
|
-
onItemsChange(searchResultMappings) {
|
|
33
|
-
this.parseSearchResultMappings(searchResultMappings);
|
|
34
|
-
}
|
|
35
|
-
connectedCallback() {
|
|
36
|
-
this.parseSearchResultMappings(this.searchResultMappings);
|
|
37
20
|
}
|
|
38
21
|
componentDidLoad() {
|
|
39
22
|
this.unsubscribe = useSearchcraftStore.subscribe((state) => {
|
|
@@ -59,13 +42,13 @@ export class SearchcraftBaseSearchResults {
|
|
|
59
42
|
/**
|
|
60
43
|
* Index field values -> Result container props mappings.
|
|
61
44
|
*/
|
|
62
|
-
const titleContent = getDocumentValueFromSearchResultMapping(document, this.
|
|
63
|
-
const subtitleContent = getDocumentValueFromSearchResultMapping(document, this.
|
|
64
|
-
const bodyContent = getDocumentValueFromSearchResultMapping(document, this.
|
|
65
|
-
const containerHref = getDocumentValueFromSearchResultMapping(document, this.
|
|
66
|
-
const buttonHref = getDocumentValueFromSearchResultMapping(document, this.
|
|
67
|
-
const imageSource = getDocumentValueFromSearchResultMapping(document, this.
|
|
68
|
-
const footerContent = getDocumentValueFromSearchResultMapping(document, this.
|
|
45
|
+
const titleContent = getDocumentValueFromSearchResultMapping(document, this.searchResultMappings.title);
|
|
46
|
+
const subtitleContent = getDocumentValueFromSearchResultMapping(document, this.searchResultMappings.subtitle);
|
|
47
|
+
const bodyContent = getDocumentValueFromSearchResultMapping(document, this.searchResultMappings.body);
|
|
48
|
+
const containerHref = getDocumentValueFromSearchResultMapping(document, this.searchResultMappings.containerHref);
|
|
49
|
+
const buttonHref = getDocumentValueFromSearchResultMapping(document, this.searchResultMappings.buttonHref);
|
|
50
|
+
const imageSource = getDocumentValueFromSearchResultMapping(document, this.searchResultMappings.imageSource);
|
|
51
|
+
const footerContent = getDocumentValueFromSearchResultMapping(document, this.searchResultMappings.footer);
|
|
69
52
|
const serializedStyles = typeof this.customStylesForResults === 'string'
|
|
70
53
|
? this.customStylesForResults
|
|
71
54
|
: serializeStyles(this.customStylesForResults);
|
|
@@ -162,21 +145,25 @@ export class SearchcraftBaseSearchResults {
|
|
|
162
145
|
"reflect": false
|
|
163
146
|
},
|
|
164
147
|
"searchResultMappings": {
|
|
165
|
-
"type": "
|
|
148
|
+
"type": "unknown",
|
|
166
149
|
"mutable": false,
|
|
167
150
|
"complexType": {
|
|
168
|
-
"original": "
|
|
169
|
-
"resolved": "
|
|
170
|
-
"references": {
|
|
151
|
+
"original": "SearchResultMappings | undefined",
|
|
152
|
+
"resolved": "{ body?: SearchResultMapping; buttonHref?: SearchResultMapping; containerHref?: SearchResultMapping; footer?: SearchResultMapping; imageSource?: SearchResultMapping; subtitle?: SearchResultMapping; title?: SearchResultMapping; }",
|
|
153
|
+
"references": {
|
|
154
|
+
"SearchResultMappings": {
|
|
155
|
+
"location": "import",
|
|
156
|
+
"path": "types",
|
|
157
|
+
"id": "src/types/index.ts::SearchResultMappings"
|
|
158
|
+
}
|
|
159
|
+
}
|
|
171
160
|
},
|
|
172
161
|
"required": false,
|
|
173
162
|
"optional": false,
|
|
174
163
|
"docs": {
|
|
175
164
|
"tags": [],
|
|
176
165
|
"text": ""
|
|
177
|
-
}
|
|
178
|
-
"attribute": "search-result-mappings",
|
|
179
|
-
"reflect": false
|
|
166
|
+
}
|
|
180
167
|
},
|
|
181
168
|
"placeAdAtEnd": {
|
|
182
169
|
"type": "boolean",
|
|
@@ -325,8 +312,7 @@ export class SearchcraftBaseSearchResults {
|
|
|
325
312
|
return {
|
|
326
313
|
"hasSearched": {},
|
|
327
314
|
"query": {},
|
|
328
|
-
"searchResults": {}
|
|
329
|
-
"parsedMappings": {}
|
|
315
|
+
"searchResults": {}
|
|
330
316
|
};
|
|
331
317
|
}
|
|
332
318
|
static get events() {
|
|
@@ -347,11 +333,5 @@ export class SearchcraftBaseSearchResults {
|
|
|
347
333
|
}
|
|
348
334
|
}];
|
|
349
335
|
}
|
|
350
|
-
static get watchers() {
|
|
351
|
-
return [{
|
|
352
|
-
"propName": "searchResultMappings",
|
|
353
|
-
"methodName": "onItemsChange"
|
|
354
|
-
}];
|
|
355
|
-
}
|
|
356
336
|
}
|
|
357
337
|
//# sourceMappingURL=searchcraft-base-search-results.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchcraft-base-search-results.js","sourceRoot":"","sources":["../../../../src/components/searchcraft-base-search-results/searchcraft-base-search-results.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n h,\n Event,\n Prop,\n State,\n type EventEmitter,\n Watch,\n} from '@stencil/core';\n\nimport type { SearchcraftResponse } from '@searchcraft/core';\n\nimport { useSearchcraftStore } from '@provider/store';\n\nimport {\n getDocumentValueFromSearchResultMapping,\n serializeStyles,\n} from '@utils/utils';\nimport type { SearchResultMappings } from 'types';\n\n@Component({\n tag: 'searchcraft-base-search-results',\n styleUrl: 'searchcraft-base-search-results.module.scss',\n shadow: false,\n})\nexport class SearchcraftBaseSearchResults {\n @Prop() adInterval = 4;\n @Prop() customStylesForResults:\n | string\n | Record<string, Record<string, string>>\n | undefined;\n @Prop() searchResultMappings: string | undefined;\n @Prop() placeAdAtEnd = false;\n @Prop() placeAdAtStart = true;\n @Prop() resultImagePlacement: 'left' | 'right' = 'right';\n @Prop() buttonLabel: string | undefined;\n @Prop() buttonTarget: '_blank' | '_self' | '_top' | '_parent' = '_blank';\n @Prop() buttonRel: 'noreferrer' | 'noopener' | 'nofollow' | undefined;\n @Prop() containerTarget: '_blank' | '_self' | '_top' | '_parent' = '_blank';\n @Prop() containerRel: 'noreferrer' | 'noopener' | 'nofollow' | undefined;\n\n @Event() noResults: EventEmitter<void>;\n\n @State() hasSearched = false;\n @State() query = '';\n @State() searchResults: SearchcraftResponse | null = null;\n /** The parsed `searchResultMappings` prop. */\n @State() parsedMappings: SearchResultMappings | undefined;\n\n private unsubscribe: () => void;\n\n private parseSearchResultMappings = (mappingString: string | undefined) => {\n if (mappingString) {\n try {\n this.parsedMappings = JSON.parse(\n this.searchResultMappings,\n ) as SearchResultMappings;\n } catch {\n console.error(\n 'Error: Invalid searchResultsMappings passed to searchcraft-base-search-results.',\n );\n }\n }\n };\n\n @Watch('searchResultMappings')\n onItemsChange(searchResultMappings: string) {\n this.parseSearchResultMappings(searchResultMappings);\n }\n\n connectedCallback() {\n this.parseSearchResultMappings(this.searchResultMappings);\n }\n\n componentDidLoad() {\n this.unsubscribe = useSearchcraftStore.subscribe((state) => {\n if (state.query.length > 0) {\n this.hasSearched = true;\n } else {\n this.hasSearched = false;\n }\n this.searchResults = { ...state.searchResults };\n this.query = state.query;\n });\n\n const { searchResults, query } = useSearchcraftStore.getState();\n this.searchResults = searchResults;\n this.query = query;\n }\n\n disconnectedCallback() {\n if (this.unsubscribe) {\n this.unsubscribe();\n }\n }\n\n renderDocument(document: Record<string, unknown>, index: number) {\n /**\n * Index field values -> Result container props mappings.\n */\n const titleContent = getDocumentValueFromSearchResultMapping(\n document,\n this.parsedMappings.title,\n );\n const subtitleContent = getDocumentValueFromSearchResultMapping(\n document,\n this.parsedMappings.subtitle,\n );\n const bodyContent = getDocumentValueFromSearchResultMapping(\n document,\n this.parsedMappings.body,\n );\n const containerHref = getDocumentValueFromSearchResultMapping(\n document,\n this.parsedMappings.containerHref,\n );\n const buttonHref = getDocumentValueFromSearchResultMapping(\n document,\n this.parsedMappings.buttonHref,\n );\n const imageSource = getDocumentValueFromSearchResultMapping(\n document,\n this.parsedMappings.imageSource,\n );\n const footerContent = getDocumentValueFromSearchResultMapping(\n document,\n this.parsedMappings.footer,\n );\n\n const serializedStyles =\n typeof this.customStylesForResults === 'string'\n ? this.customStylesForResults\n : serializeStyles(this.customStylesForResults);\n\n return (\n <searchcraft-base-search-result\n key={`${document.document_id}-${index}`}\n custom-styles={serializedStyles}\n image-placement={this.resultImagePlacement}\n container-rel={this.containerRel}\n container-target={this.containerTarget}\n button-label={this.buttonLabel || 'View more'}\n button-rel={this.buttonRel}\n button-target={this.buttonTarget}\n document-position={index}\n title-content={titleContent}\n subtitle-content={subtitleContent}\n body-content={bodyContent}\n footer-content={footerContent}\n container-href={containerHref}\n button-href={buttonHref}\n image-src={imageSource}\n />\n );\n }\n\n render() {\n if (this.query.trim() === '') {\n return (\n <div class='searchcraft-search-results-empty-state-container'>\n <slot name='empty-search' />\n </div>\n );\n }\n\n if (!this.searchResults?.data) {\n return;\n }\n\n const documents: Record<string, unknown>[] =\n this.searchResults?.data?.hits?.map((data, _index) => {\n const { doc: result } = data;\n return result;\n });\n\n const finalComponents: JSX.Element[] = [];\n\n if (this.placeAdAtStart) {\n finalComponents.push(\n <div key='ad-section-start' class='searchcraft-ad-section'>\n <p>Ad Section</p>\n </div>,\n );\n }\n\n if (this.adInterval > 0) {\n documents.forEach((document, index) => {\n finalComponents.push(this.renderDocument(document, index));\n\n if ((index + 1) % this.adInterval === 0) {\n finalComponents.push(\n <div\n key={`ad-section-${index + 1}`}\n class='searchcraft-ad-section '\n >\n <p>Ad Section</p>\n </div>,\n );\n }\n });\n } else {\n const documentElements = documents.map((document, index) =>\n this.renderDocument(document, index),\n );\n finalComponents.push(...documentElements);\n }\n\n if (this.placeAdAtEnd) {\n finalComponents.push(\n <div key='ad-section-end' class='searchcraft-ad-section'>\n <p>Ad Section</p>\n </div>,\n );\n }\n\n if (this.query.length > 0 && this.searchResults?.data?.hits?.length === 0) {\n this.noResults.emit();\n }\n\n return (\n <div class='searchcraft-search-results-container'>\n {finalComponents}\n {this.query.length > 0 &&\n this.searchResults?.data?.hits?.length === 0 && (\n <div class='searchcraft-search-results-error-message-container'>\n <searchcraft-error-message\n error-message={`No search results found for \"${this.query}\" query`}\n />\n </div>\n )}\n </div>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"searchcraft-base-search-results.js","sourceRoot":"","sources":["../../../../src/components/searchcraft-base-search-results/searchcraft-base-search-results.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n h,\n Event,\n Prop,\n State,\n type EventEmitter,\n} from '@stencil/core';\n\nimport type { SearchcraftResponse } from '@searchcraft/core';\n\nimport { useSearchcraftStore } from '@provider/store';\n\nimport {\n getDocumentValueFromSearchResultMapping,\n serializeStyles,\n} from '@utils/utils';\nimport type { SearchResultMappings } from 'types';\n\n@Component({\n tag: 'searchcraft-base-search-results',\n styleUrl: 'searchcraft-base-search-results.module.scss',\n shadow: false,\n})\nexport class SearchcraftBaseSearchResults {\n @Prop() adInterval = 4;\n @Prop() customStylesForResults:\n | string\n | Record<string, Record<string, string>>\n | undefined;\n @Prop() searchResultMappings: SearchResultMappings | undefined;\n @Prop() placeAdAtEnd = false;\n @Prop() placeAdAtStart = true;\n @Prop() resultImagePlacement: 'left' | 'right' = 'right';\n @Prop() buttonLabel: string | undefined;\n @Prop() buttonTarget: '_blank' | '_self' | '_top' | '_parent' = '_blank';\n @Prop() buttonRel: 'noreferrer' | 'noopener' | 'nofollow' | undefined;\n @Prop() containerTarget: '_blank' | '_self' | '_top' | '_parent' = '_blank';\n @Prop() containerRel: 'noreferrer' | 'noopener' | 'nofollow' | undefined;\n\n @Event() noResults: EventEmitter<void>;\n\n @State() hasSearched = false;\n @State() query = '';\n @State() searchResults: SearchcraftResponse | null = null;\n\n private unsubscribe: () => void;\n\n componentDidLoad() {\n this.unsubscribe = useSearchcraftStore.subscribe((state) => {\n if (state.query.length > 0) {\n this.hasSearched = true;\n } else {\n this.hasSearched = false;\n }\n this.searchResults = { ...state.searchResults };\n this.query = state.query;\n });\n\n const { searchResults, query } = useSearchcraftStore.getState();\n this.searchResults = searchResults;\n this.query = query;\n }\n\n disconnectedCallback() {\n if (this.unsubscribe) {\n this.unsubscribe();\n }\n }\n\n renderDocument(document: Record<string, unknown>, index: number) {\n /**\n * Index field values -> Result container props mappings.\n */\n const titleContent = getDocumentValueFromSearchResultMapping(\n document,\n this.searchResultMappings.title,\n );\n const subtitleContent = getDocumentValueFromSearchResultMapping(\n document,\n this.searchResultMappings.subtitle,\n );\n const bodyContent = getDocumentValueFromSearchResultMapping(\n document,\n this.searchResultMappings.body,\n );\n const containerHref = getDocumentValueFromSearchResultMapping(\n document,\n this.searchResultMappings.containerHref,\n );\n const buttonHref = getDocumentValueFromSearchResultMapping(\n document,\n this.searchResultMappings.buttonHref,\n );\n const imageSource = getDocumentValueFromSearchResultMapping(\n document,\n this.searchResultMappings.imageSource,\n );\n const footerContent = getDocumentValueFromSearchResultMapping(\n document,\n this.searchResultMappings.footer,\n );\n\n const serializedStyles =\n typeof this.customStylesForResults === 'string'\n ? this.customStylesForResults\n : serializeStyles(this.customStylesForResults);\n\n return (\n <searchcraft-base-search-result\n key={`${document.document_id}-${index}`}\n custom-styles={serializedStyles}\n image-placement={this.resultImagePlacement}\n container-rel={this.containerRel}\n container-target={this.containerTarget}\n button-label={this.buttonLabel || 'View more'}\n button-rel={this.buttonRel}\n button-target={this.buttonTarget}\n document-position={index}\n title-content={titleContent}\n subtitle-content={subtitleContent}\n body-content={bodyContent}\n footer-content={footerContent}\n container-href={containerHref}\n button-href={buttonHref}\n image-src={imageSource}\n />\n );\n }\n\n render() {\n if (this.query.trim() === '') {\n return (\n <div class='searchcraft-search-results-empty-state-container'>\n <slot name='empty-search' />\n </div>\n );\n }\n\n if (!this.searchResults?.data) {\n return;\n }\n\n const documents: Record<string, unknown>[] =\n this.searchResults?.data?.hits?.map((data, _index) => {\n const { doc: result } = data;\n return result;\n });\n\n const finalComponents: JSX.Element[] = [];\n\n if (this.placeAdAtStart) {\n finalComponents.push(\n <div key='ad-section-start' class='searchcraft-ad-section'>\n <p>Ad Section</p>\n </div>,\n );\n }\n\n if (this.adInterval > 0) {\n documents.forEach((document, index) => {\n finalComponents.push(this.renderDocument(document, index));\n\n if ((index + 1) % this.adInterval === 0) {\n finalComponents.push(\n <div\n key={`ad-section-${index + 1}`}\n class='searchcraft-ad-section '\n >\n <p>Ad Section</p>\n </div>,\n );\n }\n });\n } else {\n const documentElements = documents.map((document, index) =>\n this.renderDocument(document, index),\n );\n finalComponents.push(...documentElements);\n }\n\n if (this.placeAdAtEnd) {\n finalComponents.push(\n <div key='ad-section-end' class='searchcraft-ad-section'>\n <p>Ad Section</p>\n </div>,\n );\n }\n\n if (this.query.length > 0 && this.searchResults?.data?.hits?.length === 0) {\n this.noResults.emit();\n }\n\n return (\n <div class='searchcraft-search-results-container'>\n {finalComponents}\n {this.query.length > 0 &&\n this.searchResults?.data?.hits?.length === 0 && (\n <div class='searchcraft-search-results-error-message-container'>\n <searchcraft-error-message\n error-message={`No search results found for \"${this.query}\" query`}\n />\n </div>\n )}\n </div>\n );\n }\n}\n"]}
|