@envive-ai/react-hooks 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/amplitude/index.cjs +14 -0
- package/dist/adapters/amplitude/index.d.cts +4 -0
- package/dist/adapters/amplitude/index.d.ts +4 -0
- package/dist/adapters/amplitude/index.js +12 -0
- package/dist/api-B2euFL-5.cjs +268 -0
- package/dist/api-CxGedDxj.cjs +5057 -0
- package/dist/api-NJEaveju.js +4113 -0
- package/dist/api-XRr_lAG6.js +189 -0
- package/dist/application/config/index.cjs +34 -0
- package/dist/application/config/index.d.cts +14 -0
- package/dist/application/config/index.d.ts +14 -0
- package/dist/application/config/index.js +32 -0
- package/dist/application/models/graphql/index.cjs +13 -0
- package/dist/application/models/graphql/index.d.cts +2 -0
- package/dist/application/models/graphql/index.d.ts +2 -0
- package/dist/application/models/graphql/index.js +12 -0
- package/dist/application/models/guards/api/index.cjs +15 -0
- package/dist/application/models/guards/api/index.d.cts +3 -0
- package/dist/application/models/guards/api/index.d.ts +3 -0
- package/dist/application/models/guards/api/index.js +4 -0
- package/dist/application/models/index.cjs +72 -0
- package/dist/application/models/index.d.cts +10 -0
- package/dist/application/models/index.d.ts +10 -0
- package/dist/application/models/index.js +12 -0
- package/dist/application/models/utilityTypes/index.cjs +1 -0
- package/dist/application/models/utilityTypes/index.d.cts +2 -0
- package/dist/application/models/utilityTypes/index.d.ts +2 -0
- package/dist/application/models/utilityTypes/index.js +3 -0
- package/dist/application/models/variantInfo/index.cjs +1 -0
- package/dist/application/models/variantInfo/index.d.cts +2 -0
- package/dist/application/models/variantInfo/index.d.ts +2 -0
- package/dist/application/models/variantInfo/index.js +3 -0
- package/dist/application/service/customerService/index.cjs +4 -0
- package/dist/application/service/customerService/index.d.cts +3 -0
- package/dist/application/service/customerService/index.d.ts +3 -0
- package/dist/application/service/customerService/index.js +4 -0
- package/dist/application/service/index.cjs +761 -0
- package/dist/application/service/index.d.cts +407 -0
- package/dist/application/service/index.d.ts +407 -0
- package/dist/application/service/index.js +727 -0
- package/dist/application/utils/index.cjs +38 -0
- package/dist/application/utils/index.d.cts +254 -0
- package/dist/application/utils/index.d.ts +254 -0
- package/dist/application/utils/index.js +12 -0
- package/dist/atomStore-B3tsg6mF.cjs +0 -0
- package/dist/atomStore-BFtpknLM.js +31 -0
- package/dist/atomStore-CeJm9Llb.cjs +57 -0
- package/dist/atomStore-FSZd_20F.js +1 -0
- package/dist/atoms/app/index.cjs +17 -0
- package/dist/atoms/app/index.d.cts +33 -0
- package/dist/atoms/app/index.d.ts +33 -0
- package/dist/atoms/app/index.js +12 -0
- package/dist/atoms/atomStore/index.cjs +7 -0
- package/dist/atoms/atomStore/index.d.cts +23 -0
- package/dist/atoms/atomStore/index.d.ts +23 -0
- package/dist/atoms/atomStore/index.js +4 -0
- package/dist/atoms/chat/index.cjs +41 -0
- package/dist/atoms/chat/index.d.cts +159 -0
- package/dist/atoms/chat/index.d.ts +159 -0
- package/dist/atoms/chat/index.js +12 -0
- package/dist/atoms/globalSearch/index.cjs +6 -0
- package/dist/atoms/globalSearch/index.d.cts +23 -0
- package/dist/atoms/globalSearch/index.d.ts +23 -0
- package/dist/atoms/globalSearch/index.js +3 -0
- package/dist/atoms/org/index.cjs +41 -0
- package/dist/atoms/org/index.d.cts +93 -0
- package/dist/atoms/org/index.d.ts +93 -0
- package/dist/atoms/org/index.js +13 -0
- package/dist/atoms/search/index.cjs +44 -0
- package/dist/atoms/search/index.d.cts +11 -0
- package/dist/atoms/search/index.d.ts +11 -0
- package/dist/atoms/search/index.js +14 -0
- package/dist/{bandolier-DpF-HUG_.js → bandolier-C7PAIw02.js} +17 -7
- package/dist/{bandolier-3rHPPhkF.cjs → bandolier-oMkFDJMF.cjs} +56 -46
- package/dist/{carpe-BG7Q_KCG.cjs → carpe-C0ccKuR9.cjs} +35 -25
- package/dist/{carpe-DLuc07V7.js → carpe-DFc78_lJ.js} +17 -7
- package/dist/chat-CCgyDehy.cjs +151 -0
- package/dist/chat-Dk6KPb1K.js +25 -0
- package/dist/components-CScS7Ii-.cjs +28 -0
- package/dist/components-DAQxVIn9.js +10 -0
- package/dist/config/locators/components/chat/index.cjs +23 -0
- package/dist/config/locators/components/chat/index.d.cts +2 -0
- package/dist/config/locators/components/chat/index.d.ts +2 -0
- package/dist/config/locators/components/chat/index.js +3 -0
- package/dist/config/locators/components/chat/variants/index.cjs +28 -0
- package/dist/config/locators/components/chat/variants/index.d.cts +15 -0
- package/dist/config/locators/components/chat/variants/index.d.ts +15 -0
- package/dist/config/locators/components/chat/variants/index.js +16 -0
- package/dist/config/locators/components/index.cjs +5 -0
- package/dist/config/locators/components/index.d.cts +2 -0
- package/dist/config/locators/components/index.d.ts +2 -0
- package/dist/config/locators/components/index.js +3 -0
- package/dist/config/locators/components/search/index.cjs +12 -0
- package/dist/config/locators/components/search/index.d.cts +7 -0
- package/dist/config/locators/components/search/index.d.ts +7 -0
- package/dist/config/locators/components/search/index.js +8 -0
- package/dist/config/locators/index.cjs +47 -0
- package/dist/config/locators/index.d.cts +24 -0
- package/dist/config/locators/index.d.ts +24 -0
- package/dist/config/locators/index.js +6 -0
- package/dist/contexts/index.cjs +15 -4
- package/dist/contexts/index.d.cts +9 -1
- package/dist/contexts/index.d.ts +12 -4
- package/dist/contexts/index.js +15 -4
- package/dist/{contexts-Dq7tO_0y.js → contexts-DO75-Kmx.js} +19 -4326
- package/dist/{contexts-C4Iz162H.cjs → contexts-iAzSvZjb.cjs} +188 -4488
- package/dist/{coterie-FybYN_xE.js → coterie-BGT8hqFR.js} +18 -7
- package/dist/{coterie-DUdvJvAs.cjs → coterie-Cp9FAJTQ.cjs} +25 -14
- package/dist/customerService-CUyZzowx.js +22 -0
- package/dist/customerService-DqPw_XKf.cjs +35 -0
- package/dist/custservice-types-D8Npo-5Z.js +22 -0
- package/dist/custservice-types-E9_OSaZ7.cjs +34 -0
- package/dist/{default-CKyjzyLc.cjs → default-BAXPatxf.cjs} +1 -1
- package/dist/default-BR3225LZ.js +4 -0
- package/dist/default-DR6YjE9B.cjs +4 -0
- package/dist/{default-CL94oJfj.js → default-wf_IORgo.js} +1 -1
- package/dist/divIds-BWvq-i6I.js +22 -0
- package/dist/{divIds-BOqjn3bE.cjs → divIds-CFyAjjp3.cjs} +6 -79
- package/dist/{dreamlandBaby-C8yzW4Nl.cjs → dreamlandBaby-BzuMvUFS.cjs} +28 -18
- package/dist/{dreamlandBaby-WXcbsTXO.js → dreamlandBaby-DZvM81LQ.js} +17 -7
- package/dist/embedded-BlXJUbik.cjs +130 -0
- package/dist/embedded-C1jvFj3v.js +22 -0
- package/dist/events/index.cjs +4 -0
- package/dist/events/index.d.cts +45 -0
- package/dist/events/index.d.ts +45 -0
- package/dist/events/index.js +3 -0
- package/dist/events-ClCDFK7t.js +77 -0
- package/dist/events-Da7gpmGv.cjs +89 -0
- package/dist/featureFlagService-CroFRxvD.d.cts +17 -0
- package/dist/featureFlagService-NkJ2fuEj.d.ts +17 -0
- package/dist/featureGates-BMWXU0dS.d.ts +90 -0
- package/dist/featureGates-N_gyHCTn.d.cts +90 -0
- package/dist/{fiveCbd-CZYzZPl3.cjs → fiveCbd-DE-tDY3d.cjs} +32 -22
- package/dist/{fiveCbd-kl6CoxoF.js → fiveCbd-HNBPqPtX.js} +17 -7
- package/dist/{forLoveAndLemons-BD2qh-6B.js → forLoveAndLemons-BKmJJ9pq.js} +13 -5
- package/dist/{forLoveAndLemons-BNu-PfFB.cjs → forLoveAndLemons-BeVEBOiu.cjs} +17 -9
- package/dist/{types-DGoFEos_.d.cts → frontendConfig-KeNqU1wa.d.cts} +39 -275
- package/dist/{types-D4vlfTd0.d.ts → frontendConfig-cPvCTWm6.d.ts} +39 -275
- package/dist/globalSearch-BC0rOX3E.js +13 -0
- package/dist/globalSearch-hxbXekus.cjs +38 -0
- package/dist/{greenpan-LDDXZTsh.js → greenpan-BX1viAZB.js} +17 -7
- package/dist/{greenpan-D6fDmjU8.cjs → greenpan-chd3aa5I.cjs} +30 -20
- package/dist/{grooveLife-D-1qfxwj.js → grooveLife-CHot3rZw.js} +18 -8
- package/dist/{grooveLife-CcylXabB.cjs → grooveLife-DEob7rK0.cjs} +29 -19
- package/dist/{homegrownCannabis-BEZzwFlm.cjs → homegrownCannabis-CoIjcehi.cjs} +27 -16
- package/dist/{homegrownCannabis-BScZhy9v.js → homegrownCannabis-CwkS1qDA.js} +17 -6
- package/dist/hooks/index.cjs +15 -4
- package/dist/hooks/index.d.cts +15 -305
- package/dist/hooks/index.d.ts +15 -306
- package/dist/hooks/index.js +15 -4
- package/dist/index-BdNKc2ix.d.cts +8 -0
- package/dist/index-BkhvV8RZ.d.cts +202 -0
- package/dist/index-BrXuc_Ck.d.cts +24 -0
- package/dist/index-C4zjAR1c.d.cts +227 -0
- package/dist/index-CGB6CAmr.d.ts +6 -0
- package/dist/index-CIco0cCQ.d.ts +183 -0
- package/dist/index-COG1kOZG.d.ts +749 -0
- package/dist/index-CVxe7FpL.d.cts +6 -0
- package/dist/index-Cn1SeI5y.d.cts +183 -0
- package/dist/index-Cqg6ltII.d.ts +38 -0
- package/dist/index-CzMrMKx-.d.ts +202 -0
- package/dist/index-DE_7Q8qK.d.ts +94 -0
- package/dist/index-Da0UzyI9.d.ts +24 -0
- package/dist/index-DbWWcYax.d.cts +749 -0
- package/dist/index-DtoVXd6O.d.cts +97 -0
- package/dist/index-JClBRnSX.d.cts +94 -0
- package/dist/index-ghzD_356.d.ts +8 -0
- package/dist/index-hdbCEjYy.d.cts +38 -0
- package/dist/index-luJrHgPN.d.ts +97 -0
- package/dist/index-tfRj22E1.d.ts +227 -0
- package/dist/interceptors/index.cjs +14 -0
- package/dist/interceptors/index.d.cts +25 -0
- package/dist/interceptors/index.d.ts +25 -0
- package/dist/interceptors/index.js +13 -0
- package/dist/{jackArcher-cJJVulZ9.js → jackArcher-BA-pkB4A.js} +17 -7
- package/dist/{jackArcher-BwMClqMP.cjs → jackArcher-bewC0q1T.cjs} +34 -24
- package/dist/{jordanCraig-DGsCO2o1.cjs → jordanCraig-B5k9nlAw.cjs} +77 -67
- package/dist/{jordanCraig-DNDMT0hn.js → jordanCraig-BsQ1mYbt.js} +17 -7
- package/dist/{kindredBravely-ROyesnVk.js → kindredBravely-BxYkCpGY.js} +16 -6
- package/dist/{kindredBravely-wV2XT1r_.cjs → kindredBravely-DsN0fo3s.cjs} +27 -17
- package/dist/{kutFromTheKloth-B6GR8tO9.cjs → kutFromTheKloth-BQTCu3ct.cjs} +28 -18
- package/dist/{kutFromTheKloth-BCUOHegv.js → kutFromTheKloth-bukOQM3P.js} +17 -7
- package/dist/{larryAndSerges-CqS02fnX.js → larryAndSerges-D1ecaT5a.js} +14 -5
- package/dist/{larryAndSerges-CIqB9tKz.cjs → larryAndSerges-bj7fgy9b.cjs} +21 -12
- package/dist/{leapsAndRebounds-CFj9F_z1.cjs → leapsAndRebounds-BfneG_0c.cjs} +30 -20
- package/dist/{leapsAndRebounds-j4YqSvNb.js → leapsAndRebounds-DhNpZETg.js} +17 -7
- package/dist/locators-C2DX_nX6.js +1 -0
- package/dist/locators-CUpyd9Wt.cjs +0 -0
- package/dist/logger-Dln20ans.cjs +25 -0
- package/dist/logger-pdEEY8T2.js +19 -0
- package/dist/{longevityrx-9sUQZCVZ.js → longevityrx-CnoGcw0w.js} +17 -7
- package/dist/{longevityrx-C-Yc5LPR.cjs → longevityrx-D0goIuX0.cjs} +25 -15
- package/dist/{lookOptic-dbaaorhR.cjs → lookOptic-C4afLPZP.cjs} +25 -15
- package/dist/{lookOptic-CQryypdM.js → lookOptic-uJWIKpER.js} +17 -7
- package/dist/{mantraBrand-D5MTZ6Mj.cjs → mantraBrand-8JUlYtCE.cjs} +46 -36
- package/dist/{mantraBrand-CifBQtHp.js → mantraBrand-DuwKHM26.js} +18 -8
- package/dist/{medterra-DhENCf-m.js → medterra-BQec8rzn.js} +17 -7
- package/dist/{medterra-BCrXdmFE.cjs → medterra-DH067P-V.cjs} +37 -27
- package/dist/{modells-aQrV10D7.js → modells-DAgLE2xo.js} +17 -7
- package/dist/{modells-C_P_894S.cjs → modells-DUFnLmAz.cjs} +31 -21
- package/dist/nodeSelector-DpKXszfU.d.ts +30 -0
- package/dist/nodeSelector-vKB44CDB.d.cts +30 -0
- package/dist/org-C11APG3v.js +63 -0
- package/dist/org-CnHL2I9B.cjs +106 -0
- package/dist/{pressedFloral-DErfwwl0.cjs → pressedFloral-DVZVfOSQ.cjs} +36 -26
- package/dist/{pressedFloral-D-amnTQK.js → pressedFloral-MdbuoRyA.js} +17 -7
- package/dist/search-CvHb1M3S.js +542 -0
- package/dist/search-bSYdOBhY.cjs +743 -0
- package/dist/search-filter-types-BsJjrxk0.d.ts +101 -0
- package/dist/search-filter-types-CqaGK3nM.d.cts +101 -0
- package/dist/{skinPerfection-DF6nQXjh.cjs → skinPerfection-BcEWICQN.cjs} +25 -15
- package/dist/{skinPerfection-DRVPJp3h.js → skinPerfection-bGiYxq1i.js} +17 -7
- package/dist/{snapSupplements-CLZjItJi.cjs → snapSupplements-BXSXTjqF.cjs} +25 -15
- package/dist/{snapSupplements-Yxs4jgC-.js → snapSupplements-D7hHhdC9.js} +17 -7
- package/dist/{spanx-DVDyAyFC.js → spanx-5-0yX3iK.js} +19 -9
- package/dist/{spanx-Cpbot5J5.cjs → spanx-lUzP6Lva.cjs} +31 -21
- package/dist/{spanxStaging-DAiFEMRU.js → spanxStaging-HglCMJag.js} +19 -9
- package/dist/{spanxStaging-DbaVonN6.cjs → spanxStaging-hreMR0MS.cjs} +35 -25
- package/dist/suggestionBarV2-types-B0RbMStE.js +9 -0
- package/dist/suggestionBarV2-types-DG3Ekk44.cjs +15 -0
- package/dist/{supergoop-C4McrZPT.js → supergoop-C9DDT3lY.js} +18 -7
- package/dist/{supergoop-B5VQlsoe.cjs → supergoop-CkjtuRck.cjs} +29 -18
- package/dist/test-types-C9b_OdfO.d.ts +39 -0
- package/dist/test-types-CpKCxk8U.d.cts +39 -0
- package/dist/types/index.cjs +6 -0
- package/dist/types/index.d.cts +3 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.js +4 -0
- package/dist/types-BE4faOO_.d.cts +32 -0
- package/dist/{types-QJObznro.cjs → types-BUjohkXp.cjs} +58 -58
- package/dist/{types-DZzSQ5a6.js → types-BVsTRyxL.js} +58 -58
- package/dist/types-TD8g7LnH.d.ts +32 -0
- package/dist/{uniqueVintage-BLp_UtBR.cjs → uniqueVintage-DIMGtYAU.cjs} +47 -37
- package/dist/{uniqueVintage-CS4TgOJW.js → uniqueVintage-DPWA5Ed6.js} +17 -7
- package/dist/useMessageInterceptor-B-P_rw73.cjs +72 -0
- package/dist/useMessageInterceptor-C2RZM-fo.js +57 -0
- package/dist/utilityTypes-BVikejDo.js +1 -0
- package/dist/utilityTypes-C4h2wgAK.cjs +0 -0
- package/dist/variant-BGjOVpY3.d.cts +12 -0
- package/dist/variant-XITncuI3.d.ts +12 -0
- package/dist/variantInfo-CNRTY0gH.cjs +0 -0
- package/dist/variantInfo-CzhR5W6h.js +1 -0
- package/dist/{venaCbd-DfnFV7Qp.js → venaCbd-B-znfAsl.js} +17 -7
- package/dist/{venaCbd-BxmadOeJ.cjs → venaCbd-BOwOtpOz.cjs} +30 -20
- package/dist/{westonJonBoucher-BZdusJgo.cjs → westonJonBoucher-CraTzRVt.cjs} +30 -20
- package/dist/{westonJonBoucher-C0FE4Wup.js → westonJonBoucher-DCRagGu3.js} +17 -7
- package/dist/{wineEnthusiast-CmhNg47M.js → wineEnthusiast-Bv7umajk.js} +17 -7
- package/dist/{wineEnthusiast-DQxdV8Yg.cjs → wineEnthusiast-sVuATrq6.cjs} +29 -19
- package/dist/{wolfMattress-vMvqmwgI.js → wolfMattress-BUH-Rhov.js} +17 -6
- package/dist/{wolfMattress-CqyOUgPB.cjs → wolfMattress-DpVHIEnJ.cjs} +29 -18
- package/dist/{wolfTactical-q3TVDP85.cjs → wolfTactical-BcvF_sy-.cjs} +29 -19
- package/dist/{wolfTactical-DvqxZtoA.js → wolfTactical-Q14A1fpw.js} +17 -7
- package/package.json +101 -3
- package/src/adapters/amplitude/amplitudeAdapter.ts +1 -1
- package/src/adapters/spiffy/commerce/api.ts +1 -1
- package/src/adapters/spiffy/commerce/graphql.ts +61 -37
- package/src/application/config/index.ts +1 -0
- package/src/application/models/index.ts +102 -17
- package/src/application/models/supportedOrgs.ts +89 -65
- package/src/application/service/index.ts +32 -0
- package/src/application/service/pageVariantService.ts +201 -114
- package/src/application/service/searchService.ts +1 -1
- package/src/application/service/windowFrontendConfigService.ts +40 -18
- package/src/application/utils/index.ts +22 -3
- package/src/atoms/app/variant.ts +48 -29
- package/src/atoms/atomStore/index.ts +1 -0
- package/src/atoms/chat/messageQueue.ts +34 -17
- package/src/atoms/chat/performanceMetrics.ts +51 -38
- package/src/atoms/chat/renderedWidgetRefs.ts +14 -15
- package/src/atoms/globalSearch/index.ts +1 -0
- package/src/atoms/org/org.ts +1 -3
- package/src/atoms/org/orgUIConfig.ts +31 -24
- package/src/contexts/chatContext.tsx +124 -72
- package/src/events/registerAnalyticsListeners.ts +13 -9
- package/src/hooks/useFileUpload.ts +9 -7
- package/src/hooks/useSearch.tsx +3 -3
- package/src/initialize.ts +1 -1
- package/src/interceptors/index.ts +3 -0
- package/src/main.tsx +1 -1
- package/src/types/index.ts +4 -0
- package/dist/GridInsertionService-C00upKLB.js +0 -40
- package/dist/GridInsertionService-CMJVhD6q.cjs +0 -52
- package/dist/custservice-types-BgjGHCtD.cjs +0 -16
- package/dist/custservice-types-V6FWABp4.js +0 -10
- package/dist/default-DMtAjA62.cjs +0 -4
- package/dist/default-zcmT2032.js +0 -4
- package/dist/divIds-Cfp3v_rG.js +0 -35
- package/dist/domInsertionService-BtzuH2Sc.js +0 -65
- package/dist/domInsertionService-Cb9814oM.cjs +0 -89
- package/dist/suggestionBarV2-types-XHYD3j8E.cjs +0 -46
- package/dist/suggestionBarV2-types-aiQmVx5m.js +0 -34
- package/src/atoms/index.ts +0 -5
- package/src/index.ts +0 -31
- /package/dist/{cdnService-CAyO3axV.js → cdnService-DvDSpfVJ.js} +0 -0
- /package/dist/{cdnService-DIF1i7VC.cjs → cdnService-dJU3sHpF.cjs} +0 -0
- /package/dist/{entrypoints-RmIbdYxh.js → entrypoints-CmmOszXO.js} +0 -0
- /package/dist/{entrypoints-C8JwiMYA.cjs → entrypoints-fowCLUT2.cjs} +0 -0
- /package/dist/{socialProofClasses-CaA83vI4.cjs → socialProofClasses-BYLiEXpU.cjs} +0 -0
- /package/dist/{socialProofClasses-KB7zOMmg.js → socialProofClasses-CkJufEGb.js} +0 -0
- /package/src/atoms/{atomStore.ts → atomStore/atomStore.ts} +0 -0
- /package/src/atoms/{globalSearch.ts → globalSearch/globalSearch.ts} +0 -0
|
@@ -0,0 +1,743 @@
|
|
|
1
|
+
const require_chunk = require('./chunk-CUT6urMc.cjs');
|
|
2
|
+
const require_logger = require('./logger-Dln20ans.cjs');
|
|
3
|
+
const require_api = require('./api-CxGedDxj.cjs');
|
|
4
|
+
const require_enviveConfigContext = require('./enviveConfigContext-Dfr2VH6u.cjs');
|
|
5
|
+
const require_atomStore = require('./atomStore-CeJm9Llb.cjs');
|
|
6
|
+
let __spiffy_ai_commerce_api_client = require("@spiffy-ai/commerce-api-client");
|
|
7
|
+
__spiffy_ai_commerce_api_client = require_chunk.__toESM(__spiffy_ai_commerce_api_client);
|
|
8
|
+
let jotai = require("jotai");
|
|
9
|
+
jotai = require_chunk.__toESM(jotai);
|
|
10
|
+
let uuid = require("uuid");
|
|
11
|
+
uuid = require_chunk.__toESM(uuid);
|
|
12
|
+
|
|
13
|
+
//#region src/atoms/search/utils.ts
|
|
14
|
+
const formatFilterDisplayName = (displayName) => {
|
|
15
|
+
const sizes = [
|
|
16
|
+
"xxxs",
|
|
17
|
+
"xxs",
|
|
18
|
+
"xs",
|
|
19
|
+
"s",
|
|
20
|
+
"m",
|
|
21
|
+
"l",
|
|
22
|
+
"xl",
|
|
23
|
+
"xxl",
|
|
24
|
+
"xxxl",
|
|
25
|
+
"xxxxl"
|
|
26
|
+
];
|
|
27
|
+
return displayName.toLowerCase().split(" ").map((word) => {
|
|
28
|
+
if (sizes.includes(word)) return word.toUpperCase();
|
|
29
|
+
return word.charAt(0).toUpperCase() + word.slice(1);
|
|
30
|
+
}).join(" ").replace(/Iphone/g, "iPhone");
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
//#endregion
|
|
34
|
+
//#region src/atoms/search/productFilters.ts
|
|
35
|
+
const getPriceBucket = (price, bucketSize) => {
|
|
36
|
+
return Math.floor(price / bucketSize) * bucketSize;
|
|
37
|
+
};
|
|
38
|
+
const isStringArray = (value) => {
|
|
39
|
+
if (!Array.isArray(value)) return false;
|
|
40
|
+
return value.every((item) => typeof item === "string");
|
|
41
|
+
};
|
|
42
|
+
const sortFilter = (filterConfig) => {
|
|
43
|
+
if (filterConfig.type === "price") return (a, b) => Number(a.filterItemId) - Number(b.filterItemId);
|
|
44
|
+
if (filterConfig.type === "dynamic") {
|
|
45
|
+
if (filterConfig.sorting.type === "alphabetic") return (a, b) => a.displayName.localeCompare(b.displayName);
|
|
46
|
+
if (filterConfig.sorting.type === "productCount") return (a, b) => a.productCount === b.productCount ? a.displayName.localeCompare(b.displayName) : b.productCount - a.productCount;
|
|
47
|
+
if (filterConfig.sorting.type === "custom") {
|
|
48
|
+
const sortedKeys = filterConfig.sorting.map;
|
|
49
|
+
return (a, b) => {
|
|
50
|
+
if (sortedKeys[a.displayName] && sortedKeys[b.displayName]) return sortedKeys[a.displayName] - sortedKeys[b.displayName];
|
|
51
|
+
if (sortedKeys[a.displayName]) return -1;
|
|
52
|
+
if (sortedKeys[b.displayName]) return 1;
|
|
53
|
+
return b.productCount - a.productCount;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
throw new Error("Invaalid search filter configuration");
|
|
58
|
+
};
|
|
59
|
+
var ProductFilters = class {
|
|
60
|
+
static getFiltersForProducts(products, filterConfigs, selectedFilterOptions) {
|
|
61
|
+
if (!products || products.length === 0) return [];
|
|
62
|
+
return [...filterConfigs.map((filterConfig) => products.reduce((acc, product) => {
|
|
63
|
+
if (filterConfig.type === "price") {
|
|
64
|
+
const priceBucket = getPriceBucket(product.salePrice ?? product.originalPrice ?? 0, filterConfig.bucketSize);
|
|
65
|
+
const current = acc.map[priceBucket] ?? {
|
|
66
|
+
filterItemId: priceBucket,
|
|
67
|
+
displayName: `$${priceBucket}-$${priceBucket + filterConfig.bucketSize}`,
|
|
68
|
+
productCount: 0
|
|
69
|
+
};
|
|
70
|
+
acc.map[priceBucket] = {
|
|
71
|
+
...current,
|
|
72
|
+
productCount: current.productCount + 1
|
|
73
|
+
};
|
|
74
|
+
return acc;
|
|
75
|
+
}
|
|
76
|
+
const attributeValues = (product.filters && product.filters?.[filterConfig.attribute]) ?? [];
|
|
77
|
+
if (isStringArray(attributeValues)) attributeValues.forEach((val) => {
|
|
78
|
+
const normalizedVal = val.toLowerCase();
|
|
79
|
+
const current = acc.map[normalizedVal] ?? {
|
|
80
|
+
filterItemId: normalizedVal,
|
|
81
|
+
displayName: formatFilterDisplayName(val),
|
|
82
|
+
productCount: 0
|
|
83
|
+
};
|
|
84
|
+
acc.map[normalizedVal] = {
|
|
85
|
+
...current,
|
|
86
|
+
productCount: current.productCount + 1
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
return acc;
|
|
90
|
+
}, {
|
|
91
|
+
filterConfig,
|
|
92
|
+
map: {}
|
|
93
|
+
})).map(({ filterConfig, map }) => ({
|
|
94
|
+
filterId: filterConfig.filterId,
|
|
95
|
+
displayName: filterConfig.displayName,
|
|
96
|
+
items: Object.values(map).map((filter) => ({
|
|
97
|
+
filterItemId: filter.filterItemId,
|
|
98
|
+
displayName: filter.displayName,
|
|
99
|
+
productCount: filter.productCount,
|
|
100
|
+
isSelected: selectedFilterOptions.some((option) => option.id === `${filterConfig.filterId}:${filter.filterItemId}`) ?? false
|
|
101
|
+
})).sort(sortFilter(filterConfig))
|
|
102
|
+
}))];
|
|
103
|
+
}
|
|
104
|
+
static filterProducts(products, filterConfigs, selectedFilterOptions, additiveDynamicFilters = false) {
|
|
105
|
+
const selectedFilters = filterConfigs.map((filterConfig) => ({
|
|
106
|
+
filterConfig,
|
|
107
|
+
hasSelectedOptions: selectedFilterOptions.some((option) => option.filterId === filterConfig.filterId)
|
|
108
|
+
})).filter(({ hasSelectedOptions }) => hasSelectedOptions);
|
|
109
|
+
return selectedFilterOptions.length === 0 ? products : products.filter((product) => selectedFilters.reduce((acc, selectedFilter) => {
|
|
110
|
+
if (!acc) return acc;
|
|
111
|
+
if (selectedFilter.filterConfig.type === "price") {
|
|
112
|
+
const priceBucket = getPriceBucket(product.salePrice ?? product.originalPrice ?? 0, selectedFilter.filterConfig.bucketSize);
|
|
113
|
+
if (!selectedFilterOptions.some((option) => option.id === `price:${priceBucket}`)) return false;
|
|
114
|
+
}
|
|
115
|
+
if (selectedFilter.filterConfig.type === "dynamic") {
|
|
116
|
+
const { filterId, attribute } = selectedFilter.filterConfig;
|
|
117
|
+
const attributeValues = product.filters?.[attribute];
|
|
118
|
+
if (!isStringArray(attributeValues)) return false;
|
|
119
|
+
if (selectedFilter.filterConfig.attribute === "dynamic" && !additiveDynamicFilters) {
|
|
120
|
+
if (!selectedFilterOptions.filter((option) => option.filterId === filterId).map((option) => option.filterItemId.toLowerCase()).every((selectedValue) => attributeValues.some((val) => val.toLowerCase() === selectedValue))) return false;
|
|
121
|
+
} else if (!attributeValues.some((val) => selectedFilterOptions.some((option) => option.id === `${filterId}:${val.toLowerCase()}`))) return false;
|
|
122
|
+
}
|
|
123
|
+
return true;
|
|
124
|
+
}, true));
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
//#endregion
|
|
129
|
+
//#region src/atoms/search/types.ts
|
|
130
|
+
let ProductSorting = /* @__PURE__ */ function(ProductSorting$1) {
|
|
131
|
+
ProductSorting$1["FEATURED"] = "featured";
|
|
132
|
+
ProductSorting$1["PRICE_ASC"] = "price_asc";
|
|
133
|
+
ProductSorting$1["PRICE_DESC"] = "price_desc";
|
|
134
|
+
return ProductSorting$1;
|
|
135
|
+
}({});
|
|
136
|
+
const ProductSortingNames = {
|
|
137
|
+
[ProductSorting.FEATURED]: "Featured",
|
|
138
|
+
[ProductSorting.PRICE_ASC]: "Price Low to High",
|
|
139
|
+
[ProductSorting.PRICE_DESC]: "Price High to Low"
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
//#endregion
|
|
143
|
+
//#region src/atoms/search/productSorter.ts
|
|
144
|
+
var ProductSorter = class {
|
|
145
|
+
static sort(products, sorting) {
|
|
146
|
+
switch (sorting) {
|
|
147
|
+
case ProductSorting.PRICE_ASC: return [...products].sort((p1, p2) => (p1.salePrice ?? p1.originalPrice ?? 0) - (p2.salePrice ?? p2.originalPrice ?? 0));
|
|
148
|
+
case ProductSorting.PRICE_DESC: return [...products].sort((p1, p2) => (p2.salePrice ?? p2.originalPrice ?? 0) - (p1.salePrice ?? p1.originalPrice ?? 0));
|
|
149
|
+
default: return products;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
//#endregion
|
|
155
|
+
//#region src/atoms/search/chatSearch.ts
|
|
156
|
+
const chatSearchStateAtom = (0, jotai.atom)("entrypoint");
|
|
157
|
+
const chatSearchHasProductsAtom = (0, jotai.atom)(false);
|
|
158
|
+
const chatSearchProductSortingAtom = (0, jotai.atom)(ProductSorting.FEATURED);
|
|
159
|
+
const filterProductList = (message) => message.type === require_api.MessageType.Product && message.metadata.isForGrid === true;
|
|
160
|
+
const filterFilterList = (message) => message.type === require_api.MessageType.ProductSearchFilter;
|
|
161
|
+
const chatSearchIsLoadingAtom = (0, jotai.atom)(false);
|
|
162
|
+
const buildChatSearchTurn = (messages) => {
|
|
163
|
+
const queryMessage = messages.find((message) => message.type === require_api.MessageType.ProductSearch);
|
|
164
|
+
if (!queryMessage) return null;
|
|
165
|
+
const { generatedQuery, productCount } = queryMessage.metadata ?? {};
|
|
166
|
+
const productList = messages.filter(filterProductList).map((message) => message.metadata);
|
|
167
|
+
const filterList = messages.filter(filterFilterList).map((message) => message.metadata.filterName);
|
|
168
|
+
return [queryMessage.id, {
|
|
169
|
+
id: queryMessage.id,
|
|
170
|
+
generatedQuery,
|
|
171
|
+
productCount: productCount || productList.length,
|
|
172
|
+
productList,
|
|
173
|
+
filterList,
|
|
174
|
+
messages
|
|
175
|
+
}];
|
|
176
|
+
};
|
|
177
|
+
const chatSearchFilterConfigAtom = (0, jotai.atom)((get) => {
|
|
178
|
+
const { searchConfig } = get(require_api.orgUIConfigAtom);
|
|
179
|
+
return searchConfig.searchFilterConfig;
|
|
180
|
+
});
|
|
181
|
+
const searchMapAtom = (0, jotai.atom)((get) => {
|
|
182
|
+
const messages = get(require_api.messagesAtom);
|
|
183
|
+
return Object.fromEntries(messages.map(buildChatSearchTurn).filter((v) => v !== null));
|
|
184
|
+
});
|
|
185
|
+
const internalChatSearchParamsAtom = (0, jotai.atom)({
|
|
186
|
+
id: null,
|
|
187
|
+
query: null
|
|
188
|
+
});
|
|
189
|
+
const selectedFilterOptionsAtom = (0, jotai.atom)([]);
|
|
190
|
+
const additiveDynamicFiltersAtom = (0, jotai.atom)((get) => {
|
|
191
|
+
const { searchConfig } = get(require_api.orgUIConfigAtom);
|
|
192
|
+
return searchConfig.additiveDynamicFilters ?? false;
|
|
193
|
+
});
|
|
194
|
+
const createChatSearchFilterOption = (filterId, filterItemId, displayName) => ({
|
|
195
|
+
id: `${filterId}:${filterItemId}`,
|
|
196
|
+
displayName,
|
|
197
|
+
filterId,
|
|
198
|
+
filterItemId
|
|
199
|
+
});
|
|
200
|
+
const handleSearchAtom = (0, jotai.atom)(null, (get, set, message) => {
|
|
201
|
+
if (message.type !== require_api.MessageType.Search) return;
|
|
202
|
+
const querySearch = message.metadata.searchTerm;
|
|
203
|
+
set(require_api.replyEventCategoryAtom, __spiffy_ai_commerce_api_client.UserEventCategory.Search);
|
|
204
|
+
set(require_api.userQueryAtom, querySearch);
|
|
205
|
+
set(require_api.messagesAtom, [...get(require_api.messagesAtom), [message]]);
|
|
206
|
+
set(require_api.userHasRepliedAtom, true);
|
|
207
|
+
set(require_api.queueUserEventAtom, {
|
|
208
|
+
eventId: message.id,
|
|
209
|
+
category: __spiffy_ai_commerce_api_client.UserEventCategory.Search,
|
|
210
|
+
createdAt: message.createdAt,
|
|
211
|
+
attributes: {
|
|
212
|
+
searchTerm: message.metadata.searchTerm,
|
|
213
|
+
selectedFilters: message.metadata.selectedFilters
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
});
|
|
217
|
+
const chatSearchParamsAtom = (0, jotai.atom)((get) => get(internalChatSearchParamsAtom), (_, set, value) => {
|
|
218
|
+
set(internalChatSearchParamsAtom, value);
|
|
219
|
+
});
|
|
220
|
+
const chatSearchQueryAtom = (0, jotai.atom)((get) => get(chatSearchParamsAtom)?.query ?? null, (get, set, value) => {
|
|
221
|
+
const searchParams = get(chatSearchParamsAtom);
|
|
222
|
+
set(chatSearchParamsAtom, {
|
|
223
|
+
id: searchParams.id,
|
|
224
|
+
query: value
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
const chatSearchIdAtom = (0, jotai.atom)((get) => get(chatSearchParamsAtom)?.id ?? null, (get, set, value) => {
|
|
228
|
+
const searchParams = get(chatSearchParamsAtom);
|
|
229
|
+
set(chatSearchParamsAtom, {
|
|
230
|
+
id: value,
|
|
231
|
+
query: searchParams.query
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
const ChatSearchTurnAtom = (0, jotai.atom)((get) => {
|
|
235
|
+
const searchFilterConfig = get(chatSearchFilterConfigAtom);
|
|
236
|
+
const searchMap = get(searchMapAtom);
|
|
237
|
+
const chatSearchId = get(chatSearchIdAtom);
|
|
238
|
+
if (!chatSearchId) return null;
|
|
239
|
+
const ChatSearchTurn = searchMap[chatSearchId];
|
|
240
|
+
if (!ChatSearchTurn) return null;
|
|
241
|
+
const productSorting = get(chatSearchProductSortingAtom);
|
|
242
|
+
const selectedFilterOptions = get(selectedFilterOptionsAtom);
|
|
243
|
+
const additiveDynamicFilters = get(additiveDynamicFiltersAtom);
|
|
244
|
+
const filteredProducts = ProductFilters.filterProducts(ChatSearchTurn.productList, searchFilterConfig, selectedFilterOptions, additiveDynamicFilters);
|
|
245
|
+
const filteredAndSortedProducts = ProductSorter.sort(filteredProducts, productSorting);
|
|
246
|
+
return {
|
|
247
|
+
...searchMap[chatSearchId],
|
|
248
|
+
productList: filteredAndSortedProducts,
|
|
249
|
+
productCount: filteredAndSortedProducts.length
|
|
250
|
+
};
|
|
251
|
+
});
|
|
252
|
+
const chatSearchProducts = (0, jotai.atom)((get) => {
|
|
253
|
+
return get(ChatSearchTurnAtom)?.productList ?? [];
|
|
254
|
+
});
|
|
255
|
+
const chatSearchFiltersAtom = (0, jotai.atom)((get) => {
|
|
256
|
+
const searchFilterConfig = get(chatSearchFilterConfigAtom);
|
|
257
|
+
const searchMap = get(searchMapAtom);
|
|
258
|
+
const chatSearchId = get(chatSearchIdAtom);
|
|
259
|
+
if (chatSearchId && searchMap[chatSearchId]) {
|
|
260
|
+
const products = searchMap[chatSearchId].productList;
|
|
261
|
+
const selectedFilterOptions = get(selectedFilterOptionsAtom);
|
|
262
|
+
return ProductFilters.getFiltersForProducts(products, searchFilterConfig, selectedFilterOptions);
|
|
263
|
+
}
|
|
264
|
+
return [];
|
|
265
|
+
});
|
|
266
|
+
const setSearchParams = (query) => {
|
|
267
|
+
const url = new URL(window.location.href);
|
|
268
|
+
url.searchParams.set("es", "true");
|
|
269
|
+
url.searchParams.set("esq", query);
|
|
270
|
+
window.history.pushState({}, "", url);
|
|
271
|
+
};
|
|
272
|
+
const getSearchParamsAtom = (0, jotai.atom)(() => {
|
|
273
|
+
const params = new URLSearchParams(window.location.search);
|
|
274
|
+
return {
|
|
275
|
+
es: params.get("es"),
|
|
276
|
+
esq: params.get("esq")
|
|
277
|
+
};
|
|
278
|
+
});
|
|
279
|
+
const initiateChatSearchAtom = (0, jotai.atom)(null, (_, set, query) => {
|
|
280
|
+
set(chatSearchIsLoadingAtom, true);
|
|
281
|
+
const url = new URL(window.location.href);
|
|
282
|
+
url.searchParams.set("es", "true");
|
|
283
|
+
url.searchParams.set("esq", query);
|
|
284
|
+
window.history.pushState({}, "", url);
|
|
285
|
+
window.dispatchEvent(new PopStateEvent("popstate", { state: {} }));
|
|
286
|
+
set(chatSearchParamsAtom, {
|
|
287
|
+
id: null,
|
|
288
|
+
query
|
|
289
|
+
});
|
|
290
|
+
set(handleSearchAtom, {
|
|
291
|
+
id: (0, uuid.v4)(),
|
|
292
|
+
role: require_api.MessageRole.User,
|
|
293
|
+
type: require_api.MessageType.Search,
|
|
294
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
295
|
+
metadata: {
|
|
296
|
+
searchTerm: query,
|
|
297
|
+
selectedFilters: []
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
});
|
|
301
|
+
const handleSearchResultsAtom = (0, jotai.atom)(null, (get, set, message) => {
|
|
302
|
+
if (!message || message.type !== require_api.MessageType.ProductSearch) return;
|
|
303
|
+
const { productCount, generatedQuery } = message.metadata;
|
|
304
|
+
if (productCount !== 0) {
|
|
305
|
+
set(selectedFilterOptionsAtom, []);
|
|
306
|
+
set(chatSearchStateAtom, "product-page");
|
|
307
|
+
const currentSearchParams = get(chatSearchParamsAtom);
|
|
308
|
+
const url = new URL(window.location.href);
|
|
309
|
+
url.searchParams.set("es", "true");
|
|
310
|
+
url.searchParams.set("esq", generatedQuery);
|
|
311
|
+
url.searchParams.set("esi", message.id);
|
|
312
|
+
window.history.pushState({}, "", url);
|
|
313
|
+
if (currentSearchParams.id === null) window.history.replaceState(null, "", url);
|
|
314
|
+
else window.history.pushState(null, "", url);
|
|
315
|
+
set(chatSearchParamsAtom, {
|
|
316
|
+
id: message.id,
|
|
317
|
+
query: generatedQuery
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
const setChatSearchParamsAtom = (0, jotai.atom)(null, (_, set, query) => {
|
|
322
|
+
const url = new URL(window.location.href);
|
|
323
|
+
url.searchParams.set("es", "true");
|
|
324
|
+
url.searchParams.set("esq", query);
|
|
325
|
+
window.history.pushState({}, "", url);
|
|
326
|
+
set(chatSearchParamsAtom, {
|
|
327
|
+
id: null,
|
|
328
|
+
query
|
|
329
|
+
});
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
//#endregion
|
|
333
|
+
//#region src/application/service/searchService.ts
|
|
334
|
+
const transformProductResponses = (products) => products.map((data) => ({
|
|
335
|
+
id: data.id,
|
|
336
|
+
responseId: data.response_id,
|
|
337
|
+
category: __spiffy_ai_commerce_api_client.ResponseCategory.Product,
|
|
338
|
+
description: data.description,
|
|
339
|
+
imageUrl: data.image_url,
|
|
340
|
+
imageUrls: data.image_urls,
|
|
341
|
+
title: data.title,
|
|
342
|
+
url: data.url,
|
|
343
|
+
originalPrice: data.original_price,
|
|
344
|
+
salePrice: data.sale_price,
|
|
345
|
+
averageRating: data.average_rating,
|
|
346
|
+
numberReviews: data.number_reviews,
|
|
347
|
+
metadata: data.metadata,
|
|
348
|
+
isForGrid: data.is_for_grid,
|
|
349
|
+
colors: data.colors,
|
|
350
|
+
sizes: data.sizes,
|
|
351
|
+
filters: data.filters
|
|
352
|
+
}));
|
|
353
|
+
async function errorResponseBody(error) {
|
|
354
|
+
try {
|
|
355
|
+
return await error.response.json();
|
|
356
|
+
} catch {
|
|
357
|
+
return {};
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
async function throwSessionRestartRequiredIf(errorMsg, error) {
|
|
361
|
+
if (!(error instanceof __spiffy_ai_commerce_api_client.ResponseError)) {
|
|
362
|
+
require_logger.logger_default.logInfo(errorMsg, error);
|
|
363
|
+
throw error;
|
|
364
|
+
}
|
|
365
|
+
const errorResponse = await errorResponseBody(error);
|
|
366
|
+
if (errorResponse?.message?.toLowerCase() === "unsupported product" || errorResponse?.app_code?.toUpperCase() === "PRODUCT_NOT_FOUND") throw new require_api.UnsupportedProductException();
|
|
367
|
+
else if (errorResponse?.app_code?.toUpperCase() === "RESTART_SESSION" || errorResponse?.sub_code?.toUpperCase() === "NOT_FOUND") {
|
|
368
|
+
require_logger.logger_default.logInfo("Session does not exist. Re-start session", error, error.response, errorResponse);
|
|
369
|
+
throw new require_api.SessionRestartRequired();
|
|
370
|
+
}
|
|
371
|
+
require_logger.logger_default.logInfo(errorMsg, error);
|
|
372
|
+
throw error;
|
|
373
|
+
}
|
|
374
|
+
var SearchService = class SearchService {
|
|
375
|
+
static {
|
|
376
|
+
this.getInstance = () => {
|
|
377
|
+
if (!SearchService.instance) {
|
|
378
|
+
const apiKey = require_atomStore.getAtomStore().get(require_api.apiKeyAtom);
|
|
379
|
+
SearchService.instance = new SearchService(apiKey);
|
|
380
|
+
}
|
|
381
|
+
return SearchService.instance;
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
constructor(apiKey, basePath) {
|
|
385
|
+
const { baseUrl } = require_enviveConfigContext.useEnviveConfig();
|
|
386
|
+
const config = new __spiffy_ai_commerce_api_client.Configuration({
|
|
387
|
+
accessToken: apiKey,
|
|
388
|
+
basePath: basePath || baseUrl,
|
|
389
|
+
headers: {
|
|
390
|
+
"Content-Type": "application/json",
|
|
391
|
+
Accept: "application/json"
|
|
392
|
+
}
|
|
393
|
+
});
|
|
394
|
+
this.searchApi = new __spiffy_ai_commerce_api_client.SearchApi(config);
|
|
395
|
+
}
|
|
396
|
+
async _searchProducts(params) {
|
|
397
|
+
const appDetails = require_atomStore.getAtomStore().get(require_api.appDetailsAtom);
|
|
398
|
+
try {
|
|
399
|
+
const { products, filters, search_response_id: searchResponseId } = await this.searchApi.v1SearchQueryGet({
|
|
400
|
+
query: params.query,
|
|
401
|
+
limit: params.limit,
|
|
402
|
+
org_id: appDetails.orgId,
|
|
403
|
+
user_id: appDetails.userId
|
|
404
|
+
});
|
|
405
|
+
return {
|
|
406
|
+
products: transformProductResponses(products) || [],
|
|
407
|
+
filters: filters || [],
|
|
408
|
+
totalProductCount: products?.length || 0,
|
|
409
|
+
searchResponseId: searchResponseId || ""
|
|
410
|
+
};
|
|
411
|
+
} catch (error) {
|
|
412
|
+
await throwSessionRestartRequiredIf("Failed to search products", error);
|
|
413
|
+
return {
|
|
414
|
+
products: [],
|
|
415
|
+
filters: [],
|
|
416
|
+
totalProductCount: 0,
|
|
417
|
+
searchResponseId: ""
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
static {
|
|
422
|
+
this.searchProducts = (params) => SearchService.getInstance()._searchProducts(params);
|
|
423
|
+
}
|
|
424
|
+
};
|
|
425
|
+
var searchService_default = SearchService;
|
|
426
|
+
|
|
427
|
+
//#endregion
|
|
428
|
+
//#region src/atoms/search/searchAPI.ts
|
|
429
|
+
const searchAtom = (0, jotai.atom)({
|
|
430
|
+
data: null,
|
|
431
|
+
loading: false,
|
|
432
|
+
error: null,
|
|
433
|
+
lastQuery: null
|
|
434
|
+
});
|
|
435
|
+
const searchProductSortingAtom = (0, jotai.atom)(ProductSorting.FEATURED);
|
|
436
|
+
const searchSelectedFiltersAtom = (0, jotai.atom)([]);
|
|
437
|
+
const createFilterOption = (filterId, filterItemId, displayName) => ({
|
|
438
|
+
id: `${filterId}:${filterItemId}`,
|
|
439
|
+
displayName,
|
|
440
|
+
filterId,
|
|
441
|
+
filterItemId
|
|
442
|
+
});
|
|
443
|
+
const internalSearchParamsAtom = (0, jotai.atom)({
|
|
444
|
+
id: null,
|
|
445
|
+
query: null
|
|
446
|
+
});
|
|
447
|
+
const searchParamsAtom = (0, jotai.atom)((get) => get(internalSearchParamsAtom), (_, set, value) => {
|
|
448
|
+
set(internalSearchParamsAtom, value);
|
|
449
|
+
});
|
|
450
|
+
const internalSearchSystemStateAtom = (0, jotai.atom)(false);
|
|
451
|
+
const searchSystemAtom = (0, jotai.atom)((get) => get(internalSearchSystemStateAtom), (get, set, value) => {
|
|
452
|
+
if (value === get(internalSearchSystemStateAtom)) return;
|
|
453
|
+
const stateChangeHandler = () => {
|
|
454
|
+
const params = new URLSearchParams(window.location.search);
|
|
455
|
+
if (params.get("es") === "true") {
|
|
456
|
+
const id = params.get("esi");
|
|
457
|
+
const query = params.get("esq");
|
|
458
|
+
set(searchParamsAtom, {
|
|
459
|
+
id,
|
|
460
|
+
query
|
|
461
|
+
});
|
|
462
|
+
} else set(searchParamsAtom, {
|
|
463
|
+
id: null,
|
|
464
|
+
query: null
|
|
465
|
+
});
|
|
466
|
+
};
|
|
467
|
+
if (value) {
|
|
468
|
+
set(internalSearchSystemStateAtom, true);
|
|
469
|
+
window.addEventListener("popstate", stateChangeHandler);
|
|
470
|
+
stateChangeHandler();
|
|
471
|
+
} else {
|
|
472
|
+
set(internalSearchSystemStateAtom, false);
|
|
473
|
+
window.removeEventListener("popstate", stateChangeHandler);
|
|
474
|
+
}
|
|
475
|
+
});
|
|
476
|
+
const filteredSearchProductsAtom = (0, jotai.atom)((get) => {
|
|
477
|
+
const searchData = get(searchAtom).data;
|
|
478
|
+
const sorting = get(searchProductSortingAtom);
|
|
479
|
+
const selectedFilters = get(searchSelectedFiltersAtom);
|
|
480
|
+
const orgConfig = get(require_api.orgUIConfigAtom);
|
|
481
|
+
if (!searchData?.products) return [];
|
|
482
|
+
const filteredProducts = ProductFilters.filterProducts(searchData.products, orgConfig.searchConfig.searchFilterConfig, selectedFilters, orgConfig.searchConfig.additiveDynamicFilters);
|
|
483
|
+
return ProductSorter.sort(filteredProducts, sorting);
|
|
484
|
+
});
|
|
485
|
+
const searchFiltersAtom = (0, jotai.atom)((get) => {
|
|
486
|
+
const searchData = get(searchAtom).data;
|
|
487
|
+
const selectedFilters = get(searchSelectedFiltersAtom);
|
|
488
|
+
const orgConfig = get(require_api.orgUIConfigAtom);
|
|
489
|
+
if (!searchData?.products) return [];
|
|
490
|
+
return ProductFilters.getFiltersForProducts(searchData.products, orgConfig.searchConfig.searchFilterConfig, selectedFilters);
|
|
491
|
+
});
|
|
492
|
+
const addSearchFilterAtom = (0, jotai.atom)(null, (get, set, filter) => {
|
|
493
|
+
const current = get(searchSelectedFiltersAtom);
|
|
494
|
+
if (!current.some((f) => f.id === filter.id)) set(searchSelectedFiltersAtom, [...current, filter]);
|
|
495
|
+
});
|
|
496
|
+
const removeSearchFilterAtom = (0, jotai.atom)(null, (get, set, filterId) => {
|
|
497
|
+
const current = get(searchSelectedFiltersAtom);
|
|
498
|
+
set(searchSelectedFiltersAtom, current.filter((f) => f.id !== filterId));
|
|
499
|
+
});
|
|
500
|
+
const clearSearchFiltersAtom = (0, jotai.atom)(null, (_, set) => {
|
|
501
|
+
set(searchSelectedFiltersAtom, []);
|
|
502
|
+
});
|
|
503
|
+
const performSearchAtom = (0, jotai.atom)(null, async (get, set, params, allowRedirect = false) => {
|
|
504
|
+
const currentState = get(searchAtom);
|
|
505
|
+
const redirectSearchResultsUrl = get(require_api.orgUIConfigAtom).searchConfig?.redirectSearchResultsUrl;
|
|
506
|
+
if (allowRedirect && redirectSearchResultsUrl) {
|
|
507
|
+
const redirectUrl = new URL(redirectSearchResultsUrl);
|
|
508
|
+
redirectUrl.searchParams.set("es", "true");
|
|
509
|
+
redirectUrl.searchParams.set("esq", params.query);
|
|
510
|
+
window.location.href = redirectUrl.toString();
|
|
511
|
+
} else {
|
|
512
|
+
const url = new URL(window.location.href);
|
|
513
|
+
url.searchParams.set("es", "true");
|
|
514
|
+
url.searchParams.set("esq", params.query);
|
|
515
|
+
window.history.pushState({}, "", url);
|
|
516
|
+
window.dispatchEvent(new PopStateEvent("popstate", { state: {} }));
|
|
517
|
+
}
|
|
518
|
+
window.dispatchEvent(new PopStateEvent("popstate", { state: {} }));
|
|
519
|
+
if (currentState.loading) return;
|
|
520
|
+
set(searchAtom, {
|
|
521
|
+
data: null,
|
|
522
|
+
loading: true,
|
|
523
|
+
error: null,
|
|
524
|
+
lastQuery: params.query
|
|
525
|
+
});
|
|
526
|
+
try {
|
|
527
|
+
const result = await searchService_default.searchProducts(params);
|
|
528
|
+
set(searchAtom, {
|
|
529
|
+
data: result,
|
|
530
|
+
loading: false,
|
|
531
|
+
error: null,
|
|
532
|
+
lastQuery: params.query
|
|
533
|
+
});
|
|
534
|
+
} catch (error) {
|
|
535
|
+
const errorMessage = error instanceof Error ? error.message : "An unknown error occurred";
|
|
536
|
+
set(searchAtom, {
|
|
537
|
+
data: null,
|
|
538
|
+
loading: false,
|
|
539
|
+
error: errorMessage,
|
|
540
|
+
lastQuery: params.query
|
|
541
|
+
});
|
|
542
|
+
}
|
|
543
|
+
});
|
|
544
|
+
|
|
545
|
+
//#endregion
|
|
546
|
+
Object.defineProperty(exports, 'ChatSearchTurnAtom', {
|
|
547
|
+
enumerable: true,
|
|
548
|
+
get: function () {
|
|
549
|
+
return ChatSearchTurnAtom;
|
|
550
|
+
}
|
|
551
|
+
});
|
|
552
|
+
Object.defineProperty(exports, 'ProductSorting', {
|
|
553
|
+
enumerable: true,
|
|
554
|
+
get: function () {
|
|
555
|
+
return ProductSorting;
|
|
556
|
+
}
|
|
557
|
+
});
|
|
558
|
+
Object.defineProperty(exports, 'addSearchFilterAtom', {
|
|
559
|
+
enumerable: true,
|
|
560
|
+
get: function () {
|
|
561
|
+
return addSearchFilterAtom;
|
|
562
|
+
}
|
|
563
|
+
});
|
|
564
|
+
Object.defineProperty(exports, 'additiveDynamicFiltersAtom', {
|
|
565
|
+
enumerable: true,
|
|
566
|
+
get: function () {
|
|
567
|
+
return additiveDynamicFiltersAtom;
|
|
568
|
+
}
|
|
569
|
+
});
|
|
570
|
+
Object.defineProperty(exports, 'chatSearchFiltersAtom', {
|
|
571
|
+
enumerable: true,
|
|
572
|
+
get: function () {
|
|
573
|
+
return chatSearchFiltersAtom;
|
|
574
|
+
}
|
|
575
|
+
});
|
|
576
|
+
Object.defineProperty(exports, 'chatSearchHasProductsAtom', {
|
|
577
|
+
enumerable: true,
|
|
578
|
+
get: function () {
|
|
579
|
+
return chatSearchHasProductsAtom;
|
|
580
|
+
}
|
|
581
|
+
});
|
|
582
|
+
Object.defineProperty(exports, 'chatSearchIdAtom', {
|
|
583
|
+
enumerable: true,
|
|
584
|
+
get: function () {
|
|
585
|
+
return chatSearchIdAtom;
|
|
586
|
+
}
|
|
587
|
+
});
|
|
588
|
+
Object.defineProperty(exports, 'chatSearchIsLoadingAtom', {
|
|
589
|
+
enumerable: true,
|
|
590
|
+
get: function () {
|
|
591
|
+
return chatSearchIsLoadingAtom;
|
|
592
|
+
}
|
|
593
|
+
});
|
|
594
|
+
Object.defineProperty(exports, 'chatSearchParamsAtom', {
|
|
595
|
+
enumerable: true,
|
|
596
|
+
get: function () {
|
|
597
|
+
return chatSearchParamsAtom;
|
|
598
|
+
}
|
|
599
|
+
});
|
|
600
|
+
Object.defineProperty(exports, 'chatSearchProductSortingAtom', {
|
|
601
|
+
enumerable: true,
|
|
602
|
+
get: function () {
|
|
603
|
+
return chatSearchProductSortingAtom;
|
|
604
|
+
}
|
|
605
|
+
});
|
|
606
|
+
Object.defineProperty(exports, 'chatSearchProducts', {
|
|
607
|
+
enumerable: true,
|
|
608
|
+
get: function () {
|
|
609
|
+
return chatSearchProducts;
|
|
610
|
+
}
|
|
611
|
+
});
|
|
612
|
+
Object.defineProperty(exports, 'chatSearchQueryAtom', {
|
|
613
|
+
enumerable: true,
|
|
614
|
+
get: function () {
|
|
615
|
+
return chatSearchQueryAtom;
|
|
616
|
+
}
|
|
617
|
+
});
|
|
618
|
+
Object.defineProperty(exports, 'chatSearchStateAtom', {
|
|
619
|
+
enumerable: true,
|
|
620
|
+
get: function () {
|
|
621
|
+
return chatSearchStateAtom;
|
|
622
|
+
}
|
|
623
|
+
});
|
|
624
|
+
Object.defineProperty(exports, 'clearSearchFiltersAtom', {
|
|
625
|
+
enumerable: true,
|
|
626
|
+
get: function () {
|
|
627
|
+
return clearSearchFiltersAtom;
|
|
628
|
+
}
|
|
629
|
+
});
|
|
630
|
+
Object.defineProperty(exports, 'createChatSearchFilterOption', {
|
|
631
|
+
enumerable: true,
|
|
632
|
+
get: function () {
|
|
633
|
+
return createChatSearchFilterOption;
|
|
634
|
+
}
|
|
635
|
+
});
|
|
636
|
+
Object.defineProperty(exports, 'createFilterOption', {
|
|
637
|
+
enumerable: true,
|
|
638
|
+
get: function () {
|
|
639
|
+
return createFilterOption;
|
|
640
|
+
}
|
|
641
|
+
});
|
|
642
|
+
Object.defineProperty(exports, 'filteredSearchProductsAtom', {
|
|
643
|
+
enumerable: true,
|
|
644
|
+
get: function () {
|
|
645
|
+
return filteredSearchProductsAtom;
|
|
646
|
+
}
|
|
647
|
+
});
|
|
648
|
+
Object.defineProperty(exports, 'formatFilterDisplayName', {
|
|
649
|
+
enumerable: true,
|
|
650
|
+
get: function () {
|
|
651
|
+
return formatFilterDisplayName;
|
|
652
|
+
}
|
|
653
|
+
});
|
|
654
|
+
Object.defineProperty(exports, 'getSearchParamsAtom', {
|
|
655
|
+
enumerable: true,
|
|
656
|
+
get: function () {
|
|
657
|
+
return getSearchParamsAtom;
|
|
658
|
+
}
|
|
659
|
+
});
|
|
660
|
+
Object.defineProperty(exports, 'handleSearchResultsAtom', {
|
|
661
|
+
enumerable: true,
|
|
662
|
+
get: function () {
|
|
663
|
+
return handleSearchResultsAtom;
|
|
664
|
+
}
|
|
665
|
+
});
|
|
666
|
+
Object.defineProperty(exports, 'initiateChatSearchAtom', {
|
|
667
|
+
enumerable: true,
|
|
668
|
+
get: function () {
|
|
669
|
+
return initiateChatSearchAtom;
|
|
670
|
+
}
|
|
671
|
+
});
|
|
672
|
+
Object.defineProperty(exports, 'internalSearchSystemStateAtom', {
|
|
673
|
+
enumerable: true,
|
|
674
|
+
get: function () {
|
|
675
|
+
return internalSearchSystemStateAtom;
|
|
676
|
+
}
|
|
677
|
+
});
|
|
678
|
+
Object.defineProperty(exports, 'performSearchAtom', {
|
|
679
|
+
enumerable: true,
|
|
680
|
+
get: function () {
|
|
681
|
+
return performSearchAtom;
|
|
682
|
+
}
|
|
683
|
+
});
|
|
684
|
+
Object.defineProperty(exports, 'removeSearchFilterAtom', {
|
|
685
|
+
enumerable: true,
|
|
686
|
+
get: function () {
|
|
687
|
+
return removeSearchFilterAtom;
|
|
688
|
+
}
|
|
689
|
+
});
|
|
690
|
+
Object.defineProperty(exports, 'searchAtom', {
|
|
691
|
+
enumerable: true,
|
|
692
|
+
get: function () {
|
|
693
|
+
return searchAtom;
|
|
694
|
+
}
|
|
695
|
+
});
|
|
696
|
+
Object.defineProperty(exports, 'searchFiltersAtom', {
|
|
697
|
+
enumerable: true,
|
|
698
|
+
get: function () {
|
|
699
|
+
return searchFiltersAtom;
|
|
700
|
+
}
|
|
701
|
+
});
|
|
702
|
+
Object.defineProperty(exports, 'searchParamsAtom', {
|
|
703
|
+
enumerable: true,
|
|
704
|
+
get: function () {
|
|
705
|
+
return searchParamsAtom;
|
|
706
|
+
}
|
|
707
|
+
});
|
|
708
|
+
Object.defineProperty(exports, 'searchProductSortingAtom', {
|
|
709
|
+
enumerable: true,
|
|
710
|
+
get: function () {
|
|
711
|
+
return searchProductSortingAtom;
|
|
712
|
+
}
|
|
713
|
+
});
|
|
714
|
+
Object.defineProperty(exports, 'searchSelectedFiltersAtom', {
|
|
715
|
+
enumerable: true,
|
|
716
|
+
get: function () {
|
|
717
|
+
return searchSelectedFiltersAtom;
|
|
718
|
+
}
|
|
719
|
+
});
|
|
720
|
+
Object.defineProperty(exports, 'searchSystemAtom', {
|
|
721
|
+
enumerable: true,
|
|
722
|
+
get: function () {
|
|
723
|
+
return searchSystemAtom;
|
|
724
|
+
}
|
|
725
|
+
});
|
|
726
|
+
Object.defineProperty(exports, 'selectedFilterOptionsAtom', {
|
|
727
|
+
enumerable: true,
|
|
728
|
+
get: function () {
|
|
729
|
+
return selectedFilterOptionsAtom;
|
|
730
|
+
}
|
|
731
|
+
});
|
|
732
|
+
Object.defineProperty(exports, 'setChatSearchParamsAtom', {
|
|
733
|
+
enumerable: true,
|
|
734
|
+
get: function () {
|
|
735
|
+
return setChatSearchParamsAtom;
|
|
736
|
+
}
|
|
737
|
+
});
|
|
738
|
+
Object.defineProperty(exports, 'setSearchParams', {
|
|
739
|
+
enumerable: true,
|
|
740
|
+
get: function () {
|
|
741
|
+
return setSearchParams;
|
|
742
|
+
}
|
|
743
|
+
});
|