@growupsell/react-ecommerce-core 2.0.14 → 2.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-E66B7ABK.js → chunk-ID4JKOXT.js} +42 -15
- package/dist/chunk-ID4JKOXT.js.map +1 -0
- package/dist/index.cjs +40 -13
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +1 -1
- package/dist/provider.cjs +40 -13
- package/dist/provider.cjs.map +1 -1
- package/dist/provider.js +1 -1
- package/package.json +2 -2
- package/dist/chunk-E66B7ABK.js.map +0 -1
|
@@ -946,6 +946,8 @@ var HomeConfigProvider = (props) => {
|
|
|
946
946
|
const getThemeConfig = useCallback(async () => {
|
|
947
947
|
if (!hasInitial) {
|
|
948
948
|
setLoading(true);
|
|
949
|
+
} else {
|
|
950
|
+
return;
|
|
949
951
|
}
|
|
950
952
|
try {
|
|
951
953
|
const response = await retrieveThemeContent(
|
|
@@ -962,7 +964,7 @@ var HomeConfigProvider = (props) => {
|
|
|
962
964
|
}
|
|
963
965
|
setIsInitialized(true);
|
|
964
966
|
} catch (error) {
|
|
965
|
-
console.
|
|
967
|
+
console.log("Error fetching theme content:", error);
|
|
966
968
|
} finally {
|
|
967
969
|
setLoading(false);
|
|
968
970
|
}
|
|
@@ -1066,11 +1068,17 @@ var HomeConfigHeroSliderContext = createContext({
|
|
|
1066
1068
|
onUpdateHeroSlider: () => null
|
|
1067
1069
|
});
|
|
1068
1070
|
var HomeConfigHeroSliderProvider = (props) => {
|
|
1069
|
-
const
|
|
1070
|
-
const [
|
|
1071
|
+
const hasInitial = Array.isArray(props.initialThemeContent?.data);
|
|
1072
|
+
const [loading, setLoading] = useState(!hasInitial);
|
|
1073
|
+
const [heroSliderConfigData, setHeroSliderConfigData] = useState(
|
|
1074
|
+
() => hasInitial ? props.initialThemeContent.data : []
|
|
1075
|
+
);
|
|
1071
1076
|
const { token } = useThemeEdit();
|
|
1072
1077
|
const themeConfig = useContext(BusinessConfigContext);
|
|
1073
|
-
const getHeroSliderConfig = async () => {
|
|
1078
|
+
const getHeroSliderConfig = useCallback(async () => {
|
|
1079
|
+
if (hasInitial) {
|
|
1080
|
+
return;
|
|
1081
|
+
}
|
|
1074
1082
|
setLoading(true);
|
|
1075
1083
|
try {
|
|
1076
1084
|
const response = await retrieveThemeContent(
|
|
@@ -1078,13 +1086,15 @@ var HomeConfigHeroSliderProvider = (props) => {
|
|
|
1078
1086
|
"hero_slider"
|
|
1079
1087
|
);
|
|
1080
1088
|
setHeroSliderConfigData(response.data);
|
|
1089
|
+
} catch (error) {
|
|
1090
|
+
console.error("Error fetching hero slider content:", error);
|
|
1081
1091
|
} finally {
|
|
1082
1092
|
setLoading(false);
|
|
1083
1093
|
}
|
|
1084
|
-
};
|
|
1094
|
+
}, [themeConfig.theme.id, hasInitial]);
|
|
1085
1095
|
useEffect(() => {
|
|
1086
1096
|
getHeroSliderConfig();
|
|
1087
|
-
}, []);
|
|
1097
|
+
}, [getHeroSliderConfig]);
|
|
1088
1098
|
const onUpdateHeroSlider = async (configToUpdate) => {
|
|
1089
1099
|
setLoading(true);
|
|
1090
1100
|
try {
|
|
@@ -1400,13 +1410,24 @@ var HeaderFooterContext = createContext({
|
|
|
1400
1410
|
announcementConfig: {}
|
|
1401
1411
|
});
|
|
1402
1412
|
var HeaderFooterProvider = (props) => {
|
|
1403
|
-
const
|
|
1404
|
-
const
|
|
1405
|
-
const [
|
|
1413
|
+
const hasInitial = props.initialThemeContent != null && "data" in props.initialThemeContent;
|
|
1414
|
+
const initialData = hasInitial ? props.initialThemeContent.data ?? {} : {};
|
|
1415
|
+
const [headerConfig, setHeaderConfig] = useState(
|
|
1416
|
+
() => props.page === "header" ? initialData : {}
|
|
1417
|
+
);
|
|
1418
|
+
const [footerConfig, setFooterConfig] = useState(
|
|
1419
|
+
() => props.page === "footer" ? initialData : {}
|
|
1420
|
+
);
|
|
1421
|
+
const [announcementConfig, setAnnouncementConfig] = useState(
|
|
1422
|
+
() => props.page === "announcement" ? initialData : {}
|
|
1423
|
+
);
|
|
1406
1424
|
const { token } = useThemeEdit();
|
|
1407
1425
|
const themeConfig = useBusiness();
|
|
1408
|
-
const [loading, setLoading] = useState(
|
|
1426
|
+
const [loading, setLoading] = useState(!hasInitial);
|
|
1409
1427
|
const getThemeConfig = useCallback(async () => {
|
|
1428
|
+
if (hasInitial) {
|
|
1429
|
+
return;
|
|
1430
|
+
}
|
|
1410
1431
|
setLoading(true);
|
|
1411
1432
|
try {
|
|
1412
1433
|
const response = await api.retrieveThemeContent(
|
|
@@ -1421,7 +1442,7 @@ var HeaderFooterProvider = (props) => {
|
|
|
1421
1442
|
} finally {
|
|
1422
1443
|
setLoading(false);
|
|
1423
1444
|
}
|
|
1424
|
-
}, [themeConfig.theme.id]);
|
|
1445
|
+
}, [themeConfig.theme.id, hasInitial, props.page]);
|
|
1425
1446
|
const onUpdateThemeContent = useCallback(
|
|
1426
1447
|
async (configToUpdate) => {
|
|
1427
1448
|
try {
|
|
@@ -1449,7 +1470,7 @@ var HeaderFooterProvider = (props) => {
|
|
|
1449
1470
|
setLoading(false);
|
|
1450
1471
|
}
|
|
1451
1472
|
},
|
|
1452
|
-
[props.page]
|
|
1473
|
+
[props.page, themeConfig.theme.id, token]
|
|
1453
1474
|
);
|
|
1454
1475
|
useEffect(() => {
|
|
1455
1476
|
getThemeConfig();
|
|
@@ -1457,7 +1478,13 @@ var HeaderFooterProvider = (props) => {
|
|
|
1457
1478
|
return /* @__PURE__ */ jsx(
|
|
1458
1479
|
HeaderFooterContext.Provider,
|
|
1459
1480
|
{
|
|
1460
|
-
value: {
|
|
1481
|
+
value: {
|
|
1482
|
+
headerConfig,
|
|
1483
|
+
footerConfig,
|
|
1484
|
+
onUpdateThemeContent,
|
|
1485
|
+
loading,
|
|
1486
|
+
announcementConfig
|
|
1487
|
+
},
|
|
1461
1488
|
children: loading ? null : props.children
|
|
1462
1489
|
}
|
|
1463
1490
|
);
|
|
@@ -1917,5 +1944,5 @@ var BaseProvider = ({
|
|
|
1917
1944
|
};
|
|
1918
1945
|
|
|
1919
1946
|
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-
|
|
1921
|
-
//# sourceMappingURL=chunk-
|
|
1947
|
+
//# sourceMappingURL=chunk-ID4JKOXT.js.map
|
|
1948
|
+
//# sourceMappingURL=chunk-ID4JKOXT.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-ID4JKOXT.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 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 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 [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 fetchFilterConfig = async () => {\n setFilterConfigLoading(true);\n const response = await api.getProductFilterConfig();\n setFilterConfig(response);\n setFilterConfigLoading(false);\n };\n\n useEffect(() => {\n fetchFilterConfig();\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 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 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 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 limit,\n offset,\n ]);\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 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
|
@@ -953,6 +953,8 @@ var HomeConfigProvider = (props) => {
|
|
|
953
953
|
const getThemeConfig = react.useCallback(async () => {
|
|
954
954
|
if (!hasInitial) {
|
|
955
955
|
setLoading(true);
|
|
956
|
+
} else {
|
|
957
|
+
return;
|
|
956
958
|
}
|
|
957
959
|
try {
|
|
958
960
|
const response = await api$1.retrieveThemeContent(
|
|
@@ -969,7 +971,7 @@ var HomeConfigProvider = (props) => {
|
|
|
969
971
|
}
|
|
970
972
|
setIsInitialized(true);
|
|
971
973
|
} catch (error) {
|
|
972
|
-
console.
|
|
974
|
+
console.log("Error fetching theme content:", error);
|
|
973
975
|
} finally {
|
|
974
976
|
setLoading(false);
|
|
975
977
|
}
|
|
@@ -1073,11 +1075,17 @@ var HomeConfigHeroSliderContext = react.createContext({
|
|
|
1073
1075
|
onUpdateHeroSlider: () => null
|
|
1074
1076
|
});
|
|
1075
1077
|
var HomeConfigHeroSliderProvider = (props) => {
|
|
1076
|
-
const
|
|
1077
|
-
const [
|
|
1078
|
+
const hasInitial = Array.isArray(props.initialThemeContent?.data);
|
|
1079
|
+
const [loading, setLoading] = react.useState(!hasInitial);
|
|
1080
|
+
const [heroSliderConfigData, setHeroSliderConfigData] = react.useState(
|
|
1081
|
+
() => hasInitial ? props.initialThemeContent.data : []
|
|
1082
|
+
);
|
|
1078
1083
|
const { token } = useThemeEdit();
|
|
1079
1084
|
const themeConfig = react.useContext(BusinessConfigContext);
|
|
1080
|
-
const getHeroSliderConfig = async () => {
|
|
1085
|
+
const getHeroSliderConfig = react.useCallback(async () => {
|
|
1086
|
+
if (hasInitial) {
|
|
1087
|
+
return;
|
|
1088
|
+
}
|
|
1081
1089
|
setLoading(true);
|
|
1082
1090
|
try {
|
|
1083
1091
|
const response = await api$1.retrieveThemeContent(
|
|
@@ -1085,13 +1093,15 @@ var HomeConfigHeroSliderProvider = (props) => {
|
|
|
1085
1093
|
"hero_slider"
|
|
1086
1094
|
);
|
|
1087
1095
|
setHeroSliderConfigData(response.data);
|
|
1096
|
+
} catch (error) {
|
|
1097
|
+
console.error("Error fetching hero slider content:", error);
|
|
1088
1098
|
} finally {
|
|
1089
1099
|
setLoading(false);
|
|
1090
1100
|
}
|
|
1091
|
-
};
|
|
1101
|
+
}, [themeConfig.theme.id, hasInitial]);
|
|
1092
1102
|
react.useEffect(() => {
|
|
1093
1103
|
getHeroSliderConfig();
|
|
1094
|
-
}, []);
|
|
1104
|
+
}, [getHeroSliderConfig]);
|
|
1095
1105
|
const onUpdateHeroSlider = async (configToUpdate) => {
|
|
1096
1106
|
setLoading(true);
|
|
1097
1107
|
try {
|
|
@@ -1422,13 +1432,24 @@ var HeaderFooterContext = react.createContext({
|
|
|
1422
1432
|
announcementConfig: {}
|
|
1423
1433
|
});
|
|
1424
1434
|
var HeaderFooterProvider = (props) => {
|
|
1425
|
-
const
|
|
1426
|
-
const
|
|
1427
|
-
const [
|
|
1435
|
+
const hasInitial = props.initialThemeContent != null && "data" in props.initialThemeContent;
|
|
1436
|
+
const initialData = hasInitial ? props.initialThemeContent.data ?? {} : {};
|
|
1437
|
+
const [headerConfig, setHeaderConfig] = react.useState(
|
|
1438
|
+
() => props.page === "header" ? initialData : {}
|
|
1439
|
+
);
|
|
1440
|
+
const [footerConfig, setFooterConfig] = react.useState(
|
|
1441
|
+
() => props.page === "footer" ? initialData : {}
|
|
1442
|
+
);
|
|
1443
|
+
const [announcementConfig, setAnnouncementConfig] = react.useState(
|
|
1444
|
+
() => props.page === "announcement" ? initialData : {}
|
|
1445
|
+
);
|
|
1428
1446
|
const { token } = useThemeEdit();
|
|
1429
1447
|
const themeConfig = useBusiness();
|
|
1430
|
-
const [loading, setLoading] = react.useState(
|
|
1448
|
+
const [loading, setLoading] = react.useState(!hasInitial);
|
|
1431
1449
|
const getThemeConfig = react.useCallback(async () => {
|
|
1450
|
+
if (hasInitial) {
|
|
1451
|
+
return;
|
|
1452
|
+
}
|
|
1432
1453
|
setLoading(true);
|
|
1433
1454
|
try {
|
|
1434
1455
|
const response = await api.api.retrieveThemeContent(
|
|
@@ -1443,7 +1464,7 @@ var HeaderFooterProvider = (props) => {
|
|
|
1443
1464
|
} finally {
|
|
1444
1465
|
setLoading(false);
|
|
1445
1466
|
}
|
|
1446
|
-
}, [themeConfig.theme.id]);
|
|
1467
|
+
}, [themeConfig.theme.id, hasInitial, props.page]);
|
|
1447
1468
|
const onUpdateThemeContent = react.useCallback(
|
|
1448
1469
|
async (configToUpdate) => {
|
|
1449
1470
|
try {
|
|
@@ -1471,7 +1492,7 @@ var HeaderFooterProvider = (props) => {
|
|
|
1471
1492
|
setLoading(false);
|
|
1472
1493
|
}
|
|
1473
1494
|
},
|
|
1474
|
-
[props.page]
|
|
1495
|
+
[props.page, themeConfig.theme.id, token]
|
|
1475
1496
|
);
|
|
1476
1497
|
react.useEffect(() => {
|
|
1477
1498
|
getThemeConfig();
|
|
@@ -1479,7 +1500,13 @@ var HeaderFooterProvider = (props) => {
|
|
|
1479
1500
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1480
1501
|
HeaderFooterContext.Provider,
|
|
1481
1502
|
{
|
|
1482
|
-
value: {
|
|
1503
|
+
value: {
|
|
1504
|
+
headerConfig,
|
|
1505
|
+
footerConfig,
|
|
1506
|
+
onUpdateThemeContent,
|
|
1507
|
+
loading,
|
|
1508
|
+
announcementConfig
|
|
1509
|
+
},
|
|
1483
1510
|
children: loading ? null : props.children
|
|
1484
1511
|
}
|
|
1485
1512
|
);
|