@growupsell/react-ecommerce-core 2.0.14 → 2.0.17

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.
@@ -581,6 +581,9 @@ var FilterContext = createContext({
581
581
  selectedVariants: [],
582
582
  updateSelectedVariants: () => null,
583
583
  variantLoading: false,
584
+ selectedSpecifications: [],
585
+ updateSpecificationOption: () => null,
586
+ setSelectedSpecifications: () => null,
584
587
  total: 0,
585
588
  limit: 10,
586
589
  offset: 0
@@ -607,6 +610,7 @@ var FilterProvider = (props) => {
607
610
  const [variantList, setVariantList] = useState([]);
608
611
  const [selectedVariants, setSelectedVariants] = useState([]);
609
612
  const [variantLoading, setVariantLoading] = useState(false);
613
+ const [selectedSpecifications, setSelectedSpecifications] = useState([]);
610
614
  const [limit, setLimit] = useState(10);
611
615
  const [offset, setOffset] = useState(0);
612
616
  const [total, setTotal] = useState(0);
@@ -633,15 +637,30 @@ var FilterProvider = (props) => {
633
637
  });
634
638
  setCurrentPage(1);
635
639
  };
636
- const fetchFilterConfig = async () => {
637
- setFilterConfigLoading(true);
638
- const response = await api.getProductFilterConfig();
639
- setFilterConfig(response);
640
- setFilterConfigLoading(false);
641
- };
640
+ const categoryFilterKey = selectedCategoryId.length === 1 ? selectedCategoryId[0] : void 0;
642
641
  useEffect(() => {
643
- fetchFilterConfig();
644
- }, []);
642
+ let active = true;
643
+ (async () => {
644
+ if (!filterConfig) {
645
+ setFilterConfigLoading(true);
646
+ }
647
+ try {
648
+ const response = await api.getProductFilterConfig(categoryFilterKey);
649
+ if (active) {
650
+ setFilterConfig(response);
651
+ }
652
+ } catch (error) {
653
+ console.log(error);
654
+ } finally {
655
+ if (active) {
656
+ setFilterConfigLoading(false);
657
+ }
658
+ }
659
+ })();
660
+ return () => {
661
+ active = false;
662
+ };
663
+ }, [categoryFilterKey]);
645
664
  const removeCategoryFilterId = (id) => {
646
665
  setSelectedCategoryId((x) => {
647
666
  return x.filter((o) => o !== id);
@@ -659,6 +678,7 @@ var FilterProvider = (props) => {
659
678
  max_price: selectedMaxPrice,
660
679
  brand_ids: selectedCategoryId.length > 0 ? selectedBrandId : null,
661
680
  variants: selectedCategoryId.length > 0 ? selectedVariants : null,
681
+ specifications: selectedSpecifications,
662
682
  limit,
663
683
  offset
664
684
  };
@@ -680,6 +700,21 @@ var FilterProvider = (props) => {
680
700
  return [...prevIds, id];
681
701
  });
682
702
  };
703
+ const updateSpecificationOption = (keyId, option) => {
704
+ setSelectedSpecifications((prev) => {
705
+ const current = prev.find((item) => item.id === keyId);
706
+ if (!current) {
707
+ return [...prev, { id: keyId, values: [option] }];
708
+ }
709
+ const values = current.values.includes(option) ? current.values.filter((value) => value !== option) : [...current.values, option];
710
+ if (values.length === 0) {
711
+ return prev.filter((item) => item.id !== keyId);
712
+ }
713
+ return prev.map(
714
+ (item) => item.id === keyId ? { ...item, values } : item
715
+ );
716
+ });
717
+ };
683
718
  const updateSelectedVariants = (label) => {
684
719
  setSelectedVariants((prevVariants) => {
685
720
  if (prevVariants.includes(label)) {
@@ -711,9 +746,31 @@ var FilterProvider = (props) => {
711
746
  selectedMaxPrice,
712
747
  selectedBrandId,
713
748
  selectedVariants,
749
+ selectedSpecifications,
714
750
  limit,
715
751
  offset
716
752
  ]);
753
+ useEffect(() => {
754
+ const keys = filterConfig?.specifications ?? [];
755
+ const allowed = new Map(
756
+ keys.map((key) => [
757
+ key.id,
758
+ new Set(key.options ?? [])
759
+ ])
760
+ );
761
+ setSelectedSpecifications((prev) => {
762
+ const next = prev.map((item) => ({
763
+ ...item,
764
+ values: item.values.filter((value) => allowed.get(item.id)?.has(value))
765
+ })).filter((item) => item.values.length > 0 && allowed.has(item.id));
766
+ if (next.length === prev.length && next.every(
767
+ (item, index) => item.id === prev[index].id && item.values.length === prev[index].values.length && item.values.every((value, valueIndex) => value === prev[index].values[valueIndex])
768
+ )) {
769
+ return prev;
770
+ }
771
+ return next;
772
+ });
773
+ }, [filterConfig]);
717
774
  const handlePageChange = (newOffset) => {
718
775
  setOffset(newOffset);
719
776
  };
@@ -753,6 +810,9 @@ var FilterProvider = (props) => {
753
810
  selectedVariants,
754
811
  updateSelectedVariants,
755
812
  variantLoading,
813
+ selectedSpecifications,
814
+ updateSpecificationOption,
815
+ setSelectedSpecifications,
756
816
  total,
757
817
  limit,
758
818
  offset
@@ -946,6 +1006,8 @@ var HomeConfigProvider = (props) => {
946
1006
  const getThemeConfig = useCallback(async () => {
947
1007
  if (!hasInitial) {
948
1008
  setLoading(true);
1009
+ } else {
1010
+ return;
949
1011
  }
950
1012
  try {
951
1013
  const response = await retrieveThemeContent(
@@ -962,7 +1024,7 @@ var HomeConfigProvider = (props) => {
962
1024
  }
963
1025
  setIsInitialized(true);
964
1026
  } catch (error) {
965
- console.error("Error fetching theme content:", error);
1027
+ console.log("Error fetching theme content:", error);
966
1028
  } finally {
967
1029
  setLoading(false);
968
1030
  }
@@ -1066,11 +1128,17 @@ var HomeConfigHeroSliderContext = createContext({
1066
1128
  onUpdateHeroSlider: () => null
1067
1129
  });
1068
1130
  var HomeConfigHeroSliderProvider = (props) => {
1069
- const [loading, setLoading] = useState(true);
1070
- const [heroSliderConfigData, setHeroSliderConfigData] = useState([]);
1131
+ const hasInitial = Array.isArray(props.initialThemeContent?.data);
1132
+ const [loading, setLoading] = useState(!hasInitial);
1133
+ const [heroSliderConfigData, setHeroSliderConfigData] = useState(
1134
+ () => hasInitial ? props.initialThemeContent.data : []
1135
+ );
1071
1136
  const { token } = useThemeEdit();
1072
1137
  const themeConfig = useContext(BusinessConfigContext);
1073
- const getHeroSliderConfig = async () => {
1138
+ const getHeroSliderConfig = useCallback(async () => {
1139
+ if (hasInitial) {
1140
+ return;
1141
+ }
1074
1142
  setLoading(true);
1075
1143
  try {
1076
1144
  const response = await retrieveThemeContent(
@@ -1078,13 +1146,15 @@ var HomeConfigHeroSliderProvider = (props) => {
1078
1146
  "hero_slider"
1079
1147
  );
1080
1148
  setHeroSliderConfigData(response.data);
1149
+ } catch (error) {
1150
+ console.error("Error fetching hero slider content:", error);
1081
1151
  } finally {
1082
1152
  setLoading(false);
1083
1153
  }
1084
- };
1154
+ }, [themeConfig.theme.id, hasInitial]);
1085
1155
  useEffect(() => {
1086
1156
  getHeroSliderConfig();
1087
- }, []);
1157
+ }, [getHeroSliderConfig]);
1088
1158
  const onUpdateHeroSlider = async (configToUpdate) => {
1089
1159
  setLoading(true);
1090
1160
  try {
@@ -1400,13 +1470,24 @@ var HeaderFooterContext = createContext({
1400
1470
  announcementConfig: {}
1401
1471
  });
1402
1472
  var HeaderFooterProvider = (props) => {
1403
- const [headerConfig, setHeaderConfig] = useState({});
1404
- const [footerConfig, setFooterConfig] = useState({});
1405
- const [announcementConfig, setAnnouncementConfig] = useState({});
1473
+ const hasInitial = props.initialThemeContent != null && "data" in props.initialThemeContent;
1474
+ const initialData = hasInitial ? props.initialThemeContent.data ?? {} : {};
1475
+ const [headerConfig, setHeaderConfig] = useState(
1476
+ () => props.page === "header" ? initialData : {}
1477
+ );
1478
+ const [footerConfig, setFooterConfig] = useState(
1479
+ () => props.page === "footer" ? initialData : {}
1480
+ );
1481
+ const [announcementConfig, setAnnouncementConfig] = useState(
1482
+ () => props.page === "announcement" ? initialData : {}
1483
+ );
1406
1484
  const { token } = useThemeEdit();
1407
1485
  const themeConfig = useBusiness();
1408
- const [loading, setLoading] = useState(true);
1486
+ const [loading, setLoading] = useState(!hasInitial);
1409
1487
  const getThemeConfig = useCallback(async () => {
1488
+ if (hasInitial) {
1489
+ return;
1490
+ }
1410
1491
  setLoading(true);
1411
1492
  try {
1412
1493
  const response = await api.retrieveThemeContent(
@@ -1421,7 +1502,7 @@ var HeaderFooterProvider = (props) => {
1421
1502
  } finally {
1422
1503
  setLoading(false);
1423
1504
  }
1424
- }, [themeConfig.theme.id]);
1505
+ }, [themeConfig.theme.id, hasInitial, props.page]);
1425
1506
  const onUpdateThemeContent = useCallback(
1426
1507
  async (configToUpdate) => {
1427
1508
  try {
@@ -1449,7 +1530,7 @@ var HeaderFooterProvider = (props) => {
1449
1530
  setLoading(false);
1450
1531
  }
1451
1532
  },
1452
- [props.page]
1533
+ [props.page, themeConfig.theme.id, token]
1453
1534
  );
1454
1535
  useEffect(() => {
1455
1536
  getThemeConfig();
@@ -1457,7 +1538,13 @@ var HeaderFooterProvider = (props) => {
1457
1538
  return /* @__PURE__ */ jsx(
1458
1539
  HeaderFooterContext.Provider,
1459
1540
  {
1460
- value: { headerConfig, footerConfig, onUpdateThemeContent, loading, announcementConfig },
1541
+ value: {
1542
+ headerConfig,
1543
+ footerConfig,
1544
+ onUpdateThemeContent,
1545
+ loading,
1546
+ announcementConfig
1547
+ },
1461
1548
  children: loading ? null : props.children
1462
1549
  }
1463
1550
  );
@@ -1917,5 +2004,5 @@ var BaseProvider = ({
1917
2004
  };
1918
2005
 
1919
2006
  export { AuthContext, AuthProvider, BaseProvider, BusinessConfigProvider, BusinessMediaContext, BusinessMediaProvider, CartContext, CartProvider, CartWishlistRefreshContext, CartWishlistRefreshProvider, CustomPageConfigContext, CustomPageConfigProvider, CustomerConfigContext, CustomerConfigProvider, FilterContext, FilterProvider, HeaderFooterContext, HeaderFooterProvider, HomeConfigContext, HomeConfigHeroSliderContext, HomeConfigHeroSliderProvider, HomeConfigProvider, LiveSupportWidgetProvider, MenuCartContext, MenuCartProvider, MenuFilterContext, MenuFilterProvider, ModalProvider, ProductConfigContext, ProductConfigProvider, ProductDetailContext, ProductDetailProvider, ReferralCodeProvider, StorageContext, StorageProvider, ThemeEditContext, ThemeEditProvider, ToastSupportProvider, WishlistContext, WishlistProvider, useAuth, useBusiness, useBusinessContext, useBusinessMedia, useCart, useCartWishlistRefresh, useCustomPageConfig, useCustomer, useFilter, useHeaderFooter, useHomeConfig, useHomeConfigHeroSlider, useLiveSupportWidget, useMenuCart, useMenuFilter, useModal, useProductConfig, useProductDetail, useReferralCode, useStorage, useThemeEdit, useToastSupport, useWishlist };
1920
- //# sourceMappingURL=chunk-E66B7ABK.js.map
1921
- //# sourceMappingURL=chunk-E66B7ABK.js.map
2007
+ //# sourceMappingURL=chunk-D24PXFD3.js.map
2008
+ //# sourceMappingURL=chunk-D24PXFD3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/provider/StorageProvider.tsx","../src/provider/AuthProvider.tsx","../src/provider/BusinessMedia.tsx","../src/provider/BusinessProvider.tsx","../src/provider/ToastSupportProvider.tsx","../src/provider/CartWishlistRefreshProvider.tsx","../src/provider/CartProvider.tsx","../src/provider/FilterProvider.tsx","../src/provider/ProductDetailProvider.tsx","../src/provider/ProductConfig.tsx","../src/provider/CustomerConfigProvider.tsx","../src/provider/ThemeEditProvider.tsx","../src/provider/HomeConfigProvider.tsx","../src/provider/HomeConfigHeroSliderProvider.tsx","../src/provider/CustomPageConfigProvider.tsx","../src/provider/WishlistProvider.tsx","../src/provider/AuthModalProvider.tsx","../src/provider/HeaderFooterProvider.tsx","../src/provider/MenuFilterProvider.tsx","../src/provider/MenuCartProvider.tsx","../src/provider/ReferralCodeProvider.tsx","../src/provider/LiveSupportWidgetProvider.tsx","../src/provider/BaseProvider.tsx"],"names":["createContext","useState","useEffect","jsx","useContext","WAApi","rewardPoint","api","errorMessage","productDetail","_","useCallback","retrieveThemeContent","updateThemeContent","useRef"],"mappings":"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","file":"chunk-D24PXFD3.js","sourcesContent":["import React, { createContext, useState, useEffect, useContext } from 'react';\n\nexport const StorageContext = createContext<{\n setItem: (key: string, data: any, type: any) => null;\n getItem: (key: string, type?: any) => null;\n clearAll: () => null;\n removeItem: (key: string, type?: any) => null;\n}>({\n setItem: (key: string, data: any, type: any) => null,\n getItem: (key: string) => null,\n clearAll: () => null,\n removeItem: (key: string) => null,\n});\n\ntype Props = {\n storage: any;\n};\n\nexport const StorageProvider = (props: React.PropsWithChildren<Props>) => {\n const [loading, setLoading] = useState(false);\n\n return (\n <StorageContext.Provider\n value={{\n setItem: props.storage.setItem,\n getItem: props.storage.getItem,\n clearAll: props.storage.clearAll,\n removeItem: props.storage.removeItem,\n }}\n >\n {loading ? null : props.children}\n </StorageContext.Provider>\n );\n};\n\nexport const useStorage = () => useContext(StorageContext);\n","import React, { createContext, useContext, useEffect, useState } from \"react\";\nimport { WAApi } from \"@growupsell/api\";\nimport { useStorage } from \"./StorageProvider\";\nimport { createCustomerSession } from \"@growupsell/api/api\";\n\nexport const AuthContext = createContext<{\n signIn: (data: any, rememberMe: boolean) => void;\n signOut: () => void;\n user: any;\n setUser: (o: any) => void;\n customerSession: any;\n loadingToken: any;\n loadingUser: any;\n token: any;\n userDataStoredLocation: \"local\" | \"session\" | null;\n}>({\n signIn: () => null,\n signOut: () => null,\n user: null,\n setUser: (o: any) => null,\n customerSession: null,\n loadingToken: null,\n loadingUser: null,\n token: null,\n userDataStoredLocation: null,\n});\n\nexport const AuthProvider = (props: React.PropsWithChildren) => {\n const [user, setUser] = useState<any>(null);\n const [loading, setLoading] = useState(true);\n const [customerSession, setCustomerSession] = useState();\n const [loadingUser, setLoadingUser] = useState(true);\n const [loadingToken, setLoadingToken] = useState(false);\n const storage = useStorage();\n const [token, setToken] = useState();\n const [userDataStoredLocation, setUserDataStoredLocation] = useState<\n \"local\" | \"session\" | null\n >(null);\n\n const signIn = (data: any, rememberMe?: any) => {\n if (data.is_active) {\n WAApi.defaults.headers.common[\"x-customer-token\"] = `${data.token}`;\n }\n // TODO: need to think for if user is not active then active first\n const type = rememberMe ? \"local\" : \"session\";\n storage.setItem(\"user\", JSON.stringify(data), type);\n setUser(data);\n setUserDataStoredLocation(type);\n };\n\n const signOut = () => {\n setUser(null);\n setUserDataStoredLocation(null);\n storage.clearAll();\n delete WAApi.defaults.headers.common[\"x-customer-token\"];\n };\n\n let sessionCreationInProgress = false;\n const initializedCustomerSession = async () => {\n setLoading(true);\n if (sessionCreationInProgress) {\n return;\n }\n sessionCreationInProgress = true;\n let savedSession: any = storage.getItem(\"session\", \"session\")\n ? JSON.parse(storage.getItem(\"session\", \"session\")!)\n : null;\n if (savedSession) {\n setCustomerSession(savedSession);\n WAApi.defaults.headers.common[\"x-session-token\"] =\n savedSession?.session_token;\n } else {\n try {\n let body = {\n customer: user?.id,\n };\n const response = await createCustomerSession(body);\n setCustomerSession(response);\n WAApi.defaults.headers.common[\"x-session-token\"] =\n response?.session_token;\n storage.setItem(\"session\", JSON.stringify(response), \"session\");\n } catch (error) {\n console.log(\"Error--->\", error);\n }\n }\n\n setLoading(false);\n sessionCreationInProgress = false;\n };\n\n useEffect(() => {\n !loadingUser && initializedCustomerSession();\n }, [loadingUser]);\n\n useEffect(() => {\n setLoadingUser(true);\n let local_user = storage.getItem(\"user\", \"local\");\n let session_user = storage.getItem(\"user\", \"session\");\n\n if (local_user) {\n let customer = JSON.parse(local_user);\n WAApi.defaults.headers.common[\"x-customer-token\"] = customer.token;\n setUser(customer);\n setUserDataStoredLocation(\"local\");\n } else if (session_user) {\n let session_customer = JSON.parse(session_user);\n WAApi.defaults.headers.common[\"x-customer-token\"] =\n session_customer.token;\n setUser(session_customer);\n setUserDataStoredLocation(\"session\");\n }\n\n setLoadingUser(false);\n }, []);\n\n useEffect(() => {\n if (user) {\n setLoadingToken(true);\n try {\n if (user?.token) {\n WAApi.defaults.headers.common[\"x-customer-token\"] = user.token;\n setToken(user.token);\n }\n } catch (error) {\n console.log(\"User not available\");\n } finally {\n setLoadingToken(false);\n }\n }\n }, [user]);\n\n // if (loadingUser || loadingToken) {\n // return <div>Loading...</div>;\n // }\n\n return (\n <AuthContext.Provider\n value={{\n signIn,\n signOut,\n user,\n setUser,\n customerSession,\n loadingToken,\n loadingUser,\n token,\n userDataStoredLocation,\n }}\n >\n {loading ? null : props.children}\n {/* {props.children} */}\n </AuthContext.Provider>\n );\n};\n\nexport const useAuth = () => useContext(AuthContext);\n","import { api } from '@growupsell/api';\nimport React, { createContext, useContext, useEffect, useState } from 'react';\n\nexport const BusinessMediaContext = createContext({});\n\nexport const BusinessMediaProvider = (props: React.PropsWithChildren) => {\n const [businessMedia, setBusinessMeadia] = useState({});\n\n const fetchBusinessMedia = async () => {\n const response = await api.getBusinessMedia();\n setBusinessMeadia({ ...response });\n };\n\n const updateBusinessMedia = (data: object) => {\n setBusinessMeadia({ ...data });\n };\n\n useEffect(() => {\n fetchBusinessMedia();\n }, []);\n\n return (\n <BusinessMediaContext.Provider value={{ businessMedia, updateBusinessMedia }}>\n {props.children}\n </BusinessMediaContext.Provider>\n );\n};\n\nexport const useBusinessMedia = () => useContext(BusinessMediaContext);","import React, { useContext, useState } from 'react';\nimport { useEffect } from 'react';\nimport { WAApi } from '@growupsell/api';\nimport {\n getBusinessSetting,\n getOrderBusinessConfig,\n getRewardPointBusinessConfig,\n} from '@growupsell/api/api';\nimport { useAuth } from './AuthProvider';\nimport { BusinessConfigContext } from './BusinessConfigContext';\n\nexport { BusinessConfigContext };\n\nexport const BusinessConfigProvider = ({\n children,\n data,\n baseURL,\n}: {\n data: any;\n children: React.ReactNode;\n baseURL: string;\n}) => {\n WAApi.defaults.headers.common['business'] = data?.id;\n WAApi.defaults.baseURL = baseURL;\n\n const [loading, setLoading] = useState(true);\n const { user } = useAuth();\n const [currency, setCurrency] = useState<any>({});\n const [rewardPoint, setRewardPoint] = useState<any>({});\n const [orderConfig, setOrderConfig] = useState<any>({});\n const [domain, setDomain] = useState('');\n\n const fetchData = async () => {\n try {\n const [business_setting, rewardPoint, order_business_config] =\n await Promise.all([\n getBusinessSetting(),\n getRewardPointBusinessConfig(),\n getOrderBusinessConfig(),\n ]);\n setCurrency(business_setting.currency);\n setDomain(business_setting.domain);\n setRewardPoint(rewardPoint);\n setOrderConfig(order_business_config);\n } catch (error) {\n console.log('error in fetching data-->', error);\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n fetchData();\n }, []);\n\n return (\n <BusinessConfigContext.Provider\n value={{\n ...data,\n currency: currency,\n reward_point_config: rewardPoint,\n domain,\n orderConfig,\n }}\n >\n {loading ? null : children}\n </BusinessConfigContext.Provider>\n );\n};\n\nexport const useBusinessContext = () => useContext(BusinessConfigContext);\nexport const useBusiness = () => useContext(BusinessConfigContext);\n","import React, {\n createContext,\n useContext,\n useMemo,\n type PropsWithChildren,\n} from 'react';\n\n/** Options bag for platform-specific toast implementations (e.g. react-toastify). */\nexport type ToastSupportOptions = Record<string, unknown>;\n\n/**\n * Pluggable toast API. Web passes the host app’s `toast` implementation (e.g. react-toastify wrapper);\n * React Native can pass a native implementation. Defaults are no-ops.\n */\nexport type ToastSupportApi = {\n success: (message: string, options?: ToastSupportOptions) => void;\n error: (message: string, options?: ToastSupportOptions) => void;\n info: (message: string, options?: ToastSupportOptions) => void;\n warning: (message: string, options?: ToastSupportOptions) => void;\n default: (message: string, options?: ToastSupportOptions) => void;\n};\n\nfunction createNoopToastSupport(): ToastSupportApi {\n const noop = () => {};\n return {\n success: noop,\n error: noop,\n info: noop,\n warning: noop,\n default: noop,\n };\n}\n\nconst ToastSupportContext = createContext<ToastSupportApi>(createNoopToastSupport());\n\ntype ToastSupportProviderProps = PropsWithChildren<{\n /** When omitted, all toast calls from core providers are no-ops (e.g. RN until wired). */\n value?: ToastSupportApi;\n}>;\n\nexport function ToastSupportProvider({ children, value }: ToastSupportProviderProps) {\n const api = useMemo(() => {\n if (!value) return createNoopToastSupport();\n return { ...createNoopToastSupport(), ...value };\n }, [value]);\n\n return (\n <ToastSupportContext.Provider value={api}>{children}</ToastSupportContext.Provider>\n );\n}\n\nexport function useToastSupport(): ToastSupportApi {\n return useContext(ToastSupportContext);\n}\n","import React, { createContext, useContext, useState } from 'react'\n\nexport const CartWishlistRefreshContext = createContext<{\n refreshType: 'cart' | 'wishlist' | null;\n setRefreshType: any;\n}>({\n refreshType: null,\n setRefreshType: () => null,\n})\n\nexport const CartWishlistRefreshProvider = (props: React.PropsWithChildren) => {\n const [refreshType, setRefreshType] = useState(null);\n\n return (\n <CartWishlistRefreshContext.Provider value={{ refreshType, setRefreshType }}>\n {props.children}\n </CartWishlistRefreshContext.Provider>\n )\n}\n\nexport const useCartWishlistRefresh = () => useContext(CartWishlistRefreshContext);","import React, { createContext, useState, useEffect, useContext } from 'react';\nimport _ from 'lodash';\nimport { api } from '@growupsell/api';\nimport { useAuth } from './AuthProvider';\nimport { useToastSupport } from './ToastSupportProvider';\nimport { useStorage } from './StorageProvider';\nimport { useCartWishlistRefresh } from './CartWishlistRefreshProvider';\n\nconst isArrayEqual = (a: any, b: any) => _.isEmpty(_.xorWith(a, b, _.isEqual));\n\ntype ORDER_TYPES = 'delivery' | 'cod';\n\nexport const CartContext = createContext<{\n cartItems: any[];\n addToCart: (\n sku: any,\n quantity: number,\n customData?: Record<string, unknown>,\n ) => Promise<boolean>;\n addToCartLoading: boolean;\n addToCartError: string | null;\n clearCart: () => void;\n onChangeAddress: (addressId: number, addressType: string) => void;\n onChangeTax: (tax_number: string, legal_name: string) => void;\n onChangeOffer: (offers: number | null) => void;\n onChangeOrderType: (type: ORDER_TYPES) => void;\n session: any;\n setSession: (session: any) => void;\n removeAppliedOffer: () => void;\n moveToWishlist: (sku: any) => void;\n moveToWishlistLoading: boolean;\n orderFetchLoading: boolean;\n onChangePromoCode: (promoCode: string | null) => void;\n onChangeGiftCard: (pin: number, code: string) => void;\n errorMessage?: string | null;\n}>({\n cartItems: [],\n addToCart: async () => false,\n addToCartLoading: false,\n addToCartError: null,\n clearCart: () => null,\n onChangeAddress: () => null,\n onChangeTax: () => null,\n onChangeOffer: () => null,\n onChangeOrderType: () => null,\n session: {},\n setSession: () => null,\n removeAppliedOffer: () => null,\n moveToWishlist: () => null,\n moveToWishlistLoading: false,\n orderFetchLoading: true,\n onChangePromoCode: () => null,\n onChangeGiftCard: () => null,\n errorMessage: null,\n});\n\nexport const CartProvider = (props: React.PropsWithChildren) => {\n const toast = useToastSupport();\n const [cartItems, setCartItems] = useState<any>([]);\n const [orderFetchLoading, setOrderFetchLoading] = useState(true);\n const [addToCartLoading, setAddToCartLoading] = useState(false);\n const [addToCartError, setAddToCartError] = useState<string | null>(null);\n const [moveToWishlistLoading, setMoveToWishlistLoading] = useState(false);\n const [session, setSession] = useState<any>(null);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n\n const { user } = useAuth();\n const storage = useStorage();\n const { refreshType, setRefreshType } = useCartWishlistRefresh();\n\n useEffect(() => {\n if (refreshType == 'cart') {\n fetchOrderDetail();\n setRefreshType(null);\n }\n }, [refreshType]);\n\n const onChangeAddress = async (addressId: number, addressType: string) => {\n let body = {};\n if (addressType === 'shipping') {\n body = {\n shipping_address: addressId,\n };\n } else if (addressType === 'billing') {\n body = {\n billing_address: addressId,\n };\n } else {\n body = {\n shipping_address: addressId,\n billing_address: addressId,\n };\n }\n try {\n if (!orderFetchLoading && session && user) {\n const response = await api.updateAddressCartOrder(body);\n setSession({\n ...session,\n shipping_address: response.shipping_address,\n billing_address: response.billing_address,\n });\n }\n } catch (error) {\n console.log('Error---->', error);\n }\n };\n\n const onChangePromoCode = async (promoCodeID: string | null) => {\n let body = {\n promo: promoCodeID,\n };\n try {\n if (!orderFetchLoading && session && user) {\n const response = await api.updateCartPromoCode(body);\n setSession({\n ...session,\n promo: response.promo,\n promo_redeem_amount: Number(response.promo_redeem_amount),\n final_payable_amount: Number(response.final_payable_amount),\n });\n if (promoCodeID) {\n toast.success('Promo code applied successfully');\n } else {\n toast.info('Promo code removed');\n }\n }\n } catch (error: any) {\n setErrorMessage(error?.response?.message);\n console.log('Error---->', error);\n const errorMsg = error?.response?.message || 'Failed to apply promo code';\n toast.error(errorMsg);\n }\n };\n\n const onChangeGiftCard = async (pin: number, code: string) => {\n let body = {\n pin,\n code,\n };\n try {\n if (!orderFetchLoading && session && user) {\n const response = await api.updateCartGiftCard(body);\n setSession({\n ...session,\n giftcard: response.giftcard,\n giftcard_redeem_amount: Number(response.giftcard_redeem_amount),\n final_payable_amount: Number(response.final_payable_amount),\n });\n setErrorMessage(null);\n fetchOrderDetail();\n }\n } catch (error: any) {\n setErrorMessage(error?.response?.message);\n console.log('Error---->', error);\n }\n };\n\n const onChangeOffer = async (offers: number | null) => {\n let body = {\n offer: offers,\n };\n try {\n if (!orderFetchLoading && session && user) {\n const response = await api.updateOfferCartOrder(body);\n const orderData = await api.getOrderCartDetail();\n setSession({\n ...session,\n offers: response.offers,\n final_payable_amount: Number(orderData.final_payable_amount),\n offer_redeem_amount: Number(orderData.offer_redeem_amount),\n });\n if (offers) {\n toast.success('Offer applied successfully');\n } else {\n toast.info('Offer removed');\n }\n fetchOrderDetail();\n }\n } catch (error) {\n console.log('Error---->', error);\n toast.error('Failed to apply offer');\n }\n };\n\n const onChangeOrderType = async (type: ORDER_TYPES) => {\n const prevType = session?.type;\n // Update UI immediately so checkbox reflects selection without waiting for API.\n setSession((prev: any) => ({\n ...prev,\n type,\n }));\n\n let body = { type };\n try {\n const response = await api.updateCartOrderType(body);\n setSession((prev: any) => ({\n ...prev,\n type: response?.type ?? type,\n }));\n } catch (error) {\n console.log('Error---->', error);\n // Roll back if API fails so local state stays consistent with backend.\n setSession((prev: any) => ({\n ...prev,\n type: prevType,\n }));\n toast.error('Something went wrong! Please try again.');\n }\n };\n\n const onChangeTax = async (legal_name: string, tax_number: string) => {\n let body = {\n tax_number,\n legal_name,\n };\n try {\n if (!orderFetchLoading && session && user) {\n const response = await api.updateTaxCartOrder(body);\n setSession({\n ...session,\n tax: response,\n });\n }\n } catch (error) {\n console.log('Error---->', error);\n }\n };\n\n useEffect(() => {\n session && storage.setItem('cart', JSON.stringify(session), 'local');\n }, [session]);\n\n const fetchOrderDetail = async () => {\n setOrderFetchLoading(true);\n const response = await api.getOrderCartDetail();\n setSession({\n ...session,\n ...response,\n });\n setCartItems(response.products);\n setOrderFetchLoading(false);\n };\n\n useEffect(() => {\n fetchOrderDetail();\n }, [user]);\n\n const removeAppliedOffer = async () => {\n setSession({\n ...session,\n offers: null,\n offer_redeem_amount: 0,\n });\n toast.info('Offer removed');\n };\n\n const addToCart = async (\n sku: any,\n quantity: number,\n customData?: Record<string, unknown>,\n ): Promise<boolean> => {\n setAddToCartLoading(true);\n setAddToCartError(null);\n setOrderFetchLoading(true);\n const hasCustomData =\n customData != null && Object.keys(customData).length > 0;\n let isItemInCart = hasCustomData\n ? null\n : cartItems?.find((item: any) => item.sku.id == sku);\n try {\n if (quantity === 0) {\n if (isItemInCart) {\n await api.deleteCartItem(isItemInCart.id);\n console.log('Item removed from cart');\n setCartItems(\n cartItems?.filter(\n (cartItem: any) => cartItem.id !== isItemInCart.id,\n ),\n );\n await fetchOrderDetail();\n }\n return true;\n }\n if (isItemInCart) {\n await api.updateCartItem(isItemInCart.id, {\n sku: isItemInCart.sku.id,\n qty: isItemInCart.qty + quantity,\n });\n await fetchOrderDetail();\n console.log('Cart item updated successfully');\n } else {\n let body: { qty: number; sku: any; custom_data?: Record<string, unknown> } = {\n qty: quantity,\n sku: sku,\n };\n if (hasCustomData) {\n body.custom_data = customData;\n }\n await api.addProductToCart(body);\n console.log('New item added to cart.');\n toast.success('Item added to cart');\n await fetchOrderDetail();\n }\n return true;\n } catch (error: any) {\n setOrderFetchLoading(false);\n console.log('Error---->', error);\n const message =\n error?.response?.message ||\n error?.response?.data?.message ||\n error?.message ||\n 'Unable to add to cart. Please try again.';\n setAddToCartError(message);\n toast.error(message);\n return false;\n } finally {\n setAddToCartLoading(false);\n }\n };\n\n const clearCart = () => {\n setCartItems([]);\n setSession(null);\n storage.removeItem('cart');\n fetchOrderDetail();\n };\n\n const moveToWishlist = async (id: number) => {\n let isItemInCart = cartItems?.find((item: any) => item.id === id);\n\n if (!isItemInCart) {\n console.log('Item not found in cart.');\n toast.warning('Item not found in cart');\n return;\n }\n\n try {\n setMoveToWishlistLoading(true);\n // First, try to add to wishlist\n let body = { sku: isItemInCart.sku.id };\n await api.addProductToWishlist(body);\n\n // Only if successfully added to wishlist, then remove from cart\n await api.deleteCartItem(isItemInCart.id);\n\n setCartItems((prevCartItems: any[]) =>\n prevCartItems.filter((cartItem) => cartItem.id !== isItemInCart.id),\n );\n\n toast.success('Item moved to wishlist');\n setRefreshType('wishlist');\n } catch (error: any) {\n console.error('Error moving item to wishlist:', error);\n const errorMessage =\n error?.response?.data?.message ||\n error?.response?.message ||\n 'Something went wrong! Please try again.';\n toast.error(errorMessage);\n } finally {\n setMoveToWishlistLoading(false);\n }\n };\n\n return (\n <CartContext.Provider\n value={{\n cartItems,\n addToCart,\n addToCartLoading,\n addToCartError,\n clearCart,\n onChangeAddress,\n onChangeTax,\n onChangeOffer,\n onChangeOrderType,\n session,\n setSession,\n removeAppliedOffer,\n moveToWishlist,\n moveToWishlistLoading,\n orderFetchLoading,\n onChangePromoCode,\n onChangeGiftCard,\n errorMessage,\n }}\n >\n {props.children}\n </CartContext.Provider>\n );\n};\n\nexport const useCart = () => useContext(CartContext);\n","import React, { createContext, useContext, useState, useEffect } from 'react';\nimport { api } from '@growupsell/api';\n\nexport const FilterContext = createContext<{\n selectedCategoryId: number[];\n addCategoryFilterId: (id: number) => void;\n removeCategoryFilterId: (id: number) => void;\n menuList: any[];\n productLoading: boolean;\n currentPage: number;\n handlePageChange: (page: number) => void;\n setMenuList: (x: any) => void;\n filterConfig: any;\n setSelectedSortOption: (x: string) => void;\n seletedRattingNumber: number | undefined | string;\n setSelectedRattingNumber: (x: any) => void;\n selectedDiscountOff: number | undefined;\n setSelectedDiscountOff: (x: any) => void;\n selectedMinPrice: number;\n selectedMaxPrice: number;\n setSelectedMinPrice: (x: any) => void;\n setSelectedMaxPrice: (x: any) => void;\n brandList: any[];\n selectedBrandId: any[];\n updateBrandIds: (x: any) => void;\n brandLoading: boolean;\n variantList: any[];\n selectedVariants: any[];\n updateSelectedVariants: (x: any) => void;\n variantLoading: boolean;\n selectedSpecifications: { id: number; values: string[] }[];\n updateSpecificationOption: (keyId: number, option: string) => void;\n setSelectedSpecifications: (\n value: { id: number; values: string[] }[],\n ) => void;\n total: number;\n limit: number;\n offset: number;\n}>({\n selectedCategoryId: [],\n addCategoryFilterId: () => null,\n removeCategoryFilterId: () => null,\n menuList: [],\n productLoading: true,\n currentPage: 1,\n handlePageChange: () => null,\n setMenuList: () => null,\n filterConfig: null,\n setSelectedSortOption: () => null,\n seletedRattingNumber: 0,\n setSelectedRattingNumber: () => null,\n selectedDiscountOff: 0,\n setSelectedDiscountOff: () => null,\n selectedMinPrice: 0,\n selectedMaxPrice: 0,\n setSelectedMinPrice: () => null,\n setSelectedMaxPrice: () => null,\n brandList: [],\n selectedBrandId: [],\n updateBrandIds: () => null,\n brandLoading: false,\n variantList: [],\n selectedVariants: [],\n updateSelectedVariants: () => null,\n variantLoading: false,\n selectedSpecifications: [],\n updateSpecificationOption: () => null,\n setSelectedSpecifications: () => null,\n total: 0,\n limit: 10,\n offset: 0,\n});\n\nexport const FilterProvider = (props: React.PropsWithChildren) => {\n const [filterConfig, setFilterConfig] = useState<any>();\n const [selectedCategoryId, setSelectedCategoryId] = useState<number[]>([]);\n const [selectedSortOption, setSelectedSortOption] =\n useState<string>('newest_first');\n const [seletedRattingNumber, setSelectedRattingNumber] = useState<any>();\n const [selectedDiscountOff, setSelectedDiscountOff] = useState();\n const [selectedMinPrice, setSelectedMinPrice] = useState(\n filterConfig?.price?.min,\n );\n const [selectedMaxPrice, setSelectedMaxPrice] = useState(\n filterConfig?.price?.max,\n );\n const [menuList, setMenuList] = useState([]);\n const [productLoading, setProductLoading] = useState(true);\n const [currentPage, setCurrentPage] = useState(1);\n const [filterConfigLoading, setFilterConfigLoading] = useState(false);\n const [brandList, setBrandList] = useState([]);\n const [selectedBrandId, setSelectedBrandId] = useState([]);\n const [brandLoading, setBrandLoading] = useState(false);\n const [variantList, setVariantList] = useState([]);\n const [selectedVariants, setSelectedVariants] = useState([]);\n const [variantLoading, setVariantLoading] = useState(false);\n const [selectedSpecifications, setSelectedSpecifications] = useState<\n { id: number; values: string[] }[]\n >([]);\n const [limit, setLimit] = useState<number>(10);\n const [offset, setOffset] = useState<number>(0);\n const [total, setTotal] = useState(0);\n\n const fetchBrandList = async () => {\n setBrandLoading(true);\n let body = {\n category_ids: selectedCategoryId,\n };\n try {\n const brands = await api.getBrandList(body);\n setBrandList(brands);\n } catch (error) {\n console.log(error);\n } finally {\n setBrandLoading(false);\n }\n };\n\n const addCategoryFilterId = (id: number) => {\n setSelectedCategoryId((prevIds) => {\n if (prevIds.includes(id)) {\n return prevIds;\n }\n return [...prevIds, id];\n });\n setCurrentPage(1);\n };\n\n const categoryFilterKey =\n selectedCategoryId.length === 1 ? selectedCategoryId[0] : undefined;\n\n useEffect(() => {\n let active = true;\n (async () => {\n if (!filterConfig) {\n setFilterConfigLoading(true);\n }\n try {\n const response = await api.getProductFilterConfig(categoryFilterKey);\n if (active) {\n setFilterConfig(response);\n }\n } catch (error) {\n console.log(error);\n } finally {\n if (active) {\n setFilterConfigLoading(false);\n }\n }\n })();\n return () => {\n active = false;\n };\n }, [categoryFilterKey]);\n\n const removeCategoryFilterId = (id: number) => {\n setSelectedCategoryId((x) => {\n return x.filter((o) => o !== id);\n });\n setCurrentPage(1);\n };\n\n const fetchProductList = async () => {\n setProductLoading(true);\n let body = {\n category_id: selectedCategoryId,\n sort_by: selectedSortOption,\n min_rating: seletedRattingNumber,\n min_discount: selectedDiscountOff,\n min_price: selectedMinPrice,\n max_price: selectedMaxPrice,\n brand_ids: selectedCategoryId.length > 0 ? selectedBrandId : null,\n variants: selectedCategoryId.length > 0 ? selectedVariants : null,\n specifications: selectedSpecifications,\n limit: limit,\n offset: offset,\n };\n try {\n const productSearch = await api.getProductSearch(body);\n setTotal(productSearch.count);\n setMenuList(productSearch.results);\n } catch (error) {\n console.log(error);\n } finally {\n setProductLoading(false);\n }\n };\n\n const updateBrandIds = (id: number) => {\n setSelectedBrandId((prevIds: any) => {\n if (prevIds.includes(id)) {\n return prevIds.filter((x: any) => x !== id);\n }\n return [...prevIds, id];\n });\n };\n\n const updateSpecificationOption = (keyId: number, option: string) => {\n setSelectedSpecifications((prev) => {\n const current = prev.find((item) => item.id === keyId);\n if (!current) {\n return [...prev, { id: keyId, values: [option] }];\n }\n const values = current.values.includes(option)\n ? current.values.filter((value) => value !== option)\n : [...current.values, option];\n if (values.length === 0) {\n return prev.filter((item) => item.id !== keyId);\n }\n return prev.map((item) =>\n item.id === keyId ? { ...item, values } : item,\n );\n });\n };\n\n const updateSelectedVariants = (label: string) => {\n setSelectedVariants((prevVariants: any) => {\n if (prevVariants.includes(label)) {\n return prevVariants.filter((x: any) => x !== label);\n }\n return [...prevVariants, label];\n });\n };\n\n const fetchVariantList = async () => {\n setVariantLoading(true);\n let body = {\n category_ids: selectedCategoryId,\n };\n const response = await api.getProductVariantByCategory(body);\n setVariantList(response);\n setVariantLoading(false);\n };\n\n useEffect(() => {\n if (!filterConfigLoading) {\n fetchProductList();\n }\n }, [\n selectedCategoryId,\n currentPage,\n selectedSortOption,\n seletedRattingNumber,\n selectedDiscountOff,\n selectedMinPrice,\n selectedMaxPrice,\n selectedBrandId,\n selectedVariants,\n selectedSpecifications,\n limit,\n offset,\n ]);\n\n useEffect(() => {\n const keys = filterConfig?.specifications ?? [];\n const allowed = new Map<number, Set<string>>(\n keys.map((key: { id: number; options?: string[] }) => [\n key.id,\n new Set(key.options ?? []),\n ]),\n );\n setSelectedSpecifications((prev) => {\n const next = prev\n .map((item) => ({\n ...item,\n values: item.values.filter((value) => allowed.get(item.id)?.has(value)),\n }))\n .filter((item) => item.values.length > 0 && allowed.has(item.id));\n if (\n next.length === prev.length &&\n next.every(\n (item, index) =>\n item.id === prev[index].id &&\n item.values.length === prev[index].values.length &&\n item.values.every((value, valueIndex) => value === prev[index].values[valueIndex]),\n )\n ) {\n return prev;\n }\n return next;\n });\n }, [filterConfig]);\n\n const handlePageChange = (newOffset: number) => {\n setOffset(newOffset);\n };\n\n useEffect(() => {\n if (selectedCategoryId.length > 0) {\n fetchBrandList();\n fetchVariantList();\n }\n }, [selectedCategoryId]);\n\n return (\n <FilterContext.Provider\n value={{\n selectedCategoryId,\n setMenuList,\n addCategoryFilterId,\n removeCategoryFilterId,\n menuList,\n productLoading,\n currentPage,\n handlePageChange,\n filterConfig,\n setSelectedSortOption,\n seletedRattingNumber,\n setSelectedRattingNumber,\n selectedDiscountOff,\n setSelectedDiscountOff,\n selectedMinPrice,\n selectedMaxPrice,\n setSelectedMinPrice,\n setSelectedMaxPrice,\n brandList,\n selectedBrandId,\n updateBrandIds,\n brandLoading,\n variantList,\n selectedVariants,\n updateSelectedVariants,\n variantLoading,\n selectedSpecifications,\n updateSpecificationOption,\n setSelectedSpecifications,\n total,\n limit,\n offset,\n }}\n >\n {!filterConfigLoading && props.children}\n </FilterContext.Provider>\n );\n};\n\nexport const useFilter = () => useContext(FilterContext);\n","import { api } from '@growupsell/api';\nimport React, { useState, createContext, useEffect, useContext } from 'react';\n\nexport const ProductDetailContext = createContext<{\n selectedVariants: any[];\n selectUnselectVariants: (type: string, value: string, id: number) => void;\n productDetail: any;\n waitProductLoading: boolean;\n setSelectedVariants: (x: any) => void;\n}>({\n selectedVariants: [],\n selectUnselectVariants: () => null,\n productDetail: [],\n waitProductLoading: true,\n setSelectedVariants: () => null,\n});\n\ntype Props = {\n productId: any;\n selected_variants: any;\n /** Server-fetched product detail for SSR / first paint (crawlers + LCP). */\n initialProductDetail?: any;\n};\n\nfunction resolveSelectedVariants(\n productDetail: any,\n selected_variants: any,\n): any[] {\n if (!productDetail?.variant) return [];\n\n if (selected_variants !== null && selected_variants !== undefined) {\n const selectedIds = String(selected_variants)\n .split(',')\n .map(Number)\n .filter((id) => Number.isFinite(id));\n\n return (\n productDetail.variant\n ?.map((vType: any) => {\n const matchedVariant = vType.variants.find((variant: any) =>\n selectedIds.includes(variant.id),\n );\n if (matchedVariant) {\n return {\n id: matchedVariant.id,\n type: vType.variant_type.type,\n value: matchedVariant.label,\n };\n }\n return null;\n })\n .filter(Boolean) || []\n );\n }\n\n return (\n productDetail.variant?.map((vType: any) => ({\n id: vType.variants[0].id,\n type: vType.variant_type.type,\n value: vType.variants[0].label,\n })) || []\n );\n}\n\nexport const ProductDetailProvider = (\n props: React.PropsWithChildren<Props>,\n) => {\n const hasInitial = Boolean(props.initialProductDetail);\n const [selectedVariants, setSelectedVariants] = useState<any>(() =>\n hasInitial\n ? resolveSelectedVariants(\n props.initialProductDetail,\n props.selected_variants,\n )\n : [],\n );\n const [productDetail, setProductDetail] = useState<any>(\n props.initialProductDetail ?? null,\n );\n const [waitProductLoading, setWaitProductLoading] = useState(!hasInitial);\n\n const selectUnselectVariants = (type: string, value: string, id: number) => {\n // Set loading to true when function is called\n setWaitProductLoading(true);\n\n setSelectedVariants((prev: any) => {\n const existingIndex = prev.findIndex((item: any) => item.type === type);\n\n if (existingIndex > -1) {\n const updatedVariants = [...prev];\n updatedVariants[existingIndex] = { type, value, id };\n return updatedVariants;\n } else {\n const newVariants = [...prev, { type, value, id }];\n return newVariants;\n }\n });\n\n setTimeout(() => {\n setWaitProductLoading(false);\n }, 1000); // 1 seconds delay\n };\n\n useEffect(() => {\n (async () => {\n // Keep SSR content visible; only show spinner when we have no initial data.\n if (!hasInitial) {\n setWaitProductLoading(true);\n }\n try {\n const productDetail = await api.getProductDetail(props.productId);\n setProductDetail(productDetail);\n setSelectedVariants(\n resolveSelectedVariants(productDetail, props.selected_variants),\n );\n } catch (error) {\n console.error('Error loading product details:', error);\n } finally {\n setWaitProductLoading(false);\n }\n })();\n }, [props.productId]);\n\n return (\n <ProductDetailContext.Provider\n value={{\n selectedVariants,\n setSelectedVariants,\n selectUnselectVariants,\n productDetail,\n waitProductLoading,\n }}\n >\n {props.children}\n </ProductDetailContext.Provider>\n );\n};\n\nexport const useProductDetail = () => useContext(ProductDetailContext);\n","import { api } from '@growupsell/api';\nimport React, { createContext, useContext, useEffect, useState } from 'react';\n\nexport const ProductConfigContext = createContext({});\n\nexport const ProductConfigProvider = (props: React.PropsWithChildren) => {\n const [productConfig, setProductConfig] = useState({});\n\n const fetchProductConfig = async () => {\n const response = await api.getProductConfig();\n setProductConfig({ ...response });\n };\n\n const updateProductConfig = (data: object) => {\n setProductConfig({ ...data });\n };\n\n useEffect(() => {\n fetchProductConfig();\n }, []);\n\n return (\n <ProductConfigContext.Provider\n value={{ productConfig, updateProductConfig }}\n >\n {props.children}\n </ProductConfigContext.Provider>\n );\n};\n\nexport const useProductConfig = () => useContext(ProductConfigContext);\n","import React, { createContext, useContext, useEffect, useState } from 'react';\nimport { api } from '@growupsell/api';\n\nexport const CustomerConfigContext = createContext<{\n customerConfig: any;\n}>({ customerConfig: null });\n\nexport const CustomerConfigProvider = (props: React.PropsWithChildren) => {\n const [customerConfig, setCustomerConfig] = useState();\n const [loading, setLoading] = useState<boolean>(false);\n\n const fetchCustomerConfig = async () => {\n setLoading(true);\n try {\n const response = await api.getCustomerBusinessConfig();\n setCustomerConfig(response);\n } catch (error) {\n console.log('Error in fetching customer config---->', error);\n }\n setLoading(false);\n };\n\n useEffect(() => {\n fetchCustomerConfig();\n }, []);\n\n return (\n <CustomerConfigContext.Provider value={{ customerConfig }}>\n {loading ? null : props.children}\n </CustomerConfigContext.Provider>\n );\n};\n\nexport const useCustomer = () => useContext(CustomerConfigContext);\n","import React, { createContext, useContext, useState } from 'react';\n\nexport const ThemeEditContext = createContext<{\n token: string;\n isThemeEdit: boolean;\n isHeader: boolean;\n isFooter: boolean;\n isAnnouncementBar: boolean;\n}>({\n token: '',\n isThemeEdit: false,\n isHeader: false,\n isFooter: false,\n isAnnouncementBar: false,\n});\n\nexport const ThemeEditProvider = (props: {\n isThemeEdit: boolean;\n token: string;\n isHeader: boolean;\n isFooter: boolean;\n isAnnouncementBar: boolean;\n children: React.ReactNode;\n}) => {\n const [isThemeEdit, setIsThemeEdit] = useState(props.isThemeEdit);\n const [token, setToken] = useState(props.token);\n const [isHeader, setIsHeader] = useState(props.isHeader);\n const [isFooter, setIsFooter] = useState(props.isFooter);\n const [isAnnouncementBar, setIsAnnouncementBar] = useState(props.isAnnouncementBar);\n\n return (\n <ThemeEditContext.Provider\n value={{ token, isThemeEdit, isHeader, isFooter, isAnnouncementBar}}\n >\n {props.children}\n </ThemeEditContext.Provider>\n );\n};\n\nexport const useThemeEdit = () => useContext(ThemeEditContext);\n","import React, {\n createContext,\n useContext,\n useEffect,\n useState,\n useCallback,\n useRef,\n} from \"react\";\nimport { retrieveThemeContent, updateThemeContent } from \"@growupsell/api/api\";\nimport { useThemeEdit } from \"./ThemeEditProvider\";\nimport { BusinessConfigContext } from \"./BusinessConfigContext\";\n\nexport const HomeConfigContext = createContext<{\n selectedConfig: any[];\n setSelectedConfig: (x: any) => void;\n addConfig: (x: any) => void;\n updateConfig: (config: any, index: number) => void;\n removeConfig: (index: number) => void;\n moveConfig: (fromIndex: number, toIndex: number) => void;\n themeConfigData: any;\n loading: boolean;\n}>({\n selectedConfig: [],\n setSelectedConfig: () => null,\n addConfig: () => null,\n updateConfig: () => null,\n removeConfig: () => null,\n moveConfig: () => null,\n themeConfigData: {},\n loading: true,\n});\n\nexport const HomeConfigProvider = (props: {\n page: string;\n children: React.ReactNode;\n /** Server-fetched theme content for SSR / first paint (crawlers). */\n initialThemeContent?: any;\n}) => {\n const hasInitial = Boolean(props.initialThemeContent);\n const [selectedConfig, setSelectedConfig] = useState<any[]>(() => {\n const data = props.initialThemeContent?.data;\n return Array.isArray(data)\n ? data.filter((item: any) => item !== null && item !== undefined)\n : [];\n });\n const { token } = useThemeEdit();\n const themeConfig: any = useContext(BusinessConfigContext);\n const [themeConfigData, setThemeConfigData] = useState<any>(\n props.initialThemeContent ?? {},\n );\n const [isInitialized, setIsInitialized] = useState(hasInitial);\n const updateRef = useRef(false);\n const [loading, setLoading] = useState(!hasInitial);\n\n const getThemeConfig = useCallback(async () => {\n if (!hasInitial) {\n setLoading(true);\n } else {\n return;\n }\n try {\n const response = await retrieveThemeContent(\n themeConfig.theme.id,\n props.page,\n );\n setThemeConfigData(response);\n if (response?.data && Array.isArray(response.data)) {\n setSelectedConfig(\n response.data.filter(\n (item: any) => item !== null && item !== undefined,\n ),\n );\n }\n setIsInitialized(true);\n } catch (error) {\n console.log(\"Error fetching theme content:\", error);\n } finally {\n setLoading(false);\n }\n }, [themeConfig.theme.id, hasInitial, props.page]);\n\n const onUpdateThemeContent = useCallback(\n async (configToUpdate = selectedConfig) => {\n try {\n const body = {\n data: configToUpdate,\n slug: props.page,\n platform: typeof window !== \"undefined\" ? \"website\" : \"app\",\n };\n\n // Prevent duplicate updates\n if (updateRef.current) return;\n updateRef.current = true;\n\n await updateThemeContent(\n body,\n themeConfig?.theme?.id,\n props.page,\n token,\n );\n const updatedResponse = await retrieveThemeContent(\n themeConfig.theme.id,\n props.page,\n );\n setThemeConfigData(updatedResponse);\n } catch (error) {\n console.error(\"Error updating theme content:\", error);\n } finally {\n updateRef.current = false;\n }\n },\n [isInitialized, token, themeConfig?.theme?.id, selectedConfig],\n );\n\n // Add new config\n const addConfig = useCallback(\n async (config: any) => {\n setSelectedConfig((prev) => {\n const newConfig = [...prev, config];\n onUpdateThemeContent(newConfig); // Update with new config\n return newConfig;\n });\n },\n [onUpdateThemeContent],\n );\n\n // Update existing config\n const updateConfig = useCallback(\n async (config: any, index: number) => {\n setSelectedConfig((prev) => {\n const newConfig = [...prev];\n newConfig[index] = config;\n onUpdateThemeContent(newConfig); // Update with modified config\n return newConfig;\n });\n },\n [onUpdateThemeContent],\n );\n\n const moveConfig = useCallback(\n (fromIndex: number, toIndex: number) => {\n setSelectedConfig((prev) => {\n const newConfig = [...prev];\n const [movedItem] = newConfig.splice(fromIndex, 1);\n newConfig.splice(toIndex, 0, movedItem);\n onUpdateThemeContent(newConfig);\n return newConfig;\n });\n },\n [onUpdateThemeContent],\n );\n\n // Remove config\n const removeConfig = useCallback(\n async (index: number) => {\n setSelectedConfig((prev) => {\n const newConfig = prev.filter((_, i) => i !== index);\n onUpdateThemeContent(newConfig); // Update with removed config\n return newConfig;\n });\n },\n [onUpdateThemeContent],\n );\n\n // Initial load\n useEffect(() => {\n getThemeConfig();\n }, [getThemeConfig]);\n\n return (\n <HomeConfigContext.Provider\n value={{\n selectedConfig,\n setSelectedConfig,\n addConfig,\n updateConfig,\n removeConfig,\n moveConfig,\n themeConfigData,\n loading,\n }}\n >\n {props.children}\n </HomeConfigContext.Provider>\n );\n};\n\nexport const useHomeConfig = () => useContext(HomeConfigContext);\n","import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from \"react\";\nimport { retrieveThemeContent, updateThemeContent } from \"@growupsell/api/api\";\nimport { useThemeEdit } from \"./ThemeEditProvider\";\nimport { BusinessConfigContext } from \"./BusinessConfigContext\";\n\nexport const HomeConfigHeroSliderContext = createContext<{\n loading: boolean;\n heroSliderConfigData: any;\n onUpdateHeroSlider: (updatedSlides: any) => void;\n}>({\n loading: true,\n heroSliderConfigData: [],\n onUpdateHeroSlider: () => null,\n});\n\nexport const HomeConfigHeroSliderProvider = (props: {\n children: React.ReactNode;\n /** Server-fetched theme content for SSR / first paint (crawlers). */\n initialThemeContent?: any;\n}) => {\n const hasInitial = Array.isArray(props.initialThemeContent?.data);\n const [loading, setLoading] = useState(!hasInitial);\n const [heroSliderConfigData, setHeroSliderConfigData] = useState<any>(() =>\n hasInitial ? props.initialThemeContent.data : [],\n );\n const { token } = useThemeEdit();\n const themeConfig: any = useContext(BusinessConfigContext);\n\n const getHeroSliderConfig = useCallback(async () => {\n if (hasInitial) {\n return;\n }\n setLoading(true);\n try {\n const response = await retrieveThemeContent(\n themeConfig.theme.id,\n \"hero_slider\",\n );\n setHeroSliderConfigData(response.data);\n } catch (error) {\n console.error(\"Error fetching hero slider content:\", error);\n } finally {\n setLoading(false);\n }\n }, [themeConfig.theme.id, hasInitial]);\n\n useEffect(() => {\n getHeroSliderConfig();\n }, [getHeroSliderConfig]);\n\n const onUpdateHeroSlider = async (configToUpdate: any) => {\n setLoading(true);\n try {\n const body = {\n data: configToUpdate,\n slug: \"hero_slider\",\n platform: typeof window !== \"undefined\" ? \"website\" : \"app\",\n };\n await updateThemeContent(\n body,\n themeConfig?.theme?.id,\n \"hero_slider\",\n token,\n );\n const updatedResponse = await retrieveThemeContent(\n themeConfig.theme.id,\n \"hero_slider\",\n );\n setHeroSliderConfigData(updatedResponse.data);\n } catch (error) {\n console.error(\"Error updating theme content:\", error);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <HomeConfigHeroSliderContext.Provider\n value={{ loading, heroSliderConfigData, onUpdateHeroSlider }}\n >\n {props.children}\n </HomeConfigHeroSliderContext.Provider>\n );\n};\n\nexport const useHomeConfigHeroSlider = () =>\n useContext(HomeConfigHeroSliderContext);\n","import React, {\n createContext,\n useContext,\n useEffect,\n useState,\n useCallback,\n useRef,\n} from 'react';\nimport {\n getCustomPageContent,\n updateCustomPageContent,\n splitCustomPageContent,\n mergeCustomPageContent,\n} from '@growupsell/api/api';\nimport { useThemeEdit } from './ThemeEditProvider';\nimport { HomeConfigHeroSliderContext } from './HomeConfigHeroSliderProvider';\n\nexport const CustomPageConfigContext = createContext<{\n selectedConfig: any[];\n setSelectedConfig: (x: any) => void;\n addConfig: (x: any) => void;\n updateConfig: (config: any, index: number) => void;\n removeConfig: (index: number) => void;\n moveConfig: (fromIndex: number, toIndex: number) => void;\n heroSliderConfigData: any[];\n onUpdateHeroSlider: (slides: any[]) => Promise<void>;\n loading: boolean;\n}>({\n selectedConfig: [],\n setSelectedConfig: () => null,\n addConfig: () => null,\n updateConfig: () => null,\n removeConfig: () => null,\n moveConfig: () => null,\n heroSliderConfigData: [],\n onUpdateHeroSlider: async () => undefined,\n loading: true,\n});\n\nexport const CustomPageConfigProvider = (props: {\n pageId: number;\n children: React.ReactNode;\n}) => {\n const { token } = useThemeEdit();\n const [selectedConfig, setSelectedConfig] = useState<any[]>([]);\n const [heroSliderConfigData, setHeroSliderConfigData] = useState<any[]>([]);\n const [loading, setLoading] = useState(true);\n const selectedConfigRef = useRef<any[]>([]);\n const heroSlidesRef = useRef<any[]>([]);\n const saveQueueRef = useRef<Promise<void>>(Promise.resolve());\n\n const load = useCallback(async () => {\n setLoading(true);\n try {\n const row = await getCustomPageContent(props.pageId, token);\n const fromContent = splitCustomPageContent(row?.content as unknown[]);\n // An explicit empty hero_content is authoritative. Fall back only when\n // an older backend omits the field.\n const slides = Array.isArray(row?.hero_content)\n ? row.hero_content\n : fromContent.heroSlides;\n selectedConfigRef.current = fromContent.blocks;\n heroSlidesRef.current = slides;\n setSelectedConfig(fromContent.blocks);\n setHeroSliderConfigData(slides);\n } catch (e) {\n console.error('Error loading custom page content:', e);\n } finally {\n setLoading(false);\n }\n }, [props.pageId, token]);\n\n /**\n * Serialize block and hero writes through one queue. Every queued operation\n * reads the latest refs, so a block edit cannot persist an older hero.\n */\n const persistLatest = useCallback(\n (writeHeroField = false) => {\n const run = async () => {\n try {\n const blocks = selectedConfigRef.current;\n const slides = heroSlidesRef.current;\n await updateCustomPageContent(\n props.pageId,\n {\n content: mergeCustomPageContent(blocks, slides),\n ...(writeHeroField ? { hero_content: slides } : {}),\n },\n token,\n );\n } catch (e) {\n console.error('Error saving custom page content:', e);\n }\n };\n\n const queued = saveQueueRef.current.then(run, run);\n saveQueueRef.current = queued;\n return queued;\n },\n [props.pageId, token],\n );\n\n const replaceSelectedConfig = useCallback((value: any) => {\n const next = typeof value === 'function' ? value(selectedConfigRef.current) : value;\n const normalized = Array.isArray(next) ? next : [];\n selectedConfigRef.current = normalized;\n setSelectedConfig(normalized);\n }, []);\n\n const addConfig = useCallback(\n (config: any) => {\n const next = [...selectedConfigRef.current, config];\n selectedConfigRef.current = next;\n setSelectedConfig(next);\n void persistLatest();\n },\n [persistLatest],\n );\n\n const updateConfig = useCallback(\n (config: any, index: number) => {\n const next = [...selectedConfigRef.current];\n next[index] = config;\n selectedConfigRef.current = next;\n setSelectedConfig(next);\n void persistLatest();\n },\n [persistLatest],\n );\n\n const moveConfig = useCallback(\n (fromIndex: number, toIndex: number) => {\n const next = [...selectedConfigRef.current];\n const [moved] = next.splice(fromIndex, 1);\n next.splice(toIndex, 0, moved);\n selectedConfigRef.current = next;\n setSelectedConfig(next);\n void persistLatest();\n },\n [persistLatest],\n );\n\n const removeConfig = useCallback(\n (index: number) => {\n const next = selectedConfigRef.current.filter((_, i) => i !== index);\n selectedConfigRef.current = next;\n setSelectedConfig(next);\n void persistLatest();\n },\n [persistLatest],\n );\n\n const onUpdateHeroSlider = useCallback(\n async (slidesToSave: any[]) => {\n const slides = Array.isArray(slidesToSave) ? slidesToSave : [];\n heroSlidesRef.current = slides;\n setHeroSliderConfigData(slides);\n await persistLatest(true);\n },\n [persistLatest],\n );\n\n useEffect(() => {\n load();\n }, [load]);\n\n return (\n <CustomPageConfigContext.Provider\n value={{\n selectedConfig,\n setSelectedConfig: replaceSelectedConfig,\n addConfig,\n updateConfig,\n removeConfig,\n moveConfig,\n heroSliderConfigData,\n onUpdateHeroSlider,\n loading,\n }}\n >\n <HomeConfigHeroSliderContext.Provider\n value={{ loading, heroSliderConfigData, onUpdateHeroSlider }}\n >\n {props.children}\n </HomeConfigHeroSliderContext.Provider>\n </CustomPageConfigContext.Provider>\n );\n};\n\nexport const useCustomPageConfig = () => useContext(CustomPageConfigContext);\n","import React, { createContext, useContext, useEffect, useState } from 'react'\nimport { api } from '@growupsell/api';\nimport { useAuth } from './AuthProvider';\nimport { useToastSupport } from './ToastSupportProvider';\nimport { useCartWishlistRefresh } from './CartWishlistRefreshProvider';\nimport { useCart } from './CartProvider';\n\nexport const WishlistContext = createContext<{\n wishlistItems: any[];\n addToWishlist: (sku: any) => void;\n deleteWishlistItem: (id: number) => void;\n moveToCart: (sku: any, quantity: number) => void;\n fetchWishlistLoading: boolean;\n addToWishlistLoading: boolean;\n moveToCartLoading: boolean;\n}>({\n wishlistItems: [],\n addToWishlist: () => null,\n deleteWishlistItem: () => { },\n moveToCart: () => { },\n fetchWishlistLoading: false,\n addToWishlistLoading: false,\n moveToCartLoading: false,\n})\n\nexport const WishlistProvider = (props: React.PropsWithChildren) => {\n const toast = useToastSupport();\n\n const [wishlistItems, setWishlistItems] = useState<any>([]);\n const { user } = useAuth();\n const [fetchWishlistLoading, setFetchWishlistLoading] = useState(true);\n const [addToWishlistLoading, setAddToWishlistLoading] = useState(false);\n const [moveToCartLoading, setMoveToCartLoading] = useState(false);\n const { addToCart } = useCart();\n\n const { refreshType, setRefreshType } = useCartWishlistRefresh();\n\n useEffect(() => {\n if (refreshType == 'wishlist') {\n fetchWishlistDetail();\n setRefreshType(null);\n }\n }, [refreshType])\n\n const fetchWishlistDetail = async () => {\n if (!!user) {\n setFetchWishlistLoading(true);\n try {\n const response = await api.getWishlist();\n console.log('fetchWishlistDetail response:', response);\n setWishlistItems(response); // Update the state\n return response; // ✅ Ensure it returns data\n } catch (error) {\n console.error('Error fetching wishlist details:', error);\n return null;\n } finally {\n setFetchWishlistLoading(false);\n }\n }\n };\n\n useEffect(() => {\n user && user.is_active && fetchWishlistDetail();\n }, [user]);\n\n const addToWishlist = async (sku: any) => {\n try {\n setAddToWishlistLoading(true);\n let body = {\n sku: sku,\n };\n await api.addProductToWishlist(body);\n console.log('New item added to Wishlist');\n toast.success('Item added to wishlist');\n fetchWishlistDetail();\n\n } catch (error: any) {\n console.log('error==', error);\n\n const errorMessage = error?.response?.data?.message || error?.response?.message || 'Something went wrong! Please try again.';\n toast.error(errorMessage);\n } finally {\n setAddToWishlistLoading(false);\n }\n };\n\n const deleteWishlistItem = async (id: number) => {\n try {\n setFetchWishlistLoading(true);\n const response = await api.deleteWishlist(id); // Call the API to delete the item\n console.log('Item deleted:', response); // Logging response for debugging\n setWishlistItems((prevItems: any[]) => prevItems.filter(item => item.id !== id));\n toast.success('Item removed from wishlist');\n await fetchWishlistDetail();\n } catch (error) {\n console.log('Error deleting item:', error);\n toast.error('Failed to remove item from wishlist');\n } finally {\n setFetchWishlistLoading(false);\n }\n };\n\n const moveToCart = async (id: number, quantity: number) => {\n let isItemInWishlist = wishlistItems?.find((item: any) => item.id === id);\n\n if (!isItemInWishlist) {\n console.log('Item not found in wishlist.');\n toast.warning('Item not found in wishlist');\n return;\n }\n\n try {\n setMoveToCartLoading(true);\n // Use CartProvider's addToCart which handles updating quantity if item already exists\n addToCart(isItemInWishlist.sku.id, quantity);\n\n // Remove from wishlist after successfully adding to cart\n await api.deleteWishlist(isItemInWishlist.id);\n setWishlistItems(wishlistItems?.filter((item: any) => item.id !== isItemInWishlist.id));\n\n setRefreshType('cart');\n\n } catch (error: any) {\n console.log('Error moving item to cart:', error);\n const errorMessage = error?.response?.data?.message || error?.response?.message || error?.message || '';\n const errorMsg = errorMessage || 'Failed to move item to cart';\n toast.error(errorMsg);\n } finally {\n setMoveToCartLoading(false);\n }\n };\n\n return (\n <WishlistContext.Provider value={{ wishlistItems, addToWishlist, deleteWishlistItem, moveToCart, fetchWishlistLoading, addToWishlistLoading, moveToCartLoading }}>\n {props.children}\n </WishlistContext.Provider>\n )\n}\n\nexport const useWishlist = () => useContext(WishlistContext);\n","\nimport React, { createContext, useContext, useState, ReactNode } from \"react\";\n\ntype ModalType = \"\" | \"login\" | \"signup\" | \"forgot\" | \"otp\" | \"reset\";\n\ntype ModalUserData = {\n otp?: { id: string; value: string };\n reset?: string;\n};\n\ntype ModalContextType = {\n openModal: ModalType;\n showModal: (modal: ModalType) => void;\n closeModal: () => void;\n userData: ModalUserData;\n setUserData: (data: ModalUserData) => void;\n clearUserData: () => void;\n};\n\nconst ModalContext = createContext<ModalContextType | undefined>(undefined);\n\nexport const ModalProvider = ({ children }: { children: ReactNode }) => {\n const [openModal, setOpenModal] = useState<ModalType>(\"\");\n const [userData, setUserData] = useState<ModalUserData>({});\n\n const showModal = (modal: ModalType) => setOpenModal(modal);\n const closeModal = () => setOpenModal(\"\");\n const clearUserData = () => setUserData({});\n\n return (\n <ModalContext.Provider\n value={{\n openModal,\n showModal,\n closeModal,\n userData,\n setUserData,\n clearUserData,\n }}\n >\n {children}\n </ModalContext.Provider>\n );\n};\n\nexport const useModal = () => {\n const context = useContext(ModalContext);\n if (!context) {\n throw new Error(\"useModal must be used within a ModalProvider\");\n }\n return context;\n};\n","import React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useState,\n} from \"react\";\nimport { useThemeEdit } from \"./ThemeEditProvider\";\nimport { useBusiness } from \"./BusinessProvider\";\nimport { api } from \"@growupsell/api\";\n\nexport const HeaderFooterContext = createContext<{\n headerConfig: any;\n footerConfig: any;\n onUpdateThemeContent: (configToUpdate: any) => Promise<void>;\n loading: boolean;\n announcementConfig: any;\n}>({\n headerConfig: {},\n footerConfig: {},\n onUpdateThemeContent: () => Promise.resolve(),\n loading: false,\n announcementConfig: {},\n});\n\nexport const HeaderFooterProvider = (props: {\n page: string;\n children: React.ReactNode;\n /** Server-fetched theme content for SSR / first paint (crawlers). */\n initialThemeContent?: any;\n}) => {\n const hasInitial =\n props.initialThemeContent != null && \"data\" in props.initialThemeContent;\n const initialData = hasInitial ? (props.initialThemeContent.data ?? {}) : {};\n\n const [headerConfig, setHeaderConfig] = useState<any>(() =>\n props.page === \"header\" ? initialData : {},\n );\n const [footerConfig, setFooterConfig] = useState<any>(() =>\n props.page === \"footer\" ? initialData : {},\n );\n const [announcementConfig, setAnnouncementConfig] = useState<any>(() =>\n props.page === \"announcement\" ? initialData : {},\n );\n const { token } = useThemeEdit();\n const themeConfig: any = useBusiness();\n const [loading, setLoading] = useState(!hasInitial);\n\n const getThemeConfig = useCallback(async () => {\n if (hasInitial) {\n return;\n }\n setLoading(true);\n try {\n const response = await api.retrieveThemeContent(\n themeConfig.theme.id,\n props.page,\n );\n response.slug === \"header\" && setHeaderConfig(response.data);\n response.slug === \"footer\" && setFooterConfig(response.data);\n response.slug === \"announcement\" && setAnnouncementConfig(response.data);\n } catch (error) {\n console.error(\"Error fetching theme content:\", error);\n } finally {\n setLoading(false);\n }\n }, [themeConfig.theme.id, hasInitial, props.page]);\n\n const onUpdateThemeContent = useCallback(\n async (configToUpdate: any) => {\n try {\n const body = {\n data: configToUpdate,\n slug: props.page,\n platform: typeof window !== \"undefined\" ? \"website\" : \"app\",\n };\n\n await api.updateThemeContent(\n body,\n themeConfig.theme.id,\n props.page,\n token,\n );\n const updatedResponse = await api.retrieveThemeContent(\n themeConfig.theme.id,\n props.page,\n );\n updatedResponse.slug === \"header\" &&\n setHeaderConfig(updatedResponse.data);\n updatedResponse.slug === \"footer\" &&\n setFooterConfig(updatedResponse.data);\n updatedResponse.slug === \"announcement\" &&\n setAnnouncementConfig(updatedResponse.data);\n } catch (error) {\n console.error(\"Error updating theme content:\", error);\n } finally {\n setLoading(false);\n }\n },\n [props.page, themeConfig.theme.id, token],\n );\n\n useEffect(() => {\n getThemeConfig();\n }, [getThemeConfig]);\n\n return (\n <HeaderFooterContext.Provider\n value={{\n headerConfig,\n footerConfig,\n onUpdateThemeContent,\n loading,\n announcementConfig,\n }}\n >\n {loading ? null : props.children}\n </HeaderFooterContext.Provider>\n );\n};\n\nexport const useHeaderFooter = () => {\n return useContext(HeaderFooterContext);\n};\n","import React, { createContext, useContext, useState, useEffect, useRef } from 'react';\nimport { api } from '@growupsell/api';\n\nexport const MenuFilterContext = createContext<{\n menuList: any[];\n categoryList: any[];\n selectedCategoryId: number[];\n addCategoryFilterId: (id: number) => void;\n removeCategoryFilterId: (id: number) => void;\n menuLoading: boolean;\n categoryLoading: boolean;\n isInitialLoad: boolean;\n currentPage: number;\n totalPages: number;\n handlePageChange: (page: number) => void;\n setMenuList: (x: any) => void;\n selectedSortOption: string;\n setSelectedSortOption: (x: string) => void;\n selectedMinPrice: number | undefined;\n selectedMaxPrice: number | undefined;\n setSelectedMinPrice: (x: any) => void;\n setSelectedMaxPrice: (x: any) => void;\n searchQuery: string;\n setSearchQuery: (query: string) => void;\n selectedFoodType: string;\n setSelectedFoodType: (type: string) => void;\n}>({\n menuList: [],\n categoryList: [],\n selectedCategoryId: [],\n addCategoryFilterId: () => null,\n removeCategoryFilterId: () => null,\n menuLoading: true,\n categoryLoading: true,\n isInitialLoad: true,\n currentPage: 1,\n totalPages: 1,\n handlePageChange: () => null,\n setMenuList: () => null,\n selectedSortOption: 'newest_first',\n setSelectedSortOption: () => null,\n selectedMinPrice: undefined,\n selectedMaxPrice: undefined,\n setSelectedMinPrice: () => null,\n setSelectedMaxPrice: () => null,\n searchQuery: '',\n setSearchQuery: () => null,\n selectedFoodType: '',\n setSelectedFoodType: () => null,\n});\n\nexport const MenuFilterProvider = (props: React.PropsWithChildren) => {\n const [menuList, setMenuList] = useState<any[]>([]);\n const [categoryList, setCategoryList] = useState<any[]>([]);\n const [selectedCategoryId, setSelectedCategoryId] = useState<number[]>([]);\n const [selectedSortOption, setSelectedSortOption] = useState<string>('newest_first');\n const [selectedMinPrice, setSelectedMinPrice] = useState<number | undefined>();\n const [selectedMaxPrice, setSelectedMaxPrice] = useState<number | undefined>();\n const [menuLoading, setMenuLoading] = useState(true);\n const [categoryLoading, setCategoryLoading] = useState(true);\n const [isInitialLoad, setIsInitialLoad] = useState(true);\n const [currentPage, setCurrentPage] = useState(1);\n const [searchQuery, setSearchQuery] = useState('');\n const [debouncedSearchQuery, setDebouncedSearchQuery] = useState('');\n const [selectedFoodType, setSelectedFoodType] = useState('');\n const limit = 12;\n const [totalCount, setTotalCount] = useState(0);\n const totalPages = Math.ceil(totalCount / limit);\n const searchTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n // Fetch menu categories\n const fetchCategoryList = async () => {\n setCategoryLoading(true);\n try {\n const response = await api.getMenuCategories();\n setCategoryList(response.data || response);\n } catch (error) {\n console.log('Error fetching categories:', error);\n } finally {\n setCategoryLoading(false);\n }\n };\n\n // Fetch menu list\n const fetchMenuList = async () => {\n setMenuLoading(true);\n try {\n let body: any = {\n limit: limit,\n offset: (currentPage - 1) * limit,\n };\n\n // Add category_ids if selected (as comma-separated string)\n if (selectedCategoryId.length > 0) {\n body.category_ids = selectedCategoryId.join(',');\n }\n\n // Add food_type if selected\n if (selectedFoodType) {\n body.food_type = selectedFoodType;\n }\n\n // Add search query if provided\n if (debouncedSearchQuery.trim()) {\n body.search = debouncedSearchQuery;\n }\n\n const response = await api.getMenuList(body);\n\n // Get menu data from response\n let filteredMenus = response.data || response;\n\n // If response is an object with results/data array, extract it\n if (filteredMenus && typeof filteredMenus === 'object' && !Array.isArray(filteredMenus)) {\n filteredMenus = filteredMenus.results || filteredMenus.data || filteredMenus.items || [];\n }\n\n // Ensure it's an array\n if (!Array.isArray(filteredMenus)) {\n filteredMenus = [];\n }\n\n setMenuList(filteredMenus);\n setTotalCount(filteredMenus.length);\n } catch (error) {\n console.log('Error fetching menus:', error);\n } finally {\n setMenuLoading(false);\n if (isInitialLoad) {\n setIsInitialLoad(false);\n }\n }\n };\n\n const addCategoryFilterId = (id: number) => {\n setSelectedCategoryId((prevIds) => {\n if (prevIds.includes(id)) {\n return prevIds;\n }\n return [...prevIds, id];\n });\n setCurrentPage(1);\n };\n\n const removeCategoryFilterId = (id: number) => {\n setSelectedCategoryId((x) => {\n return x.filter((o) => o !== id);\n });\n setCurrentPage(1);\n };\n\n const handlePageChange = (page: number) => {\n setCurrentPage(page);\n };\n\n // Debounce search query\n useEffect(() => {\n // Clear existing timeout\n if (searchTimeoutRef.current) {\n clearTimeout(searchTimeoutRef.current);\n }\n\n // Set new timeout\n searchTimeoutRef.current = setTimeout(() => {\n setDebouncedSearchQuery(searchQuery);\n }, 1000);\n\n // Cleanup function\n return () => {\n if (searchTimeoutRef.current) {\n clearTimeout(searchTimeoutRef.current);\n }\n };\n }, [searchQuery]);\n\n // Fetch categories on mount\n useEffect(() => {\n fetchCategoryList();\n }, []);\n\n // Fetch menus when filters change\n useEffect(() => {\n fetchMenuList();\n }, [\n selectedCategoryId,\n currentPage,\n selectedSortOption,\n selectedMinPrice,\n selectedMaxPrice,\n debouncedSearchQuery,\n selectedFoodType,\n ]);\n\n return (\n <MenuFilterContext.Provider\n value={{\n menuList,\n categoryList,\n selectedCategoryId,\n addCategoryFilterId,\n removeCategoryFilterId,\n menuLoading,\n categoryLoading,\n isInitialLoad,\n currentPage,\n totalPages,\n handlePageChange,\n setMenuList,\n selectedSortOption,\n setSelectedSortOption,\n selectedMinPrice,\n selectedMaxPrice,\n setSelectedMinPrice,\n setSelectedMaxPrice,\n searchQuery,\n setSearchQuery,\n selectedFoodType,\n setSelectedFoodType,\n }}\n >\n {props.children}\n </MenuFilterContext.Provider>\n );\n};\n\nexport const useMenuFilter = () => useContext(MenuFilterContext);","import React, { createContext, useState, useEffect, useContext } from 'react';\nimport { api } from '@growupsell/api';\nimport { useStorage } from './StorageProvider';\nimport { useAuth } from './AuthProvider';\n\nexport const MenuCartContext = createContext<{\n menuCartItems: any[];\n cartLength: number;\n cartType: 'delivery' | 'pickup' | 'self_dinein';\n session: any;\n errorMessage?: string | null;\n menuCartLoading: boolean;\n promoCodeLoading: boolean;\n updateOrderType: (params: { type: 'delivery' | 'pickup' | 'self_dinein'; pickup_time?: string; table_no?: string | number; shipping_address?: number }) => void;\n addMenuToCart: (itemId: number, quantity: number, customizeOptions?: any[]) => Promise<void>;\n updateMenuCartItem: (id: number, quantity: number, customizeOptions?: any[]) => Promise<void>;\n deleteMenuCartItem: (id: number) => Promise<void>;\n updateMenuCartPromoCode: (promoCode: string | null) => Promise<void>;\n updateMenuCartAddress: (shippingAddress: number) => Promise<void>;\n getMenuOrderCharge: (orderId: number, body: object) => Promise<any>;\n clearMenuCart: () => void;\n}>({\n menuCartItems: [],\n cartLength: 0,\n cartType: 'delivery',\n session: null,\n errorMessage: null,\n menuCartLoading: false,\n promoCodeLoading: false,\n updateOrderType: () => { },\n addMenuToCart: async () => { },\n updateMenuCartItem: async () => { },\n deleteMenuCartItem: async () => { },\n updateMenuCartPromoCode: async () => { },\n updateMenuCartAddress: async () => { },\n getMenuOrderCharge: async () => { },\n clearMenuCart: () => { },\n});\n\nexport const MenuCartProvider = (props: React.PropsWithChildren) => {\n const [menuCartItems, setMenuCartItems] = useState<any[]>([]);\n const [cartLength, setCartLength] = useState<number>(0);\n const [cartType, setCartTypeState] = useState<'delivery' | 'pickup' | 'self_dinein'>('delivery');\n const [session, setSession] = useState<any>(null);\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const [menuCartLoading, setMenuCartLoading] = useState<boolean>(false);\n const [promoCodeLoading, setPromoCodeLoading] = useState<boolean>(false);\n const { user } = useAuth();\n\n const storage = useStorage();\n\n const fetchMenuCartDetail = async () => {\n setMenuCartLoading(true);\n try {\n const response = await api.getMenuCartDetail();\n setMenuCartItems(response?.items || response?.products || []);\n setCartLength(response?.items?.length || response?.products?.length || 0);\n setCartTypeState(response?.type || 'delivery');\n setSession(response);\n } catch (error) {\n console.error('Error fetching menu cart:', error);\n setMenuCartItems([]);\n setCartLength(0);\n } finally {\n setMenuCartLoading(false);\n }\n };\n\n useEffect(() => {\n fetchMenuCartDetail();\n }, [user]);\n\n // Update cartLength whenever menuCartItems changes\n useEffect(() => {\n setCartLength(menuCartItems.length);\n }, [menuCartItems]);\n\n // Save session to localStorage whenever session changes\n useEffect(() => {\n session && storage.setItem('menuCart', JSON.stringify(session), 'local');\n }, [session, storage]);\n\n // This function handles both local state and API call\n const updateOrderType = async (params: { type: 'delivery' | 'pickup' | 'self_dinein'; pickup_time?: string; table_no?: string | number; shipping_address?: number }) => {\n setMenuCartLoading(true);\n try {\n const { type, pickup_time, table_no, shipping_address } = params;\n const body: any = { type };\n\n if (type === 'pickup' && pickup_time) {\n body.pickup_time = pickup_time;\n }\n\n if (type === 'self_dinein' && table_no) {\n body.table_no = table_no;\n }\n\n if (type === 'delivery' && user && shipping_address) {\n body.shipping_address = shipping_address;\n }\n\n await api.updateMenuCartType(body);\n setCartTypeState(type);\n fetchMenuCartDetail();\n } catch (error) {\n console.error('Failed to update cart type:', error);\n } finally {\n setMenuCartLoading(false);\n }\n };\n\n // Function to update promo code\n const updateMenuCartPromoCode = async (promoCode: string | null) => {\n let body = {\n promo_code: promoCode,\n };\n setPromoCodeLoading(true);\n setErrorMessage(null);\n try {\n if (session) {\n const response = await api.updateMenuCartPromoCode(body);\n setSession({\n ...session,\n promo: response.promo,\n promo_redeem_amount: Number(response.promo_redeem_amount),\n final_payable_amount: Number(response.final_payable_amount),\n });\n // Refresh cart data after updating promo code\n await fetchMenuCartDetail();\n }\n } catch (error: any) {\n setErrorMessage(error?.response?.data?.error || error?.message || 'Failed to apply promo code');\n console.error('Failed to update promo code:', error);\n } finally {\n setPromoCodeLoading(false);\n }\n };\n\n // Function to update menu cart address\n const updateMenuCartAddress = async (shippingAddress: number) => {\n setMenuCartLoading(true);\n setErrorMessage(null);\n try {\n const body = {\n shipping_address: shippingAddress\n };\n\n const response = await api.updateMenuOrderCartAddress(body);\n setSession({\n ...session,\n shipping_address: response.shipping_address,\n });\n // Refresh cart data after updating address\n await fetchMenuCartDetail();\n } catch (error: any) {\n setErrorMessage(error?.response?.data?.error || error?.message || 'Failed to update address');\n console.error('Failed to update menu cart address:', error);\n } finally {\n setMenuCartLoading(false);\n }\n };\n\n // Function to get menu order charge\n const getMenuOrderCharge = async (orderId: number, body: object) => {\n setMenuCartLoading(true);\n setErrorMessage(null);\n try {\n const response = await api.getMenuOrderCharge(orderId, body);\n return response;\n } catch (error: any) {\n setErrorMessage(error?.response?.data?.error || error?.message || 'Failed to get order charge');\n console.error('Failed to get menu order charge:', error);\n } finally {\n setMenuCartLoading(false);\n }\n };\n\n // Function to add menu item to cart\n const addMenuToCart = async (itemId: number, quantity: number, customizeOptions?: any[]) => {\n setMenuCartLoading(true);\n try {\n const body = {\n item: itemId,\n qty: quantity,\n customize_option: customizeOptions || []\n };\n\n await api.addMenuToCart(body);\n // Refresh cart data after adding item\n await fetchMenuCartDetail();\n } catch (error) {\n console.error('Failed to add menu item to cart:', error);\n throw error;\n } finally {\n setMenuCartLoading(false);\n }\n };\n\n // Function to update menu cart item\n const updateMenuCartItem = async (id: number, quantity: number, customizeOptions?: any[]) => {\n setMenuCartLoading(true);\n try {\n const body = {\n qty: quantity,\n customize_option: customizeOptions || []\n };\n\n await api.updateMenuCartItem(id, body);\n // Refresh cart data after updating item\n await fetchMenuCartDetail();\n } catch (error) {\n console.error('Failed to update menu cart item:', error);\n throw error;\n } finally {\n setMenuCartLoading(false);\n }\n };\n\n // Function to delete menu cart item\n const deleteMenuCartItem = async (id: number) => {\n setMenuCartLoading(true);\n try {\n await api.deleteMenuCartItem(id);\n // Refresh cart data after deleting item\n await fetchMenuCartDetail();\n } catch (error) {\n console.error('Failed to delete menu cart item:', error);\n throw error;\n } finally {\n setMenuCartLoading(false);\n }\n };\n\n const clearMenuCart = () => {\n setMenuCartItems([]);\n setSession(null);\n storage.removeItem('menuCart');\n fetchMenuCartDetail();\n };\n\n return (\n <MenuCartContext.Provider\n value={{\n menuCartItems,\n cartLength,\n cartType,\n session,\n errorMessage,\n menuCartLoading,\n promoCodeLoading,\n updateOrderType,\n addMenuToCart,\n updateMenuCartItem,\n deleteMenuCartItem,\n updateMenuCartPromoCode,\n updateMenuCartAddress,\n getMenuOrderCharge,\n clearMenuCart,\n }}\n >\n {props.children}\n </MenuCartContext.Provider>\n );\n};\n\nexport const useMenuCart = () => useContext(MenuCartContext);\n","import React, { createContext, useContext, useEffect, useState } from 'react';\n\nconst REFERRAL_STORAGE_KEY = 'referralCode';\n\nconst ReferralCodeContext = createContext<string | null>(null);\n\nexport function ReferralCodeProvider({\n children,\n referralCodeFromUrl,\n}: {\n children: React.ReactNode;\n referralCodeFromUrl: string | null;\n}) {\n const [referralCode, setReferralCode] = useState<string | null>(null);\n\n useEffect(() => {\n if (referralCodeFromUrl) {\n if (typeof window !== 'undefined') {\n sessionStorage.setItem(REFERRAL_STORAGE_KEY, referralCodeFromUrl);\n }\n setReferralCode(referralCodeFromUrl);\n } else if (typeof window !== 'undefined') {\n setReferralCode(sessionStorage.getItem(REFERRAL_STORAGE_KEY));\n }\n }, [referralCodeFromUrl]);\n\n return (\n <ReferralCodeContext.Provider value={referralCode}>\n {children}\n </ReferralCodeContext.Provider>\n );\n}\n\nexport function useReferralCode() {\n return useContext(ReferralCodeContext);\n}\n","import React, { createContext, useContext, useEffect, useState } from 'react';\nimport { api } from '@growupsell/api';\nimport type { LiveSupportWidgetConfig } from '@growupsell/api/api';\n\nexport type { LiveSupportWidgetConfig };\n\ntype LiveSupportWidgetContextValue = {\n config: LiveSupportWidgetConfig | null;\n loading: boolean;\n};\n\nconst LiveSupportWidgetContext = createContext<LiveSupportWidgetContextValue>({\n config: null,\n loading: true,\n});\n\ntype Props = {\n children: React.ReactNode;\n};\n\nexport const LiveSupportWidgetProvider: React.FC<Props> = ({ children }) => {\n const [config, setConfig] = useState<LiveSupportWidgetConfig | null>(null);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let isMounted = true;\n\n (async () => {\n try {\n const data = await api.getLiveSupportWidgetConfig();\n if (isMounted) {\n setConfig(data);\n }\n } catch (e) {\n if (isMounted) {\n setConfig(null);\n }\n } finally {\n if (isMounted) {\n setLoading(false);\n }\n }\n })();\n\n return () => {\n isMounted = false;\n };\n }, []);\n\n return (\n <LiveSupportWidgetContext.Provider value={{ config, loading }}>\n {children}\n </LiveSupportWidgetContext.Provider>\n );\n};\n\nexport const useLiveSupportWidget = () => useContext(LiveSupportWidgetContext);\n\n","import React from 'react';\nimport {\n BusinessConfigProvider,\n BusinessMediaProvider,\n AuthProvider,\n ModalProvider,\n CartProvider,\n FilterProvider,\n ProductConfigProvider,\n StorageProvider,\n CustomerConfigProvider,\n WishlistProvider,\n CartWishlistRefreshProvider,\n ThemeEditProvider,\n MenuFilterProvider,\n MenuCartProvider,\n ReferralCodeProvider,\n LiveSupportWidgetProvider,\n} from '../provider';\nimport { ToastSupportProvider, type ToastSupportApi } from './ToastSupportProvider';\n\ninterface BaseProviderProps {\n children: React.ReactNode;\n baseURL: any;\n token?: string;\n isEdit?: boolean;\n businessConfig: any;\n storage: {\n setItem: (key: string, value: string, type?: string) => void;\n getItem: (key: string, type?: string) => string | null;\n clearAll: () => void;\n removeItem: (key: string, type?: string) => void;\n };\n isHeader?: boolean;\n isFooter?: boolean;\n isAnnouncementBar?: boolean;\n /** Referral code from URL (e.g. ?referralCode=xxx). Persisted and passed to register API. */\n referralCodeFromUrl?: string | null;\n /**\n * Web: pass your host app’s toast API (e.g. Next.js `utils/toast` wrapping react-toastify) so Cart/Wishlist can notify.\n * React Native: pass your own implementation or omit (no-ops).\n */\n toast?: ToastSupportApi;\n}\n\nexport const BaseProvider: React.FC<BaseProviderProps> = ({\n children,\n baseURL,\n token,\n isEdit,\n businessConfig,\n storage,\n isHeader,\n isFooter,\n isAnnouncementBar,\n referralCodeFromUrl = null,\n toast,\n}) => {\n return (\n <StorageProvider storage={storage}>\n <ToastSupportProvider value={toast}>\n <BusinessConfigProvider data={businessConfig} baseURL={baseURL}>\n <ReferralCodeProvider referralCodeFromUrl={referralCodeFromUrl}>\n <ThemeEditProvider isThemeEdit={isEdit!} token={token!} isHeader={isHeader!} isFooter={isFooter!} isAnnouncementBar={isAnnouncementBar!}>\n <BusinessMediaProvider>\n <CustomerConfigProvider>\n <AuthProvider>\n <ModalProvider>\n <LiveSupportWidgetProvider>\n {businessConfig.category.type == 'retail' ?\n <ProductConfigProvider>\n <CartWishlistRefreshProvider>\n <CartProvider>\n <WishlistProvider>\n <FilterProvider>\n <>{children}</>\n </FilterProvider>\n </WishlistProvider>\n </CartProvider>\n </CartWishlistRefreshProvider>\n </ProductConfigProvider>\n :\n <MenuCartProvider>\n <MenuFilterProvider>\n <>{children}</>\n </MenuFilterProvider>\n </MenuCartProvider>}\n {/* <ProductConfigProvider>\n <CartWishlistRefreshProvider>\n <CartProvider>\n <WishlistProvider>\n <FilterProvider>\n <MenuFilterProvider>\n <>{children}</>\n </MenuFilterProvider>\n </FilterProvider>\n </WishlistProvider>\n </CartProvider>\n </CartWishlistRefreshProvider>\n </ProductConfigProvider> */}\n </LiveSupportWidgetProvider>\n </ModalProvider>\n </AuthProvider>\n </CustomerConfigProvider>\n </BusinessMediaProvider>\n </ThemeEditProvider>\n </ReferralCodeProvider>\n </BusinessConfigProvider>\n </ToastSupportProvider>\n </StorageProvider>\n );\n};\n"]}