@searchcraft/javascript-sdk 0.8.1 → 0.9.0
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 +25 -37
- package/dist/components/defineCustomElements.d.ts +1 -0
- package/dist/components/defineCustomElements.js +46 -0
- package/dist/components/index.d.ts +44 -11
- package/dist/components/index.js +104 -53
- package/dist/components/index.js.map +1 -1
- package/dist/components/p-05872320.js +1462 -0
- package/dist/components/p-05872320.js.map +1 -0
- package/dist/components/{p-433f974c.js → p-11b05b94.js} +5 -5
- package/dist/components/p-11b05b94.js.map +1 -0
- package/dist/components/{p-ae78be68.js → p-3026f7d3.js} +18 -127
- package/dist/components/p-3026f7d3.js.map +1 -0
- package/dist/components/{p-ec0d230e.js → p-3568414f.js} +4 -4
- package/dist/components/p-3568414f.js.map +1 -0
- package/dist/{cjs/SearchcraftStore-75fac5e0.js → components/p-6d8b0ead.js} +1408 -1350
- package/dist/components/p-6d8b0ead.js.map +1 -0
- package/dist/components/{p-d19bf6ff.js → p-71cc28c1.js} +2 -2
- package/dist/components/p-71cc28c1.js.map +1 -0
- package/dist/components/{p-fc7cda96.js → p-7777d986.js} +4 -4
- package/dist/components/{p-fc7cda96.js.map → p-7777d986.js.map} +1 -1
- package/dist/components/p-b0bc5cee.js +102 -0
- package/dist/components/p-b0bc5cee.js.map +1 -0
- package/dist/components/{p-4e9cd62e.js → p-bb12ab5a.js} +3 -3
- package/dist/components/{p-4e9cd62e.js.map → p-bb12ab5a.js.map} +1 -1
- package/dist/components/{p-97332d3e.js → p-cd9ba361.js} +3 -3
- package/dist/components/p-cd9ba361.js.map +1 -0
- package/dist/components/searchcraft-ad.d.ts +11 -0
- package/dist/components/searchcraft-ad.js +8 -0
- package/dist/components/searchcraft-ad.js.map +1 -0
- package/dist/components/searchcraft-base-search-result.js +1 -1
- package/dist/components/searchcraft-base-search-results.js +79 -29
- package/dist/components/searchcraft-base-search-results.js.map +1 -1
- package/dist/components/searchcraft-button.js +1 -1
- package/dist/components/searchcraft-facet-list.js +1 -1
- package/dist/components/searchcraft-filter-panel.js +7 -7
- package/dist/components/searchcraft-filter-panel.js.map +1 -1
- package/dist/components/searchcraft-input-form.js +1 -1
- package/dist/components/searchcraft-pagination.js +5 -5
- package/dist/components/searchcraft-pagination.js.map +1 -1
- package/dist/components/searchcraft-popover-button.js +3 -3
- package/dist/components/searchcraft-popover-button.js.map +1 -1
- package/dist/components/searchcraft-popover-form.js +28 -35
- package/dist/components/searchcraft-popover-form.js.map +1 -1
- package/dist/components/searchcraft-popover-list-item.js +1 -1
- package/dist/components/searchcraft-popover-list-view.js +1 -1
- package/dist/components/searchcraft-results-info.js +2 -2
- package/dist/components/searchcraft-results-info.js.map +1 -1
- package/dist/components/searchcraft-search-results-per-page.js +3 -3
- package/dist/components/searchcraft-search-results-per-page.js.map +1 -1
- package/dist/components/searchcraft-slider.js +1 -1
- package/dist/components/searchcraft-theme.js +1 -1
- package/dist/components/searchcraft-theme.js.map +1 -1
- package/dist/components/searchcraft-toggle-button.js +1 -1
- package/dist/types/components/searchcraft-ad/searchcraft-ad.d.ts +19 -0
- package/dist/types/components/searchcraft-base-search-results/searchcraft-base-search-results.d.ts +10 -7
- package/dist/types/components/searchcraft-facet-list/searchcraft-facet-list.d.ts +1 -1
- package/dist/types/components/searchcraft-input-form/searchcraft-input-form.d.ts +4 -29
- package/dist/types/components/searchcraft-popover-form/searchcraft-popover-form.d.ts +1 -11
- package/dist/types/components/searchcraft-popover-list-view/searchcraft-popover-list-view.d.ts +4 -0
- package/dist/types/components.d.ts +33 -158
- package/dist/types/index.d.ts +10 -1
- package/dist/types/store/SearchcraftStore.d.ts +4 -0
- package/dist/types/{provider → store}/SearchcraftStore.types.d.ts +2 -1
- package/dist/{collection/provider/store.js → types/store/index.d.ts} +2 -2
- package/package.json +8 -17
- package/dist/cjs/SearchcraftStore-75fac5e0.js.map +0 -1
- package/dist/cjs/app-globals-3a1e7e63.js +0 -7
- package/dist/cjs/app-globals-3a1e7e63.js.map +0 -1
- package/dist/cjs/index-5b0b9d4c.js +0 -84
- package/dist/cjs/index-5b0b9d4c.js.map +0 -1
- package/dist/cjs/index-a81df4f0.js +0 -1577
- package/dist/cjs/index-a81df4f0.js.map +0 -1
- package/dist/cjs/index.cjs.js +0 -14
- package/dist/cjs/index.cjs.js.map +0 -1
- package/dist/cjs/loader.cjs.js +0 -17
- package/dist/cjs/loader.cjs.js.map +0 -1
- package/dist/cjs/searchcraft-base-search-result_2.cjs.entry.js +0 -152
- package/dist/cjs/searchcraft-base-search-result_2.cjs.entry.js.map +0 -1
- package/dist/cjs/searchcraft-base-search-results.cjs.entry.js +0 -97
- package/dist/cjs/searchcraft-base-search-results.cjs.entry.js.map +0 -1
- package/dist/cjs/searchcraft-button_3.cjs.entry.js +0 -88
- package/dist/cjs/searchcraft-button_3.cjs.entry.js.map +0 -1
- package/dist/cjs/searchcraft-facet-list_3.cjs.entry.js +0 -393
- package/dist/cjs/searchcraft-facet-list_3.cjs.entry.js.map +0 -1
- package/dist/cjs/searchcraft-filter-panel.cjs.entry.js +0 -113
- package/dist/cjs/searchcraft-filter-panel.cjs.entry.js.map +0 -1
- package/dist/cjs/searchcraft-input-form_2.cjs.entry.js +0 -260
- package/dist/cjs/searchcraft-input-form_2.cjs.entry.js.map +0 -1
- package/dist/cjs/searchcraft-javascript-sdk.cjs.js +0 -27
- package/dist/cjs/searchcraft-javascript-sdk.cjs.js.map +0 -1
- package/dist/cjs/searchcraft-pagination.cjs.entry.js +0 -106
- package/dist/cjs/searchcraft-pagination.cjs.entry.js.map +0 -1
- package/dist/cjs/searchcraft-popover-button.cjs.entry.js +0 -22
- package/dist/cjs/searchcraft-popover-button.cjs.entry.js.map +0 -1
- package/dist/cjs/searchcraft-popover-form.cjs.entry.js +0 -234
- package/dist/cjs/searchcraft-popover-form.cjs.entry.js.map +0 -1
- package/dist/cjs/searchcraft-popover-list-item_2.cjs.entry.js +0 -101
- package/dist/cjs/searchcraft-popover-list-item_2.cjs.entry.js.map +0 -1
- package/dist/cjs/searchcraft-results-info.cjs.entry.js +0 -80
- package/dist/cjs/searchcraft-results-info.cjs.entry.js.map +0 -1
- package/dist/cjs/searchcraft-search-results-per-page.cjs.entry.js +0 -75
- package/dist/cjs/searchcraft-search-results-per-page.cjs.entry.js.map +0 -1
- package/dist/cjs/searchcraft-select.cjs.entry.js +0 -70
- package/dist/cjs/searchcraft-select.cjs.entry.js.map +0 -1
- package/dist/cjs/searchcraft-theme.cjs.entry.js +0 -56
- package/dist/cjs/searchcraft-theme.cjs.entry.js.map +0 -1
- package/dist/cjs/styles-7b2d06f2.js +0 -28
- package/dist/cjs/styles-7b2d06f2.js.map +0 -1
- package/dist/cjs/units-fe4d8083.js +0 -88
- package/dist/cjs/units-fe4d8083.js.map +0 -1
- package/dist/collection/collection-manifest.json +0 -32
- package/dist/collection/components/searchcraft-base-search-result/searchcraft-base-search-result.js +0 -302
- package/dist/collection/components/searchcraft-base-search-result/searchcraft-base-search-result.js.map +0 -1
- package/dist/collection/components/searchcraft-base-search-result-ad/searchcraft-base-search-result-ad.js +0 -73
- package/dist/collection/components/searchcraft-base-search-result-ad/searchcraft-base-search-result-ad.js.map +0 -1
- package/dist/collection/components/searchcraft-base-search-results/searchcraft-base-search-results.js +0 -313
- package/dist/collection/components/searchcraft-base-search-results/searchcraft-base-search-results.js.map +0 -1
- package/dist/collection/components/searchcraft-button/searchcraft-button.js +0 -217
- package/dist/collection/components/searchcraft-button/searchcraft-button.js.map +0 -1
- package/dist/collection/components/searchcraft-error-message/searchcraft-error-message.js +0 -44
- package/dist/collection/components/searchcraft-error-message/searchcraft-error-message.js.map +0 -1
- package/dist/collection/components/searchcraft-facet-list/searchcraft-facet-list.js +0 -200
- package/dist/collection/components/searchcraft-facet-list/searchcraft-facet-list.js.map +0 -1
- package/dist/collection/components/searchcraft-filter-panel/searchcraft-filter-panel.js +0 -149
- package/dist/collection/components/searchcraft-filter-panel/searchcraft-filter-panel.js.map +0 -1
- package/dist/collection/components/searchcraft-input-form/searchcraft-input-form.js +0 -443
- package/dist/collection/components/searchcraft-input-form/searchcraft-input-form.js.map +0 -1
- package/dist/collection/components/searchcraft-input-label/searchcraft-input-label.js +0 -67
- package/dist/collection/components/searchcraft-input-label/searchcraft-input-label.js.map +0 -1
- package/dist/collection/components/searchcraft-pagination/searchcraft-pagination.js +0 -141
- package/dist/collection/components/searchcraft-pagination/searchcraft-pagination.js.map +0 -1
- package/dist/collection/components/searchcraft-popover-button/searchcraft-popover-button.js +0 -15
- package/dist/collection/components/searchcraft-popover-button/searchcraft-popover-button.js.map +0 -1
- package/dist/collection/components/searchcraft-popover-form/searchcraft-popover-form.js +0 -381
- package/dist/collection/components/searchcraft-popover-form/searchcraft-popover-form.js.map +0 -1
- package/dist/collection/components/searchcraft-popover-list-item/searchcraft-popover-list-item.js +0 -128
- package/dist/collection/components/searchcraft-popover-list-item/searchcraft-popover-list-item.js.map +0 -1
- package/dist/collection/components/searchcraft-popover-list-item-ad/searchcraft-popover-list-item-ad.js +0 -73
- package/dist/collection/components/searchcraft-popover-list-item-ad/searchcraft-popover-list-item-ad.js.map +0 -1
- package/dist/collection/components/searchcraft-popover-list-view/searchcraft-popover-list-view.js +0 -141
- package/dist/collection/components/searchcraft-popover-list-view/searchcraft-popover-list-view.js.map +0 -1
- package/dist/collection/components/searchcraft-results-info/searchcraft-results-info.js +0 -138
- package/dist/collection/components/searchcraft-results-info/searchcraft-results-info.js.map +0 -1
- package/dist/collection/components/searchcraft-search-results-per-page/searchcraft-search-results-per-page.js +0 -129
- package/dist/collection/components/searchcraft-search-results-per-page/searchcraft-search-results-per-page.js.map +0 -1
- package/dist/collection/components/searchcraft-select/searchcraft-select.js +0 -261
- package/dist/collection/components/searchcraft-select/searchcraft-select.js.map +0 -1
- package/dist/collection/components/searchcraft-slider/searchcraft-slider.js +0 -194
- package/dist/collection/components/searchcraft-slider/searchcraft-slider.js.map +0 -1
- package/dist/collection/components/searchcraft-theme/searchcraft-theme.js +0 -97
- package/dist/collection/components/searchcraft-theme/searchcraft-theme.js.map +0 -1
- package/dist/collection/components/searchcraft-toggle-button/searchcraft-toggle-button.js +0 -118
- package/dist/collection/components/searchcraft-toggle-button/searchcraft-toggle-button.js.map +0 -1
- package/dist/collection/index.js +0 -3
- package/dist/collection/index.js.map +0 -1
- package/dist/collection/provider/SearchcraftStore.js +0 -160
- package/dist/collection/provider/SearchcraftStore.js.map +0 -1
- package/dist/collection/provider/SearchcraftStore.types.js +0 -2
- package/dist/collection/provider/SearchcraftStore.types.js.map +0 -1
- package/dist/collection/provider/store.js.map +0 -1
- package/dist/collection/utils/facets.js +0 -128
- package/dist/collection/utils/facets.js.map +0 -1
- package/dist/collection/utils/index.js +0 -4
- package/dist/collection/utils/index.js.map +0 -1
- package/dist/collection/utils/styles.js +0 -22
- package/dist/collection/utils/styles.js.map +0 -1
- package/dist/collection/utils/units.js +0 -83
- package/dist/collection/utils/units.js.map +0 -1
- package/dist/components/p-25ee7496.js +0 -58
- package/dist/components/p-25ee7496.js.map +0 -1
- package/dist/components/p-38419178.js +0 -1625
- package/dist/components/p-38419178.js.map +0 -1
- package/dist/components/p-433f974c.js.map +0 -1
- package/dist/components/p-97332d3e.js.map +0 -1
- package/dist/components/p-ae78be68.js.map +0 -1
- package/dist/components/p-bff4d3fc.js +0 -65
- package/dist/components/p-bff4d3fc.js.map +0 -1
- package/dist/components/p-d19bf6ff.js.map +0 -1
- package/dist/components/p-de4a48b1.js +0 -65
- package/dist/components/p-de4a48b1.js.map +0 -1
- package/dist/components/p-ec0d230e.js.map +0 -1
- package/dist/components/searchcraft-base-search-result-ad.d.ts +0 -11
- package/dist/components/searchcraft-base-search-result-ad.js +0 -8
- package/dist/components/searchcraft-base-search-result-ad.js.map +0 -1
- package/dist/components/searchcraft-popover-list-item-ad.d.ts +0 -11
- package/dist/components/searchcraft-popover-list-item-ad.js +0 -8
- package/dist/components/searchcraft-popover-list-item-ad.js.map +0 -1
- package/dist/esm/SearchcraftStore-3cfd565a.js +0 -1625
- package/dist/esm/SearchcraftStore-3cfd565a.js.map +0 -1
- package/dist/esm/app-globals-0f993ce5.js +0 -5
- package/dist/esm/app-globals-0f993ce5.js.map +0 -1
- package/dist/esm/index-3608c57d.js +0 -1548
- package/dist/esm/index-3608c57d.js.map +0 -1
- package/dist/esm/index-72ac5051.js +0 -82
- package/dist/esm/index-72ac5051.js.map +0 -1
- package/dist/esm/index.js +0 -4
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/loader.js +0 -13
- package/dist/esm/loader.js.map +0 -1
- package/dist/esm/searchcraft-base-search-result_2.entry.js +0 -147
- package/dist/esm/searchcraft-base-search-result_2.entry.js.map +0 -1
- package/dist/esm/searchcraft-base-search-results.entry.js +0 -93
- package/dist/esm/searchcraft-base-search-results.entry.js.map +0 -1
- package/dist/esm/searchcraft-button_3.entry.js +0 -82
- package/dist/esm/searchcraft-button_3.entry.js.map +0 -1
- package/dist/esm/searchcraft-facet-list_3.entry.js +0 -387
- package/dist/esm/searchcraft-facet-list_3.entry.js.map +0 -1
- package/dist/esm/searchcraft-filter-panel.entry.js +0 -109
- package/dist/esm/searchcraft-filter-panel.entry.js.map +0 -1
- package/dist/esm/searchcraft-input-form_2.entry.js +0 -255
- package/dist/esm/searchcraft-input-form_2.entry.js.map +0 -1
- package/dist/esm/searchcraft-javascript-sdk.js +0 -22
- package/dist/esm/searchcraft-javascript-sdk.js.map +0 -1
- package/dist/esm/searchcraft-pagination.entry.js +0 -102
- package/dist/esm/searchcraft-pagination.entry.js.map +0 -1
- package/dist/esm/searchcraft-popover-button.entry.js +0 -18
- package/dist/esm/searchcraft-popover-button.entry.js.map +0 -1
- package/dist/esm/searchcraft-popover-form.entry.js +0 -230
- package/dist/esm/searchcraft-popover-form.entry.js.map +0 -1
- package/dist/esm/searchcraft-popover-list-item_2.entry.js +0 -96
- package/dist/esm/searchcraft-popover-list-item_2.entry.js.map +0 -1
- package/dist/esm/searchcraft-results-info.entry.js +0 -76
- package/dist/esm/searchcraft-results-info.entry.js.map +0 -1
- package/dist/esm/searchcraft-search-results-per-page.entry.js +0 -71
- package/dist/esm/searchcraft-search-results-per-page.entry.js.map +0 -1
- package/dist/esm/searchcraft-select.entry.js +0 -66
- package/dist/esm/searchcraft-select.entry.js.map +0 -1
- package/dist/esm/searchcraft-theme.entry.js +0 -52
- package/dist/esm/searchcraft-theme.entry.js.map +0 -1
- package/dist/esm/styles-961644ef.js +0 -25
- package/dist/esm/styles-961644ef.js.map +0 -1
- package/dist/esm/units-daaf96f5.js +0 -84
- package/dist/esm/units-daaf96f5.js.map +0 -1
- package/dist/index.cjs.js +0 -1
- package/dist/index.js +0 -1
- package/dist/loader/cdn.js +0 -1
- package/dist/loader/index.cjs.js +0 -1
- package/dist/loader/index.d.ts +0 -24
- package/dist/loader/index.es2017.js +0 -1
- package/dist/loader/index.js +0 -2
- package/dist/loader/package.json +0 -11
- package/dist/searchcraft-javascript-sdk/index.esm.js +0 -2
- package/dist/searchcraft-javascript-sdk/index.esm.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-279f3e15.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-279f3e15.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-2bc82b48.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-2bc82b48.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-2dc07b47.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-2dc07b47.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-38419178.js +0 -11
- package/dist/searchcraft-javascript-sdk/p-38419178.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-5cdc6210.js +0 -7
- package/dist/searchcraft-javascript-sdk/p-5cdc6210.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-5e064c07.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-5e064c07.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-6104fe5d.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-6104fe5d.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-69da4e58.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-69da4e58.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-6bffd3f5.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-6bffd3f5.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-75779e4b.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-75779e4b.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-7e13c128.js +0 -3
- package/dist/searchcraft-javascript-sdk/p-7e13c128.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-7f4dd50c.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-7f4dd50c.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-9340f4e4.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-9340f4e4.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-a84b1548.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-a84b1548.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-b8ea0454.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-b8ea0454.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-c4a9d8ab.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-c4a9d8ab.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-d2fffca9.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-d2fffca9.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-d9551738.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-d9551738.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-e11de2d6.entry.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-e11de2d6.entry.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/p-e1255160.js +0 -2
- package/dist/searchcraft-javascript-sdk/p-e1255160.js.map +0 -1
- package/dist/searchcraft-javascript-sdk/searchcraft-javascript-sdk.esm.js +0 -2
- package/dist/searchcraft-javascript-sdk/searchcraft-javascript-sdk.esm.js.map +0 -1
- package/dist/types/components/searchcraft-base-search-result-ad/searchcraft-base-search-result-ad.d.ts +0 -14
- package/dist/types/components/searchcraft-popover-list-item-ad/searchcraft-popover-list-item-ad.d.ts +0 -14
- package/dist/types/provider/SearchcraftStore.d.ts +0 -4
- package/dist/types/provider/store.d.ts +0 -3
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { useSearchcraftStore } from "../../provider/store";
|
|
2
|
-
import { h, } from "@stencil/core";
|
|
3
|
-
import classNames from "classnames";
|
|
4
|
-
/**
|
|
5
|
-
* This web component simulates a light switch functionality, providing a simple and intuitive toggle between two states—on and off.
|
|
6
|
-
* It is consumed within the `searchcraft-filter-panel` component.
|
|
7
|
-
*/
|
|
8
|
-
export class SearchcraftToggleButton {
|
|
9
|
-
/**
|
|
10
|
-
* The label.
|
|
11
|
-
*/
|
|
12
|
-
label = 'Toggle';
|
|
13
|
-
/**
|
|
14
|
-
* The secondary label displayed below the main label.
|
|
15
|
-
*/
|
|
16
|
-
subLabel;
|
|
17
|
-
/**
|
|
18
|
-
* When the toggle element is changed.
|
|
19
|
-
*/
|
|
20
|
-
toggleUpdated;
|
|
21
|
-
isActive = false;
|
|
22
|
-
unsubscribe;
|
|
23
|
-
lastSearchTerm;
|
|
24
|
-
handleToggle = async () => {
|
|
25
|
-
this.isActive = !this.isActive;
|
|
26
|
-
this.toggleUpdated?.emit(this.isActive);
|
|
27
|
-
};
|
|
28
|
-
connectedCallback() {
|
|
29
|
-
/** When the query changes, sets toggle button state back to inactive. */
|
|
30
|
-
this.unsubscribe = useSearchcraftStore.subscribe((state) => {
|
|
31
|
-
if (state.searchTerm !== this.lastSearchTerm &&
|
|
32
|
-
state.searchTerm.trim().length === 0) {
|
|
33
|
-
this.isActive = false;
|
|
34
|
-
}
|
|
35
|
-
this.lastSearchTerm = state.searchTerm;
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
disconnectedCallback() {
|
|
39
|
-
this.unsubscribe?.();
|
|
40
|
-
}
|
|
41
|
-
render() {
|
|
42
|
-
return (h("div", { key: 'ff105efef07b5f57127ff83ddb105658398b205d', class: 'searchcraft-toggle-button-container' }, h("div", { key: '696046a2cb1f1bd0273bb77fda7c16ed5795422a' }, h("p", { key: '93690038f12e2c7cff406a8f8ceeedaa5b871b70', class: 'searchcraft-toggle-button-label' }, this.label), this.subLabel && (h("p", { key: '1eaa110307794a4c15812e252d8a6ac7e81e7408', class: 'searchcraft-toggle-button-sub-label' }, this.subLabel))), h("button", { key: 'a2671d9696db713763d44d0a84e08aff19bc8aa0', class: classNames('searchcraft-toggle-button-background', {
|
|
43
|
-
active: this.isActive,
|
|
44
|
-
}), onClick: this.handleToggle, type: 'button' }, h("div", { key: '12874ac4782f756c6568952764777b758452406f', class: classNames('searchcraft-toggle-button-handle', {
|
|
45
|
-
active: this.isActive,
|
|
46
|
-
}) }))));
|
|
47
|
-
}
|
|
48
|
-
static get is() { return "searchcraft-toggle-button"; }
|
|
49
|
-
static get properties() {
|
|
50
|
-
return {
|
|
51
|
-
"label": {
|
|
52
|
-
"type": "string",
|
|
53
|
-
"mutable": false,
|
|
54
|
-
"complexType": {
|
|
55
|
-
"original": "string",
|
|
56
|
-
"resolved": "string",
|
|
57
|
-
"references": {}
|
|
58
|
-
},
|
|
59
|
-
"required": false,
|
|
60
|
-
"optional": false,
|
|
61
|
-
"docs": {
|
|
62
|
-
"tags": [],
|
|
63
|
-
"text": "The label."
|
|
64
|
-
},
|
|
65
|
-
"getter": false,
|
|
66
|
-
"setter": false,
|
|
67
|
-
"attribute": "label",
|
|
68
|
-
"reflect": false,
|
|
69
|
-
"defaultValue": "'Toggle'"
|
|
70
|
-
},
|
|
71
|
-
"subLabel": {
|
|
72
|
-
"type": "string",
|
|
73
|
-
"mutable": false,
|
|
74
|
-
"complexType": {
|
|
75
|
-
"original": "string | undefined",
|
|
76
|
-
"resolved": "string | undefined",
|
|
77
|
-
"references": {}
|
|
78
|
-
},
|
|
79
|
-
"required": false,
|
|
80
|
-
"optional": false,
|
|
81
|
-
"docs": {
|
|
82
|
-
"tags": [],
|
|
83
|
-
"text": "The secondary label displayed below the main label."
|
|
84
|
-
},
|
|
85
|
-
"getter": false,
|
|
86
|
-
"setter": false,
|
|
87
|
-
"attribute": "sub-label",
|
|
88
|
-
"reflect": false
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
static get states() {
|
|
93
|
-
return {
|
|
94
|
-
"isActive": {},
|
|
95
|
-
"unsubscribe": {},
|
|
96
|
-
"lastSearchTerm": {}
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
static get events() {
|
|
100
|
-
return [{
|
|
101
|
-
"method": "toggleUpdated",
|
|
102
|
-
"name": "toggleUpdated",
|
|
103
|
-
"bubbles": true,
|
|
104
|
-
"cancelable": true,
|
|
105
|
-
"composed": true,
|
|
106
|
-
"docs": {
|
|
107
|
-
"tags": [],
|
|
108
|
-
"text": "When the toggle element is changed."
|
|
109
|
-
},
|
|
110
|
-
"complexType": {
|
|
111
|
-
"original": "boolean",
|
|
112
|
-
"resolved": "boolean",
|
|
113
|
-
"references": {}
|
|
114
|
-
}
|
|
115
|
-
}];
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=searchcraft-toggle-button.js.map
|
package/dist/collection/components/searchcraft-toggle-button/searchcraft-toggle-button.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"searchcraft-toggle-button.js","sourceRoot":"","sources":["../../../../src/components/searchcraft-toggle-button/searchcraft-toggle-button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EACL,SAAS,EACT,KAAK,EACL,CAAC,EACD,IAAI,EACJ,KAAK,GAEN,MAAM,eAAe,CAAC;AACvB,OAAO,UAAU,MAAM,YAAY,CAAC;AAEpC;;;GAGG;AAKH,MAAM,OAAO,uBAAuB;IAClC;;OAEG;IACK,KAAK,GAAG,QAAQ,CAAC;IACzB;;OAEG;IACK,QAAQ,CAAqB;IAErC;;OAEG;IACM,aAAa,CAAyB;IAEtC,QAAQ,GAAG,KAAK,CAAC;IACjB,WAAW,CAA2B;IACtC,cAAc,CAAqB;IAEpC,YAAY,GAAG,KAAK,IAAI,EAAE;QAChC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,CAAC,CAAC;IAEF,iBAAiB;QACf,yEAAyE;QACzE,IAAI,CAAC,WAAW,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;YACzD,IACE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC,cAAc;gBACxC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACpC,CAAC;gBACD,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;YACxB,CAAC;YACD,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oBAAoB;QAClB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,MAAM;QACJ,OAAO,CACL,4DAAK,KAAK,EAAC,qCAAqC;YAC9C;gBACE,0DAAG,KAAK,EAAC,iCAAiC,IAAE,IAAI,CAAC,KAAK,CAAK;gBAC1D,IAAI,CAAC,QAAQ,IAAI,CAChB,0DAAG,KAAK,EAAC,qCAAqC,IAAE,IAAI,CAAC,QAAQ,CAAK,CACnE,CACG;YACN,+DACE,KAAK,EAAE,UAAU,CAAC,sCAAsC,EAAE;oBACxD,MAAM,EAAE,IAAI,CAAC,QAAQ;iBACtB,CAAC,EACF,OAAO,EAAE,IAAI,CAAC,YAAY,EAC1B,IAAI,EAAC,QAAQ;gBAEb,4DACE,KAAK,EAAE,UAAU,CAAC,kCAAkC,EAAE;wBACpD,MAAM,EAAE,IAAI,CAAC,QAAQ;qBACtB,CAAC,GACF,CACK,CACL,CACP,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import { useSearchcraftStore } from '@provider/store';\nimport {\n Component,\n Event,\n h,\n Prop,\n State,\n type EventEmitter,\n} from '@stencil/core';\nimport classNames from 'classnames';\n\n/**\n * This web component simulates a light switch functionality, providing a simple and intuitive toggle between two states—on and off.\n * It is consumed within the `searchcraft-filter-panel` component.\n */\n@Component({\n tag: 'searchcraft-toggle-button',\n shadow: false,\n})\nexport class SearchcraftToggleButton {\n /**\n * The label.\n */\n @Prop() label = 'Toggle';\n /**\n * The secondary label displayed below the main label.\n */\n @Prop() subLabel: string | undefined;\n\n /**\n * When the toggle element is changed.\n */\n @Event() toggleUpdated?: EventEmitter<boolean>;\n\n @State() isActive = false;\n @State() unsubscribe: (() => void) | undefined;\n @State() lastSearchTerm: string | undefined;\n\n private handleToggle = async () => {\n this.isActive = !this.isActive;\n this.toggleUpdated?.emit(this.isActive);\n };\n\n connectedCallback() {\n /** When the query changes, sets toggle button state back to inactive. */\n this.unsubscribe = useSearchcraftStore.subscribe((state) => {\n if (\n state.searchTerm !== this.lastSearchTerm &&\n state.searchTerm.trim().length === 0\n ) {\n this.isActive = false;\n }\n this.lastSearchTerm = state.searchTerm;\n });\n }\n\n disconnectedCallback() {\n this.unsubscribe?.();\n }\n\n render() {\n return (\n <div class='searchcraft-toggle-button-container'>\n <div>\n <p class='searchcraft-toggle-button-label'>{this.label}</p>\n {this.subLabel && (\n <p class='searchcraft-toggle-button-sub-label'>{this.subLabel}</p>\n )}\n </div>\n <button\n class={classNames('searchcraft-toggle-button-background', {\n active: this.isActive,\n })}\n onClick={this.handleToggle}\n type='button'\n >\n <div\n class={classNames('searchcraft-toggle-button-handle', {\n active: this.isActive,\n })}\n />\n </button>\n </div>\n );\n }\n}\n"]}
|
package/dist/collection/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,iBAAiB,EACjB,eAAe,GAChB,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC","sourcesContent":["/**\n * @fileoverview entry point for your component library\n *\n * This is the entry point for your component library. Use this file to export utilities,\n * constants or data structure that accompany your components.\n *\n * DO NOT use this file to export your components. Instead, use the recommended approaches\n * to consume components of this package as outlined in the `README.md`.\n */\nexport type * from './components';\n\nexport {\n parseCustomStyles,\n serializeStyles,\n} from './utils';\n\nexport { useSearchcraftStore } from './provider/store';\n\nexport type { Components } from './components';\n"]}
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
import { create } from "zustand";
|
|
2
|
-
import { Logger, LogLevel, } from "@searchcraft/core";
|
|
3
|
-
const initialSearchcraftStateValues = {
|
|
4
|
-
adClientResponseItems: [],
|
|
5
|
-
core: undefined,
|
|
6
|
-
logger: undefined,
|
|
7
|
-
facetPathsForIndexFields: {},
|
|
8
|
-
isPopoverVisible: false,
|
|
9
|
-
searchTerm: '',
|
|
10
|
-
rangeValueForIndexFields: {},
|
|
11
|
-
searchMode: 'fuzzy',
|
|
12
|
-
searchClientResponseItems: [],
|
|
13
|
-
searchResponseTimeTaken: undefined,
|
|
14
|
-
searchResponseFacetPrime: undefined,
|
|
15
|
-
searchResultsCount: 0,
|
|
16
|
-
searchResultsPerPage: 20,
|
|
17
|
-
searchResultsPage: 1,
|
|
18
|
-
sortType: 'asc',
|
|
19
|
-
};
|
|
20
|
-
const useSearchcraftStore = create((set, get) => {
|
|
21
|
-
const functions = {
|
|
22
|
-
addFacetPathsForIndexField: (data) => set((state) => ({
|
|
23
|
-
facetPathsForIndexFields: {
|
|
24
|
-
...state.facetPathsForIndexFields,
|
|
25
|
-
[data.fieldName]: data,
|
|
26
|
-
},
|
|
27
|
-
})),
|
|
28
|
-
addRangeValueForIndexField: (data) => set((state) => ({
|
|
29
|
-
rangeValueForIndexFields: {
|
|
30
|
-
...state.rangeValueForIndexFields,
|
|
31
|
-
[data.fieldName]: data,
|
|
32
|
-
},
|
|
33
|
-
})),
|
|
34
|
-
getSearchcraftInstance: () => {
|
|
35
|
-
const { core } = get();
|
|
36
|
-
return core;
|
|
37
|
-
},
|
|
38
|
-
initialize: (searchcraftInstance, debug = false) => {
|
|
39
|
-
const core = searchcraftInstance;
|
|
40
|
-
const logger = debug
|
|
41
|
-
? new Logger({ logLevel: LogLevel.DEBUG })
|
|
42
|
-
: undefined;
|
|
43
|
-
set({
|
|
44
|
-
core,
|
|
45
|
-
logger,
|
|
46
|
-
searchResultsPerPage: core.config.searchResultsPerPage || 20,
|
|
47
|
-
});
|
|
48
|
-
},
|
|
49
|
-
removeFacetPathsForIndexField: (fieldName) => set((state) => {
|
|
50
|
-
const currentPaths = state.facetPathsForIndexFields;
|
|
51
|
-
delete currentPaths[fieldName];
|
|
52
|
-
return {
|
|
53
|
-
facetPathsForIndexFields: {
|
|
54
|
-
...currentPaths,
|
|
55
|
-
},
|
|
56
|
-
};
|
|
57
|
-
}),
|
|
58
|
-
removeRangeValueForIndexField: (fieldName) => set((state) => {
|
|
59
|
-
const currentValues = state.rangeValueForIndexFields;
|
|
60
|
-
delete currentValues[fieldName];
|
|
61
|
-
return {
|
|
62
|
-
rangeValueForIndexFields: {
|
|
63
|
-
...currentValues,
|
|
64
|
-
},
|
|
65
|
-
};
|
|
66
|
-
}),
|
|
67
|
-
resetFacetPaths: () => {
|
|
68
|
-
set({
|
|
69
|
-
facetPathsForIndexFields: {},
|
|
70
|
-
});
|
|
71
|
-
},
|
|
72
|
-
search: async () => {
|
|
73
|
-
const state = get();
|
|
74
|
-
state.logger?.log(LogLevel.INFO, `Starting search with search term: "${state.searchTerm}"`);
|
|
75
|
-
if (!state.core) {
|
|
76
|
-
throw new Error('Searchcraft instance is not initialized.');
|
|
77
|
-
}
|
|
78
|
-
if (!state.searchTerm.trim()) {
|
|
79
|
-
state.logger?.log(LogLevel.INFO, 'No search request was made: search term was empty.');
|
|
80
|
-
set({
|
|
81
|
-
searchClientResponseItems: [],
|
|
82
|
-
searchResultsCount: 0,
|
|
83
|
-
searchResultsPage: 1,
|
|
84
|
-
searchTerm: '',
|
|
85
|
-
});
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
const handleSearchcraftResponse = (response, items) => {
|
|
89
|
-
const facetsFromResponse = response.data.facets;
|
|
90
|
-
set((state) => {
|
|
91
|
-
return {
|
|
92
|
-
searchClientResponseItems: items,
|
|
93
|
-
searchResponseTimeTaken: response.data.time_taken || 0,
|
|
94
|
-
searchResultsPage:
|
|
95
|
-
// reset to first page when response count changes
|
|
96
|
-
response.data.count === state.searchResultsCount
|
|
97
|
-
? state.searchResultsPage
|
|
98
|
-
: 1,
|
|
99
|
-
searchResultsCount: response.data.count || 0,
|
|
100
|
-
};
|
|
101
|
-
});
|
|
102
|
-
if (facetsFromResponse) {
|
|
103
|
-
set({ searchResponseFacetPrime: facetsFromResponse });
|
|
104
|
-
}
|
|
105
|
-
state.logger?.log(LogLevel.DEBUG, `Search results: ${JSON.stringify(items)}`);
|
|
106
|
-
state.logger?.log(LogLevel.DEBUG, `Facets from response: ${JSON.stringify(facetsFromResponse)}`);
|
|
107
|
-
};
|
|
108
|
-
const handleAdResponse = (adClientResponseItems) => {
|
|
109
|
-
set({ adClientResponseItems });
|
|
110
|
-
};
|
|
111
|
-
state.core.getItems({
|
|
112
|
-
searchTerm: state.searchTerm,
|
|
113
|
-
mode: state.searchMode,
|
|
114
|
-
sort: state.sortType,
|
|
115
|
-
facetPathsForIndexFields: state.facetPathsForIndexFields,
|
|
116
|
-
rangeValueForIndexFields: state.rangeValueForIndexFields,
|
|
117
|
-
offset: state.searchResultsPerPage
|
|
118
|
-
? state.searchResultsPerPage * (state.searchResultsPage - 1)
|
|
119
|
-
: 0,
|
|
120
|
-
limit: state.searchResultsPerPage,
|
|
121
|
-
}, handleSearchcraftResponse, handleAdResponse);
|
|
122
|
-
},
|
|
123
|
-
setPopoverVisibility: (isVisible) => {
|
|
124
|
-
set({
|
|
125
|
-
isPopoverVisible: isVisible,
|
|
126
|
-
});
|
|
127
|
-
},
|
|
128
|
-
setSearchMode: (mode) => set({ searchMode: mode }),
|
|
129
|
-
setSortType: (type) => set({ sortType: type }),
|
|
130
|
-
setSearchTerm: (searchTerm) => {
|
|
131
|
-
/**
|
|
132
|
-
* When a new searchTerm is set, also reset the sort type, search mode, and facet paths.
|
|
133
|
-
*/
|
|
134
|
-
set({
|
|
135
|
-
searchTerm,
|
|
136
|
-
facetPathsForIndexFields: {},
|
|
137
|
-
...(searchTerm.trim().length === 0 && {
|
|
138
|
-
searchMode: 'fuzzy',
|
|
139
|
-
sortType: 'asc',
|
|
140
|
-
}),
|
|
141
|
-
});
|
|
142
|
-
},
|
|
143
|
-
setSearchClientResponseItems: (items) => set({ searchClientResponseItems: items }),
|
|
144
|
-
setSearchResultsPage: async (page) => {
|
|
145
|
-
set({ searchResultsPage: page });
|
|
146
|
-
await functions.search();
|
|
147
|
-
},
|
|
148
|
-
setSearchResultsPerPage: async (perPage) => {
|
|
149
|
-
set({ searchResultsPerPage: perPage });
|
|
150
|
-
await functions.search();
|
|
151
|
-
},
|
|
152
|
-
};
|
|
153
|
-
const stateObject = {
|
|
154
|
-
...initialSearchcraftStateValues,
|
|
155
|
-
...functions,
|
|
156
|
-
};
|
|
157
|
-
return stateObject;
|
|
158
|
-
});
|
|
159
|
-
export { useSearchcraftStore };
|
|
160
|
-
//# sourceMappingURL=SearchcraftStore.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SearchcraftStore.js","sourceRoot":"","sources":["../../../src/provider/SearchcraftStore.ts"],"names":[],"mappings":"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","sourcesContent":["import { create } from 'zustand';\n\nimport {\n Logger,\n LogLevel,\n type FacetPathsForIndexField,\n type RangeValueForIndexField,\n type SearchcraftResponse,\n type SearchClientResponseItem,\n type AdClientResponseItem,\n} from '@searchcraft/core';\nimport type {\n SearchcraftState,\n SearchcraftStateFunctions,\n SearchcraftStateValues,\n} from './SearchcraftStore.types';\n\nconst initialSearchcraftStateValues: SearchcraftStateValues = {\n adClientResponseItems: [],\n core: undefined,\n logger: undefined,\n facetPathsForIndexFields: {},\n isPopoverVisible: false,\n searchTerm: '',\n rangeValueForIndexFields: {},\n searchMode: 'fuzzy',\n searchClientResponseItems: [],\n searchResponseTimeTaken: undefined,\n searchResponseFacetPrime: undefined,\n searchResultsCount: 0,\n searchResultsPerPage: 20,\n searchResultsPage: 1,\n sortType: 'asc',\n};\n\nconst useSearchcraftStore = create<SearchcraftState>((set, get) => {\n const functions: SearchcraftStateFunctions = {\n addFacetPathsForIndexField: (data: FacetPathsForIndexField) =>\n set((state) => ({\n facetPathsForIndexFields: {\n ...state.facetPathsForIndexFields,\n [data.fieldName]: data,\n },\n })),\n addRangeValueForIndexField: (data: RangeValueForIndexField) =>\n set((state) => ({\n rangeValueForIndexFields: {\n ...state.rangeValueForIndexFields,\n [data.fieldName]: data,\n },\n })),\n getSearchcraftInstance: () => {\n const { core } = get();\n return core;\n },\n initialize: (searchcraftInstance, debug = false) => {\n const core = searchcraftInstance;\n const logger = debug\n ? new Logger({ logLevel: LogLevel.DEBUG })\n : undefined;\n\n set({\n core,\n logger,\n searchResultsPerPage: core.config.searchResultsPerPage || 20,\n });\n },\n removeFacetPathsForIndexField: (fieldName: string) =>\n set((state) => {\n const currentPaths = state.facetPathsForIndexFields;\n delete currentPaths[fieldName];\n return {\n facetPathsForIndexFields: {\n ...currentPaths,\n },\n };\n }),\n removeRangeValueForIndexField: (fieldName: string) =>\n set((state) => {\n const currentValues = state.rangeValueForIndexFields;\n delete currentValues[fieldName];\n return {\n rangeValueForIndexFields: {\n ...currentValues,\n },\n };\n }),\n resetFacetPaths: () => {\n set({\n facetPathsForIndexFields: {},\n });\n },\n search: async () => {\n const state = get();\n state.logger?.log(\n LogLevel.INFO,\n `Starting search with search term: \"${state.searchTerm}\"`,\n );\n\n if (!state.core) {\n throw new Error('Searchcraft instance is not initialized.');\n }\n\n if (!state.searchTerm.trim()) {\n state.logger?.log(\n LogLevel.INFO,\n 'No search request was made: search term was empty.',\n );\n set({\n searchClientResponseItems: [],\n searchResultsCount: 0,\n searchResultsPage: 1,\n searchTerm: '',\n });\n return;\n }\n\n const handleSearchcraftResponse = (\n response: SearchcraftResponse,\n items: SearchClientResponseItem[],\n ) => {\n const facetsFromResponse = response.data.facets;\n\n set((state) => {\n return {\n searchClientResponseItems: items,\n searchResponseTimeTaken: response.data.time_taken || 0,\n searchResultsPage:\n // reset to first page when response count changes\n response.data.count === state.searchResultsCount\n ? state.searchResultsPage\n : 1,\n searchResultsCount: response.data.count || 0,\n };\n });\n\n if (facetsFromResponse) {\n set({ searchResponseFacetPrime: facetsFromResponse });\n }\n\n state.logger?.log(\n LogLevel.DEBUG,\n `Search results: ${JSON.stringify(items)}`,\n );\n state.logger?.log(\n LogLevel.DEBUG,\n `Facets from response: ${JSON.stringify(facetsFromResponse)}`,\n );\n };\n\n const handleAdResponse = (\n adClientResponseItems: AdClientResponseItem[],\n ) => {\n set({ adClientResponseItems });\n };\n\n state.core.getItems(\n {\n searchTerm: state.searchTerm,\n mode: state.searchMode,\n sort: state.sortType,\n facetPathsForIndexFields: state.facetPathsForIndexFields,\n rangeValueForIndexFields: state.rangeValueForIndexFields,\n offset: state.searchResultsPerPage\n ? state.searchResultsPerPage * (state.searchResultsPage - 1)\n : 0,\n limit: state.searchResultsPerPage,\n },\n handleSearchcraftResponse,\n handleAdResponse,\n );\n },\n setPopoverVisibility: (isVisible: boolean) => {\n set({\n isPopoverVisible: isVisible,\n });\n },\n setSearchMode: (mode) => set({ searchMode: mode }),\n setSortType: (type) => set({ sortType: type }),\n setSearchTerm: (searchTerm) => {\n /**\n * When a new searchTerm is set, also reset the sort type, search mode, and facet paths.\n */\n set({\n searchTerm,\n facetPathsForIndexFields: {},\n ...(searchTerm.trim().length === 0 && {\n searchMode: 'fuzzy',\n sortType: 'asc',\n }),\n });\n },\n setSearchClientResponseItems: (items) =>\n set({ searchClientResponseItems: items }),\n setSearchResultsPage: async (page) => {\n set({ searchResultsPage: page });\n await functions.search();\n },\n setSearchResultsPerPage: async (perPage) => {\n set({ searchResultsPerPage: perPage });\n await functions.search();\n },\n };\n\n const stateObject: SearchcraftState = {\n ...initialSearchcraftStateValues,\n ...functions,\n };\n\n return stateObject;\n});\n\nexport { useSearchcraftStore };\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SearchcraftStore.types.js","sourceRoot":"","sources":["../../../src/provider/SearchcraftStore.types.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n FacetPathsForIndexField,\n FacetPrime,\n RangeValueForIndexField,\n Logger,\n SearchcraftCore,\n SearchClientResponseItem,\n AdClientResponseItem,\n} from '@searchcraft/core';\n\n/**\n * Callable functions made available by the SearchcraftStore.\n */\nexport interface SearchcraftStateFunctions {\n addFacetPathsForIndexField: (data: FacetPathsForIndexField) => void;\n addRangeValueForIndexField: (data: RangeValueForIndexField) => void;\n getSearchcraftInstance: () => SearchcraftCore | undefined;\n initialize: (searchcraft: SearchcraftCore, debug?: boolean) => void;\n removeFacetPathsForIndexField: (fieldName: string) => void;\n removeRangeValueForIndexField: (fieldName: string) => void;\n resetFacetPaths: () => void;\n search: () => Promise<void>;\n setPopoverVisibility: (isVisible: boolean) => void;\n setSearchClientResponseItems: (results: SearchClientResponseItem[]) => void;\n setSearchResultsPage: (page: number) => void;\n setSearchResultsPerPage: (perPage: number) => void;\n setSearchTerm: (searchTerm: string) => void;\n setSearchMode: (mode: 'fuzzy' | 'exact') => void;\n setSortType: (type: 'asc' | 'desc') => void;\n}\n\n/**\n * Values stored in SearchcraftStore.\n */\nexport interface SearchcraftStateValues {\n adClientResponseItems: AdClientResponseItem[];\n core: SearchcraftCore | undefined;\n logger: Logger | undefined;\n facetPathsForIndexFields: Record<string, FacetPathsForIndexField>;\n isPopoverVisible: boolean;\n rangeValueForIndexFields: Record<string, RangeValueForIndexField>;\n searchMode: 'fuzzy' | 'exact';\n searchClientResponseItems: SearchClientResponseItem[];\n searchResponseTimeTaken: number | undefined;\n searchResponseFacetPrime: FacetPrime | undefined;\n searchResultsCount: number;\n searchResultsPage: number;\n searchResultsPerPage: number;\n searchTerm: string;\n sortType: 'asc' | 'desc';\n}\n\nexport interface SearchcraftState\n extends SearchcraftStateFunctions,\n SearchcraftStateValues {}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/provider/store.tsx"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC","sourcesContent":["export * from './SearchcraftStore.types';\nexport * from './SearchcraftStore';\n"]}
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
function deepMergeWithSpread(obj1, obj2) {
|
|
2
|
-
const result = { ...obj1 };
|
|
3
|
-
for (const key in obj2) {
|
|
4
|
-
// biome-ignore lint/suspicious/noPrototypeBuiltins: <explanation>
|
|
5
|
-
if (obj2.hasOwnProperty(key)) {
|
|
6
|
-
if (obj2[key] instanceof Object && obj1[key] instanceof Object) {
|
|
7
|
-
result[key] = deepMergeWithSpread(obj1[key], obj2[key]);
|
|
8
|
-
}
|
|
9
|
-
else {
|
|
10
|
-
result[key] = obj2[key];
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
return result;
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Given an array of facet paths, removes parent facet paths.
|
|
18
|
-
*/
|
|
19
|
-
export function removeSubstringMatches(arr) {
|
|
20
|
-
return arr.filter((entry, index, array) => !array.some((otherEntry, otherIndex) => otherIndex !== index && otherEntry.includes(entry)));
|
|
21
|
-
}
|
|
22
|
-
function facetToRecord(facet) {
|
|
23
|
-
const records = {};
|
|
24
|
-
const traverseAndAddToFragments = (facetChild) => {
|
|
25
|
-
records[facetChild.path] = {
|
|
26
|
-
count: facetChild.count,
|
|
27
|
-
path: facetChild.path,
|
|
28
|
-
};
|
|
29
|
-
facetChild.children?.forEach((child) => {
|
|
30
|
-
traverseAndAddToFragments(child);
|
|
31
|
-
});
|
|
32
|
-
};
|
|
33
|
-
traverseAndAddToFragments(facet);
|
|
34
|
-
return records;
|
|
35
|
-
}
|
|
36
|
-
function recordToObject(record) {
|
|
37
|
-
const root = {
|
|
38
|
-
count: 0,
|
|
39
|
-
path: '/',
|
|
40
|
-
children: {},
|
|
41
|
-
};
|
|
42
|
-
Object.keys(record).forEach((key) => {
|
|
43
|
-
const fragment = record[key];
|
|
44
|
-
if (!fragment) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
if (fragment.path === '/') {
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
const pathParts = fragment.path.substring(1).split('/');
|
|
51
|
-
let currentRoot = root;
|
|
52
|
-
let currentPath = '';
|
|
53
|
-
pathParts.forEach((part, index) => {
|
|
54
|
-
const nextPath = `${currentPath}/${part}`;
|
|
55
|
-
if (!currentRoot.children[nextPath]) {
|
|
56
|
-
currentRoot.children[nextPath] = {
|
|
57
|
-
count: 0,
|
|
58
|
-
path: nextPath,
|
|
59
|
-
children: {},
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
if (index === pathParts.length - 1) {
|
|
63
|
-
currentRoot.children[nextPath].count = fragment.count;
|
|
64
|
-
}
|
|
65
|
-
currentPath = nextPath;
|
|
66
|
-
currentRoot = currentRoot.children[nextPath];
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
return root;
|
|
70
|
-
}
|
|
71
|
-
function objectToFacet(childObject) {
|
|
72
|
-
const transformed = {
|
|
73
|
-
count: childObject.count,
|
|
74
|
-
path: childObject.path,
|
|
75
|
-
children: [],
|
|
76
|
-
};
|
|
77
|
-
if (Object.keys(childObject.children).length > 0) {
|
|
78
|
-
transformed.children = Object.values(childObject.children).map((subChildObject) => objectToFacet(subChildObject));
|
|
79
|
-
}
|
|
80
|
-
return transformed;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Filters records with the parent paths from record2 OUT of record1
|
|
84
|
-
*/
|
|
85
|
-
function filterRecordByParentPaths(record1, record2) {
|
|
86
|
-
// Extract all paths (keys) both records
|
|
87
|
-
const paths1 = Object.keys(record1);
|
|
88
|
-
const paths2 = Object.keys(record2);
|
|
89
|
-
// Find all parent paths in record2
|
|
90
|
-
const parentPaths = new Set(paths2
|
|
91
|
-
.filter((path) => path.split('/').length > 2) // Only consider paths with more than one level
|
|
92
|
-
.map((path) => path.substring(0, path.lastIndexOf('/'))));
|
|
93
|
-
// Filter out keys in record1 that share a parent path with any of the identified parent paths
|
|
94
|
-
const filteredRecord = Object.fromEntries(paths1
|
|
95
|
-
.filter((path) => !parentPaths.has(path.substring(0, path.lastIndexOf('/'))))
|
|
96
|
-
.map((path) => [path, record1[path]]));
|
|
97
|
-
return filteredRecord;
|
|
98
|
-
}
|
|
99
|
-
export function mergeFacetRoots(fieldName, currentRoot, incomingRoot) {
|
|
100
|
-
const currentArray = currentRoot[fieldName];
|
|
101
|
-
const incomingArray = incomingRoot[fieldName];
|
|
102
|
-
const currentRootFacetChild = {
|
|
103
|
-
count: 0,
|
|
104
|
-
path: '/',
|
|
105
|
-
children: currentArray,
|
|
106
|
-
};
|
|
107
|
-
const incomingRootFacetChild = {
|
|
108
|
-
count: 0,
|
|
109
|
-
path: '/',
|
|
110
|
-
children: incomingArray,
|
|
111
|
-
};
|
|
112
|
-
// Flatten them into records
|
|
113
|
-
const currentRecord = facetToRecord(currentRootFacetChild);
|
|
114
|
-
const incomingRecord = facetToRecord(incomingRootFacetChild);
|
|
115
|
-
// Filter out the records from record1 (the current set of records)
|
|
116
|
-
// that share a parent path with record2 (the incoming records)
|
|
117
|
-
const filteredCurrentRecord = filterRecordByParentPaths(currentRecord, incomingRecord);
|
|
118
|
-
// Deep merge the records together
|
|
119
|
-
const mergedRecord = deepMergeWithSpread(filteredCurrentRecord, incomingRecord);
|
|
120
|
-
// Convert into a heirarchical object
|
|
121
|
-
const mergedObject = recordToObject(mergedRecord);
|
|
122
|
-
// Convert the heirarchical object back to the Facet child structure
|
|
123
|
-
const mergedFacetChild = objectToFacet(mergedObject);
|
|
124
|
-
return {
|
|
125
|
-
[fieldName]: mergedFacetChild.children,
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
//# sourceMappingURL=facets.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"facets.js","sourceRoot":"","sources":["../../../src/utils/facets.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n FacetChild,\n FacetChildObject,\n FacetRoot,\n} from '@searchcraft/core';\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\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\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) {\n return;\n }\n\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 as Record<string, FacetChild>;\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 } as FacetRoot;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC","sourcesContent":["export * from './facets';\nexport * from './units';\nexport * from './styles';\n"]}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export function parseCustomStyles(styles) {
|
|
2
|
-
if (typeof styles === 'string') {
|
|
3
|
-
try {
|
|
4
|
-
return JSON.parse(styles);
|
|
5
|
-
}
|
|
6
|
-
catch (error) {
|
|
7
|
-
console.error('Invalid customStyles format:', styles);
|
|
8
|
-
return {};
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
return styles || {};
|
|
12
|
-
}
|
|
13
|
-
export function serializeStyles(styles) {
|
|
14
|
-
try {
|
|
15
|
-
return JSON.stringify(styles);
|
|
16
|
-
}
|
|
17
|
-
catch (error) {
|
|
18
|
-
console.error('Error serializing styles:', error);
|
|
19
|
-
return '{}';
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=styles.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/utils/styles.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAC/B,MAAuC;IAEvC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;YACtD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IACD,OAAO,MAAM,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,MAA8C;IAE9C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC","sourcesContent":["export 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"]}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Given a document and a SearchResultMapping, return a mapped value from the document.
|
|
3
|
-
*
|
|
4
|
-
* Applies formatting based on the values specified in the `SearchResultFieldName` values.
|
|
5
|
-
*
|
|
6
|
-
* @param document
|
|
7
|
-
* @param {SearchResultMapping} mapping
|
|
8
|
-
* @returns {string | undefined}
|
|
9
|
-
*/
|
|
10
|
-
export function getDocumentValueFromSearchResultMapping(document, mapping) {
|
|
11
|
-
if (document && mapping) {
|
|
12
|
-
return mapping.fieldNames
|
|
13
|
-
.map((fieldNameDetails) => {
|
|
14
|
-
let valueFound = document[fieldNameDetails.fieldName];
|
|
15
|
-
if (valueFound) {
|
|
16
|
-
switch (fieldNameDetails.dataType) {
|
|
17
|
-
case 'date': {
|
|
18
|
-
// TODO: Use fieldNameDetails.DateFormatOptions to format the date
|
|
19
|
-
valueFound = getFormattedTimeFromNow(valueFound);
|
|
20
|
-
break;
|
|
21
|
-
}
|
|
22
|
-
case 'number': {
|
|
23
|
-
valueFound = Intl.NumberFormat(fieldNameDetails.numberFormatLocale, fieldNameDetails.numberFormatOptions).format(valueFound * (fieldNameDetails.numberScale || 1));
|
|
24
|
-
break;
|
|
25
|
-
}
|
|
26
|
-
default:
|
|
27
|
-
break;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return valueFound;
|
|
31
|
-
})
|
|
32
|
-
.filter((value) => !!value)
|
|
33
|
-
.join(mapping.delimiter || ' ');
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
export function getMillis(unit) {
|
|
37
|
-
const millisInHour = 60 * 60 * 1000;
|
|
38
|
-
const millisInDay = 24 * millisInHour;
|
|
39
|
-
const millisInMonth = 30 * millisInDay;
|
|
40
|
-
const millisInYear = 365 * millisInDay;
|
|
41
|
-
switch (unit) {
|
|
42
|
-
case 'hour':
|
|
43
|
-
return millisInHour;
|
|
44
|
-
case 'day':
|
|
45
|
-
return millisInDay;
|
|
46
|
-
case 'month':
|
|
47
|
-
return millisInMonth;
|
|
48
|
-
case 'year':
|
|
49
|
-
return millisInYear;
|
|
50
|
-
default:
|
|
51
|
-
return 3600000;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
export function formatNumberWithCommas(number) {
|
|
55
|
-
return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Given a timestamp value, returns a formatted time string for the time
|
|
59
|
-
* since now.
|
|
60
|
-
*
|
|
61
|
-
* @param timestamp
|
|
62
|
-
* @returns {string} Formatted string value
|
|
63
|
-
*/
|
|
64
|
-
export function getFormattedTimeFromNow(timestamp) {
|
|
65
|
-
const now = new Date();
|
|
66
|
-
const inputTime = new Date(timestamp);
|
|
67
|
-
const diffInSeconds = Math.floor((now.getTime() - inputTime.getTime()) / 1000);
|
|
68
|
-
const minutes = Math.floor(diffInSeconds / 60);
|
|
69
|
-
const hours = Math.floor(minutes / 60);
|
|
70
|
-
const days = Math.floor(hours / 24);
|
|
71
|
-
const years = Math.floor(days / 365);
|
|
72
|
-
if (minutes < 60) {
|
|
73
|
-
return `${minutes}m ago`;
|
|
74
|
-
}
|
|
75
|
-
if (hours < 24) {
|
|
76
|
-
return `${hours}h ago`;
|
|
77
|
-
}
|
|
78
|
-
if (days < 365) {
|
|
79
|
-
return `${days}d ago`;
|
|
80
|
-
}
|
|
81
|
-
return `${years}y ago`;
|
|
82
|
-
}
|
|
83
|
-
//# sourceMappingURL=units.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"units.js","sourceRoot":"","sources":["../../../src/utils/units.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SearchResultMapping } from '@searchcraft/core';\n\n/**\n * Given a document and a SearchResultMapping, return a mapped value from the document.\n *\n * Applies formatting based on the values specified in the `SearchResultFieldName` values.\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) {\n switch (fieldNameDetails.dataType) {\n case 'date': {\n // TODO: Use fieldNameDetails.DateFormatOptions to format the date\n valueFound = getFormattedTimeFromNow(valueFound as string);\n break;\n }\n case 'number': {\n valueFound = Intl.NumberFormat(\n fieldNameDetails.numberFormatLocale,\n fieldNameDetails.numberFormatOptions,\n ).format(\n (valueFound as number) * (fieldNameDetails.numberScale || 1),\n );\n break;\n }\n default:\n break;\n }\n }\n\n return valueFound;\n })\n .filter((value) => !!value)\n .join(mapping.delimiter || ' ');\n }\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\nexport function formatNumberWithCommas(number) {\n return number.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',');\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"]}
|