@growupsell/react-ecommerce-core 2.0.16 → 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
@@ -1944,5 +2004,5 @@ var BaseProvider = ({
1944
2004
  };
1945
2005
 
1946
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 };
1947
- //# sourceMappingURL=chunk-ID4JKOXT.js.map
1948
- //# sourceMappingURL=chunk-ID4JKOXT.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"]}
package/dist/index.cjs CHANGED
@@ -588,6 +588,9 @@ var FilterContext = react.createContext({
588
588
  selectedVariants: [],
589
589
  updateSelectedVariants: () => null,
590
590
  variantLoading: false,
591
+ selectedSpecifications: [],
592
+ updateSpecificationOption: () => null,
593
+ setSelectedSpecifications: () => null,
591
594
  total: 0,
592
595
  limit: 10,
593
596
  offset: 0
@@ -614,6 +617,7 @@ var FilterProvider = (props) => {
614
617
  const [variantList, setVariantList] = react.useState([]);
615
618
  const [selectedVariants, setSelectedVariants] = react.useState([]);
616
619
  const [variantLoading, setVariantLoading] = react.useState(false);
620
+ const [selectedSpecifications, setSelectedSpecifications] = react.useState([]);
617
621
  const [limit, setLimit] = react.useState(10);
618
622
  const [offset, setOffset] = react.useState(0);
619
623
  const [total, setTotal] = react.useState(0);
@@ -640,15 +644,30 @@ var FilterProvider = (props) => {
640
644
  });
641
645
  setCurrentPage(1);
642
646
  };
643
- const fetchFilterConfig = async () => {
644
- setFilterConfigLoading(true);
645
- const response = await api.api.getProductFilterConfig();
646
- setFilterConfig(response);
647
- setFilterConfigLoading(false);
648
- };
647
+ const categoryFilterKey = selectedCategoryId.length === 1 ? selectedCategoryId[0] : void 0;
649
648
  react.useEffect(() => {
650
- fetchFilterConfig();
651
- }, []);
649
+ let active = true;
650
+ (async () => {
651
+ if (!filterConfig) {
652
+ setFilterConfigLoading(true);
653
+ }
654
+ try {
655
+ const response = await api.api.getProductFilterConfig(categoryFilterKey);
656
+ if (active) {
657
+ setFilterConfig(response);
658
+ }
659
+ } catch (error) {
660
+ console.log(error);
661
+ } finally {
662
+ if (active) {
663
+ setFilterConfigLoading(false);
664
+ }
665
+ }
666
+ })();
667
+ return () => {
668
+ active = false;
669
+ };
670
+ }, [categoryFilterKey]);
652
671
  const removeCategoryFilterId = (id) => {
653
672
  setSelectedCategoryId((x) => {
654
673
  return x.filter((o) => o !== id);
@@ -666,6 +685,7 @@ var FilterProvider = (props) => {
666
685
  max_price: selectedMaxPrice,
667
686
  brand_ids: selectedCategoryId.length > 0 ? selectedBrandId : null,
668
687
  variants: selectedCategoryId.length > 0 ? selectedVariants : null,
688
+ specifications: selectedSpecifications,
669
689
  limit,
670
690
  offset
671
691
  };
@@ -687,6 +707,21 @@ var FilterProvider = (props) => {
687
707
  return [...prevIds, id];
688
708
  });
689
709
  };
710
+ const updateSpecificationOption = (keyId, option) => {
711
+ setSelectedSpecifications((prev) => {
712
+ const current = prev.find((item) => item.id === keyId);
713
+ if (!current) {
714
+ return [...prev, { id: keyId, values: [option] }];
715
+ }
716
+ const values = current.values.includes(option) ? current.values.filter((value) => value !== option) : [...current.values, option];
717
+ if (values.length === 0) {
718
+ return prev.filter((item) => item.id !== keyId);
719
+ }
720
+ return prev.map(
721
+ (item) => item.id === keyId ? { ...item, values } : item
722
+ );
723
+ });
724
+ };
690
725
  const updateSelectedVariants = (label) => {
691
726
  setSelectedVariants((prevVariants) => {
692
727
  if (prevVariants.includes(label)) {
@@ -718,9 +753,31 @@ var FilterProvider = (props) => {
718
753
  selectedMaxPrice,
719
754
  selectedBrandId,
720
755
  selectedVariants,
756
+ selectedSpecifications,
721
757
  limit,
722
758
  offset
723
759
  ]);
760
+ react.useEffect(() => {
761
+ const keys = filterConfig?.specifications ?? [];
762
+ const allowed = new Map(
763
+ keys.map((key) => [
764
+ key.id,
765
+ new Set(key.options ?? [])
766
+ ])
767
+ );
768
+ setSelectedSpecifications((prev) => {
769
+ const next = prev.map((item) => ({
770
+ ...item,
771
+ values: item.values.filter((value) => allowed.get(item.id)?.has(value))
772
+ })).filter((item) => item.values.length > 0 && allowed.has(item.id));
773
+ if (next.length === prev.length && next.every(
774
+ (item, index) => item.id === prev[index].id && item.values.length === prev[index].values.length && item.values.every((value, valueIndex) => value === prev[index].values[valueIndex])
775
+ )) {
776
+ return prev;
777
+ }
778
+ return next;
779
+ });
780
+ }, [filterConfig]);
724
781
  const handlePageChange = (newOffset) => {
725
782
  setOffset(newOffset);
726
783
  };
@@ -760,6 +817,9 @@ var FilterProvider = (props) => {
760
817
  selectedVariants,
761
818
  updateSelectedVariants,
762
819
  variantLoading,
820
+ selectedSpecifications,
821
+ updateSpecificationOption,
822
+ setSelectedSpecifications,
763
823
  total,
764
824
  limit,
765
825
  offset