@envive-ai/react-hooks 0.1.3 → 0.1.5
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 +13 -13
- package/dist/adapters/amplitude/index.d.cts +5 -3
- package/dist/adapters/amplitude/index.d.ts +5 -3
- package/dist/adapters/amplitude/index.js +10 -10
- package/dist/api-B2euFL-5.cjs +269 -0
- package/dist/api-XRr_lAG6.js +190 -0
- package/dist/application/config/index.cjs +14 -5
- package/dist/application/config/index.d.cts +2 -1
- package/dist/application/config/index.d.ts +2 -1
- package/dist/application/config/index.js +14 -5
- package/dist/application/models/graphql/index.cjs +12 -12
- package/dist/application/models/graphql/index.d.cts +1 -1
- package/dist/application/models/graphql/index.d.ts +1 -1
- package/dist/application/models/graphql/index.js +10 -10
- package/dist/application/models/guards/api/index.cjs +2 -2
- package/dist/application/models/guards/api/index.d.cts +2 -2
- package/dist/application/models/guards/api/index.d.ts +2 -2
- package/dist/application/models/guards/api/index.js +2 -2
- package/dist/application/models/index.cjs +54 -54
- package/dist/application/models/index.d.cts +8 -9
- package/dist/application/models/index.d.ts +8 -9
- package/dist/application/models/index.js +10 -10
- package/dist/application/models/utilityTypes/index.cjs +1 -1
- package/dist/application/models/utilityTypes/index.d.cts +1 -1
- package/dist/application/models/utilityTypes/index.d.ts +1 -1
- package/dist/application/models/utilityTypes/index.js +1 -1
- package/dist/application/models/variantInfo/index.cjs +1 -1
- package/dist/application/models/variantInfo/index.d.cts +1 -1
- package/dist/application/models/variantInfo/index.d.ts +1 -1
- package/dist/application/models/variantInfo/index.js +1 -1
- package/dist/application/service/customerService/index.cjs +2 -2
- package/dist/application/service/customerService/index.d.cts +2 -2
- package/dist/application/service/customerService/index.d.ts +2 -2
- package/dist/application/service/customerService/index.js +2 -2
- package/dist/application/service/index.cjs +38 -757
- package/dist/application/service/index.d.cts +26 -20
- package/dist/application/service/index.d.ts +26 -20
- package/dist/application/service/index.js +12 -727
- package/dist/application/utils/index.cjs +37 -37
- package/dist/application/utils/index.d.cts +12 -12
- package/dist/application/utils/index.d.ts +14 -14
- package/dist/application/utils/index.js +10 -10
- package/dist/atomStore-B1cgmbP0.js +32 -0
- package/dist/atomStore-JwGb7pcy.cjs +58 -0
- package/dist/atomStore-ONYy0XuA.d.cts +24 -0
- package/dist/atomStore-kOKiEcNl.d.ts +24 -0
- package/dist/atoms/app/index.cjs +16 -16
- package/dist/atoms/app/index.d.cts +11 -11
- package/dist/atoms/app/index.d.ts +12 -12
- package/dist/atoms/app/index.js +10 -10
- package/dist/atoms/atomStore/index.cjs +1 -2
- package/dist/atoms/atomStore/index.d.cts +1 -22
- package/dist/atoms/atomStore/index.d.ts +1 -22
- package/dist/atoms/atomStore/index.js +1 -2
- package/dist/atoms/chat/index.cjs +40 -40
- package/dist/atoms/chat/index.d.cts +37 -37
- package/dist/atoms/chat/index.d.ts +38 -38
- package/dist/atoms/chat/index.js +10 -10
- package/dist/atoms/globalSearch/index.cjs +1 -1
- package/dist/atoms/globalSearch/index.d.cts +7 -6
- package/dist/atoms/globalSearch/index.d.ts +2 -1
- package/dist/atoms/globalSearch/index.js +1 -1
- package/dist/atoms/org/index.cjs +38 -40
- package/dist/atoms/org/index.d.cts +35 -53
- package/dist/atoms/org/index.d.ts +34 -52
- package/dist/atoms/org/index.js +11 -12
- package/dist/atoms/search/index.cjs +41 -43
- package/dist/atoms/search/index.d.cts +9 -10
- package/dist/atoms/search/index.d.ts +9 -10
- package/dist/atoms/search/index.js +10 -12
- package/dist/bandolier-Da4wt6sm.cjs +1230 -0
- package/dist/bandolier-DzEmYWcz.js +1230 -0
- package/dist/carpe-AXipz0Xl.cjs +608 -0
- package/dist/carpe-CaUKwcEa.js +606 -0
- package/dist/chat-CHmD79E1.js +26 -0
- package/dist/{chat-CCgyDehy.cjs → chat-_NzpO_Hn.cjs} +2 -1
- package/dist/{components-CScS7Ii-.cjs → components-D0XDRcaN.cjs} +2 -1
- package/dist/components-Dl-TMD9k.js +11 -0
- package/dist/config/locators/components/chat/index.cjs +1 -1
- package/dist/config/locators/components/chat/index.d.ts +1 -1
- package/dist/config/locators/components/chat/index.js +1 -1
- package/dist/config/locators/components/chat/variants/index.cjs +2 -1
- package/dist/config/locators/components/chat/variants/index.d.cts +2 -1
- package/dist/config/locators/components/chat/variants/index.d.ts +2 -1
- package/dist/config/locators/components/chat/variants/index.js +2 -1
- package/dist/config/locators/components/index.cjs +1 -1
- package/dist/config/locators/components/index.d.ts +1 -1
- package/dist/config/locators/components/index.js +1 -1
- package/dist/config/locators/components/search/index.cjs +2 -1
- package/dist/config/locators/components/search/index.d.cts +2 -1
- package/dist/config/locators/components/search/index.d.ts +2 -1
- package/dist/config/locators/components/search/index.js +2 -1
- package/dist/config/locators/index.cjs +4 -4
- package/dist/config/locators/index.d.cts +2 -1
- package/dist/config/locators/index.d.ts +4 -3
- package/dist/config/locators/index.js +4 -4
- package/dist/contexts/index.cjs +20 -23
- package/dist/contexts/index.d.cts +10 -59
- package/dist/contexts/index.d.ts +10 -59
- package/dist/contexts/index.js +11 -17
- package/dist/contexts-CtRlNXaS.js +7674 -0
- package/dist/contexts-CtgmnYNn.cjs +9088 -0
- package/dist/coterie--MGvWeVh.cjs +240 -0
- package/dist/coterie-oKHAT0lx.js +240 -0
- package/dist/customerService-BG1uNZZ1.cjs +36 -0
- package/dist/customerService-BHQRnLhC.js +23 -0
- package/dist/custservice-types-C8-9vKWb.cjs +35 -0
- package/dist/custservice-types-CamCiXjq.js +23 -0
- package/dist/default-B4fINY5_.cjs +4 -0
- package/dist/default-BrTQxA0c.js +4 -0
- package/dist/default-C3LrcbZB.cjs +199 -0
- package/dist/default-CXkYrLEr.js +176 -0
- package/dist/divIds-0Vj9g-fM.js +23 -0
- package/dist/{divIds-CFyAjjp3.cjs → divIds-CjceLRD9.cjs} +2 -1
- package/dist/dreamlandBaby-BEqt0eKF.js +347 -0
- package/dist/dreamlandBaby-DBDjEJCc.cjs +347 -0
- package/dist/{embedded-BlXJUbik.cjs → embedded-B5Wi9g0T.cjs} +2 -1
- package/dist/embedded-_cLpd6FK.js +23 -0
- package/dist/entrypoints-CNUvSgnk.js +7 -0
- package/dist/entrypoints-DM9Sm18O.cjs +19 -0
- package/dist/events/index.cjs +1 -1
- package/dist/events/index.d.cts +2 -1
- package/dist/events/index.d.ts +2 -1
- package/dist/events/index.js +1 -1
- package/dist/events-ClCDFK7t.js +78 -0
- package/dist/events-Da7gpmGv.cjs +90 -0
- package/dist/featureFlagService-5wdmW02z.d.ts +18 -0
- package/dist/featureFlagService-DaelrXEk.d.cts +18 -0
- package/dist/fiveCbd-CdqNt16h.cjs +614 -0
- package/dist/fiveCbd-D6B-sgnX.js +614 -0
- package/dist/forLoveAndLemons-C7GsJG7f.cjs +668 -0
- package/dist/forLoveAndLemons-gNDlMtPR.js +666 -0
- package/dist/{globalSearch-hxbXekus.cjs → globalSearch-BTeZxvk1.cjs} +2 -1
- package/dist/globalSearch-b0wC7ZEO.js +14 -0
- package/dist/greenpan-B5AaW4M_.js +398 -0
- package/dist/greenpan-DrORpYms.cjs +398 -0
- package/dist/grooveLife-BJqsfH2H.cjs +343 -0
- package/dist/grooveLife-xIUmDM8s.js +343 -0
- package/dist/homegrownCannabis-8TZ21u6L.cjs +411 -0
- package/dist/homegrownCannabis-BtMuEvbZ.js +411 -0
- package/dist/hooks/index.cjs +36 -38
- package/dist/hooks/index.d.cts +36 -82
- package/dist/hooks/index.d.ts +38 -84
- package/dist/hooks/index.js +11 -17
- package/dist/index-BTK5uzs6.d.cts +98 -0
- package/dist/index-BdNKc2ix.d.cts +2 -1
- package/dist/index-BrXuc_Ck.d.cts +2 -1
- package/dist/index-BzgkfbNO.d.cts +228 -0
- package/dist/index-CKKkTsms.d.ts +39 -0
- package/dist/index-CKUpnyJQ.d.ts +72 -0
- package/dist/index-CSIOQD-A.d.ts +25 -0
- package/dist/index-CbJZOEU4.d.ts +203 -0
- package/dist/index-ClJ0nMsR.d.cts +184 -0
- package/dist/index-Cr2y08f1.d.ts +9 -0
- package/dist/index-Cx9e-fRi.d.ts +184 -0
- package/dist/index-D2VaMPA3.d.ts +98 -0
- package/dist/index-D46Rd0io.d.cts +39 -0
- package/dist/index-DFL1dIT_.d.ts +7 -0
- package/dist/index-DXpgMVpp.d.ts +749 -0
- package/dist/index-Dxpscrvz.d.ts +228 -0
- package/dist/index-K2kNsOTw.d.cts +203 -0
- package/dist/index-MFbPQ8Ji.d.ts +95 -0
- package/dist/index-VHFMGkO-.d.cts +72 -0
- package/dist/index-VSFakgAI.d.cts +95 -0
- package/dist/index-aNW5V9fh.d.cts +749 -0
- package/dist/index-zZjcds15.d.cts +7 -0
- package/dist/interceptors/index.cjs +12 -13
- package/dist/interceptors/index.d.cts +10 -10
- package/dist/interceptors/index.d.ts +10 -10
- package/dist/interceptors/index.js +10 -11
- package/dist/jackArcher-WtkbLBZj.cjs +728 -0
- package/dist/jackArcher-sO9EbgrZ.js +728 -0
- package/dist/jordanCraig-471FcgqF.cjs +1787 -0
- package/dist/jordanCraig-DNOncplU.js +1787 -0
- package/dist/kindredBravely-BlLyHGMX.cjs +491 -0
- package/dist/kindredBravely-cqZ4OvXp.js +491 -0
- package/dist/kutFromTheKloth-3mOIryvt.cjs +370 -0
- package/dist/kutFromTheKloth-DtVNCMKa.js +370 -0
- package/dist/larryAndSerges-88Bvq-Us.cjs +262 -0
- package/dist/larryAndSerges-cvak6May.js +262 -0
- package/dist/leapsAndRebounds-Dmf8eUPq.js +361 -0
- package/dist/leapsAndRebounds-iWKc923H.cjs +361 -0
- package/dist/logger-Dln20ans.cjs +26 -0
- package/dist/logger-pdEEY8T2.js +20 -0
- package/dist/longevityrx-BTMI9vn-.js +321 -0
- package/dist/longevityrx-CobPyigd.cjs +321 -0
- package/dist/lookOptic-C4H_c0JZ.cjs +283 -0
- package/dist/lookOptic-Jwf7EAU8.js +283 -0
- package/dist/mantraBrand-CySGqbn6.cjs +751 -0
- package/dist/mantraBrand-DoaVj837.js +751 -0
- package/dist/medterra-BnZ5p27n.cjs +584 -0
- package/dist/medterra-DaICcPPp.js +584 -0
- package/dist/modells-CZ1L6dD_.js +485 -0
- package/dist/modells-DF0SndHr.cjs +485 -0
- package/dist/nodeSelector-DybpVr-i.d.ts +31 -0
- package/dist/nodeSelector-vKB44CDB.d.cts +2 -1
- package/dist/orgConfigResults--dAwtw3W.d.ts +881 -0
- package/dist/orgConfigResults-BL0XBA6x.d.cts +881 -0
- package/dist/pressedFloral-B3t2cYzs.cjs +662 -0
- package/dist/pressedFloral-Dsws2Kfb.js +662 -0
- package/dist/search-filter-types-9rTb3jMj.d.cts +102 -0
- package/dist/search-filter-types-C-zZSpGo.d.ts +102 -0
- package/dist/skinPerfection-CILQM2bR.cjs +335 -0
- package/dist/skinPerfection-DmQCntRf.js +335 -0
- package/dist/snapSupplements--X_v0KRM.js +286 -0
- package/dist/snapSupplements-Djuzl0Ed.cjs +286 -0
- package/dist/socialProofClasses-DdzG1tZy.js +10 -0
- package/dist/socialProofClasses-ky69yppk.cjs +40 -0
- package/dist/spanx-Bo81yXSF.cjs +664 -0
- package/dist/spanx-DauxB8KE.js +662 -0
- package/dist/spanxStaging-BucYQvR1.cjs +849 -0
- package/dist/spanxStaging-CfXUukdP.js +846 -0
- package/dist/{suggestionBarV2-types-DG3Ekk44.cjs → suggestionBarV2-types-B3lwrENK.cjs} +2 -1
- package/dist/suggestionBarV2-types-Penx3Y67.js +10 -0
- package/dist/supergoop-8qa_NV3F.cjs +338 -0
- package/dist/supergoop-DOaui-A6.js +336 -0
- package/dist/test-types-CXVJxTeu.d.ts +40 -0
- package/dist/test-types-CuOq25VT.d.cts +40 -0
- package/dist/types/index.cjs +2 -2
- package/dist/types/index.d.cts +2 -2
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.js +2 -2
- package/dist/types-CD4LFta-.d.cts +33 -0
- package/dist/types-CGC6Oozp.cjs +231 -0
- package/dist/types-CnTCkyvK.js +177 -0
- package/dist/types-DBdI0j89.d.ts +33 -0
- package/dist/uniqueVintage-BWkDgt1z.js +1212 -0
- package/dist/uniqueVintage-DAne8XcL.cjs +1214 -0
- package/dist/variant-CC1nrywd.d.ts +13 -0
- package/dist/variant-CQTuQQSq.d.cts +13 -0
- package/dist/venaCbd-B1HO_Pkr.cjs +366 -0
- package/dist/venaCbd-CnByO-5R.js +366 -0
- package/dist/westonJonBoucher-BAGXegsX.js +423 -0
- package/dist/westonJonBoucher-BRfHWMbs.cjs +423 -0
- package/dist/wineEnthusiast-DW8JVwV8.cjs +941 -0
- package/dist/wineEnthusiast-EJbhMeKQ.js +941 -0
- package/dist/wolfMattress-B6INZNRJ.cjs +373 -0
- package/dist/wolfMattress-D9P7ErH_.js +373 -0
- package/dist/wolfTactical-C5Pupi3J.js +350 -0
- package/dist/wolfTactical-TMthZM93.cjs +350 -0
- package/package.json +2 -1
- package/src/adapters/amplitude/amplitudeAdapter.ts +32 -9
- package/src/adapters/spiffy/commerce/api.ts +17 -8
- package/src/adapters/spiffy/commerce/graphql.ts +16 -5
- package/src/application/config/generalStaticConfig.ts +5 -2
- package/src/application/models/api/orgConfigResults.ts +6 -2
- package/src/application/models/supportedOrgs.ts +1 -1
- package/src/application/models/validators/validateGraphQLColorsConfig.ts +23 -21
- package/src/application/service/cdnService.ts +4 -2
- package/src/application/service/graphqlConfigService.ts +59 -0
- package/src/application/service/index.ts +1 -1
- package/src/application/service/pageVariantService.ts +5 -5
- package/src/application/service/searchService.ts +9 -2
- package/src/application/service/windowChatToggleService.ts +28 -19
- package/src/application/service/windowFrontendConfigService.ts +7 -4
- package/src/atoms/app/index.ts +26 -17
- package/src/atoms/app/variant.ts +1 -0
- package/src/atoms/chat/messageQueue.ts +1 -1
- package/src/atoms/envive/enviveConfig.ts +81 -0
- package/src/atoms/org/graphqlConfig.ts +40 -11
- package/src/atoms/org/index.ts +7 -7
- package/src/atoms/org/merchantCss.ts +119 -2
- package/src/atoms/org/org.ts +67 -70
- package/src/atoms/org/orgPageConfig.ts +9 -6
- package/src/atoms/org/orgUIConfig.ts +22 -9
- package/src/atoms/search/chatSearch.ts +85 -67
- package/src/atoms/search/searchAPI.ts +52 -42
- package/src/contexts/chatContext.tsx +4 -1
- package/src/contexts/enviveConfigContext.tsx +37 -26
- package/src/contexts/enviveCssContext.tsx +20 -0
- package/src/contexts/index.ts +2 -0
- package/src/contexts/orgConfigContext.tsx +106 -0
- package/src/contexts/systemSettingsContext.tsx +2 -2
- package/src/contexts/types.ts +12 -9
- package/src/hooks/index.ts +2 -3
- package/src/hooks/useDynamicVariants.ts +48 -32
- package/src/hooks/useFileUpload.ts +1 -1
- package/src/hooks/useHideElements.ts +21 -18
- package/src/hooks/useImageResolver.ts +16 -8
- package/src/hooks/useNewOrgConfig.ts +80 -0
- package/src/hooks/useSearch.tsx +10 -6
- package/src/hooks/utils.ts +1 -1
- package/src/interceptors/useFormEscalation.ts +26 -9
- package/src/types.ts +0 -2
- package/dist/api-BtzLHcfU.cjs +0 -268
- package/dist/api-kpPTZhV9.js +0 -189
- package/dist/atomStore-BNQyGmU_.cjs +0 -57
- package/dist/atomStore-TnLPtYns.js +0 -31
- package/dist/bandolier-CQrxBHsk.cjs +0 -1230
- package/dist/bandolier-Di9DpZ8e.js +0 -1230
- package/dist/carpe-3NJOR-Rj.cjs +0 -608
- package/dist/carpe-DmWKaIQq.js +0 -606
- package/dist/cdnService-BNreZjqy.js +0 -18
- package/dist/cdnService-vLxePdrU.cjs +0 -23
- package/dist/chat-CCQMmhc1.cjs +0 -5057
- package/dist/chat-Dk6KPb1K.js +0 -25
- package/dist/chat-H6YcCS4I.js +0 -4113
- package/dist/components-DAQxVIn9.js +0 -10
- package/dist/coterie-D0UFsFC5.cjs +0 -240
- package/dist/coterie-JblRmIZL.js +0 -240
- package/dist/customerService-C4wc0glQ.js +0 -22
- package/dist/customerService-zsDlp7g2.cjs +0 -35
- package/dist/custservice-types-D8Npo-5Z.js +0 -22
- package/dist/custservice-types-E9_OSaZ7.cjs +0 -34
- package/dist/default-C5ZTV8HA.cjs +0 -4
- package/dist/default-DPv8m-eQ.js +0 -175
- package/dist/default-DRKBosow.cjs +0 -198
- package/dist/default-ao0vRl0W.js +0 -4
- package/dist/divIds-BWvq-i6I.js +0 -22
- package/dist/dreamlandBaby-CyS8oW8X.js +0 -347
- package/dist/dreamlandBaby-y7kSvwH2.cjs +0 -347
- package/dist/embedded-C1jvFj3v.js +0 -22
- package/dist/entrypoints-CmmOszXO.js +0 -6
- package/dist/entrypoints-fowCLUT2.cjs +0 -18
- package/dist/enviveConfigContext-Bs8kepnO.cjs +0 -48
- package/dist/enviveConfigContext-CWVdVWKW.js +0 -34
- package/dist/events-DgFzlVJR.js +0 -77
- package/dist/events-bH-24eRW.cjs +0 -89
- package/dist/featureFlagService-CroFRxvD.d.cts +0 -17
- package/dist/featureFlagService-NkJ2fuEj.d.ts +0 -17
- package/dist/featureGates-BMWXU0dS.d.ts +0 -90
- package/dist/featureGates-N_gyHCTn.d.cts +0 -90
- package/dist/fiveCbd-CXVuIBiZ.cjs +0 -614
- package/dist/fiveCbd-Cyc3-Ab9.js +0 -614
- package/dist/forLoveAndLemons-CxQS0USq.cjs +0 -668
- package/dist/forLoveAndLemons-D8mcgmdk.js +0 -666
- package/dist/frontendConfig-KeNqU1wa.d.cts +0 -790
- package/dist/frontendConfig-cPvCTWm6.d.ts +0 -790
- package/dist/globalSearch-BC0rOX3E.js +0 -13
- package/dist/greenpan-JM6SHcqO.js +0 -398
- package/dist/greenpan-eIzyxVsn.cjs +0 -398
- package/dist/grooveLife-BmsUc2cD.js +0 -343
- package/dist/grooveLife-KdTizVUn.cjs +0 -343
- package/dist/homegrownCannabis-C0GDai4r.cjs +0 -411
- package/dist/homegrownCannabis-a9udocBT.js +0 -411
- package/dist/hooks-DjOa7ihH.cjs +0 -7331
- package/dist/hooks-fneW8SWw.js +0 -7152
- package/dist/index-BQErGgfM.d.cts +0 -202
- package/dist/index-C4zjAR1c.d.cts +0 -227
- package/dist/index-CGB6CAmr.d.ts +0 -6
- package/dist/index-CIco0cCQ.d.ts +0 -183
- package/dist/index-COG1kOZG.d.ts +0 -749
- package/dist/index-CVxe7FpL.d.cts +0 -6
- package/dist/index-Cn1SeI5y.d.cts +0 -183
- package/dist/index-CnqHN_jz.d.ts +0 -202
- package/dist/index-Cqg6ltII.d.ts +0 -38
- package/dist/index-DE_7Q8qK.d.ts +0 -94
- package/dist/index-Da0UzyI9.d.ts +0 -24
- package/dist/index-DbWWcYax.d.cts +0 -749
- package/dist/index-DtoVXd6O.d.cts +0 -97
- package/dist/index-JClBRnSX.d.cts +0 -94
- package/dist/index-ghzD_356.d.ts +0 -8
- package/dist/index-hdbCEjYy.d.cts +0 -38
- package/dist/index-luJrHgPN.d.ts +0 -97
- package/dist/index-tfRj22E1.d.ts +0 -227
- package/dist/jackArcher-B6OJ0N3a.cjs +0 -728
- package/dist/jackArcher-B9fe4Hv8.js +0 -728
- package/dist/jordanCraig-0CB_m_ts.cjs +0 -1787
- package/dist/jordanCraig-DNm1iw1L.js +0 -1787
- package/dist/kindredBravely-CZgt7DJA.js +0 -491
- package/dist/kindredBravely-KvYPbckZ.cjs +0 -491
- package/dist/kutFromTheKloth-BxgtWZs9.cjs +0 -370
- package/dist/kutFromTheKloth-SmteSZjk.js +0 -370
- package/dist/larryAndSerges-6O_u3L90.cjs +0 -261
- package/dist/larryAndSerges-DO-zG8ES.js +0 -261
- package/dist/leapsAndRebounds-BK62AmXw.js +0 -361
- package/dist/leapsAndRebounds-gPsWVUmQ.cjs +0 -361
- package/dist/logger-Be0NyKaY.cjs +0 -25
- package/dist/logger-BexDfK3W.js +0 -19
- package/dist/longevityrx-DjKbwJo3.cjs +0 -321
- package/dist/longevityrx-eq5TeUcy.js +0 -321
- package/dist/lookOptic-BPPqms_j.cjs +0 -283
- package/dist/lookOptic-jRpBXQCN.js +0 -283
- package/dist/mantraBrand-BZOZfkUK.js +0 -751
- package/dist/mantraBrand-Cp8zptkj.cjs +0 -751
- package/dist/medterra-BHYCBgvQ.cjs +0 -584
- package/dist/medterra-CShe6CLY.js +0 -584
- package/dist/modells-DE7-gmjK.cjs +0 -485
- package/dist/modells-DFyJxNwT.js +0 -485
- package/dist/nodeSelector-DpKXszfU.d.ts +0 -30
- package/dist/org-Bkn6fl6I.cjs +0 -106
- package/dist/org-CX8HFbc9.js +0 -63
- package/dist/pressedFloral-BMkCVs8c.cjs +0 -662
- package/dist/pressedFloral-aK9br-LF.js +0 -662
- package/dist/search-DtIFZeMA.cjs +0 -743
- package/dist/search-eWwg8pNn.js +0 -542
- package/dist/search-filter-types-ByJnFPc4.d.cts +0 -101
- package/dist/search-filter-types-DPgeG8FS.d.ts +0 -101
- package/dist/skinPerfection-B9G6yLM2.js +0 -335
- package/dist/skinPerfection-BBC1q65Z.cjs +0 -335
- package/dist/snapSupplements-D7hx6Kgj.cjs +0 -286
- package/dist/snapSupplements-DKvJl__T.js +0 -286
- package/dist/socialProofClasses-BYLiEXpU.cjs +0 -39
- package/dist/socialProofClasses-CkJufEGb.js +0 -9
- package/dist/spanx-D-ZKkxjM.cjs +0 -664
- package/dist/spanx-yl7YfVrf.js +0 -662
- package/dist/spanxStaging-CXeIg6zI.cjs +0 -849
- package/dist/spanxStaging-DzGXL9wD.js +0 -846
- package/dist/suggestionBarV2-types-B0RbMStE.js +0 -9
- package/dist/supergoop-CSpDPOpl.cjs +0 -337
- package/dist/supergoop-D0UkuRiA.js +0 -335
- package/dist/test-types-C9b_OdfO.d.ts +0 -39
- package/dist/test-types-CpKCxk8U.d.cts +0 -39
- package/dist/types-BE4faOO_.d.cts +0 -32
- package/dist/types-C3S1H4hl.js +0 -176
- package/dist/types-TD8g7LnH.d.ts +0 -32
- package/dist/types-lcjuhDBt.cjs +0 -230
- package/dist/uniqueVintage-DygVpCqU.cjs +0 -1214
- package/dist/uniqueVintage-_n0FZFVj.js +0 -1212
- package/dist/useMessageInterceptor-BP6gzo8a.js +0 -57
- package/dist/useMessageInterceptor-BnUG2Pzt.cjs +0 -72
- package/dist/variant-DH4zusMi.d.cts +0 -12
- package/dist/variant-DTEqSBHd.d.ts +0 -12
- package/dist/variantInfo-BTvC6CQh.js +0 -1
- package/dist/variantInfo-Cz2YXraO.cjs +0 -0
- package/dist/venaCbd-BS0dvdBm.js +0 -366
- package/dist/venaCbd-Pqg0bj-P.cjs +0 -366
- package/dist/westonJonBoucher-CLw8Hy6u.js +0 -423
- package/dist/westonJonBoucher-CeA0jwxe.cjs +0 -423
- package/dist/wineEnthusiast-M9P18d1w.js +0 -941
- package/dist/wineEnthusiast-gHBaQMbe.cjs +0 -941
- package/dist/wolfMattress-BQHjoQYu.js +0 -373
- package/dist/wolfMattress-CdmN-Evm.cjs +0 -373
- package/dist/wolfTactical-Cc2ZLBRh.js +0 -350
- package/dist/wolfTactical-dObnPgAG.cjs +0 -350
- package/src/application/service/environmentService.ts +0 -51
- package/src/extension.ts +0 -63
- package/src/hooks/useHorizontalScrollAnimation.ts +0 -115
- package/src/hooks/useReducedMotionWithOverride.ts +0 -15
- package/src/hooks/useSnapControl.ts +0 -155
- package/src/initialize.ts +0 -163
- package/src/main.tsx +0 -108
- package/src/merchants/uniqueVintage/views/useUniqueVintageChatSearch.ts +0 -147
- /package/dist/{atomStore-B3tsg6mF.cjs → locators-CugndTUM.cjs} +0 -0
- /package/dist/{atomStore-FSZd_20F.js → locators-DnKpajbY.js} +0 -0
- /package/dist/{locators-C2DX_nX6.js → utilityTypes-BVikejDo.js} +0 -0
- /package/dist/{locators-CUpyd9Wt.cjs → utilityTypes-C4h2wgAK.cjs} +0 -0
- /package/dist/{utilityTypes-DMdsI0DG.cjs → variantInfo-CNRTY0gH.cjs} +0 -0
- /package/dist/{utilityTypes-UWdNHElu.js → variantInfo-CzhR5W6h.js} +0 -0
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import React, {
|
|
2
|
+
createContext,
|
|
3
|
+
useContext,
|
|
4
|
+
ReactNode,
|
|
5
|
+
useState,
|
|
6
|
+
useEffect,
|
|
7
|
+
} from "react";
|
|
8
|
+
import { useAtomValue } from "jotai";
|
|
9
|
+
import { OrgConfig as OrgConfigType } from "src/application/models/api/orgConfigResults";
|
|
10
|
+
import { getAsyncOrgConfig } from "src/atoms/org/org";
|
|
11
|
+
import { enviveConfigAtom } from "src/atoms/envive/enviveConfig";
|
|
12
|
+
import Logger from "src/application/logging/logger";
|
|
13
|
+
|
|
14
|
+
interface OrgConfigContextType {
|
|
15
|
+
orgConfig: OrgConfigType | undefined;
|
|
16
|
+
loading: boolean;
|
|
17
|
+
error: Error | undefined;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const OrgConfigContext = createContext<OrgConfigContextType | undefined>(
|
|
21
|
+
undefined
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
interface OrgConfigProviderProps {
|
|
25
|
+
children: ReactNode;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const OrgConfigProvider: React.FC<OrgConfigProviderProps> = ({
|
|
29
|
+
children,
|
|
30
|
+
}) => {
|
|
31
|
+
const [orgConfig, setOrgConfig] = useState<OrgConfigType | undefined>(
|
|
32
|
+
undefined
|
|
33
|
+
);
|
|
34
|
+
const [loading, setLoading] = useState<boolean>(true);
|
|
35
|
+
const [error, setError] = useState<Error | undefined>(undefined);
|
|
36
|
+
|
|
37
|
+
// Watch for EnviveConfig to be available
|
|
38
|
+
const enviveConfig = useAtomValue(enviveConfigAtom);
|
|
39
|
+
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
const fetchOrgConfig = async () => {
|
|
42
|
+
try {
|
|
43
|
+
setLoading(true);
|
|
44
|
+
setError(undefined); // Clear any previous errors
|
|
45
|
+
|
|
46
|
+
// Check if we have the required dependencies from EnviveConfig
|
|
47
|
+
if (!enviveConfig) {
|
|
48
|
+
Logger.logDebug(
|
|
49
|
+
"OrgConfigProvider: Waiting for EnviveConfig to be available"
|
|
50
|
+
);
|
|
51
|
+
return; // Don't fetch yet, wait for EnviveConfig
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Check if we have either orgLevelApiKey or orgShortName
|
|
55
|
+
const hasApiKey = enviveConfig.orgLevelApiKey;
|
|
56
|
+
const hasOrgShortName = enviveConfig.orgShortName;
|
|
57
|
+
|
|
58
|
+
if (!hasApiKey && !hasOrgShortName) {
|
|
59
|
+
Logger.logWarn(
|
|
60
|
+
"OrgConfigProvider: Neither orgLevelApiKey nor orgShortName available in EnviveConfig",
|
|
61
|
+
enviveConfig
|
|
62
|
+
);
|
|
63
|
+
setError(
|
|
64
|
+
new Error(
|
|
65
|
+
"OrgConfigProvider requires either orgLevelApiKey or orgShortName to be provided in EnviveConfigProvider"
|
|
66
|
+
)
|
|
67
|
+
);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
Logger.logDebug(
|
|
72
|
+
"OrgConfigProvider: EnviveConfig available, fetching OrgConfig",
|
|
73
|
+
{
|
|
74
|
+
hasApiKey: !!hasApiKey,
|
|
75
|
+
hasOrgShortName: !!hasOrgShortName,
|
|
76
|
+
}
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
const fetchedConfig = await getAsyncOrgConfig();
|
|
80
|
+
setOrgConfig(fetchedConfig);
|
|
81
|
+
Logger.logDebug("OrgConfigProvider: Successfully fetched OrgConfig");
|
|
82
|
+
} catch (err) {
|
|
83
|
+
Logger.logError("OrgConfigProvider: Failed to fetch OrgConfig", err);
|
|
84
|
+
setError(err as Error);
|
|
85
|
+
} finally {
|
|
86
|
+
setLoading(false);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
fetchOrgConfig();
|
|
91
|
+
}, [enviveConfig]); // Re-run when enviveConfig changes
|
|
92
|
+
|
|
93
|
+
return (
|
|
94
|
+
<OrgConfigContext.Provider value={{ orgConfig, loading, error }}>
|
|
95
|
+
{children}
|
|
96
|
+
</OrgConfigContext.Provider>
|
|
97
|
+
);
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export const useOrgConfig = () => {
|
|
101
|
+
const context = useContext(OrgConfigContext);
|
|
102
|
+
if (context === undefined) {
|
|
103
|
+
throw new Error("useOrgConfig must be used within an OrgConfigProvider");
|
|
104
|
+
}
|
|
105
|
+
return context;
|
|
106
|
+
};
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
useState,
|
|
9
9
|
} from "react";
|
|
10
10
|
import { GenerationParams } from "src/application/models";
|
|
11
|
-
import {
|
|
11
|
+
import { baseUrlAtom } from "src/atoms/envive/enviveConfig";
|
|
12
12
|
|
|
13
13
|
// TODO: Refactor this to a common service that handles query params (and spiffy variables all together)
|
|
14
14
|
const getChatModelName = () => {
|
|
@@ -49,7 +49,7 @@ const SystemSettingsContextProvider = ({
|
|
|
49
49
|
const [params, setParams] = useState<GenerationParams | undefined>(
|
|
50
50
|
() => generationParams ?? defaultGenerationParams
|
|
51
51
|
);
|
|
52
|
-
const endpointURL = useAtomValue(
|
|
52
|
+
const endpointURL = useAtomValue(baseUrlAtom);
|
|
53
53
|
const settingsContextValues = useMemo(
|
|
54
54
|
() => ({
|
|
55
55
|
generationParams: params,
|
package/src/contexts/types.ts
CHANGED
|
@@ -963,6 +963,8 @@ interface OrgConfigContextType {
|
|
|
963
963
|
orgUIConfig: OrgUIConfig;
|
|
964
964
|
}
|
|
965
965
|
|
|
966
|
+
export type OrgConfig = OrgUIConfig;
|
|
967
|
+
|
|
966
968
|
export {
|
|
967
969
|
CategoryExtractorType,
|
|
968
970
|
ColorNames,
|
|
@@ -972,15 +974,16 @@ export {
|
|
|
972
974
|
};
|
|
973
975
|
|
|
974
976
|
export interface EnviveConfig {
|
|
975
|
-
amplitudeApiKey
|
|
976
|
-
dataResidency
|
|
977
|
-
env
|
|
978
|
-
baseUrl
|
|
979
|
-
reactAppName
|
|
980
|
-
cdnUrl
|
|
981
|
-
contextSource
|
|
982
|
-
orgLevelApiKey
|
|
983
|
-
orgShortName
|
|
977
|
+
amplitudeApiKey?: string;
|
|
978
|
+
dataResidency?: string;
|
|
979
|
+
env?: string;
|
|
980
|
+
baseUrl?: string;
|
|
981
|
+
reactAppName?: string;
|
|
982
|
+
cdnUrl?: string;
|
|
983
|
+
contextSource?: string;
|
|
984
|
+
orgLevelApiKey?: string;
|
|
985
|
+
orgShortName?: string;
|
|
986
|
+
identifyingPrefix?: string;
|
|
984
987
|
}
|
|
985
988
|
|
|
986
989
|
export type {
|
package/src/hooks/index.ts
CHANGED
|
@@ -7,16 +7,15 @@ export * from "./useElementObserver";
|
|
|
7
7
|
export * from "./useFileUpload";
|
|
8
8
|
export * from "./useGrabAndScroll";
|
|
9
9
|
export * from "./useHideElements";
|
|
10
|
-
export * from "./useHorizontalScrollAnimation";
|
|
11
10
|
export * from "./useImageResolver";
|
|
12
11
|
export * from "./useIntersection";
|
|
13
12
|
export * from "./useIsSmallScreen";
|
|
14
13
|
export * from "./useMessageFilter";
|
|
15
14
|
export * from "./useMessageScrollObserver";
|
|
16
|
-
export * from "./useReducedMotionWithOverride";
|
|
17
15
|
export * from "./useSearch";
|
|
18
16
|
export * from "./useSnapCalculator";
|
|
19
|
-
export * from "./useSnapControl";
|
|
20
17
|
export * from "./useSystemSettingsContext";
|
|
21
18
|
export * from "./useTrackComponentVisibleEvent";
|
|
22
19
|
export * from "./useUpdateAnalyticsProps";
|
|
20
|
+
export * from "./useNewOrgConfig";
|
|
21
|
+
export * from "./utils";
|
|
@@ -1,16 +1,22 @@
|
|
|
1
|
-
import Logger from
|
|
2
|
-
import { useEffect, useRef, useCallback, useState } from
|
|
3
|
-
import { useAtom, useAtomValue, useSetAtom } from
|
|
4
|
-
import { variantInfoAtom } from
|
|
5
|
-
import { PageVariantService } from
|
|
6
|
-
import { orgPageConfigAtom } from
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
import Logger from "src/application/logging/logger";
|
|
2
|
+
import { useEffect, useRef, useCallback, useState } from "react";
|
|
3
|
+
import { useAtom, useAtomValue, useSetAtom } from "jotai";
|
|
4
|
+
import { variantInfoAtom } from "src/atoms/app";
|
|
5
|
+
import { PageVariantService } from "src/application/service/pageVariantService";
|
|
6
|
+
import { orgPageConfigAtom } from "src/atoms/org/orgPageConfig";
|
|
7
|
+
import {
|
|
8
|
+
hasParsedVariantInfoAtom,
|
|
9
|
+
supportedEventAtom,
|
|
10
|
+
} from "src/atoms/app/variant";
|
|
11
|
+
import {
|
|
12
|
+
SpiffyMetricsEventName,
|
|
13
|
+
AmplitudeAdapter,
|
|
14
|
+
} from "src/adapters/amplitude";
|
|
15
|
+
import { orgUIConfigAtom } from "src/atoms/org/orgUIConfig";
|
|
16
|
+
import { createAppLoadedEvent, createVisitUserEvent } from "src/hooks/utils";
|
|
17
|
+
import { queueUserEventAtom } from "src/atoms/chat/messageQueue";
|
|
18
|
+
import { UserEvent } from "src/application/models";
|
|
19
|
+
import { UserEventCategory } from "@spiffy-ai/commerce-api-client";
|
|
14
20
|
|
|
15
21
|
// consider putting this in the org config
|
|
16
22
|
const DEBOUNCE_DELAY_MS = 300;
|
|
@@ -26,7 +32,10 @@ const debounce = (func: () => void, delay: number): (() => void) => {
|
|
|
26
32
|
};
|
|
27
33
|
};
|
|
28
34
|
|
|
29
|
-
const isUserEventEqual = (
|
|
35
|
+
const isUserEventEqual = (
|
|
36
|
+
event1: UserEvent | null,
|
|
37
|
+
event2: UserEvent | null
|
|
38
|
+
) => {
|
|
30
39
|
if (!event1 || !event2) {
|
|
31
40
|
return false;
|
|
32
41
|
}
|
|
@@ -48,8 +57,8 @@ const isUserEventEqual = (event1: UserEvent | null, event2: UserEvent | null) =>
|
|
|
48
57
|
if (
|
|
49
58
|
event1.category === UserEventCategory.PlpVisit &&
|
|
50
59
|
event2.category === UserEventCategory.PlpVisit &&
|
|
51
|
-
|
|
52
|
-
|
|
60
|
+
"id" in event1.attributes.attributes &&
|
|
61
|
+
"id" in event2.attributes.attributes
|
|
53
62
|
) {
|
|
54
63
|
return event1.attributes.attributes.id === event2.attributes.attributes.id;
|
|
55
64
|
}
|
|
@@ -68,14 +77,17 @@ export const useDynamicVariants = () => {
|
|
|
68
77
|
const setVariantInfo = useSetAtom(variantInfoAtom);
|
|
69
78
|
const setSupportedEvent = useSetAtom(supportedEventAtom);
|
|
70
79
|
const queueUserEvent = useSetAtom(queueUserEventAtom);
|
|
71
|
-
const [mostRecentUserEvent, setMostRecentUserEvent] =
|
|
80
|
+
const [mostRecentUserEvent, setMostRecentUserEvent] =
|
|
81
|
+
useState<UserEvent | null>(null);
|
|
72
82
|
|
|
73
83
|
const orgPageConfig = useAtomValue(orgPageConfigAtom);
|
|
74
84
|
const debouncedFunc = useRef<(() => void) | null>(null);
|
|
75
85
|
// we need to fetch org info before we can get the variant info. this prevents the rest of the application
|
|
76
86
|
// logic from running before that happens. More specifically, we want to have all org and variant states
|
|
77
87
|
// settled before mounting the ChatContextProvider which will start the session.
|
|
78
|
-
const [hasParsedVariantInfo, setHasParsedVariantInfo] = useAtom(
|
|
88
|
+
const [hasParsedVariantInfo, setHasParsedVariantInfo] = useAtom(
|
|
89
|
+
hasParsedVariantInfoAtom
|
|
90
|
+
);
|
|
79
91
|
const animationFrameRef = useRef<number | null>(null);
|
|
80
92
|
const isBeforeUnload = useRef(false);
|
|
81
93
|
|
|
@@ -98,16 +110,17 @@ export const useDynamicVariants = () => {
|
|
|
98
110
|
|
|
99
111
|
if (!orgPageConfig) {
|
|
100
112
|
Logger.logWarn(
|
|
101
|
-
|
|
102
|
-
undefined
|
|
113
|
+
"[spiffy-ai] orgPageConfig not found. skipping page change handling",
|
|
114
|
+
undefined
|
|
103
115
|
);
|
|
104
116
|
return;
|
|
105
117
|
}
|
|
106
118
|
|
|
107
|
-
const parsedVariantInfo =
|
|
119
|
+
const parsedVariantInfo =
|
|
120
|
+
await PageVariantService.getVariantInfoWithPageConfig(orgPageConfig);
|
|
108
121
|
|
|
109
122
|
if (parsedVariantInfo) {
|
|
110
|
-
Logger.logDebug(
|
|
123
|
+
Logger.logDebug("[spiffy-ai] variantInfo changed", parsedVariantInfo);
|
|
111
124
|
const [newVariantInfo, pageVariantConfig] = parsedVariantInfo;
|
|
112
125
|
|
|
113
126
|
setVariantInfo(newVariantInfo);
|
|
@@ -120,8 +133,10 @@ export const useDynamicVariants = () => {
|
|
|
120
133
|
queueUserEvent(visitEvent);
|
|
121
134
|
}
|
|
122
135
|
|
|
123
|
-
const supportedEvent = await PageVariantService.checkSupportedEvent(
|
|
124
|
-
|
|
136
|
+
const supportedEvent = await PageVariantService.checkSupportedEvent(
|
|
137
|
+
pageVariantConfig
|
|
138
|
+
);
|
|
139
|
+
console.log("useDynamicVariants - supportedEvent", supportedEvent);
|
|
125
140
|
setSupportedEvent(supportedEvent);
|
|
126
141
|
AmplitudeAdapter.trackEvent({
|
|
127
142
|
eventName: SpiffyMetricsEventName.SupportedEvent,
|
|
@@ -164,14 +179,14 @@ export const useDynamicVariants = () => {
|
|
|
164
179
|
isBeforeUnload.current = true;
|
|
165
180
|
};
|
|
166
181
|
|
|
167
|
-
window.addEventListener(
|
|
168
|
-
window.addEventListener(
|
|
169
|
-
window.addEventListener(
|
|
182
|
+
window.addEventListener("click", handleLocationChange);
|
|
183
|
+
window.addEventListener("popstate", handleLocationChange);
|
|
184
|
+
window.addEventListener("beforeunload", handleBeforeUnload);
|
|
170
185
|
|
|
171
186
|
return () => {
|
|
172
|
-
window.removeEventListener(
|
|
173
|
-
window.removeEventListener(
|
|
174
|
-
window.removeEventListener(
|
|
187
|
+
window.removeEventListener("click", handleLocationChange);
|
|
188
|
+
window.removeEventListener("popstate", handleLocationChange);
|
|
189
|
+
window.removeEventListener("beforeunload", handleBeforeUnload);
|
|
175
190
|
// TODO: this is causing the supportedEvent to be undefined for Magento customers
|
|
176
191
|
// Why is unclear however...
|
|
177
192
|
// setSupportedEvent(undefined);
|
|
@@ -191,10 +206,11 @@ export const useDynamicVariants = () => {
|
|
|
191
206
|
|
|
192
207
|
useEffect(() => {
|
|
193
208
|
let windowInterval: number | null = null;
|
|
194
|
-
const
|
|
209
|
+
const merchantVariantSettings = orgUIConfig?.merchantVariantSettings;
|
|
195
210
|
|
|
196
211
|
if (merchantVariantSettings?.dynamicVariants?.enabled) {
|
|
197
|
-
const refreshInterval =
|
|
212
|
+
const refreshInterval =
|
|
213
|
+
merchantVariantSettings?.dynamicVariants?.refreshInterval;
|
|
198
214
|
windowInterval = window.setInterval(() => {
|
|
199
215
|
handleLocationChange();
|
|
200
216
|
}, refreshInterval);
|
|
@@ -13,7 +13,7 @@ export const useFileUpload = () => {
|
|
|
13
13
|
const [error, setError] = useState("");
|
|
14
14
|
|
|
15
15
|
const isValidFile = (file?: File) => {
|
|
16
|
-
const maxSize = customerServiceImpl
|
|
16
|
+
const maxSize = customerServiceImpl?.maxfileUploadSize;
|
|
17
17
|
if (maxSize && (file?.size || 0) > maxSize) {
|
|
18
18
|
const strFileSize = `${(maxSize / 1000000).toFixed(1)}MB`;
|
|
19
19
|
setError(`Exceeded file size of ${strFileSize}`);
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import Logger from
|
|
2
|
-
import { SelectorFactory } from
|
|
3
|
-
import { useEffect, useRef, useState } from
|
|
4
|
-
import { useAtomValue } from
|
|
5
|
-
import { SpiffyEventName } from
|
|
6
|
-
import { ElementObserver } from
|
|
7
|
-
import { DOMObserver } from
|
|
8
|
-
import { orgUIConfigAtom } from
|
|
1
|
+
import Logger from "src/application/logging/logger";
|
|
2
|
+
import { SelectorFactory } from "src/application/utils/nodeSelector";
|
|
3
|
+
import { useEffect, useRef, useState } from "react";
|
|
4
|
+
import { useAtomValue } from "jotai";
|
|
5
|
+
import { SpiffyEventName } from "src/application/models/events";
|
|
6
|
+
import { ElementObserver } from "src/application/utils/elementObserver";
|
|
7
|
+
import { DOMObserver } from "src/application/utils/domObserver";
|
|
8
|
+
import { orgUIConfigAtom } from "src/atoms/org/orgUIConfig";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* This hook hides/shows elements that could overlap with the chat when the chat is opened/closed.
|
|
12
12
|
*/
|
|
13
13
|
export const useHideElements = () => {
|
|
14
14
|
const orgUIConfig = useAtomValue(orgUIConfigAtom);
|
|
15
|
-
const [hasRegisteredEventListeners, setHasRegisteredEventListeners] =
|
|
15
|
+
const [hasRegisteredEventListeners, setHasRegisteredEventListeners] =
|
|
16
|
+
useState(false);
|
|
16
17
|
const elementObservers = useRef<ElementObserver[]>([]);
|
|
17
18
|
|
|
18
19
|
const hideElements = (elements: ElementObserver[]) => {
|
|
@@ -29,8 +30,10 @@ export const useHideElements = () => {
|
|
|
29
30
|
|
|
30
31
|
useEffect(() => {
|
|
31
32
|
elementObservers.current = [];
|
|
32
|
-
orgUIConfig
|
|
33
|
-
elementObservers.current.push(
|
|
33
|
+
orgUIConfig?.hiddenElementSelectors?.forEach((selector) => {
|
|
34
|
+
elementObservers.current.push(
|
|
35
|
+
DOMObserver.add(SelectorFactory.query(selector))
|
|
36
|
+
);
|
|
34
37
|
});
|
|
35
38
|
// since we're not using useElementObserver, we need to manually start the observer
|
|
36
39
|
elementObservers.current.forEach((element) => {
|
|
@@ -44,22 +47,22 @@ export const useHideElements = () => {
|
|
|
44
47
|
});
|
|
45
48
|
elementObservers.current = [];
|
|
46
49
|
};
|
|
47
|
-
}, [orgUIConfig
|
|
50
|
+
}, [orgUIConfig?.hiddenElementSelectors]);
|
|
48
51
|
|
|
49
52
|
useEffect(() => {
|
|
50
53
|
if (elementObservers.current.length > 0 && !hasRegisteredEventListeners) {
|
|
51
54
|
Logger.logDebug(
|
|
52
|
-
`Registering ${SpiffyEventName.WidgetOpen} event for ${elementObservers.current.length} elements
|
|
55
|
+
`Registering ${SpiffyEventName.WidgetOpen} event for ${elementObservers.current.length} elements`
|
|
53
56
|
);
|
|
54
57
|
window.addEventListener(SpiffyEventName.WidgetOpen, () =>
|
|
55
|
-
hideElements(elementObservers.current)
|
|
58
|
+
hideElements(elementObservers.current)
|
|
56
59
|
);
|
|
57
60
|
|
|
58
61
|
Logger.logDebug(
|
|
59
|
-
`Registering ${SpiffyEventName.WidgetClose} event for ${elementObservers.current.length} elements
|
|
62
|
+
`Registering ${SpiffyEventName.WidgetClose} event for ${elementObservers.current.length} elements`
|
|
60
63
|
);
|
|
61
64
|
window.addEventListener(SpiffyEventName.WidgetClose, () =>
|
|
62
|
-
showElements(elementObservers.current)
|
|
65
|
+
showElements(elementObservers.current)
|
|
63
66
|
);
|
|
64
67
|
|
|
65
68
|
setHasRegisteredEventListeners(true);
|
|
@@ -68,11 +71,11 @@ export const useHideElements = () => {
|
|
|
68
71
|
return () => {
|
|
69
72
|
if (elementObservers.current.length > 0 && hasRegisteredEventListeners) {
|
|
70
73
|
window.removeEventListener(SpiffyEventName.WidgetOpen, () =>
|
|
71
|
-
hideElements(elementObservers.current)
|
|
74
|
+
hideElements(elementObservers.current)
|
|
72
75
|
);
|
|
73
76
|
|
|
74
77
|
window.removeEventListener(SpiffyEventName.WidgetClose, () =>
|
|
75
|
-
showElements(elementObservers.current)
|
|
78
|
+
showElements(elementObservers.current)
|
|
76
79
|
);
|
|
77
80
|
|
|
78
81
|
setHasRegisteredEventListeners(false);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { useAtomValue } from
|
|
2
|
-
import { OrgShortName } from
|
|
3
|
-
import { orgUIConfigAtom } from
|
|
1
|
+
import { useAtomValue } from "jotai";
|
|
2
|
+
import { OrgShortName } from "src/application/models";
|
|
3
|
+
import { orgUIConfigAtom } from "src/atoms/org/orgUIConfig";
|
|
4
4
|
|
|
5
5
|
abstract class ImageResolver {
|
|
6
6
|
abstract resolve(url: string, size: number): string;
|
|
@@ -12,8 +12,14 @@ class MerchantImageResolver {
|
|
|
12
12
|
private static loadMapping() {
|
|
13
13
|
if (this.imageResolverMap.size === 0) {
|
|
14
14
|
this.imageResolverMap.set(OrgShortName.Spanx, new ShopifyImageResolver());
|
|
15
|
-
this.imageResolverMap.set(
|
|
16
|
-
|
|
15
|
+
this.imageResolverMap.set(
|
|
16
|
+
OrgShortName.SpanxStaging,
|
|
17
|
+
new ShopifyImageResolver()
|
|
18
|
+
);
|
|
19
|
+
this.imageResolverMap.set(
|
|
20
|
+
OrgShortName.UniqueVintage,
|
|
21
|
+
new ShopifyImageResolver()
|
|
22
|
+
);
|
|
17
23
|
}
|
|
18
24
|
return this.imageResolverMap;
|
|
19
25
|
}
|
|
@@ -31,15 +37,17 @@ class ShopifyImageResolver extends ImageResolver {
|
|
|
31
37
|
if (urlHasPrefix) {
|
|
32
38
|
return url.replace(pattern, newSizePrefix);
|
|
33
39
|
}
|
|
34
|
-
return url.replace(
|
|
40
|
+
return url.replace(".jpg", newSizePrefix);
|
|
35
41
|
}
|
|
36
42
|
}
|
|
37
43
|
|
|
38
44
|
export const useImageResolver = () => {
|
|
39
45
|
const orgUIConfig = useAtomValue(orgUIConfigAtom);
|
|
40
46
|
const resolve = (image?: string, size?: number) => {
|
|
41
|
-
if (image && size) {
|
|
42
|
-
const newImagePath = MerchantImageResolver.get(
|
|
47
|
+
if (image && size && orgUIConfig?.shortName) {
|
|
48
|
+
const newImagePath = MerchantImageResolver.get(
|
|
49
|
+
orgUIConfig.shortName
|
|
50
|
+
)?.resolve(image, size);
|
|
43
51
|
return newImagePath || image;
|
|
44
52
|
}
|
|
45
53
|
return image;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { GraphQLClient } from "src/adapters/spiffy/commerce/graphql";
|
|
2
|
+
import Logger from "src/application/logging/logger";
|
|
3
|
+
import { AtomStore, getAtomStore } from "../atoms/atomStore";
|
|
4
|
+
import { ColorMapping } from "src/contexts";
|
|
5
|
+
|
|
6
|
+
import { useAtomValue } from "jotai";
|
|
7
|
+
import { useEffect, useState } from "react";
|
|
8
|
+
import { orgShortNameAtom } from "../atoms/org/org";
|
|
9
|
+
import {
|
|
10
|
+
BasicOrgInfoType,
|
|
11
|
+
getOrgInfo,
|
|
12
|
+
} from "src/application/models/supportedOrgs";
|
|
13
|
+
import { FrontendConfig } from "src/application/models";
|
|
14
|
+
|
|
15
|
+
type newConfigResponse = {
|
|
16
|
+
colorsConfig: ColorMapping | undefined;
|
|
17
|
+
frontendConfig: FrontendConfig | undefined;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
async function fetchGraphQLConfig(
|
|
21
|
+
atomStore: AtomStore
|
|
22
|
+
): Promise<newConfigResponse> {
|
|
23
|
+
try {
|
|
24
|
+
Logger.logDebug("GraphQLConfigService: Starting GraphQL client fetch");
|
|
25
|
+
|
|
26
|
+
const { colorsConfig, frontendConfig } =
|
|
27
|
+
(await GraphQLClient.getColorsAndFrontendConfig()) ?? {};
|
|
28
|
+
|
|
29
|
+
Logger.logDebug("GraphQL config fetch completed", {
|
|
30
|
+
hasColorsConfig: !!colorsConfig,
|
|
31
|
+
hasFrontendConfig: !!frontendConfig,
|
|
32
|
+
frontendConfigKeys: frontendConfig ? Object.keys(frontendConfig) : [],
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
colorsConfig,
|
|
37
|
+
frontendConfig,
|
|
38
|
+
};
|
|
39
|
+
} catch (error) {
|
|
40
|
+
Logger.logError(
|
|
41
|
+
"GraphQLConfigService: Error during GraphQL config fetch",
|
|
42
|
+
error
|
|
43
|
+
);
|
|
44
|
+
throw error; // Re-throw to be caught by the caller
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export const useNewOrgConfig = () => {
|
|
49
|
+
const [oldConfig, setOldConfig] = useState<BasicOrgInfoType | undefined>();
|
|
50
|
+
|
|
51
|
+
const [newConfig, setNewConfig] = useState<newConfigResponse | undefined>();
|
|
52
|
+
|
|
53
|
+
const [combinedConfig, setCombinedConfig] = useState<
|
|
54
|
+
newConfigResponse & BasicOrgInfoType
|
|
55
|
+
>();
|
|
56
|
+
const orgShortName = useAtomValue(orgShortNameAtom);
|
|
57
|
+
|
|
58
|
+
useEffect(() => {
|
|
59
|
+
if (orgShortName) {
|
|
60
|
+
getOrgInfo(orgShortName).then((oldConfigData) => {
|
|
61
|
+
setOldConfig(oldConfigData);
|
|
62
|
+
});
|
|
63
|
+
fetchGraphQLConfig(getAtomStore()).then((newConfigData) => {
|
|
64
|
+
setNewConfig(newConfigData);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}, [orgShortName]);
|
|
68
|
+
|
|
69
|
+
useEffect(() => {
|
|
70
|
+
if (oldConfig && newConfig) {
|
|
71
|
+
setCombinedConfig;
|
|
72
|
+
}
|
|
73
|
+
}, [oldConfig, newConfig]);
|
|
74
|
+
|
|
75
|
+
if (!orgShortName || !combinedConfig) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return combinedConfig;
|
|
80
|
+
};
|
package/src/hooks/useSearch.tsx
CHANGED
|
@@ -122,6 +122,14 @@ export const useSearch = (): SearchResultsHocProps => {
|
|
|
122
122
|
const dynamicFilters = searchData?.filters || [];
|
|
123
123
|
const { productCardConfig, shortName: merchantShortName } = orgUIConfig || {};
|
|
124
124
|
|
|
125
|
+
// Provide fallback values when orgUIConfig is not yet available
|
|
126
|
+
const safeProductCardConfig = productCardConfig || {
|
|
127
|
+
variant: "minimal",
|
|
128
|
+
hoverVariant: "none",
|
|
129
|
+
layoutVariant: "square",
|
|
130
|
+
};
|
|
131
|
+
const safeMerchantShortName = merchantShortName || "";
|
|
132
|
+
|
|
125
133
|
const availableDynamicFilters = useMemo(() => {
|
|
126
134
|
return dynamicFilters
|
|
127
135
|
.filter(
|
|
@@ -399,12 +407,8 @@ export const useSearch = (): SearchResultsHocProps => {
|
|
|
399
407
|
return {
|
|
400
408
|
searchData,
|
|
401
409
|
searchResponseId: searchData?.searchResponseId ?? "",
|
|
402
|
-
merchantShortName,
|
|
403
|
-
productCardConfig:
|
|
404
|
-
variant: "minimal",
|
|
405
|
-
hoverVariant: "none",
|
|
406
|
-
layoutVariant: "square",
|
|
407
|
-
},
|
|
410
|
+
merchantShortName: safeMerchantShortName,
|
|
411
|
+
productCardConfig: safeProductCardConfig,
|
|
408
412
|
productList,
|
|
409
413
|
autocompleteResults,
|
|
410
414
|
searchFilters: filters,
|
package/src/hooks/utils.ts
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import { FormType, ResponseCategory } from
|
|
2
|
-
import { useAtomValue, useSetAtom } from
|
|
3
|
-
import { Response } from
|
|
4
|
-
import { handleFormSubmittedAtom } from
|
|
5
|
-
import { apiKeyAtom
|
|
6
|
-
import { orgCustomerServiceService } from
|
|
7
|
-
import { MessageInterceptor } from
|
|
1
|
+
import { FormType, ResponseCategory } from "@spiffy-ai/commerce-api-client";
|
|
2
|
+
import { useAtomValue, useSetAtom } from "jotai";
|
|
3
|
+
import { Response } from "src/application/models";
|
|
4
|
+
import { handleFormSubmittedAtom } from "src/atoms/chat";
|
|
5
|
+
import { apiKeyAtom } from "src/atoms/org/org";
|
|
6
|
+
import { orgCustomerServiceService } from "src/atoms/org/orgUIConfig";
|
|
7
|
+
import { MessageInterceptor } from "./types";
|
|
8
|
+
import { baseUrlAtom } from "src/atoms/envive/enviveConfig";
|
|
8
9
|
|
|
9
10
|
export const useFormEscalation = (): MessageInterceptor => {
|
|
10
11
|
const handleFormSubmitted = useSetAtom(handleFormSubmittedAtom);
|
|
11
12
|
const customerServiceIntegration = useAtomValue(orgCustomerServiceService);
|
|
12
13
|
const apiKey = useAtomValue(apiKeyAtom);
|
|
13
|
-
const apiEndpoint = useAtomValue(
|
|
14
|
+
const apiEndpoint = useAtomValue(baseUrlAtom);
|
|
14
15
|
|
|
15
16
|
const blockExecution = () => true;
|
|
16
17
|
|
|
@@ -19,8 +20,24 @@ export const useFormEscalation = (): MessageInterceptor => {
|
|
|
19
20
|
response.category === ResponseCategory.Form &&
|
|
20
21
|
response.attributes.formCategory?.formType === FormType.Escalation
|
|
21
22
|
) {
|
|
23
|
+
if (!customerServiceIntegration) {
|
|
24
|
+
// Handle case where customer service integration is not available
|
|
25
|
+
handleFormSubmitted({
|
|
26
|
+
formResponseId: response.id,
|
|
27
|
+
formType: FormType.Escalation,
|
|
28
|
+
filledSchema: {
|
|
29
|
+
is_in_business_hours: false,
|
|
30
|
+
is_integration_enabled: false,
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
22
36
|
const isEnabled = customerServiceIntegration.isEnabled();
|
|
23
|
-
const isBusinessHours = await customerServiceIntegration.isBusinessHours(
|
|
37
|
+
const isBusinessHours = await customerServiceIntegration.isBusinessHours(
|
|
38
|
+
apiKey,
|
|
39
|
+
apiEndpoint
|
|
40
|
+
);
|
|
24
41
|
|
|
25
42
|
handleFormSubmitted({
|
|
26
43
|
formResponseId: response.id,
|
package/src/types.ts
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
import { AmplitudeAdapter } from "./adapters/amplitude";
|
|
4
4
|
import { VariantInfo } from "./application/models/variantInfo";
|
|
5
5
|
import { OrgPageConfig } from "./contexts/types";
|
|
6
|
-
import { ExtensionInfo } from "./extension";
|
|
7
6
|
|
|
8
7
|
// Export the type for use in tests
|
|
9
8
|
export type SpiffyInit = {
|
|
@@ -11,7 +10,6 @@ export type SpiffyInit = {
|
|
|
11
10
|
getOrgInfo: (apiKey: string) => Promise<OrgInfo>;
|
|
12
11
|
refresh: () => Promise<void>;
|
|
13
12
|
isInitialized?: boolean;
|
|
14
|
-
extensionInfo: ExtensionInfo;
|
|
15
13
|
setVariantInfoOverride: (variantInfo: VariantInfo) => void;
|
|
16
14
|
// TODO: Other functions to invoke page loads, record checkout events etc
|
|
17
15
|
_amplitudeAdapter?: AmplitudeAdapter;
|