{"version":3,"sources":["../../src/providers/address_provider.tsx","../../src/providers/buzzebees_service_provider.tsx","../../src/providers/alert_provider.tsx","../../src/providers/analytics_provider.tsx","../../src/providers/auth_provider.tsx","../../src/providers/locale_provider.tsx","../../src/utils/locale.ts","../../src/providers/campaign_detail_provider.tsx","../../src/constant.tsx","../../src/providers/user_provider.tsx","../../src/service/bzbs_service.ts","../../src/providers/campaigns_provider.tsx","../../src/providers/cart_provider.tsx","../../src/providers/categories_provider.tsx","../../src/providers/confirm_provider.tsx","../../src/providers/consent_provider.tsx","../../src/providers/coupon_provider.tsx","../../src/providers/dashboard_provider.tsx","../../src/providers/default_main_app_provider.tsx","../../src/utils/analytics.ts","../../src/stores/analytics.store.ts","../../src/utils/string_utils.ts","../../src/utils/purchase_utils.tsx","../../src/providers/loading_indicator_provider.tsx","../../src/providers/maintenance_provider.tsx","../../src/providers/notification_provider.tsx","../../src/providers/point_log_provider.tsx","../../src/providers/popup_provider.tsx","../../src/providers/registration_provider.tsx","../../src/providers/zipcode_provider.tsx","../../src/providers/purchase_provider.tsx"],"sourcesContent":["import { Address, ErrorResponse, ServiceResponse } from '@bzbs/react-api-client';\nimport React, { createContext, useContext, useState } from 'react';\nimport { useBuzzebeesServiceContext } from './buzzebees_service_provider';\n\nexport type AddressContextType = {\n  addresses: Address[];\n  taxAddresses: Address[];\n  isLoading: boolean;\n  error: ErrorResponse | null;\n  actions: {\n    fetchAddresses: () => Promise<ServiceResponse<Address[]>>;\n    addAddress: (address: AddressFormData) => Promise<ServiceResponse<Address>>;\n    editAddress: (address: AddressFormData) => Promise<ServiceResponse<Address>>;\n    deleteAddress: (rowKey: string) => Promise<ServiceResponse<any>>;\n    fetchTaxAddresses: () => Promise<ServiceResponse<Address[]>>;\n    addTaxAddress: (address: AddressFormData) => Promise<ServiceResponse<Address>>;\n    editTaxAddress: (address: AddressFormData) => Promise<ServiceResponse<Address>>;\n    deleteTaxAddress: (rowKey: string) => Promise<ServiceResponse<any>>;\n  };\n};\n\nexport type AddressFormData = {\n  addressName?: string;\n  firstName?: string;\n  lastName?: string;\n  address?: string;\n  zipcode?: string;\n  provinceCode?: string;\n  provinceName?: string;\n  districtCode?: string;\n  districtName?: string;\n  subDistrictCode?: string;\n  subDistrictName?: string;\n  contactNumber?: string;\n  countryCode?: string;\n  countryName?: string;\n  isDefault?: boolean;\n  rowKey?: string;\n};\n\nconst AddressContext = createContext<AddressContextType>({\n  addresses: [],\n  taxAddresses: [],\n  isLoading: false,\n  error: null,\n  actions: {\n    fetchAddresses: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    addAddress: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    editAddress: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    deleteAddress: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    fetchTaxAddresses: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    addTaxAddress: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    editTaxAddress: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    deleteTaxAddress: async () => ({ type: 'client-error', message: 'Not implemented' }),\n  },\n});\n\nexport function useAddressContext() {\n  return useContext(AddressContext);\n}\n\nexport function AddressProvider({ children }: { children: React.ReactNode }) {\n  const [addresses, setAddresses] = useState<Address[]>([]);\n  const [taxAddresses, setTaxAddresses] = useState<Address[]>([]);\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<ErrorResponse | null>(null);\n\n  const { bzbsService } = useBuzzebeesServiceContext();\n\n  const fetchAddresses = async (): Promise<ServiceResponse<Address[]>> => {\n    setIsLoading(true);\n    const response = await bzbsService.addressApi.userAddresses();\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setAddresses(response.model);\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const addAddress = async (addressForm: AddressFormData): Promise<ServiceResponse<Address>> => {\n    setIsLoading(true);\n    const response = await bzbsService.addressApi.updateAddress({\n      ...addressForm,\n      rowKey: '',\n    });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      fetchAddresses();\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const editAddress = async (addressForm: AddressFormData): Promise<ServiceResponse<Address>> => {\n    setIsLoading(true);\n    const response = await bzbsService.addressApi.updateAddress({\n      ...addressForm,\n    });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      fetchAddresses();\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const deleteAddress = async (rowKey: string): Promise<ServiceResponse<any>> => {\n    setIsLoading(true);\n    const response = await bzbsService.addressApi.deleteAddress({ rowKey });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      fetchAddresses();\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const fetchTaxAddresses = async (): Promise<ServiceResponse<Address[]>> => {\n    setIsLoading(true);\n    const response = await bzbsService.addressApi.userTaxAddresses();\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setTaxAddresses(response.model);\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const addTaxAddress = async (addressForm: AddressFormData): Promise<ServiceResponse<Address>> => {\n    setIsLoading(true);\n    const response = await bzbsService.addressApi.updateTaxAddress({\n      ...addressForm,\n      rowKey: '',\n    });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      fetchTaxAddresses();\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const editTaxAddress = async (addressForm: AddressFormData): Promise<ServiceResponse<Address>> => {\n    setIsLoading(true);\n    const response = await bzbsService.addressApi.updateTaxAddress({\n      ...addressForm,\n      rowKey: addressForm.rowKey || '',\n    });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      fetchTaxAddresses();\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const deleteTaxAddress = async (rowKey: string): Promise<ServiceResponse<any>> => {\n    setIsLoading(true);\n    const response = await bzbsService.addressApi.deleteTaxAddress({ rowKey });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      fetchTaxAddresses();\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  return (\n    <AddressContext.Provider\n      value={{\n        addresses,\n        taxAddresses,\n        isLoading,\n        error,\n        actions: {\n          fetchAddresses,\n          addAddress,\n          editAddress,\n          deleteAddress,\n          fetchTaxAddresses,\n          addTaxAddress,\n          editTaxAddress,\n          deleteTaxAddress,\n        },\n      }}\n    >\n      {children}\n    </AddressContext.Provider>\n  );\n}\n","import { BzbsService } from '@bzbs/react-api-client';\nimport React, { createContext, useContext } from 'react';\n\nexport type BuzzebeesServiceContextType = {\n  appId: string;\n  appName: string;\n  bzbsService: BzbsService;\n  urls: {\n    webCallback: string;\n    cart: string;\n  };\n};\n\nexport const BuzzebeesServiceContext = createContext<BuzzebeesServiceContextType>({\n  appId: '',\n  appName: '',\n  bzbsService: {} as BzbsService,\n  urls: {\n    webCallback: '',\n    cart: '',\n  },\n});\n\nexport function useBuzzebeesServiceContext() {\n  return useContext(BuzzebeesServiceContext);\n}\n\nexport type BuzzebeesServiceProviderProps = {\n  appId: string;\n  appName: string;\n  bzbsService: BzbsService;\n  urls: {\n    webCallback: string;\n    cart: string;\n  };\n  children: React.ReactNode;\n};\n\nexport function BuzzebeesServiceProvider({\n  appId,\n  appName,\n  bzbsService,\n  urls,\n  children,\n}: BuzzebeesServiceProviderProps) {\n  return (\n    <BuzzebeesServiceContext.Provider\n      value={{\n        appId,\n        appName,\n        urls,\n        bzbsService,\n      }}\n    >\n      {children}\n    </BuzzebeesServiceContext.Provider>\n  );\n}\n","import React, { ReactNode, createContext, useContext, useState } from 'react';\n\nexport type AlertRequest = {\n  title: string;\n  content: string;\n  closeText?: string;\n  onClose: () => void;\n};\n\nexport type AlertContextType = {\n  isOpen: boolean;\n  alertRequest: AlertRequest;\n  openAlert: (request: AlertRequest) => void;\n  closeAlert: () => void;\n};\n\nexport const AlertContext = createContext({\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  openAlert: (request: AlertRequest) => {},\n  closeAlert: () => {},\n} as AlertContextType);\n\nexport const useAlertContext = () => {\n  return useContext(AlertContext);\n};\n\nexport const AlertProvider = ({ children }: { children: ReactNode }) => {\n  const [isAlertOpen, setIsAlertOpen] = useState(false);\n\n  const [alertRequest, setAlertRequest] = useState<AlertRequest>({\n    title: '',\n    content: '',\n    onClose: () => {},\n  });\n\n  const openAlert = (request: AlertRequest) => {\n    setAlertRequest(request);\n    setIsAlertOpen(true);\n  };\n\n  const closeAlert = () => {\n    alertRequest.onClose();\n    setIsAlertOpen(false);\n  };\n\n  return (\n    <AlertContext.Provider\n      value={{\n        isOpen: isAlertOpen,\n        alertRequest: alertRequest,\n        openAlert: openAlert,\n        closeAlert: closeAlert,\n      }}\n    >\n      {children}\n    </AlertContext.Provider>\n  );\n};\n","import type { UserInfo } from 'matomo-tracker-react-native';\nimport MatomoTracker, { MatomoProvider, useMatomo } from 'matomo-tracker-react-native';\nimport React, { createContext, useContext, useState } from 'react';\n\nexport type AnalyticsEventParams = {\n  action: string;\n  name?: string;\n  category?: string;\n  value?: number;\n  campaign?: string;\n  userInfo?: UserInfo;\n};\n\nexport type AnalyticsPageViewParams = {\n  name: string;\n  url?: string;\n  userInfo?: UserInfo;\n};\n\nexport type AnalyticsContextType = {\n  isInitialized: boolean;\n  isEnabled: boolean;\n  userId?: string;\n  presetUserInfo?: UserInfo;\n  actions: {\n    setEnabled: (enabled: boolean) => void;\n    setPresetUserInfo: (userInfo: UserInfo) => void;\n    clearPresetUserInfo: () => void;\n    trackAppStart: (userInfo?: UserInfo) => Promise<void>;\n    trackEvent: (params: AnalyticsEventParams) => Promise<void>;\n    trackScreenView: (params: AnalyticsPageViewParams) => Promise<void>;\n    trackAction: (params: AnalyticsPageViewParams) => Promise<void>;\n    trackSiteSearch: (params: {\n      keyword: string;\n      category?: string;\n      count?: number;\n      userInfo?: UserInfo;\n    }) => Promise<void>;\n    trackLink: (params: { link: string; userInfo?: UserInfo }) => Promise<void>;\n    trackDownload: (params: { download: string; userInfo?: UserInfo }) => Promise<void>;\n    setUserId: (userId: string | null) => void;\n    setCustomDimension: (id: number, value: string) => void;\n    reset: () => void;\n  };\n};\n\nexport const AnalyticsContext = createContext<AnalyticsContextType>({\n  isInitialized: false,\n  isEnabled: true,\n  actions: {\n    setEnabled: () => {},\n    setPresetUserInfo: () => {},\n    clearPresetUserInfo: () => {},\n    trackAppStart: async () => {},\n    trackEvent: async () => {},\n    trackScreenView: async () => {},\n    trackAction: async () => {},\n    trackSiteSearch: async () => {},\n    trackLink: async () => {},\n    trackDownload: async () => {},\n    setUserId: () => {},\n    setCustomDimension: () => {},\n    reset: () => {},\n  },\n});\n\nexport function useAnalyticsContext() {\n  return useContext(AnalyticsContext);\n}\n\n// Inner component that has access to Matomo\nfunction AnalyticsInner({\n  children,\n  userId,\n  enableLogging,\n}: {\n  children: React.ReactNode;\n  userId?: string;\n  enableLogging?: boolean;\n}) {\n  const { trackEvent, trackScreenView, trackAppStart, trackAction, trackSiteSearch, trackLink, trackDownload } =\n    useMatomo();\n  const [isEnabled, setIsEnabled] = useState(true);\n  const [userIdState, setUserIdState] = useState<string | undefined>(userId);\n  const [presetUserInfo, setPresetUserInfoState] = useState<UserInfo | undefined>(undefined);\n  const [log] = useState(enableLogging || false);\n\n  const handleSetEnabled = (enabled: boolean) => {\n    setIsEnabled(enabled);\n  };\n\n  const handleSetPresetUserInfo = (userInfo: UserInfo) => {\n    setPresetUserInfoState(userInfo);\n  };\n\n  const handleClearPresetUserInfo = () => {\n    setPresetUserInfoState(undefined);\n  };\n\n  const handleTrackAppStart = async (userInfo?: UserInfo) => {\n    if (!userIdState || !isEnabled) {\n      if (log) {\n        console.debug('Analytics: Track App Start skipped - not initialized or disabled');\n      }\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...presetUserInfo, ...userInfo };\n\n      await trackAppStart({\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (log) {\n        console.debug('Analytics: App start tracked successfully', { userInfo: mergedUserInfo });\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track app start', error);\n    }\n  };\n\n  const handleTrackEvent = async (params: AnalyticsEventParams) => {\n    if (!userIdState || !isEnabled) {\n      if (log) {\n        console.debug('Analytics: Track Event skipped - not initialized or disabled', params);\n      }\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...presetUserInfo, ...params.userInfo };\n\n      await trackEvent({\n        category: params.category || 'User Action',\n        action: params.action,\n        name: params.name,\n        value: params.value,\n        campaign: params.campaign,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (log) {\n        console.debug('Analytics: Event tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track event', error, params);\n    }\n  };\n\n  const handleTrackScreenView = async (params: AnalyticsPageViewParams) => {\n    if (!userIdState || !isEnabled) {\n      if (log) {\n        console.debug('Analytics: Track Screen View skipped - not initialized or disabled', params);\n      }\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...presetUserInfo, ...params.userInfo };\n\n      await trackScreenView({\n        name: params.name,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (log) {\n        console.debug('Analytics: Screen view tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track screen view', error, params);\n    }\n  };\n\n  const handleTrackAction = async (params: AnalyticsPageViewParams) => {\n    if (!userIdState || !isEnabled) {\n      if (log) {\n        console.debug('Analytics: Track Action skipped - not initialized or disabled', params);\n      }\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...presetUserInfo, ...params.userInfo };\n\n      await trackAction({\n        name: params.name,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (log) {\n        console.debug('Analytics: Action tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track action', error, params);\n    }\n  };\n\n  const handleTrackSiteSearch = async (params: {\n    keyword: string;\n    category?: string;\n    count?: number;\n    userInfo?: UserInfo;\n  }) => {\n    if (!userIdState || !isEnabled) {\n      if (log) {\n        console.debug('Analytics: Track Site Search skipped - not initialized or disabled', params);\n      }\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...presetUserInfo, ...params.userInfo };\n\n      await trackSiteSearch({\n        keyword: params.keyword,\n        category: params.category,\n        count: params.count,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (log) {\n        console.debug('Analytics: Site search tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track site search', error, params);\n    }\n  };\n\n  const handleTrackLink = async (params: { link: string; userInfo?: UserInfo }) => {\n    if (!userIdState || !isEnabled) {\n      if (log) {\n        console.debug('Analytics: Track Link skipped - not initialized or disabled', params);\n      }\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...presetUserInfo, ...params.userInfo };\n\n      await trackLink({\n        link: params.link,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (log) {\n        console.debug('Analytics: Link tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track link', error, params);\n    }\n  };\n\n  const handleTrackDownload = async (params: { download: string; userInfo?: UserInfo }) => {\n    if (!userIdState || !isEnabled) {\n      if (log) {\n        console.debug('Analytics: Track Download skipped - not initialized or disabled', params);\n      }\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...presetUserInfo, ...params.userInfo };\n\n      await trackDownload({\n        download: params.download,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (log) {\n        console.debug('Analytics: Download tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track download', error, params);\n    }\n  };\n\n  const handleSetUserId = (userId: string | null) => {\n    setUserIdState(userId || undefined);\n\n    // Update preset userInfo with the new userId\n    if (userId) {\n      setPresetUserInfoState((prev) => ({\n        ...prev,\n        uid: userId,\n      }));\n    } else {\n      // Remove uid from preset userInfo if userId is null\n      setPresetUserInfoState((prev) => {\n        if (prev?.uid) {\n          const updatedUserInfo = { ...prev };\n          delete updatedUserInfo.uid;\n          return Object.keys(updatedUserInfo).length > 0 ? updatedUserInfo : undefined;\n        }\n        return prev;\n      });\n    }\n\n    if (log) {\n      console.debug('Analytics: User ID updated in preset userInfo', userId);\n    }\n  };\n\n  const handleSetCustomDimension = (id: number, value: string) => {\n    if (!presetUserInfo) {\n      setPresetUserInfoState({ [`dimension${id}`]: value });\n    } else {\n      setPresetUserInfoState({\n        ...presetUserInfo,\n        [`dimension${id}`]: value,\n      });\n    }\n\n    if (log) {\n      console.debug('Analytics: Custom dimension set in preset userInfo', { id, value });\n    }\n  };\n\n  const reset = () => {\n    setUserIdState(undefined);\n    setPresetUserInfoState(undefined);\n    setIsEnabled(true);\n\n    console.debug('Analytics: Provider reset successfully');\n  };\n\n  const contextValue: AnalyticsContextType = {\n    isInitialized: true, // Always true since initialization is handled by MatomoProvider\n    isEnabled,\n    userId: userIdState,\n    presetUserInfo,\n    actions: {\n      setEnabled: handleSetEnabled,\n      setPresetUserInfo: handleSetPresetUserInfo,\n      clearPresetUserInfo: handleClearPresetUserInfo,\n      trackAppStart: handleTrackAppStart,\n      trackEvent: handleTrackEvent,\n      trackScreenView: handleTrackScreenView,\n      trackAction: handleTrackAction,\n      trackSiteSearch: handleTrackSiteSearch,\n      trackLink: handleTrackLink,\n      trackDownload: handleTrackDownload,\n      setUserId: handleSetUserId,\n      setCustomDimension: handleSetCustomDimension,\n      reset,\n    },\n  };\n\n  return <AnalyticsContext.Provider value={contextValue}>{children}</AnalyticsContext.Provider>;\n}\n\nexport type AnalyticsProviderProps = {\n  children: React.ReactNode;\n  disabled?: boolean;\n  instance?: MatomoTracker;\n  userId?: string;\n  enableLogging?: boolean;\n};\n\nexport function AnalyticsProvider({\n  children,\n  disabled = false,\n  instance,\n  userId,\n  enableLogging = false,\n}: AnalyticsProviderProps) {\n  // If analytics is disabled, provide a no-op context\n  if (disabled) {\n    const noOpContextValue: AnalyticsContextType = {\n      isInitialized: false,\n      isEnabled: false,\n      actions: {\n        setEnabled: () => {},\n        setPresetUserInfo: () => {},\n        clearPresetUserInfo: () => {},\n        trackAppStart: async () => {},\n        trackEvent: async () => {},\n        trackScreenView: async () => {},\n        trackAction: async () => {},\n        trackSiteSearch: async () => {},\n        trackLink: async () => {},\n        trackDownload: async () => {},\n        setUserId: () => {},\n        setCustomDimension: () => {},\n        reset: () => {},\n      },\n    };\n\n    return <AnalyticsContext.Provider value={noOpContextValue}>{children}</AnalyticsContext.Provider>;\n  }\n\n  // Use provided instance or create a default placeholder\n  const matomoInstance =\n    instance ||\n    new MatomoTracker({\n      urlBase: 'https://placeholder.com',\n      siteId: 1,\n      disabled: true, // Disabled until properly initialized\n    });\n\n  return (\n    <MatomoProvider instance={matomoInstance}>\n      <AnalyticsInner userId={userId} enableLogging={enableLogging}>\n        {children}\n      </AnalyticsInner>\n    </MatomoProvider>\n  );\n}\n","import {\n  ConfirmOtpResponse,\n  ErrorResponse,\n  ForgetPasswordResponse,\n  LoginResponse,\n  OtpResponse,\n  ResumeResponse,\n  ServiceResponse,\n  StatusResponse,\n  ValidateOtpResponse,\n  Version,\n} from '@bzbs/react-api-client';\nimport React, { createContext, useContext, useRef, useState } from 'react';\nimport { LoginResponseHandler } from '../types';\nimport { useBuzzebeesServiceContext } from './buzzebees_service_provider';\nimport { useAppLocaleContext } from './locale_provider';\nimport { useAnalyticsContext } from './analytics_provider';\n\nexport type AuthContextType = {\n  isInitialized: boolean;\n  versionData?: Version | null;\n  isLoading: boolean;\n  token: string | null;\n  isLoadingToken: boolean;\n  isLoggedIn: boolean;\n  error: ErrorResponse | null;\n  actions: {\n    init(uuid: string, appId: string, deviceToken: string): void;\n    setUUID(value: string): void;\n    setAppId(value: string): void;\n    setDeviceToken(value: string): void;\n    setClientVersion(value: string): void;\n    setOs(value: string): void;\n    setPlatform(value: string): void;\n    setError(value: unknown): void;\n    setLoginResponseHandler(fn: LoginResponseHandler): void;\n    clearData: () => void;\n    loginWithUsernamePassword: (username: string, password: string) => Promise<ServiceResponse<LoginResponse>>;\n    loginWithGoogle: (token: string) => Promise<ServiceResponse<LoginResponse>>;\n    loginWithFacebook: (token: string) => Promise<ServiceResponse<LoginResponse>>;\n    loginWithApple: (token: string, refreshToken: string) => Promise<ServiceResponse<LoginResponse>>;\n    loginWithUUID: () => Promise<ServiceResponse<LoginResponse>>;\n    logout: () => Promise<ServiceResponse<unknown>>;\n    forgetPassword: (\n      contact: string,\n      type: 'email' | 'contact_number'\n    ) => Promise<ServiceResponse<ForgetPasswordResponse>>;\n    resetPassword: (\n      contact: string,\n      otp: string,\n      refCode: string,\n      password: string\n    ) => Promise<ServiceResponse<StatusResponse>>;\n    sendOtp: (contact: string) => Promise<ServiceResponse<OtpResponse>>;\n    validateOtp: (\n      otp: string,\n      refCode: string,\n      contact: string,\n      channel: string\n    ) => Promise<ServiceResponse<ValidateOtpResponse>>;\n    confirmOtp: (otp: string, refCode: string, contact: string) => Promise<ServiceResponse<ConfirmOtpResponse>>;\n    resume: (clientVersion: string) => Promise<ServiceResponse<ResumeResponse>>;\n    version: (clientVersion: string) => Promise<ServiceResponse<Version>>;\n  };\n};\n\nexport const AuthContext = createContext({\n  isInitialized: false,\n  authData: null,\n  versionData: null,\n  isLoading: false,\n  isLoggedIn: false,\n  error: null,\n  token: null,\n  isLoadingToken: false,\n  actions: {\n    init: () => {},\n    setUUID: () => {},\n    setAppId: () => {},\n    setDeviceToken: () => {},\n    setClientVersion: () => {},\n    setOs: () => {},\n    setPlatform: () => {},\n    setError: () => {},\n    setLoginResponseHandler: () => {},\n    clearData: () => {},\n    loginWithUsernamePassword: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    loginWithGoogle: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    loginWithFacebook: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    loginWithApple: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    loginWithUUID: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    logout: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    forgetPassword: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    resetPassword: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    sendOtp: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    validateOtp: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    confirmOtp: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    resume: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    version: async () => ({ type: 'client-error', message: 'Not implemented' }),\n  },\n} as AuthContextType);\n\nexport function useAuthContext() {\n  return useContext(AuthContext);\n}\n\ntype getTokenFunction = () => Promise<string | null>;\ntype setTokenFunction = (token: string) => void;\ntype removeTokenFunction = () => void;\n\nexport type TokenFunctions = {\n  getToken: getTokenFunction;\n  setToken: setTokenFunction;\n  removeToken: removeTokenFunction;\n};\n\nexport function AuthProvider({\n  tokenFunctions,\n  children,\n}: {\n  tokenFunctions: TokenFunctions;\n  children: React.ReactNode;\n}) {\n  const [versionData, setVersionData] = useState<Version | null>(null);\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<ErrorResponse | null>(null);\n  const [isLoggedIn, setIsLoggedIn] = useState(false);\n  const [isLoadingToken, setIsLoadingToken] = useState(false);\n  const [token, setToken] = useState<string | null>(null);\n  const [isInitialized, setIsInitialized] = useState(false);\n\n  const [loginResponseHandler, setLoginResponseHandler] = useState<LoginResponseHandler>(() => {});\n\n  const { bzbsService } = useBuzzebeesServiceContext();\n  const { localeId } = useAppLocaleContext();\n  const { actions: analyticsActions } = useAnalyticsContext();\n  const uuid = useRef<string>('');\n  const appId = useRef<string>('');\n  const deviceToken = useRef<string>('');\n  const clientVersion = useRef<string>('');\n  const os = useRef<string>('');\n  const platform = useRef<string>('');\n\n  const setUUID = (value: string) => {\n    uuid.current = value;\n  };\n\n  const setAppId = (value: string) => {\n    appId.current = value;\n  };\n\n  const setDeviceToken = (value: string) => {\n    deviceToken.current = value;\n  };\n\n  const setClientVersion = (value: string) => {\n    clientVersion.current = value;\n  };\n\n  const setOs = (value: string) => {\n    os.current = value;\n  };\n\n  const setPlatform = (value: string) => {\n    platform.current = value;\n  };\n\n  const init = (uuid: string, appId: string, deviceToken: string) => {\n    setUUID(uuid);\n    setAppId(appId);\n    setDeviceToken(deviceToken);\n    checkLoggedIn();\n  };\n\n  const checkLoggedIn = async () => {\n    try {\n      setIsLoadingToken(true);\n      const savedToken = await tokenFunctions.getToken();\n      setIsLoadingToken(false);\n      if (savedToken) {\n        setIsLoggedIn(true);\n      } else {\n        setIsLoggedIn(false);\n      }\n      setToken(savedToken);\n    } catch (error) {\n      setIsLoggedIn(false);\n    }\n\n    setIsInitialized(true);\n  };\n\n  const clearData = () => {\n    setVersionData(null);\n    setError(null);\n    setIsLoading(false);\n    setIsLoggedIn(false);\n    setToken(null);\n  };\n\n  const login = async (\n    loginFn: () => Promise<ServiceResponse<LoginResponse>>\n  ): Promise<ServiceResponse<LoginResponse>> => {\n    setIsLoading(true);\n    const response = await loginFn();\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      tokenFunctions.setToken(response.model.token);\n      setToken(response.model.token);\n      setIsLoggedIn(true);\n      setError(null);\n      loginResponseHandler(response.model);\n      analyticsActions.trackEvent({\n        action: 'on_click',\n        name: 'login_success',\n        category: 'login',\n      });\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const loginWithUsernamePassword = async (\n    username: string,\n    password: string\n  ): Promise<ServiceResponse<LoginResponse>> => {\n    const response = await login(() =>\n      bzbsService.authApi.usernamePasswordLogin({\n        username: username,\n        password: password,\n        appId: appId.current,\n        uuid: uuid.current,\n        deviceToken: deviceToken.current,\n        clientVersion: clientVersion.current,\n        os: os.current,\n        platform: platform.current,\n        deviceLocale: localeId.toString(),\n        deviceNotificationEnabled: true,\n      })\n    );\n\n    return response;\n  };\n\n  const loginWithGoogle = async (token: string): Promise<ServiceResponse<LoginResponse>> => {\n    const response = await login(() =>\n      bzbsService.authApi.googleLogin({\n        idToken: token,\n        appId: appId.current,\n        uuid: uuid.current,\n        deviceToken: deviceToken.current,\n        clientVersion: clientVersion.current,\n        os: os.current,\n        platform: platform.current,\n        deviceLocale: localeId.toString(),\n        deviceNotificationEnabled: true,\n      })\n    );\n\n    return response;\n  };\n\n  const loginWithFacebook = async (token: string): Promise<ServiceResponse<LoginResponse>> => {\n    const response = await login(() =>\n      bzbsService.authApi.facebookLogin({\n        accessToken: token,\n        appId: appId.current,\n        uuid: uuid.current,\n        deviceToken: deviceToken.current,\n        clientVersion: clientVersion.current,\n        os: os.current,\n        platform: platform.current,\n        deviceLocale: localeId.toString(),\n        deviceNotificationEnabled: true,\n      })\n    );\n\n    return response;\n  };\n\n  const loginWithApple = async (token: string, refreshToken: string): Promise<ServiceResponse<LoginResponse>> => {\n    const response = await login(() =>\n      bzbsService.authApi.appleLogin({\n        idToken: token,\n        refreshToken: refreshToken,\n        appId: appId.current,\n        uuid: uuid.current,\n        deviceToken: deviceToken.current,\n        clientVersion: clientVersion.current,\n        os: os.current,\n        platform: platform.current,\n        deviceLocale: localeId.toString(),\n        deviceNotificationEnabled: true,\n      })\n    );\n\n    return response;\n  };\n\n  const loginWithUUID = async (): Promise<ServiceResponse<LoginResponse>> => {\n    const response = await login(() =>\n      bzbsService.authApi.deviceLogin({\n        appId: appId.current,\n        uuid: uuid.current,\n        deviceToken: deviceToken.current,\n        clientVersion: clientVersion.current,\n        os: os.current,\n        platform: platform.current,\n        deviceLocale: localeId.toString(),\n        deviceNotificationEnabled: true,\n      })\n    );\n\n    return response;\n  };\n\n  const logout = async (): Promise<ServiceResponse<unknown>> => {\n    setIsLoading(true);\n    const response = await bzbsService.authApi.logout({ uuid: uuid.current });\n    setIsLoading(false);\n    tokenFunctions.removeToken();\n    setToken(null);\n    setIsLoggedIn(false);\n    setError(null);\n    return response;\n  };\n\n  const forgetPassword = async (\n    contact: string,\n    type: 'email' | 'contact_number'\n  ): Promise<ServiceResponse<ForgetPasswordResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.authApi.forgetPassword({ contact: contact, type: type });\n    setIsLoading(false);\n    return response;\n  };\n\n  const resetPassword = async (\n    contact: string,\n    otp: string,\n    refCode: string,\n    newPassword: string\n  ): Promise<ServiceResponse<StatusResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.authApi.resetPassword({\n      contact: contact,\n      refCode: refCode,\n      otp: otp,\n      newPassword: newPassword,\n    });\n    setIsLoading(false);\n    return response;\n  };\n\n  const sendOtp = async (contact: string): Promise<ServiceResponse<OtpResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.authApi.otp({\n      uuid: uuid.current,\n      appId: appId.current,\n      contactNumber: contact,\n    });\n    setIsLoading(false);\n    return response;\n  };\n\n  const validateOtp = async (\n    contact: string,\n    otp: string,\n    refCode: string,\n    channel: string\n  ): Promise<ServiceResponse<ValidateOtpResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.authApi.validateOtp({\n      appId: appId.current,\n      otp: otp,\n      refCode: refCode,\n      contactNumber: contact,\n      use: false,\n      channel: channel,\n    });\n    setIsLoading(false);\n    return response;\n  };\n\n  const confirmOtp = async (\n    contact: string,\n    otp: string,\n    refCode: string\n  ): Promise<ServiceResponse<ConfirmOtpResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.authApi.confirmOtp({ otp: otp, refCode: refCode, contactNumber: contact });\n    setIsLoading(false);\n    return response;\n  };\n\n  const resume = async (clientVersion: string): Promise<ServiceResponse<ResumeResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.authApi.resume({\n      uuid: uuid.current,\n      appId: appId.current,\n      clientVersion: clientVersion,\n      deviceToken: deviceToken.current,\n    });\n    setIsLoading(false);\n    return response;\n  };\n\n  const version = async (clientVersion: string): Promise<ServiceResponse<Version>> => {\n    setIsLoading(true);\n    const response = await bzbsService.authApi.version(clientVersion);\n    if (response.type === 'success') {\n      setVersionData(response.model);\n    }\n    setIsLoading(false);\n    return response;\n  };\n\n  return (\n    <AuthContext.Provider\n      value={{\n        isInitialized,\n        versionData,\n        isLoading,\n        isLoggedIn,\n        token,\n        isLoadingToken,\n        error,\n        actions: {\n          init,\n          setUUID,\n          setAppId,\n          setDeviceToken,\n          setClientVersion,\n          setOs,\n          setPlatform,\n          setError,\n          setLoginResponseHandler,\n          clearData,\n          loginWithUsernamePassword,\n          loginWithGoogle,\n          loginWithFacebook,\n          loginWithApple,\n          loginWithUUID,\n          logout,\n          forgetPassword,\n          resetPassword,\n          sendOtp,\n          validateOtp,\n          confirmOtp,\n          resume,\n          version,\n        },\n      }}\n    >\n      {children}\n    </AuthContext.Provider>\n  );\n}\n","import React, { createContext, ReactNode, useContext, useState } from 'react';\nimport { findBestLocaleFromString } from '../utils/locale';\n\nexport type AppLocale = {\n  locale: string;\n  localeId: number;\n};\n\nexport const EN = { locale: 'en', localeId: 1033 };\nexport const TH = { locale: 'th', localeId: 1054 };\n\nexport type LocaleContextType = {\n  appLocale: AppLocale;\n  locale: string;\n  localeId: number;\n  setAppLocale: (locale: AppLocale | string) => void;\n};\n\nexport const LocaleContext = createContext({\n  appLocale: EN,\n  locale: 'en',\n  localeId: 1033,\n  setAppLocale: () => {},\n} as LocaleContextType);\n\nexport const useAppLocaleContext = () => {\n  return useContext(LocaleContext);\n};\n\nexport const AppLocaleProvider = ({ initLocale, children }: { initLocale: AppLocale; children: ReactNode }) => {\n  const [locale, setLocale] = useState<AppLocale>(initLocale);\n\n  const setAppLocale = (locale: AppLocale | string) => {\n    if (typeof locale === 'string') {\n      setLocale(findBestLocaleFromString(locale));\n    } else {\n      setLocale(locale);\n    }\n  };\n\n  return (\n    <LocaleContext.Provider\n      value={{\n        appLocale: locale,\n        locale: locale.locale,\n        localeId: locale.localeId,\n        setAppLocale: setAppLocale,\n      }}\n    >\n      {children}\n    </LocaleContext.Provider>\n  );\n};\n","export const localeToLCIDMap: { [key: string]: number } = {\n  'ar-SA': 1025,\n  'bg-BG': 1026,\n  'ca-ES': 1027,\n  'zh-TW': 1028,\n  'cs-CZ': 1029,\n  'da-DK': 1030,\n  'de-DE': 1031,\n  'el-GR': 1032,\n  'en-US': 1033,\n  'es-ES': 1034,\n  'fi-FI': 1035,\n  'fr-FR': 1036,\n  'he-IL': 1037,\n  'hu-HU': 1038,\n  'is-IS': 1039,\n  'it-IT': 1040,\n  'ja-JP': 1041,\n  'ko-KR': 1042,\n  'nl-NL': 1043,\n  'nb-NO': 1044,\n  'pl-PL': 1045,\n  'pt-BR': 1046,\n  'rm-CH': 1047,\n  'ro-RO': 1048,\n  'ru-RU': 1049,\n  'hr-HR': 1050,\n  'sk-SK': 1051,\n  'sq-AL': 1052,\n  'sv-SE': 1053,\n  'th-TH': 1054,\n  'tr-TR': 1055,\n  'ur-PK': 1056,\n  'id-ID': 1057,\n  'uk-UA': 1058,\n  'be-BY': 1059,\n  'sl-SI': 1060,\n  'et-EE': 1061,\n  'lv-LV': 1062,\n  'lt-LT': 1063,\n  'tg-Cyrl-TJ': 1064,\n  'fa-IR': 1065,\n  'vi-VN': 1066,\n  'hy-AM': 1067,\n  'az-Latn-AZ': 1068,\n  'eu-ES': 1069,\n  'wen-DE': 1070,\n  'mk-MK': 1071,\n  'st-ZA': 1072,\n  'ts-ZA': 1073,\n  'tn-ZA': 1074,\n  'ven-ZA': 1075,\n  'xh-ZA': 1076,\n  'zu-ZA': 1077,\n  'af-ZA': 1078,\n  'ka-GE': 1079,\n  'fo-FO': 1080,\n  'hi-IN': 1081,\n  'mt-MT': 1082,\n  'se-NO': 1083,\n  'gd-GB': 1084,\n  yi: 1085,\n  'ms-MY': 1086,\n  'kk-KZ': 1087,\n  'ky-KG': 1088,\n  'sw-KE': 1089,\n  'tk-TM': 1090,\n  'uz-Latn-UZ': 1091,\n  'tt-RU': 1092,\n  'bn-IN': 1093,\n  'pa-IN': 1094,\n  'gu-IN': 1095,\n  'or-IN': 1096,\n  'ta-IN': 1097,\n  'te-IN': 1098,\n  'kn-IN': 1099,\n  'ml-IN': 1100,\n  'as-IN': 1101,\n  'mr-IN': 1102,\n  'sa-IN': 1103,\n  'mn-MN': 1104,\n  'bo-CN': 1105,\n  'cy-GB': 1106,\n  'km-KH': 1107,\n  'lo-LA': 1108,\n  'my-MM': 1109,\n  'gl-ES': 1110,\n  'kok-IN': 1111,\n  mni: 1112,\n  'sd-IN': 1113,\n  'syr-SY': 1114,\n  'si-LK': 1115,\n  'chr-US': 1116,\n  'iu-Cans-CA': 1117,\n  'am-ET': 1118,\n  tmz: 1119,\n  'ks-Arab-IN': 1120,\n  'ne-NP': 1121,\n  'fy-NL': 1122,\n  'ps-AF': 1123,\n  'fil-PH': 1124,\n  'dv-MV': 1125,\n  'bin-NG': 1126,\n  'fuv-NG': 1127,\n  'ha-Latn-NG': 1128,\n  'ibb-NG': 1129,\n  'yo-NG': 1130,\n  'quz-BO': 1131,\n  'nso-ZA': 1132,\n  'ig-NG': 1136,\n  'kr-NG': 1137,\n  'gaz-ET': 1138,\n  'ti-ER': 1139,\n  'gn-PY': 1140,\n  'haw-US': 1141,\n  la: 1142,\n  'so-SO': 1143,\n  'ii-CN': 1144,\n  'pap-AN': 1145,\n  'ug-Arab-CN': 1152,\n  'mi-NZ': 1153,\n  'ar-IQ': 2049,\n  'zh-CN': 2052,\n  'de-CH': 2055,\n  'en-GB': 2057,\n  'es-MX': 2058,\n  'fr-BE': 2060,\n  'it-CH': 2064,\n  'nl-BE': 2067,\n  'nn-NO': 2068,\n  'pt-PT': 2070,\n  'ro-MD': 2072,\n  'ru-MD': 2073,\n  'sr-Latn-CS': 2074,\n  'sv-FI': 2077,\n  'ur-IN': 2080,\n  'az-Cyrl-AZ': 2092,\n  'ga-IE': 2108,\n  'ms-BN': 2110,\n  'uz-Cyrl-UZ': 2115,\n  'bn-BD': 2117,\n  'pa-PK': 2118,\n  'mn-Mong-CN': 2128,\n  'bo-BT': 2129,\n  'sd-PK': 2137,\n  'tzm-Latn-DZ': 2143,\n  'ks-Deva-IN': 2144,\n  'ne-IN': 2145,\n  'quz-EC': 2155,\n  'ti-ET': 2163,\n  'ar-EG': 3073,\n  'zh-HK': 3076,\n  'de-AT': 3079,\n  'en-AU': 3081,\n  'fr-CA': 3084,\n  'sr-Cyrl-CS': 3098,\n  'ar-LY': 4097,\n  'zh-SG': 4100,\n  'de-LU': 4103,\n  'en-CA': 4105,\n  'fr-CH': 4108,\n  'hr-BA': 4122,\n  'ar-DZ': 5121,\n  'zh-MO': 5124,\n  'de-LI': 5127,\n  'en-NZ': 5129,\n  'fr-LU': 5132,\n  'bs-Latn-BA': 5146,\n  'ar-MO': 6145,\n  'fr-MC': 6156,\n  'ar-TN': 7169,\n  'ar-OM': 8193,\n  'ar-YE': 9217,\n  'en-BZ': 10249,\n  'es-PE': 10250,\n  'fr-SN': 10252,\n  'ar-JO': 11265,\n  'fr-CM': 11276,\n  'en-ID': 14345,\n  'es-CL': 13322,\n  'en-HK': 15369,\n  'fr-MA': 14348,\n  'en-MY': 17417,\n  'es-SV': 17418,\n  'es-NI': 19466,\n  'es-PR': 20490,\n  'es-US': 21514,\n  'fr-015': 58380,\n};\n\nexport function findBestLocaleFromString(value: string): { locale: string; localeId: number } {\n  // Attempt to find an exact match in the map\n  if (localeToLCIDMap[value]) {\n    return {\n      locale: value,\n      localeId: localeToLCIDMap[value],\n    };\n  }\n\n  // Fallback: Check for a partial match (e.g., \"en\" in \"en-US\")\n  const partialMatch = Object.keys(localeToLCIDMap).find((key) => key.startsWith(value.split('-')[0]));\n\n  if (partialMatch) {\n    return {\n      locale: partialMatch,\n      localeId: localeToLCIDMap[partialMatch],\n    };\n  }\n\n  // Default result if no match is found\n  throw new Error(`Locale '${value}' is not supported.`);\n}\n","import {\n  Address,\n  CampaignDetail,\n  CartCountResponse,\n  ErrorResponse,\n  RedeemResponse,\n  ServiceResponse,\n  Style,\n  UseCampaignResponse,\n} from '@bzbs/react-api-client';\nimport React, { createContext, useContext, useEffect, useRef, useState } from 'react';\nimport { campaignInterfaceType, campaignPointType, campaignType } from '../constant';\nimport { useBuzzebeesServiceContext } from './buzzebees_service_provider';\nimport { useAppLocaleContext } from './locale_provider';\nimport { useUserContext } from './user_provider';\nimport { useAnalyticsContext } from './analytics_provider';\n\nexport type CampaignButtonType =\n  | 'redeem'\n  | 'get_points'\n  | 'add_to_cart'\n  | 'survey'\n  | 'website'\n  | 'draw'\n  | 'donate'\n  | 'delivery';\n\nexport type CampaignDetailButtonState = {\n  enabled: boolean;\n  type: CampaignButtonType;\n  display: boolean;\n};\n\nexport type CampaignState =\n  | 'redeemable'\n  | 'point_not_enough'\n  | 'expired'\n  | 'cool_down'\n  | 'fail_in_condition'\n  | 'sold_out'\n  | 'redeemed';\n\nexport type AfterRedeemDestination = 'delivery' | 'draw' | 'code' | 'get_points';\n\nexport type AfterRedeem = {\n  destination: AfterRedeemDestination;\n  redeemData: RedeemResponse;\n  clear: () => void;\n};\n\nexport type AfterUse = {\n  useData: UseCampaignResponse;\n  clear: () => void;\n};\n\nexport type CampaignDetailContextType = {\n  data: CampaignDetail | null;\n  style: Style | null;\n  subStyle: Style | null;\n  quantity: number;\n  totalPrice: number;\n  deliveryAddress: Address | null;\n  afterRedeem: AfterRedeem | null;\n  afterUse: AfterUse | null;\n  buttonState: CampaignDetailButtonState;\n  campaignState: CampaignState;\n  interfaceWebsite: string | null;\n  isLoading: boolean;\n  error: ErrorResponse | null;\n  actions: {\n    setError: (error: ErrorResponse) => void;\n    fetchData: (id: string) => Promise<ServiceResponse<CampaignDetail>>;\n    redeem: (\n      addressOverride?: Address,\n      options?: { [key: string]: unknown }\n    ) => Promise<ServiceResponse<RedeemResponse>>;\n    use: () => Promise<ServiceResponse<UseCampaignResponse>>;\n    addToFavorite(): Promise<ServiceResponse<unknown>>;\n    removeFromFavorite(): Promise<ServiceResponse<unknown>>;\n    setStyle: (style: Style) => void;\n    setSubStyle: (style: Style) => void;\n    setQuantity: (quantity: number) => void;\n    setDeliveryAddress: (address: Address) => void;\n    addToCart: () => Promise<ServiceResponse<CartCountResponse>>;\n    clear: () => void;\n  };\n};\n\nexport const CampaignDetailContext = createContext({\n  data: null,\n  style: null,\n  subStyle: null,\n  quantity: 1,\n  totalPrice: 0,\n  deliveryAddress: null,\n  afterRedeem: null,\n  afterUse: null,\n  buttonState: { enabled: false, type: 'redeem', display: false },\n  campaignState: 'redeemable',\n  interfaceWebsite: null,\n  isLoading: false,\n  error: null,\n  actions: {\n    setError: () => {},\n    fetchData: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    redeem: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    use: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    addToFavorite: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    removeFromFavorite: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    setStyle: () => {},\n    setSubStyle: () => {},\n    setQuantity: () => {},\n    setDeliveryAddress: () => {},\n    addToCart: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    clear: () => {},\n  },\n} as CampaignDetailContextType);\n\nexport function useCampaignDetailContext() {\n  return useContext(CampaignDetailContext);\n}\n\nexport function CampaignDetailProvider({ children }: { children: React.ReactNode }) {\n  const campaignId = useRef<string | undefined>(undefined);\n  const [data, setData] = useState<CampaignDetail | null>(null);\n  const [afterRedeem, setAfterRedeem] = useState<AfterRedeem | null>(null);\n  const [afterUse, setAfterUse] = useState<AfterUse | null>(null);\n  const [campaignState, setCampaignState] = useState<CampaignState>('redeemable');\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<ErrorResponse | null>(null);\n\n  const { localeId } = useAppLocaleContext();\n  const { actions: analyticsActions } = useAnalyticsContext();\n\n  const [style, setStyle] = useState<Style | null>(null);\n  const [subStyle, setSubStyle] = useState<Style | null>(null);\n  const [quantity, setQuantity] = useState(1);\n  const [totalPrice, setTotalPrice] = useState(0);\n  const [deliveryAddress, setDeliveryAddress] = useState<Address | null>(null);\n\n  const interfaceWebsite = useRef<string | null>(null);\n\n  const [buttonState, setButtonState] = useState<CampaignDetailButtonState>({\n    enabled: false,\n    type: 'redeem',\n    display: false,\n  });\n\n  const { bzbsService } = useBuzzebeesServiceContext();\n  const user = useUserContext();\n  const userData = user.user;\n  const userPoints = user.points;\n\n  useEffect(() => {\n    if (data && userData) {\n      updateButtonState();\n    }\n  }, [data, userData, userPoints, style, subStyle, quantity]);\n\n  useEffect(() => {\n    if (data && userData) {\n      checkCondition();\n    }\n  }, [data, userData, userPoints]);\n\n  useEffect(() => {\n    if (data && style && subStyle) {\n      calculatePrice();\n    } else if (data) {\n      if (style === null) {\n        setSubStyle(null);\n      }\n    } else {\n      setTotalPrice(0);\n      setStyle(null);\n      setSubStyle(null);\n    }\n  }, [data, style, subStyle, quantity]);\n\n  const fetchData = async (id: string): Promise<ServiceResponse<CampaignDetail>> => {\n    campaignId.current = id;\n\n    setIsLoading(true);\n\n    await user.actions.fetchUser();\n    await user.actions.fetchPoint();\n    await user.actions.fetchCartCount();\n\n    const response = await bzbsService.campaignApi.campaignDetails({ id, deviceLocale: localeId });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setData(response.model);\n      analyticsActions.trackEvent({\n        action: 'on_click',\n        name: 'view_campaign',\n        category: 'campaign_list',\n      });\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const updateButtonState = () => {\n    if (!data) {\n      return;\n    }\n\n    const type = data.Type ?? 0;\n    const pointType = data.PointType ?? campaignPointType.use;\n\n    const pointPerUnit = data.PointPerUnit ?? 0;\n    let pointEnough = true;\n\n    if (pointType === campaignPointType.use && pointPerUnit > userPoints) {\n      pointEnough = false;\n    }\n\n    let buttonType: CampaignButtonType = 'redeem';\n    let display = true;\n    let canAddToCart = true;\n\n    const nonRedeemable = [campaignType.event, campaignType.media, campaignType.news];\n\n    switch (type) {\n      case campaignType.buy:\n        buttonType = 'add_to_cart';\n\n        if (data.SubCampaignStyles?.hasStyle) {\n          if (!style || (style.subitems?.length && !subStyle)) {\n            canAddToCart = false;\n          }\n        }\n        break;\n      case campaignType.interface:\n        switch (data.InterfaceDisplay) {\n          case campaignInterfaceType.survey:\n          case campaignInterfaceType.surveyApprove:\n            buttonType = 'survey';\n            break;\n          default:\n            buttonType = 'website';\n            break;\n        }\n        interfaceWebsite.current = data.Website ?? null;\n        break;\n      case campaignType.draw:\n        if (data.Delivered) {\n          buttonType = 'delivery';\n        } else {\n          buttonType = 'draw';\n        }\n        break;\n      case campaignType.donate:\n        if (data.Delivered) {\n          buttonType = 'delivery';\n        } else {\n          buttonType = 'donate';\n        }\n        break;\n      default:\n        buttonType = pointType === campaignPointType.use ? 'redeem' : 'get_points';\n        if (data.Delivered) {\n          buttonType = 'delivery';\n        }\n        display = !nonRedeemable.includes(type);\n        break;\n    }\n\n    setButtonState({\n      enabled: pointEnough && canAddToCart,\n      type: buttonType,\n      display,\n    });\n  };\n\n  const checkCondition = () => {\n    if (!data) {\n      return;\n    }\n\n    let state = 'redeemable';\n\n    // Use local time for comparison by adjusting for timezone offset\n    const today = new Date();\n    const timezoneOffsetMinutes = today.getTimezoneOffset();\n    const currentTimeLocal = Math.floor((Date.now() - timezoneOffsetMinutes * 60 * 1000) / 1000);\n\n    if (\n      data.Type !== campaignType.buy &&\n      data.PointType === campaignPointType.use &&\n      data.PointPerUnit &&\n      userPoints < data.PointPerUnit\n    ) {\n      state = 'point_not_enough';\n    } else if (data.ItemCountSold && data.Quantity && data.ItemCountSold >= data.Quantity) {\n      state = 'sold_out';\n    } else if (data.RedeemMostPerPerson && data.RedeemCount && data.RedeemCount >= data.RedeemMostPerPerson) {\n      state = 'redeemed';\n    } else if (data.ConditionAlertID === 2) {\n      state = 'redeemed';\n    } else if (data.NextRedeemDate && data.NextRedeemDate > currentTimeLocal) {\n      state = 'cool_down';\n    } else if (data.ExpireDate && data.ExpireDate < currentTimeLocal) {\n      state = 'expired';\n    } else if (data.IsConditionPass === false) {\n      state = 'fail_in_condition';\n    }\n\n    setCampaignState(state as CampaignState);\n  };\n\n  const redeem = async (\n    addressOverride?: Address,\n    options?: { [key: string]: unknown }\n  ): Promise<ServiceResponse<RedeemResponse>> => {\n    if (!campaignId.current) {\n      return Promise.reject('No campaign id');\n    }\n\n    const id = subStyle?.campaignId ?? style?.campaignId ?? campaignId.current;\n    const addressToUse = addressOverride ?? deliveryAddress;\n\n    setIsLoading(true);\n    const response = await bzbsService.campaignApi.redeem({ id: id, addressKey: addressToUse?.RowKey, options });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      handleAfterRedeem(response.model);\n      setError(null);\n\n      analyticsActions.trackEvent({\n        action: 'on_click',\n        name: 'redeem_success',\n        category: 'campaign_redeem',\n      });\n\n      fetchData(campaignId.current!);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const handleAfterRedeem = (redeemData: RedeemResponse) => {\n    let dest: AfterRedeemDestination = 'code';\n\n    if (redeemData.PointType === campaignPointType.use) {\n      if (data?.Delivered) {\n        dest = 'delivery';\n      } else if (data?.Type === campaignType.draw) {\n        dest = 'draw';\n      }\n    } else if (redeemData.PointType === campaignPointType.get) {\n      dest = 'get_points';\n    }\n\n    setAfterRedeem({\n      destination: dest,\n      redeemData,\n      clear: () => {\n        setAfterRedeem(null);\n      },\n    });\n  };\n\n  const use = async (): Promise<ServiceResponse<UseCampaignResponse>> => {\n    if (!afterRedeem?.redeemData || !afterRedeem.redeemData.RedeemKey) {\n      return Promise.reject('No redeem data');\n    }\n\n    setIsLoading(true);\n    const response = await bzbsService.historyApi.use({ redeemKey: afterRedeem.redeemData.RedeemKey });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      handleAfterUse(response.model);\n      setError(null);\n      fetchData(campaignId.current!);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const handleAfterUse = (useData: UseCampaignResponse) => {\n    setAfterUse({\n      useData,\n      clear: () => {\n        setAfterRedeem(null);\n        setAfterUse(null);\n      },\n    });\n  };\n\n  const addToFavorite = async (): Promise<ServiceResponse<unknown>> => {\n    if (!campaignId.current) {\n      return Promise.reject('No campaign id');\n    }\n\n    setIsLoading(true);\n    const response = await bzbsService.campaignApi.addToFavorite(campaignId.current);\n    setIsLoading(false);\n    if (response.type === 'success') {\n      fetchData(campaignId.current);\n    }\n    return response;\n  };\n\n  const removeFromFavorite = async (): Promise<ServiceResponse<unknown>> => {\n    if (!campaignId.current) {\n      return Promise.reject('No campaign id');\n    }\n\n    setIsLoading(true);\n    const response = await bzbsService.campaignApi.removeFromFavorite({ id: campaignId.current });\n    setIsLoading(false);\n    if (response.type === 'success') {\n      fetchData(campaignId.current);\n    }\n    return response;\n  };\n\n  const addToCart = async (): Promise<ServiceResponse<CartCountResponse>> => {\n    if (!data) {\n      return Promise.reject('No data');\n    }\n    const type = data.Type ?? 0;\n    if (type !== campaignType.buy) {\n      return Promise.reject('This campaign is not add to cart type');\n    }\n\n    const id = subStyle?.campaignId ?? style?.campaignId ?? data.ID?.toString();\n\n    if (!id) {\n      return Promise.reject('No campaign id');\n    }\n\n    const response = await bzbsService.cartApi.addCart({ id: id, mode: 'add', qty: quantity });\n    if (response.type === 'success') {\n      fetchData(campaignId.current!);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const calculatePrice = () => {\n    setTotalPrice((subStyle?.price ?? style?.price ?? data?.PricePerUnit ?? 0) * quantity);\n  };\n\n  const clear = () => {\n    setData(null);\n    setStyle(null);\n    setSubStyle(null);\n    setQuantity(1);\n    setTotalPrice(0);\n    setDeliveryAddress(null);\n    setAfterRedeem(null);\n    setAfterUse(null);\n    setButtonState({ enabled: false, type: 'redeem', display: false });\n    setCampaignState('redeemable');\n    setError(null);\n  };\n\n  return (\n    <CampaignDetailContext.Provider\n      value={{\n        data,\n        style,\n        subStyle,\n        quantity,\n        totalPrice,\n        deliveryAddress,\n        afterRedeem,\n        afterUse,\n        buttonState,\n        campaignState,\n        interfaceWebsite: interfaceWebsite.current,\n        actions: {\n          setError,\n          fetchData,\n          redeem,\n          use,\n          addToFavorite,\n          removeFromFavorite,\n          setStyle,\n          setSubStyle,\n          setQuantity,\n          setDeliveryAddress,\n          addToCart,\n          clear,\n        },\n        isLoading,\n        error,\n      }}\n    >\n      {children}\n    </CampaignDetailContext.Provider>\n  );\n}\n","export const campaignType = {\n  draw: 0,\n  free: 1,\n  deal: 2,\n  buy: 3,\n  bid: 4,\n  ads: 5,\n  install: 6,\n  booking: 7,\n  interface: 8,\n  event: 9,\n  media: 10,\n  ewalletTopUp: 11,\n  ewalletRedeem: 12,\n  ewalletTransfer: 13,\n  ewalletBanking: 14,\n  autofeed: 15,\n  news: 16,\n  reservation: 17,\n  ewalletBuy: 18,\n  pointRedemption: 19,\n  donate: 20,\n  pointFree: 21,\n  voucher: 22,\n  encrypt: 23,\n  encryptRedeem: 24,\n  giftCard: 25,\n  verifyCode: 26,\n  subscription: 27,\n  fillCode: 28,\n  subscriptionFood: 29,\n  buyEVoucher: 30,\n  uploadReceipt: 31,\n  payWithPoints: 32,\n  marketPlacePrivilege: 33,\n  topup2C2P: 34,\n  directTopup2C2P: 35,\n};\n\nexport const campaignPointType = {\n  use: 'use',\n  get: 'get',\n};\n\nexport const campaignInterfaceType = {\n  web: 'web',\n  survey: 'survey',\n  surveyApprove: 'surveyapprove',\n};\n","import {\n  Badge,\n  Buzzebees,\n  CartCountResponse,\n  ConfirmOtpResponse,\n  ErrorResponse,\n  ExpiringPoints,\n  ProfileResponse,\n  ServiceResponse,\n  StatusResponse,\n  Trace,\n  UpdatedPoints,\n} from '@bzbs/react-api-client';\nimport React, { ReactNode, createContext, useContext, useEffect, useState } from 'react';\nimport { eventEmitter } from '../service';\nimport { useAuthContext } from './auth_provider';\nimport { useBuzzebeesServiceContext } from './buzzebees_service_provider';\n\ntype UserContextType = {\n  user: ProfileResponse | null;\n  points: number;\n  recentPoints: number;\n  expiringPoints: UpdatedPoints[];\n  recentBadge: Badge | null;\n  recentTrace: Trace | null;\n  cartCount: number;\n  isLoading: boolean;\n  error: ErrorResponse | null;\n  actions: {\n    fetchUser: () => Promise<ServiceResponse<ProfileResponse>>;\n    fetchPoint: () => Promise<ServiceResponse<UpdatedPoints>>;\n    fetchExpiringPoints: () => Promise<ServiceResponse<ExpiringPoints>>;\n    fetchCartCount: () => Promise<ServiceResponse<CartCountResponse>>;\n    editUser: (data: UpdateProfileParams) => Promise<ServiceResponse<ProfileResponse>>;\n    changePassword: (oldPassword: string, newPassword: string) => Promise<ServiceResponse<StatusResponse>>;\n    changeContactNumber: (\n      contactNumber: string,\n      otp: string,\n      refCode: string\n    ) => Promise<ServiceResponse<ConfirmOtpResponse>>;\n    changeAvatar: (avatar: File) => Promise<ServiceResponse<ProfileResponse>>;\n    consumeRecentPoints: () => void;\n    consumeRecentBadge: () => void;\n    consumeRecentTrace: () => void;\n    deleteUser: () => Promise<ServiceResponse<any>>;\n    setError: (error: ErrorResponse | null) => void;\n    clearData: () => void;\n  };\n};\n\nexport type UpdateProfileParams = {\n  profileImage?: File | { uri: string; name: string; type: string };\n  firstName?: string;\n  lastName?: string;\n  contactNumber?: string;\n  email?: string;\n  notification?: boolean;\n  locale?: number;\n  title?: string;\n  gender?: string;\n  birthDate?: number;\n  address?: string;\n  subdistrictCode?: number;\n  subdistrictName?: string;\n  districtCode?: number;\n  districtName?: string;\n  provinceCode?: number;\n  provinceName?: string;\n  countryCode?: string;\n  countryName?: string;\n  zipCode?: string;\n  idCard?: string;\n  passport?: string;\n  maritalStatus?: string;\n  village?: string;\n  building?: string;\n  number?: string;\n  moo?: string;\n  room?: string;\n  floor?: string;\n  soi?: string;\n  city?: string;\n  road?: string;\n  landmark?: string;\n  alternateContactNumber?: string;\n  homeContactNumber?: string;\n  nationality?: string;\n  religion?: string;\n  location?: string;\n  latitude?: number;\n  longitude?: number;\n  income?: string;\n  interests?: string;\n  region?: string;\n  phonepurchase?: number;\n  highestEducation?: string;\n  occupation?: string;\n  remark?: string;\n  displayName?: string;\n  options?: { [key: string]: any };\n};\n\nexport const UserContext = createContext<UserContextType>({\n  user: null,\n  points: 0,\n  expiringPoints: [] as UpdatedPoints[],\n  recentPoints: 0,\n  recentBadge: null,\n  recentTrace: null,\n  cartCount: 0,\n  isLoading: false,\n  error: null,\n  actions: {\n    fetchUser: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    fetchPoint: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    fetchExpiringPoints: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    fetchCartCount: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    editUser: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    changePassword: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    changeContactNumber: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    changeAvatar: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    consumeRecentPoints: () => {},\n    consumeRecentBadge: () => {},\n    consumeRecentTrace: () => {},\n    deleteUser: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    setError: () => {},\n    clearData: () => {},\n  } as UserContextType['actions'],\n});\n\nexport function useUserContext() {\n  return useContext(UserContext);\n}\n\nexport function UserProvider({ children }: { children: ReactNode }) {\n  const [user, setUser] = useState<ProfileResponse | null>(null);\n  const [points, setPoints] = useState<number>(0);\n  const [expiringPoints, setExpiringPoints] = useState<UpdatedPoints[]>([]);\n  const [cartCount, setCartCount] = useState<number>(0);\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<ErrorResponse | null>(null);\n\n  const [recentPoints, setRecentPoints] = useState<number>(0);\n  const [recentBadge, setRecentBadge] = useState<Badge | null>(null);\n  const [badgeList, setBadgeList] = useState<Badge[]>([]);\n  const [recentTrace, setRecentTrace] = useState<Trace | null>(null);\n  const [traceList, setTraceList] = useState<Trace[]>([]);\n\n  const { bzbsService } = useBuzzebeesServiceContext();\n  const auth = useAuthContext();\n\n  useEffect(() => {\n    eventEmitter.on('get_points', (buzzebees: Buzzebees) => {\n      console.log('get_points', buzzebees);\n      const points = buzzebees.points;\n      if (points) {\n        setRecentPoints(points);\n      }\n\n      const traces = buzzebees.traces;\n      if (traces) {\n        if (traces.length > 0) {\n          const first = traces.shift();\n          if (first) {\n            setRecentTrace(first);\n          }\n          setTraceList(traces);\n        }\n      }\n    });\n\n    eventEmitter.on('get_badges', (badges: Badge[]) => {\n      if (badges.length > 0) {\n        const first = badges.shift();\n        if (first) {\n          setRecentBadge(first);\n        }\n        setBadgeList(badges);\n      }\n    });\n\n    eventEmitter.on('session_expired', () => {\n      auth.actions.logout();\n    });\n\n    return () => {\n      console.log('UserProvider cleanup');\n      eventEmitter.clearListeners(['get_points', 'get_badges', 'session_expired']);\n    };\n  }, []);\n\n  const fetchUser = async (): Promise<ServiceResponse<ProfileResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.profileApi.profile();\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setUser(response.model);\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const fetchPoint = async (): Promise<ServiceResponse<UpdatedPoints>> => {\n    setIsLoading(true);\n    const response = await bzbsService.profileApi.points();\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setPoints(response.model.points);\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const fetchExpiringPoints = async (): Promise<ServiceResponse<ExpiringPoints>> => {\n    setIsLoading(true);\n    const response = await bzbsService.profileApi.expiringPoints();\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setExpiringPoints(response.model.expiring_points ?? []);\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const fetchCartCount = async (): Promise<ServiceResponse<CartCountResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.cartApi.cartCount();\n    setIsLoading(false);\n    if (response.type === 'success') {\n      setCartCount(response.model.cart_count ?? 0);\n    } else {\n      setError(response);\n      setCartCount(0);\n    }\n\n    return response;\n  };\n\n  const editUser = async (data: UpdateProfileParams): Promise<ServiceResponse<ProfileResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.profileApi.updateProfile(data);\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setUser(response.model);\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const changePassword = async (oldPassword: string, newPassword: string): Promise<ServiceResponse<StatusResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.profileApi.changePassword({ current: oldPassword, change: newPassword });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setIsLoading(false);\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const changeContactNumber = async (\n    contactNumber: string,\n    otp: string,\n    refCode: string\n  ): Promise<ServiceResponse<ConfirmOtpResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.profileApi.changeContactNumber({ contactNumber, otp: otp, refCode });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const changeAvatar = async (avatar: File): Promise<ServiceResponse<ProfileResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.profileApi.updateProfile({ profileImage: avatar });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setUser(response.model);\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const consumeRecentPoints = () => {\n    setRecentPoints(0);\n  };\n\n  const consumeRecentBadge = () => {\n    setRecentBadge(null);\n    const next = badgeList.shift();\n    if (next) {\n      setRecentBadge(next);\n      setBadgeList(badgeList);\n    }\n  };\n\n  const consumeRecentTrace = () => {\n    setRecentTrace(null);\n    const next = traceList.shift();\n    if (next) {\n      setRecentTrace(next);\n      setTraceList(traceList);\n    }\n  };\n\n  const deleteUser = async (): Promise<ServiceResponse<any>> => {\n    setIsLoading(true);\n    const response = await bzbsService.profileApi.deactivate();\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      clearData();\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const clearData = () => {\n    setUser(null);\n    setPoints(0);\n    setExpiringPoints([]);\n    setError(null);\n  };\n\n  return (\n    <UserContext.Provider\n      value={{\n        user,\n        points,\n        expiringPoints,\n        recentPoints,\n        recentBadge,\n        recentTrace,\n        cartCount,\n        isLoading,\n        error,\n        actions: {\n          fetchUser,\n          fetchPoint,\n          fetchExpiringPoints,\n          fetchCartCount,\n          editUser,\n          changePassword,\n          changeContactNumber,\n          changeAvatar,\n          consumeRecentPoints,\n          consumeRecentBadge,\n          consumeRecentTrace,\n          deleteUser,\n          setError,\n          clearData,\n        },\n      }}\n    >\n      {children}\n    </UserContext.Provider>\n  );\n}\n","import { AxiosInstance } from 'axios';\nimport * as blake from 'blakejs';\nimport Emittery from 'emittery';\nimport { v7 as uuidv7 } from 'uuid';\nimport { TokenFunctions } from '../providers';\n\nconst eventEmitter = new Emittery();\n\nfunction defaultCorelationIdGenerator(): string {\n  return uuidv7();\n}\n\nfunction isJWT(token: string): boolean {\n  return typeof token === 'string' && token.split('.').length === 3;\n}\n\nfunction addDefaultHeaderInterceptor(\n  axiosInstance: AxiosInstance,\n  appId: string,\n  subscriptionKey: string,\n  tokenFunctions: TokenFunctions,\n  apiVersion: string,\n  corelationIdGenerator: () => string = defaultCorelationIdGenerator\n) {\n  axiosInstance.interceptors.request.use(\n    async (config) => {\n      config.headers.set('App-Id', appId);\n\n      if (subscriptionKey) {\n        config.headers.set('Ocp-Apim-Subscription-Key', subscriptionKey);\n      }\n\n      if (apiVersion) {\n        config.headers.set('api-version', apiVersion);\n      }\n\n      config.headers.set('X-Corelation-Id', corelationIdGenerator());\n      const token = await tokenFunctions.getToken();\n\n      if (token) {\n        if (isJWT(token)) {\n          config.headers.set('Authorization', `Bearer ${token}`);\n        } else {\n          config.headers.set('Authorization', `token ${token}`);\n        }\n      }\n\n      return config;\n    },\n    (error) => {\n      return Promise.reject(error);\n    }\n  );\n  axiosInstance.interceptors.response.use(\n    (response) => {\n      const responseData = response.data;\n      const buzzebeesObj = responseData.buzzebees;\n      if (buzzebeesObj) {\n        const points = buzzebeesObj.points;\n        const badges = buzzebeesObj.badges;\n\n        if (typeof points === 'number') {\n          eventEmitter.emit('get_points', buzzebeesObj);\n        }\n\n        if (badges) {\n          eventEmitter.emit('get_badges', badges);\n        }\n      }\n\n      if (responseData.error) {\n        const id = responseData.error.id;\n        const code = responseData.error.code;\n\n        if (code === 409 && (id === 1905 || id === 2076)) {\n          eventEmitter.emit('session_expired', responseData.error);\n        }\n      }\n\n      return response;\n    },\n    (error) => {\n      return Promise.reject(error);\n    }\n  );\n}\n\nfunction generateShortLivedId(): string {\n  return Math.random().toString(36).substring(2, 15);\n}\n\nfunction avatarUrl(baseUrl: string, appId: string, userId: string, token: string | null) {\n  const url =\n    `${baseUrl}/profile/${userId}/picture?timestamp=${Date.now()}&type=large` +\n    `${token === null ? '' : `&token=${token}&device_app_id=${appId}`}`;\n  console.log(url);\n  return url;\n}\n\nfunction largeImage(url: string) {\n  if (!url) return '';\n  const result = url.replace('?', '-large?');\n  return result;\n}\n\nasync function fetchImage(axiosClient: AxiosInstance, imageUrl: string) {\n  try {\n    const response = await axiosClient.get(imageUrl, { responseType: 'blob' });\n    return response.data;\n  } catch (error) {\n    console.error('Error fetching image:', error);\n  }\n}\n\nfunction createInterfaceWebsiteUrl(\n  url: string,\n  token?: string,\n  returnUrl: string = '',\n  params?: { [key: string]: any }\n): string {\n  if (token) {\n    params = {\n      token: createInterfaceToken(token),\n      return_url: returnUrl,\n      ...params,\n    };\n  }\n  const searchParams = new URLSearchParams(params).toString();\n  const result = url.includes('?') ? `${url}&${searchParams}` : `${url}?${searchParams}`;\n  return result;\n}\n\nfunction createInterfaceToken(token: string): string {\n  if (token.length <= 5) {\n    return token;\n  }\n\n  const firstChar = token.substring(0, 1);\n  const last5Chars = token.substring(token.length - 5);\n  const remainingChars = token.substring(1, token.length - 5);\n\n  return firstChar === '.' ? `${last5Chars}${remainingChars}` : token;\n}\n\nfunction createCartUrl(cartUrl: string, appName: string, accessKey: string, params?: { [key: string]: any }) {\n  const newUrl = cartUrl.endsWith('/') ? `${cartUrl}landing/${appName}` : `${cartUrl}/landing/${appName}`;\n  const newParams = {\n    access_key: accessKey,\n    appname_config: appName,\n    ...params,\n  };\n  const searchParams = new URLSearchParams(newParams).toString();\n  return searchParams ? `${newUrl}?${searchParams}` : newUrl;\n}\n\nfunction generateBlake2bSignatureHex(data: string, key: string, encoder: TextEncoder): string {\n  const keyBytes = encoder.encode(key);\n  return blake.blake2bHex(data, keyBytes, 32);\n}\n\nfunction getOtpSignatureHeaders({\n  appId,\n  contactNumber,\n  channel,\n  encoder,\n  now = new Date(),\n}: {\n  appId: string;\n  contactNumber: string;\n  channel: string;\n  encoder: TextEncoder;\n  now?: Date;\n}) {\n  const dateTime = now.toISOString().split('.')[0] + 'Z'; // UTC, no ms\n  const timeStamp = Math.floor(now.getTime() / 1000);\n  const data = `${appId}|${contactNumber}|${channel}|${dateTime}`;\n  const signature = generateBlake2bSignatureHex(data, appId, encoder);\n  return {\n    'OTP-Signature': signature,\n    Timestamp: timeStamp,\n  };\n}\n\nfunction addBlake2OtpSignatureInterceptor(\n  axiosInstance: AxiosInstance,\n  paths: string[],\n  encoder: TextEncoder,\n  getCurrentDateTime: () => Date = () => new Date()\n) {\n  axiosInstance.interceptors.request.use((config) => {\n    // Only apply to matching paths\n    if (paths.some((path) => config.url && config.url.includes(path))) {\n      // Try to get appId, contactNumber, channel from query or data\n      const getParam = (key: string) => {\n        // Prefer query params\n        if (config.params && config.params[key]) return config.params[key];\n        // Fallback to data (for POST/PUT)\n        if (config.data && typeof config.data === 'object' && config.data[key]) return config.data[key];\n        return undefined;\n      };\n      const appId = getParam('app_id');\n      const contactNumber = getParam('contact_number');\n      const channel = getParam('channel');\n      if (appId && contactNumber && channel) {\n        const now = getCurrentDateTime();\n        const headers = getOtpSignatureHeaders({ appId, contactNumber, channel, now, encoder });\n        config.headers.set('OTP-Signature', headers['OTP-Signature']);\n        config.headers.set('Timestamp', headers['Timestamp']);\n      }\n    }\n    return config;\n  });\n}\n\nexport {\n  addBlake2OtpSignatureInterceptor, // Export the new interceptor\n  addDefaultHeaderInterceptor,\n  avatarUrl,\n  createCartUrl,\n  createInterfaceToken,\n  eventEmitter,\n  fetchImage,\n  generateBlake2bSignatureHex, // Export the new function\n  generateShortLivedId,\n  getOtpSignatureHeaders,\n  createInterfaceWebsiteUrl as interfaceWebsite,\n  largeImage,\n};\n","import { Campaign, ErrorResponse, ServiceResponse } from '@bzbs/react-api-client';\nimport React, { createContext, useContext, useRef, useState } from 'react';\nimport { useBuzzebeesServiceContext } from './buzzebees_service_provider';\nimport { useAppLocaleContext } from './locale_provider';\n\nexport type CampaignContextType = {\n  items: Campaign[];\n  fetchData: (top: number, categoryId?: string, options?: CampaignListParams) => Promise<ServiceResponse<Campaign[]>>;\n  loadMore: () => Promise<ServiceResponse<Campaign[]>>;\n  isLoading: boolean;\n  canLoadMore: boolean;\n  error: ErrorResponse | null;\n};\n\nexport type CampaignListParams = {\n  startDate?: string;\n  keyword?: string;\n  sponsorId?: string;\n  maxPoints?: number;\n  minPoints?: number;\n  sortBy?: string;\n  hashTags?: string;\n  locationAgencyId?: string;\n  options?: {\n    [key: string]: string;\n  };\n};\n\nexport const CampaignContext = createContext({\n  items: [],\n  fetchData: async () => ({ type: 'client-error', message: 'Not implemented' }),\n  loadMore: async () => ({ type: 'client-error', message: 'Not implemented' }),\n  isLoading: false,\n  canLoadMore: false,\n  error: null,\n} as CampaignContextType);\n\nexport function useCampaignContext() {\n  return useContext(CampaignContext);\n}\n\nexport function CampaignProvider({ children, config }: { children: React.ReactNode; config: string }) {\n  const [items, setItems] = useState<Campaign[]>([]);\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<ErrorResponse | null>(null);\n\n  const [canLoadMore, setCanLoadMore] = useState(false);\n\n  const currentCategoryId = useRef<string>('');\n  const currentTop = useRef<number>(25);\n  const currentSkip = useRef<number>(0);\n  const currentFetchOptions = useRef<CampaignListParams>({});\n\n  const { bzbsService } = useBuzzebeesServiceContext();\n  const { localeId } = useAppLocaleContext();\n\n  const fetchData = async (\n    top: number,\n    categoryId?: string,\n    options?: CampaignListParams\n  ): Promise<ServiceResponse<Campaign[]>> => {\n    currentCategoryId.current = categoryId || '';\n    currentFetchOptions.current = options || {};\n    currentTop.current = top;\n    currentSkip.current = 0;\n\n    setIsLoading(true);\n    const response = await bzbsService.campaignApi.campaigns({\n      config: config,\n      cat: categoryId,\n      byConfig: true,\n      top: currentTop.current,\n      skip: currentSkip.current,\n      startDate: currentFetchOptions.current.startDate,\n      keyword: currentFetchOptions.current.keyword,\n      sponsorId: currentFetchOptions.current.sponsorId,\n      maxPoints: currentFetchOptions.current.maxPoints?.toString(),\n      minPoints: currentFetchOptions.current.minPoints?.toString(),\n      sortBy: currentFetchOptions.current.sortBy,\n      hashTags: currentFetchOptions.current.hashTags,\n      locationAgencyId: currentFetchOptions.current.locationAgencyId,\n      locale: localeId,\n    });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setItems(response.model);\n      setCanLoadMore(response.model.length === currentTop.current);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const loadMore = async (): Promise<ServiceResponse<Campaign[]>> => {\n    if (isLoading) return { type: 'client-error', message: 'Loading' };\n    if (!canLoadMore) return { type: 'client-error', message: 'No more data to load' };\n\n    setIsLoading(true);\n    currentSkip.current += currentTop.current;\n    const response = await bzbsService.campaignApi.campaigns({\n      config: config,\n      cat: currentCategoryId.current,\n      byConfig: true,\n      top: currentTop.current,\n      skip: currentSkip.current,\n      startDate: currentFetchOptions.current.startDate,\n      keyword: currentFetchOptions.current.keyword,\n      sponsorId: currentFetchOptions.current.sponsorId,\n      maxPoints: currentFetchOptions.current.maxPoints?.toString(),\n      minPoints: currentFetchOptions.current.minPoints?.toString(),\n      sortBy: currentFetchOptions.current.sortBy,\n      hashTags: currentFetchOptions.current.hashTags,\n      locationAgencyId: currentFetchOptions.current.locationAgencyId,\n    });\n\n    if (response.type === 'success') {\n      setItems([...items, ...response.model]);\n      setError(null);\n      setCanLoadMore(response.model.length === currentTop.current);\n    } else {\n      setError(response);\n    }\n\n    setIsLoading(false);\n\n    return response;\n  };\n\n  return (\n    <CampaignContext.Provider\n      value={{\n        items,\n        fetchData,\n        loadMore,\n        isLoading,\n        canLoadMore,\n        error,\n      }}\n    >\n      {children}\n    </CampaignContext.Provider>\n  );\n}\n","import { CartCountResponse, ErrorResponse, ServiceResponse } from '@bzbs/react-api-client';\nimport React, { createContext, useContext, useState } from 'react';\nimport { createCartUrl } from '../service/bzbs_service';\nimport { useBuzzebeesServiceContext } from './buzzebees_service_provider';\n\ntype CartContextType = {\n  count: number;\n  isLoading: boolean;\n  error: ErrorResponse | null;\n  actions: {\n    getCartUrl: (returnUrl: string) => Promise<string | null>;\n    addToCart: (id: string, mode: string, qty: number, data?: string) => Promise<ServiceResponse<CartCountResponse>>;\n    getCount: () => Promise<ServiceResponse<CartCountResponse>>;\n  };\n};\n\nconst CartContext = createContext({\n  count: 0,\n  isLoading: false,\n  error: null,\n  actions: {\n    getCartUrl: async () => '',\n    addToCart: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    getCount: async () => ({ type: 'client-error', message: 'Not implemented' }),\n  },\n} as CartContextType);\n\nexport function useCartContext() {\n  return useContext(CartContext);\n}\n\nexport function CartProvider({ children }: { children: React.ReactNode }) {\n  const [count, setCount] = useState(0);\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<ErrorResponse | null>(null);\n\n  const { bzbsService, appId, appName, urls } = useBuzzebeesServiceContext();\n\n  const getCartUrl = async (returnUrl: string): Promise<string | null> => {\n    setIsLoading(true);\n    const response = await bzbsService.cartApi.cartAccess({\n      errorUrl: returnUrl,\n      successUrl: returnUrl,\n      returnUrl: returnUrl,\n      appId: appId,\n      appName: appName,\n    });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      const accessKey = response.model.data?.key ?? '';\n      const result = createCartUrl(urls.cart, appName, accessKey);\n      return result;\n    }\n\n    return null;\n  };\n\n  const addToCart = async (\n    id: string,\n    mode: string,\n    qty: number,\n    data?: string\n  ): Promise<ServiceResponse<CartCountResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.cartApi.addCart({\n      id: id,\n      mode: mode,\n      qty: qty,\n      sideCampaignJson: data,\n    });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setCount(response.model.cart_count ?? 0);\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const getCount = async (): Promise<ServiceResponse<CartCountResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.cartApi.cartCount();\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setCount(response.model.cart_count ?? 0);\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  return (\n    <CartContext.Provider\n      value={{\n        count: count,\n        isLoading: isLoading,\n        error: error,\n        actions: {\n          getCartUrl,\n          addToCart,\n          getCount,\n        },\n      }}\n    >\n      {children}\n    </CartContext.Provider>\n  );\n}\n","import { Category, ErrorResponse, ServiceResponse } from '@bzbs/react-api-client';\nimport React, { createContext, useContext, useState } from 'react';\nimport { useBuzzebeesServiceContext } from './buzzebees_service_provider';\nimport { useAppLocaleContext } from './locale_provider';\n\ntype CategoriesContextType = {\n  items: Category[];\n  fetchData: () => Promise<ServiceResponse<Category[]>>;\n  isLoading: boolean;\n  error: ErrorResponse | null;\n};\n\nconst CategoriesContext = createContext({\n  items: [],\n  fetchData: async () => ({ type: 'client-error', message: 'Not implemented' }),\n  isLoading: false,\n  error: null,\n} as CategoriesContextType);\n\nexport function useCategoriesContext() {\n  return useContext(CategoriesContext);\n}\n\nexport function CategoriesProvider({ children, config }: { children: React.ReactNode; config: string }) {\n  const [items, setItems] = useState<Category[]>([]);\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<ErrorResponse | null>(null);\n\n  const { bzbsService } = useBuzzebeesServiceContext();\n  const { localeId } = useAppLocaleContext();\n\n  const fetchData = async (): Promise<ServiceResponse<Category[]>> => {\n    setIsLoading(true);\n    const response = await bzbsService.categoryApi.categories({\n      config: config,\n      byConfig: true,\n      options: {\n        device_locale: localeId,\n        locale: localeId,\n      },\n    });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setItems(response.model);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  return (\n    <CategoriesContext.Provider\n      value={{\n        items,\n        fetchData,\n        isLoading,\n        error,\n      }}\n    >\n      {children}\n    </CategoriesContext.Provider>\n  );\n}\n","import React, { createContext, useContext, useState } from 'react';\n\ntype ConfirmRequest = {\n  title: string;\n  content: string;\n  confirmText?: string;\n  cancelText?: string;\n  onConfirm?: () => void;\n  onCancel?: () => void;\n};\n\ntype ConfirmContextType = {\n  isOpen: boolean;\n  confirmRequest: ConfirmRequest;\n  openConfirm: (request: ConfirmRequest) => void;\n  closeConfirm: () => void;\n};\n\nexport const ConfirmContext = createContext({\n  isOpen: false,\n  confirmRequest: {\n    title: '',\n    content: '',\n  },\n  openConfirm: () => {},\n  closeConfirm: () => {},\n} as ConfirmContextType);\n\nexport const useConfirmContext = () => {\n  return useContext(ConfirmContext);\n};\n\nexport const ConfirmProvider = ({ children }: { children: React.ReactNode }) => {\n  const [isOpen, setIsOpen] = useState(false);\n\n  const [confirmRequest, setConfirmRequest] = useState<ConfirmRequest>({\n    title: '',\n    content: '',\n  });\n\n  const openConfirm = (request: ConfirmRequest) => {\n    setConfirmRequest(request);\n    setIsOpen(true);\n  };\n\n  const closeConfirm = () => {\n    setIsOpen(false);\n  };\n\n  return (\n    <ConfirmContext.Provider value={{ isOpen, confirmRequest, openConfirm, closeConfirm }}>\n      {children}\n    </ConfirmContext.Provider>\n  );\n};\n","import { Consent, ErrorResponse, ServiceResponse } from '@bzbs/react-api-client';\nimport React, { createContext, useContext, useState } from 'react';\nimport { useAnalyticsContext } from './analytics_provider';\nimport { useBuzzebeesServiceContext } from './buzzebees_service_provider';\n\ntype ConsentContextType = {\n  consentData: Consent | null;\n  isLoading: boolean;\n  error: ErrorResponse | null;\n  actions: {\n    fetchConsent: () => Promise<ServiceResponse<Consent>>;\n    updateConsent: (data: Consent) => Promise<ServiceResponse<Consent>>;\n    unconsent: () => Promise<ServiceResponse<any>>;\n  };\n};\n\nexport const ConsentContext = createContext({\n  consentData: null,\n  isLoading: false,\n  error: null,\n  actions: {\n    fetchConsent: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    updateConsent: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    unconsent: async () => ({ type: 'client-error', message: 'Not implemented' }),\n  },\n} as ConsentContextType);\n\nexport const useConsentContext = () => {\n  return useContext(ConsentContext);\n};\n\nexport const ConsentProvider = ({ children }: { children: React.ReactNode }) => {\n  const [consentData, setConsentData] = useState<Consent | null>(null);\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<ErrorResponse | null>(null);\n\n  const { bzbsService } = useBuzzebeesServiceContext();\n  const { actions: analyticsActions } = useAnalyticsContext();\n\n  const fetchConsent = async (): Promise<ServiceResponse<Consent>> => {\n    setIsLoading(true);\n    const response = await bzbsService.consentApi.consent();\n    setIsLoading(false);\n    if (response.type === 'success') {\n      setConsentData(response.model);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const updateConsent = async (data: Consent): Promise<ServiceResponse<Consent>> => {\n    setIsLoading(true);\n    const response = await bzbsService.consentApi.updateConsent({\n      termsAndConditions: data.TermAndCondition?.toString(),\n      dataPrivacy: data.DataPrivacy?.toString(),\n      marketingOption: data.MarketingOption?.toString(),\n      email: data.EmailMarketing?.toString(),\n      sms: data.SMSMarketing?.toString(),\n      notification: data.NotificationMarketing?.toString(),\n      line: data.LineMarketing?.toString(),\n      analyticsBuzzebeesCookies: data.AnalyticsBuzzebeesCookies?.toString(),\n      analyticsFirebaseCookies: data.AnalyticsFirebaseCookies?.toString(),\n      analyticsGoogleCookies: data.AnalyticsGoogleCookies?.toString(),\n      analyticsMetaCookies: data.AnalyticsMetaCookies?.toString(),\n      analyticsOtherCookies: data.AnalyticsOtherCookies?.toString(),\n      functionalCookies: data.FunctionalCookies?.toString(),\n      marketingCookies: data.MarketingCookies?.toString(),\n      necessaryCookies: data.NecessaryCookies?.toString(),\n    });\n    setIsLoading(false);\n    if (response.type === 'success') {\n      setConsentData(response.model);\n\n      if (\n        response.model.EmailMarketing == 0 &&\n        response.model.SMSMarketing == 0 &&\n        response.model.NotificationMarketing == 0 &&\n        response.model.LineMarketing == 0\n      ) {\n        analyticsActions.trackEvent({\n          action: 'on_click',\n          name: 'unconsent_success',\n          category: 'marketing_unconcent',\n        });\n      }\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const unconsent = async (): Promise<ServiceResponse<any>> => {\n    setIsLoading(true);\n    const response = await bzbsService.consentApi.unconsent();\n    setIsLoading(false);\n    if (response.type === 'success') {\n      setConsentData(null);\n    } else {\n      setError(response);\n    }\n    return response;\n  };\n\n  return (\n    <ConsentContext.Provider\n      value={{\n        consentData,\n        isLoading,\n        error,\n        actions: {\n          fetchConsent,\n          updateConsent,\n          unconsent,\n        },\n      }}\n    >\n      {children}\n    </ConsentContext.Provider>\n  );\n};\n","import { CouponResponse, ErrorResponse, ServiceResponse } from '@bzbs/react-api-client';\nimport React, { createContext, useContext, useState } from 'react';\nimport { useBuzzebeesServiceContext } from './buzzebees_service_provider';\n\ntype CouponContextType = {\n  isLoading: boolean;\n  error: ErrorResponse | null;\n  actions: {\n    process: (codes: string[]) => Promise<ServiceResponse<CouponResponse>>;\n  };\n};\n\nconst CouponContext = createContext({\n  isLoading: false,\n  error: null,\n  actions: {\n    process: async () => ({ type: 'client-error', message: 'Not implemented' }),\n  },\n} as CouponContextType);\n\nexport function useCouponContext() {\n  return useContext(CouponContext);\n}\n\nexport function CouponProvider({ children }: { children: React.ReactNode }) {\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<ErrorResponse | null>(null);\n\n  const { bzbsService } = useBuzzebeesServiceContext();\n\n  const process = async (codes: string[]): Promise<ServiceResponse<CouponResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.couponApi.processCodes({ codes: codes.join(',') });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  return (\n    <CouponContext.Provider\n      value={{\n        isLoading,\n        error,\n        actions: {\n          process,\n        },\n      }}\n    >\n      {children}\n    </CouponContext.Provider>\n  );\n}\n","import { Dashboard, ErrorResponse, ServiceResponse } from '@bzbs/react-api-client';\nimport React, { createContext, useContext, useState } from 'react';\nimport { useBuzzebeesServiceContext } from './buzzebees_service_provider';\nimport { useAppLocaleContext } from './locale_provider';\n\ntype DashboardContextType = {\n  items: Dashboard[];\n  fetchData: () => Promise<ServiceResponse<Dashboard[]>>;\n  isLoading: boolean;\n  error: ErrorResponse | null;\n};\n\nconst DashboardContext = createContext({\n  items: [],\n  fetchData: async () => ({ type: 'client-error', message: 'Not implemented' }),\n  isLoading: false,\n  error: null,\n} as DashboardContextType);\n\nexport function useDashboardContext() {\n  return useContext(DashboardContext);\n}\n\nexport function DashboardProvider({\n  children,\n  config,\n  mode,\n}: {\n  children: React.ReactNode;\n  config: string;\n  mode: 'main' | 'sub';\n}) {\n  const [items, setItems] = useState<Dashboard[]>([]);\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<ErrorResponse | null>(null);\n\n  const { bzbsService } = useBuzzebeesServiceContext();\n  const { localeId } = useAppLocaleContext();\n\n  const fetchData = async (): Promise<ServiceResponse<Dashboard[]>> => {\n    setIsLoading(true);\n    let response: ServiceResponse<Dashboard[]>;\n\n    if (mode === 'main') {\n      response = await bzbsService.dashboardApi.mainDashboard({ appName: config, locale: localeId });\n    } else {\n      response = await bzbsService.dashboardApi.subDashboard({ dashboardName: config, locale: localeId });\n    }\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setItems(response.model);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  return (\n    <DashboardContext.Provider\n      value={{\n        items,\n        fetchData,\n        isLoading,\n        error,\n      }}\n    >\n      {children}\n    </DashboardContext.Provider>\n  );\n}\n","import MatomoTracker from 'matomo-tracker-react-native';\nimport React from 'react';\nimport { findBestLocaleFromString } from '../utils';\nimport { AddressProvider } from './address_provider';\nimport { AnalyticsProvider } from './analytics_provider';\nimport { AuthProvider, TokenFunctions } from './auth_provider';\nimport { BuzzebeesServiceProvider, BuzzebeesServiceProviderProps } from './buzzebees_service_provider';\nimport { CampaignProvider } from './campaigns_provider';\nimport { CartProvider } from './cart_provider';\nimport { CategoriesProvider } from './categories_provider';\nimport { ConsentProvider } from './consent_provider';\nimport { DashboardProvider } from './dashboard_provider';\nimport { LoadingProvider } from './loading_indicator_provider';\nimport { AppLocaleProvider } from './locale_provider';\nimport { MaintenanceProvider } from './maintenance_provider';\nimport { NotificationProvider } from './notification_provider';\nimport { PointLogProvider } from './point_log_provider';\nimport { PopupProvider } from './popup_provider';\nimport { RegisterProvider } from './registration_provider';\nimport { UserProvider } from './user_provider';\nimport { ZipCodeProvider } from './zipcode_provider';\n\nexport type DefaultMainAppProviderProps = {\n  tokenFunctions: TokenFunctions;\n  defaultDashboardConfig: string;\n  defaultDashboardMode: 'main' | 'sub';\n  defaultMenuConfig: string;\n  defaultCampaignConfig: string;\n  language: string;\n  matomoConfig?: MatomoConfig;\n  children: React.ReactNode;\n} & Omit<BuzzebeesServiceProviderProps, 'children'>;\n\nexport type MatomoConfig = {\n  siteId: number;\n  urlBase: string;\n  trackerUrl?: string;\n  userId?: string;\n  disabled?: boolean;\n  log?: boolean;\n};\n\nexport const DefaultMainAppProvider = ({\n  appId,\n  appName,\n  bzbsService,\n  urls,\n  tokenFunctions,\n  defaultDashboardConfig,\n  defaultDashboardMode,\n  defaultMenuConfig,\n  defaultCampaignConfig,\n  language,\n  matomoConfig,\n  children,\n}: DefaultMainAppProviderProps) => {\n  const appLocale = findBestLocaleFromString(language ?? 'en');\n\n  return (\n    <BuzzebeesServiceProvider appId={appId} appName={appName} bzbsService={bzbsService} urls={urls}>\n      <AnalyticsProvider\n        instance={\n          new MatomoTracker({\n            siteId: matomoConfig?.siteId ?? 0,\n            urlBase: matomoConfig?.urlBase ?? '',\n            trackerUrl: matomoConfig?.trackerUrl,\n          })\n        }\n      >\n        <AppLocaleProvider initLocale={appLocale}>\n          <LoadingProvider>\n            <PopupProvider>\n              <MaintenanceProvider>\n                <AuthProvider tokenFunctions={tokenFunctions}>\n                  <RegisterProvider>\n                    <UserProvider>\n                      <PointLogProvider>\n                        <ConsentProvider>\n                          <NotificationProvider>\n                            <AddressProvider>\n                              <ZipCodeProvider>\n                                <CartProvider>\n                                  <DashboardProvider config={defaultDashboardConfig} mode={defaultDashboardMode}>\n                                    <CategoriesProvider config={defaultMenuConfig}>\n                                      <CampaignProvider config={defaultCampaignConfig}>{children}</CampaignProvider>\n                                    </CategoriesProvider>\n                                  </DashboardProvider>\n                                </CartProvider>\n                              </ZipCodeProvider>\n                            </AddressProvider>\n                          </NotificationProvider>\n                        </ConsentProvider>\n                      </PointLogProvider>\n                    </UserProvider>\n                  </RegisterProvider>\n                </AuthProvider>\n              </MaintenanceProvider>\n            </PopupProvider>\n          </LoadingProvider>\n        </AppLocaleProvider>\n      </AnalyticsProvider>\n    </BuzzebeesServiceProvider>\n  );\n};\n\nexport default DefaultMainAppProvider;\n","import type { UserInfo } from 'matomo-tracker-react-native';\nimport React, { useEffect } from 'react';\nimport { useAnalyticsContext } from '../providers/analytics_provider';\nimport { useAnalyticsStore } from '../stores/analytics.store';\n\n/**\n * Hook to automatically track page views when component mounts or dependencies change\n */\nexport const usePageTracking = (pageName?: string, dependencies: unknown[] = [], customUserInfo?: UserInfo) => {\n  const { actions, isInitialized, isEnabled } = useAnalyticsContext();\n\n  useEffect(() => {\n    if (isInitialized && isEnabled) {\n      actions.trackScreenView({\n        name: pageName || (typeof window !== 'undefined' ? window.location.pathname : '/'),\n        userInfo: customUserInfo,\n      });\n    }\n  }, [isInitialized, isEnabled, pageName, customUserInfo, ...dependencies]);\n};\n\n/**\n * Hook that returns analytics tracking functions\n */\nexport const useAnalytics = () => {\n  const { actions, isInitialized, isEnabled } = useAnalyticsContext();\n\n  return {\n    isInitialized,\n    isEnabled,\n    trackEvent: actions.trackEvent,\n    trackScreenView: actions.trackScreenView,\n    trackAction: actions.trackAction,\n    trackAppStart: actions.trackAppStart,\n    trackSiteSearch: actions.trackSiteSearch,\n    trackLink: actions.trackLink,\n    trackDownload: actions.trackDownload,\n    setUserId: actions.setUserId,\n    setCustomDimension: actions.setCustomDimension,\n    setEnabled: actions.setEnabled,\n    setPresetUserInfo: actions.setPresetUserInfo,\n    clearPresetUserInfo: actions.clearPresetUserInfo,\n  };\n};\n\n/**\n * Hook that provides access to the Zustand analytics store\n */\nexport const useAnalyticsState = () => {\n  return useAnalyticsStore();\n};\n\n/**\n * Utility function to track common events with immediate execution\n */\nexport const trackCommonEvents = {\n  /**\n   * Track register success event\n   * Screen: register, Category: register, Event: register_success\n   */\n  registerSuccess: async (userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'on click',\n        category: 'register',\n        name: 'register_success',\n        userInfo,\n      });\n    }\n  },\n\n  /**\n   * Track login success event\n   * Screen: login, Category: login, Event: login_success\n   */\n  loginSuccess: async (userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'on click',\n        category: 'login',\n        name: 'login_success',\n        userInfo,\n      });\n    }\n  },\n\n  /**\n   * Track view campaign event\n   * Screen: campaign, Category: campaign_list, Event: view_campaign\n   */\n  viewCampaign: async (userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'on click',\n        category: 'campaign_list',\n        name: 'view_campaign',\n        userInfo,\n      });\n    }\n  },\n\n  /**\n   * Track redeem success event\n   * Screen: campaign, Category: campaign_redeem, Event: redeem_success\n   */\n  redeemSuccess: async (campaignId: string, userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'on click',\n        category: 'campaign_redeem',\n        name: 'redeem_success',\n        // Use campaign_id as label - can be passed in userInfo or as a separate dimension\n        userInfo: {\n          ...userInfo,\n          dimension3: campaignId, // Store campaign_id in dimension3\n        },\n      });\n    }\n  },\n\n  /**\n   * Track unconsent success event\n   * Screen: marketing, Category: marketing_unconsent, Event: unconsent_success\n   */\n  unconsentSuccess: async (userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'on click',\n        category: 'marketing_unconsent',\n        name: 'unconsent_success',\n        userInfo,\n      });\n    }\n  },\n\n  /**\n   * Track button click event\n   */\n  buttonClick: async (buttonName: string, category: string = 'UI', userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'on click',\n        category,\n        name: buttonName,\n        userInfo,\n      });\n    }\n  },\n\n  /**\n   * Track form submit event\n   */\n  formSubmit: async (formName: string, success: boolean = true, userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'submit',\n        category: 'Form',\n        name: formName,\n        userInfo: {\n          ...userInfo,\n          dimension1: success ? 'success' : 'failure',\n        },\n      });\n    }\n  },\n\n  /**\n   * Track search event\n   */\n  search: async (keyword: string, resultCount?: number, category: string = 'Search', userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackSiteSearch({\n        keyword,\n        category,\n        count: resultCount,\n        userInfo,\n      });\n    }\n  },\n\n  /**\n   * Track purchase event\n   */\n  purchase: async (amount: number, currency: string = 'THB', productName?: string, userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'purchase',\n        category: 'Commerce',\n        name: productName || 'Purchase',\n        value: amount,\n        userInfo: {\n          ...userInfo,\n          dimension1: currency,\n        },\n      });\n    }\n  },\n\n  /**\n   * Track user registration event\n   */\n  userRegistration: async (method: string = 'email', userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'register',\n        category: 'User',\n        name: `registration_${method}`,\n        userInfo,\n      });\n    }\n  },\n\n  /**\n   * Track user login event\n   */\n  userLogin: async (method: string = 'email', userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'login',\n        category: 'User',\n        name: `login_${method}`,\n        userInfo,\n      });\n    }\n  },\n\n  /**\n   * Track error event\n   */\n  error: async (errorType: string, errorMessage?: string, userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'error',\n        category: 'Error',\n        name: errorType,\n        userInfo: {\n          ...userInfo,\n          dimension2: errorMessage,\n        },\n      });\n    }\n  },\n\n  /**\n   * Track custom event\n   */\n  custom: async (name: string, category: string, label?: string, value?: number, userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent({\n        action: 'custom',\n        category,\n        name,\n        value,\n        userInfo: {\n          ...userInfo,\n          dimension1: label,\n        },\n      });\n    }\n  },\n};\n\n/**\n * Higher-order component to automatically track page views\n */\nexport const withPageTracking = <P extends object>(\n  Component: React.ComponentType<P>,\n  pageName?: string,\n  customUserInfo?: UserInfo\n): React.ComponentType<P> => {\n  const WrappedComponent = (props: P) => {\n    usePageTracking(pageName, [], customUserInfo);\n    return React.createElement(Component, props);\n  };\n\n  // Set display name for debugging\n  WrappedComponent.displayName = `withPageTracking(${Component.displayName || Component.name || 'Component'})`;\n\n  return WrappedComponent;\n};\n\n/**\n * Initialize analytics from anywhere in the app (useful for Zustand-only usage)\n */\nexport const initializeAnalytics = (config: {\n  siteId: number;\n  urlBase: string;\n  trackerUrl?: string;\n  userId?: string;\n  disabled?: boolean;\n  log?: boolean;\n}) => {\n  const store = useAnalyticsStore.getState();\n  store.initialize(config);\n};\n\n/**\n * Global analytics instance for direct usage without React hooks\n */\nexport const analytics = {\n  /**\n   * Initialize analytics (can be called outside React components)\n   */\n  init: (config: {\n    siteId: number;\n    urlBase: string;\n    trackerUrl?: string;\n    userId?: string;\n    disabled?: boolean;\n    log?: boolean;\n  }) => {\n    const store = useAnalyticsStore.getState();\n    store.initialize(config);\n  },\n\n  /**\n   * Track event (can be called outside React components)\n   */\n  trackEvent: async (params: {\n    action: string;\n    name?: string;\n    category?: string;\n    value?: number;\n    campaign?: string;\n    userInfo?: UserInfo;\n  }) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackEvent(params);\n    }\n  },\n\n  /**\n   * Track screen view (can be called outside React components)\n   */\n  trackScreenView: async (name: string, userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackScreenView({ name, userInfo });\n    }\n  },\n\n  /**\n   * Track app start (can be called outside React components)\n   */\n  trackAppStart: async (userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackAppStart(userInfo);\n    }\n  },\n\n  /**\n   * Track site search (can be called outside React components)\n   */\n  trackSiteSearch: async (keyword: string, category?: string, count?: number, userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackSiteSearch({ keyword, category, count, userInfo });\n    }\n  },\n\n  /**\n   * Track link click (can be called outside React components)\n   */\n  trackLink: async (link: string, userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackLink({ link, userInfo });\n    }\n  },\n\n  /**\n   * Track download (can be called outside React components)\n   */\n  trackDownload: async (download: string, userInfo?: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    if (store.isInitialized && store.isEnabled) {\n      await store.trackDownload({ download, userInfo });\n    }\n  },\n\n  /**\n   * Set user ID and update preset userInfo (can be called outside React components)\n   */\n  setUserId: (userId: string | null) => {\n    const store = useAnalyticsStore.getState();\n    store.setUserId(userId);\n  },\n\n  /**\n   * Set custom dimension (can be called outside React components)\n   */\n  setCustomDimension: (id: number, value: string) => {\n    const store = useAnalyticsStore.getState();\n    store.setCustomDimension(id, value);\n  },\n\n  /**\n   * Set preset user info (can be called outside React components)\n   */\n  setPresetUserInfo: (userInfo: UserInfo) => {\n    const store = useAnalyticsStore.getState();\n    store.setPresetUserInfo(userInfo);\n  },\n\n  /**\n   * Clear preset user info (can be called outside React components)\n   */\n  clearPresetUserInfo: () => {\n    const store = useAnalyticsStore.getState();\n    store.clearPresetUserInfo();\n  },\n\n  /**\n   * Enable/disable analytics (can be called outside React components)\n   */\n  setEnabled: (enabled: boolean) => {\n    const store = useAnalyticsStore.getState();\n    store.setEnabled(enabled);\n  },\n\n  /**\n   * Reset analytics (can be called outside React components)\n   */\n  reset: () => {\n    const store = useAnalyticsStore.getState();\n    store.reset();\n  },\n};\n","import type { UserInfo } from 'matomo-tracker-react-native';\nimport MatomoTracker from 'matomo-tracker-react-native';\nimport { create } from 'zustand';\n\nexport type AnalyticsEventParams = {\n  action: string;\n  name?: string;\n  category?: string;\n  value?: number;\n  campaign?: string;\n  userInfo?: UserInfo;\n};\n\nexport type AnalyticsPageViewParams = {\n  name: string;\n  url?: string;\n  userInfo?: UserInfo;\n};\n\nexport type AnalyticsState = {\n  isInitialized: boolean;\n  isEnabled: boolean;\n  siteId?: number;\n  urlBase?: string;\n  trackerUrl?: string;\n  userId?: string;\n  disabled?: boolean;\n  log?: boolean;\n  matomoInstance?: MatomoTracker;\n  presetUserInfo?: UserInfo;\n};\n\nexport type AnalyticsActions = {\n  initialize: (config: {\n    siteId: number;\n    urlBase: string;\n    trackerUrl?: string;\n    userId?: string;\n    disabled?: boolean;\n    log?: boolean;\n  }) => void;\n  setEnabled: (enabled: boolean) => void;\n  setPresetUserInfo: (userInfo: UserInfo) => void;\n  clearPresetUserInfo: () => void;\n  trackAppStart: (userInfo?: UserInfo) => Promise<void>;\n  trackEvent: (params: AnalyticsEventParams) => Promise<void>;\n  trackScreenView: (params: AnalyticsPageViewParams) => Promise<void>;\n  trackAction: (params: AnalyticsPageViewParams) => Promise<void>;\n  trackSiteSearch: (params: {\n    keyword: string;\n    category?: string;\n    count?: number;\n    userInfo?: UserInfo;\n  }) => Promise<void>;\n  trackLink: (params: { link: string; userInfo?: UserInfo }) => Promise<void>;\n  trackDownload: (params: { download: string; userInfo?: UserInfo }) => Promise<void>;\n  setUserId: (userId: string | null) => void;\n  setCustomDimension: (id: number, value: string) => void;\n  reset: () => void;\n};\n\nexport type AnalyticsStore = AnalyticsState & AnalyticsActions;\n\nexport const useAnalyticsStore = create<AnalyticsStore>((set, get) => ({\n  isInitialized: false,\n  isEnabled: true,\n  siteId: undefined,\n  urlBase: undefined,\n  trackerUrl: undefined,\n  userId: undefined,\n  disabled: false,\n  log: false,\n  matomoInstance: undefined,\n  presetUserInfo: undefined,\n\n  initialize: (config) => {\n    try {\n      // Create Matomo tracker instance\n      const matomoInstance = new MatomoTracker({\n        urlBase: config.urlBase,\n        siteId: config.siteId,\n        trackerUrl: config.trackerUrl,\n        userId: config.userId,\n        disabled: config.disabled || false,\n        log: config.log || false,\n      });\n\n      set({\n        siteId: config.siteId,\n        urlBase: config.urlBase,\n        trackerUrl: config.trackerUrl,\n        userId: config.userId,\n        disabled: config.disabled || false,\n        log: config.log || false,\n        matomoInstance,\n        isInitialized: true,\n      });\n\n      console.log('Analytics: Matomo tracker initialized', config);\n    } catch (error) {\n      console.error('Analytics: Failed to initialize Matomo tracker', error);\n      set({\n        siteId: config.siteId,\n        urlBase: config.urlBase,\n        trackerUrl: config.trackerUrl,\n        userId: config.userId,\n        disabled: config.disabled || false,\n        log: config.log || false,\n        isInitialized: false,\n      });\n    }\n  },\n\n  setEnabled: (enabled: boolean) => {\n    set({ isEnabled: enabled });\n  },\n\n  setPresetUserInfo: (userInfo: UserInfo) => {\n    set({ presetUserInfo: userInfo });\n  },\n\n  clearPresetUserInfo: () => {\n    set({ presetUserInfo: undefined });\n  },\n\n  trackAppStart: async (userInfo?: UserInfo) => {\n    const state = get();\n    if (!state.isInitialized || !state.isEnabled || !state.matomoInstance || state.disabled) {\n      console.debug('Analytics: Track App Start skipped - not initialized, disabled, or tracking disabled');\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...state.presetUserInfo, ...userInfo };\n\n      await state.matomoInstance.trackAppStart({\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (state.log) {\n        console.debug('Analytics: App start tracked successfully', { userInfo: mergedUserInfo });\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track app start', error);\n    }\n  },\n\n  trackEvent: async (params: AnalyticsEventParams) => {\n    const state = get();\n    if (!state.isInitialized || !state.isEnabled || !state.matomoInstance || state.disabled) {\n      console.debug('Analytics: Track Event skipped - not initialized, disabled, or tracking disabled', params);\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...state.presetUserInfo, ...params.userInfo };\n\n      await state.matomoInstance.trackEvent({\n        category: params.category || 'User Action',\n        action: params.action,\n        name: params.name,\n        value: params.value,\n        campaign: params.campaign,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (state.log) {\n        console.debug('Analytics: Event tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track event', error, params);\n    }\n  },\n\n  trackScreenView: async (params: AnalyticsPageViewParams) => {\n    const state = get();\n    if (!state.isInitialized || !state.isEnabled || !state.matomoInstance || state.disabled) {\n      console.debug('Analytics: Track Screen View skipped - not initialized, disabled, or tracking disabled', params);\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...state.presetUserInfo, ...params.userInfo };\n\n      await state.matomoInstance.trackScreenView({\n        name: params.name,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (state.log) {\n        console.debug('Analytics: Screen view tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track screen view', error, params);\n    }\n  },\n\n  trackAction: async (params: AnalyticsPageViewParams) => {\n    const state = get();\n    if (!state.isInitialized || !state.isEnabled || !state.matomoInstance || state.disabled) {\n      console.debug('Analytics: Track Action skipped - not initialized, disabled, or tracking disabled', params);\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...state.presetUserInfo, ...params.userInfo };\n\n      await state.matomoInstance.trackAction({\n        name: params.name,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (state.log) {\n        console.debug('Analytics: Action tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track action', error, params);\n    }\n  },\n\n  trackSiteSearch: async (params: { keyword: string; category?: string; count?: number; userInfo?: UserInfo }) => {\n    const state = get();\n    if (!state.isInitialized || !state.isEnabled || !state.matomoInstance || state.disabled) {\n      console.debug('Analytics: Track Site Search skipped - not initialized, disabled, or tracking disabled', params);\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...state.presetUserInfo, ...params.userInfo };\n\n      await state.matomoInstance.trackSiteSearch({\n        keyword: params.keyword,\n        category: params.category,\n        count: params.count,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (state.log) {\n        console.debug('Analytics: Site search tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track site search', error, params);\n    }\n  },\n\n  trackLink: async (params: { link: string; userInfo?: UserInfo }) => {\n    const state = get();\n    if (!state.isInitialized || !state.isEnabled || !state.matomoInstance || state.disabled) {\n      console.debug('Analytics: Track Link skipped - not initialized, disabled, or tracking disabled', params);\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...state.presetUserInfo, ...params.userInfo };\n\n      await state.matomoInstance.trackLink({\n        link: params.link,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (state.log) {\n        console.debug('Analytics: Link tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track link', error, params);\n    }\n  },\n\n  trackDownload: async (params: { download: string; userInfo?: UserInfo }) => {\n    const state = get();\n    if (!state.isInitialized || !state.isEnabled || !state.matomoInstance || state.disabled) {\n      console.debug('Analytics: Track Download skipped - not initialized, disabled, or tracking disabled', params);\n      return;\n    }\n\n    try {\n      // Merge preset userInfo with provided userInfo\n      const mergedUserInfo = { ...state.presetUserInfo, ...params.userInfo };\n\n      await state.matomoInstance.trackDownload({\n        download: params.download,\n        userInfo: Object.keys(mergedUserInfo).length > 0 ? mergedUserInfo : undefined,\n      });\n\n      if (state.log) {\n        console.debug('Analytics: Download tracked successfully', params);\n      }\n    } catch (error) {\n      console.error('Analytics: Failed to track download', error, params);\n    }\n  },\n\n  setUserId: (userId: string | null) => {\n    const state = get();\n\n    // Update both the userId state and the preset userInfo\n    if (userId) {\n      const updatedUserInfo = {\n        ...state.presetUserInfo,\n        uid: userId,\n      };\n      set({\n        userId: userId,\n        presetUserInfo: updatedUserInfo,\n      });\n    } else {\n      // Remove uid from preset userInfo if userId is null\n      const currentUserInfo = state.presetUserInfo || {};\n      if (currentUserInfo.uid) {\n        const updatedUserInfo = { ...currentUserInfo };\n        delete updatedUserInfo.uid;\n\n        set({\n          userId: undefined,\n          presetUserInfo: Object.keys(updatedUserInfo).length > 0 ? updatedUserInfo : undefined,\n        });\n      } else {\n        set({ userId: undefined });\n      }\n    }\n\n    if (state.log) {\n      console.debug('Analytics: User ID updated in preset userInfo', userId);\n    }\n  },\n\n  setCustomDimension: (id: number, value: string) => {\n    const state = get();\n    if (!state.presetUserInfo) {\n      set({ presetUserInfo: { [`dimension${id}`]: value } });\n    } else {\n      set({\n        presetUserInfo: {\n          ...state.presetUserInfo,\n          [`dimension${id}`]: value,\n        },\n      });\n    }\n\n    if (state.log) {\n      console.debug('Analytics: Custom dimension set in preset userInfo', { id, value });\n    }\n  },\n\n  reset: () => {\n    set({\n      isInitialized: false,\n      isEnabled: true,\n      siteId: undefined,\n      urlBase: undefined,\n      trackerUrl: undefined,\n      userId: undefined,\n      disabled: false,\n      log: false,\n      matomoInstance: undefined,\n      presetUserInfo: undefined,\n    });\n\n    console.debug('Analytics: Store reset successfully');\n  },\n}));\n","function isValidEmail(email: string): boolean {\n  return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email);\n}\n\nexport { isValidEmail };\n","import { Purchase } from '@bzbs/react-api-client';\nimport { campaignType } from '../constant';\n\nexport type PurchaseItemInfo = {\n  title: string;\n  pointPerUnit: number;\n  expireDate: Date;\n  expiredIn?: number;\n  image: string;\n  showTracking: boolean;\n  showCode: boolean;\n  expired: boolean;\n  status: PurchaseItemStatus;\n};\n\nexport type PurchaseItemStatus =\n  | 'redeemed'\n  | 'used'\n  | 'expired'\n  | 'draw_win'\n  | 'draw_lose'\n  | 'draw_waiting'\n  | 'prepared_for_shipping'\n  | 'shipped';\n\nexport function getPurchaseItemStatus(item: Purchase): PurchaseItemInfo {\n  const title = item.Name ?? '';\n  const pointPerUnit = item.PointPerUnit ?? 0;\n  const image = item.FullImageUrl ?? '';\n  const showTracking = item.Delivered ?? false;\n  const expireDate = new Date((item.VoucherExpireDate ?? 0) * 1000);\n\n  let showCode = false;\n  let status: PurchaseItemStatus = 'used';\n\n  if (item.ArrangedDate) {\n    return { title, pointPerUnit, expireDate, image, showTracking, showCode: false, expired: false, status: 'used' };\n  }\n\n  if (item.IsExpired || (item.ExpireIn && item.ExpireIn <= 0)) {\n    return { title, pointPerUnit, expireDate, image, showTracking, showCode: false, expired: true, status: 'expired' };\n  }\n\n  if (item.VoucherExpireDate && item.VoucherExpireDate <= Date.now() / 1000) {\n    return { title, pointPerUnit, expireDate, image, showTracking, showCode: false, expired: true, status: 'expired' };\n  }\n\n  switch (item.Type) {\n    case campaignType.free:\n    case campaignType.deal:\n      status = 'redeemed';\n      showCode = true;\n      break;\n    case campaignType.draw:\n      if (item.HasWinner) {\n        status = item.IsWinner ? 'draw_win' : 'draw_lose';\n      } else {\n        status = 'draw_waiting';\n      }\n      break;\n  }\n\n  if (item.Delivered) {\n    showCode = false;\n    status = item.IsShipped ? 'shipped' : 'prepared_for_shipping';\n  }\n\n  return {\n    title,\n    pointPerUnit,\n    expireDate,\n    image,\n    showTracking,\n    showCode,\n    expired: false,\n    status,\n  };\n}\n","import React, { createContext, useContext, useEffect, useState } from 'react';\n\ntype LoadingContextType = {\n  loading: boolean;\n  show: () => void;\n  hide: () => void;\n};\n\nconst LoadingContext = createContext<LoadingContextType>({\n  loading: false,\n  show: () => {},\n  hide: () => {},\n});\n\nconst useLoadingContext = () => {\n  return useContext(LoadingContext);\n};\n\nconst LoadingProvider = ({ children }: { children: React.ReactNode }) => {\n  const [loading, setLoading] = useState(false);\n\n  const show = () => setLoading(true);\n  const hide = () => setLoading(false);\n\n  return <LoadingContext.Provider value={{ loading, show, hide }}>{children}</LoadingContext.Provider>;\n};\n\nconst useLoading = (isLoading: boolean) => {\n  const loadingContext = useLoadingContext();\n  useEffect(() => {\n    if (isLoading) {\n      loadingContext.show();\n    } else {\n      loadingContext.hide();\n    }\n  }, [isLoading]);\n};\n\nexport { LoadingProvider, useLoading, useLoadingContext };\n","import { Maintenance } from '@bzbs/react-api-client';\nimport React, { createContext, useContext, useEffect, useState } from 'react';\nimport { useBuzzebeesServiceContext } from './buzzebees_service_provider';\n\nexport type MaintenanceContextType = {\n  isMaintenance: boolean | null;\n  maintenanceData: Maintenance | null;\n};\n\nexport const MaintenanceContext = createContext<MaintenanceContextType>({\n  isMaintenance: null,\n  maintenanceData: null,\n});\n\nexport const useMaintenanceContext = () => {\n  return useContext(MaintenanceContext);\n};\n\nexport const MaintenanceProvider = ({ children }: { children: React.ReactNode }) => {\n  const { bzbsService, appId } = useBuzzebeesServiceContext();\n  const [isMaintenance, setIsMaintenance] = useState<boolean | null>(null);\n  const [maintenanceData, setMaintenanceData] = useState<Maintenance | null>(null);\n\n  useEffect(() => {\n    const checkMaintenance = async () => {\n      const result = await bzbsService.blob.maintenance(appId);\n      if (result.type === 'success') {\n        if (result.model.enabled === true) {\n          setIsMaintenance(true);\n          setMaintenanceData(result.model);\n        }\n      } else {\n        setIsMaintenance(false);\n        setMaintenanceData(null);\n      }\n    };\n\n    checkMaintenance();\n  }, []);\n\n  return (\n    <MaintenanceContext.Provider\n      value={{\n        isMaintenance,\n        maintenanceData,\n      }}\n    >\n      {children}\n    </MaintenanceContext.Provider>\n  );\n};\n","import { ErrorResponse, Notification, ServiceResponse } from '@bzbs/react-api-client';\nimport React, { createContext, useContext, useState } from 'react';\nimport { useBuzzebeesServiceContext } from './buzzebees_service_provider';\n\nexport type NotificationContextType = {\n  notifications: Notification[];\n  unreadCount: number;\n  isLoading: boolean;\n  error: ErrorResponse | null;\n  actions: {\n    fetchNotifications: (mode?: string) => Promise<ServiceResponse<Notification[]>>;\n    readNotification: (ids: string[]) => Promise<ServiceResponse<any>>;\n  };\n};\n\nexport const NotificationContext = createContext({\n  notifications: [],\n  unreadCount: 0,\n  isLoading: false,\n  error: null,\n  actions: {\n    fetchNotifications: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    readNotification: async () => ({ type: 'client-error', message: 'Not implemented' }),\n  },\n} as NotificationContextType);\n\nexport const useNotificationContext = () => {\n  return useContext(NotificationContext);\n};\n\nexport const NotificationProvider = ({ children }: { children: React.ReactNode }) => {\n  const [notifications, setNotifications] = useState<Notification[]>([]);\n  const [unreadCount, setUnreadCount] = useState(0);\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<ErrorResponse | null>(null);\n\n  const { bzbsService } = useBuzzebeesServiceContext();\n\n  const fetchNotifications = async (mode?: string): Promise<ServiceResponse<Notification[]>> => {\n    setIsLoading(true);\n    const response = await bzbsService.notificationApi.notifications({\n      mode: mode ?? 'all',\n      sortBy: 'createdate_desc',\n    });\n\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setNotifications(response.model);\n      setUnreadCount(response.model.filter((notification: Notification) => !notification.IsRead).length);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const readNotification = async (ids: string[]): Promise<ServiceResponse<any>> => {\n    setIsLoading(true);\n    const response = await bzbsService.notificationApi.read({ ids: ids.join(',') });\n    setIsLoading(false);\n    if (response.type === 'success') {\n      setNotifications(\n        notifications.map((notification) => {\n          if (ids.includes(notification.RowKey ?? '')) {\n            notification.IsRead = true;\n          }\n          return notification;\n        })\n      );\n      setUnreadCount(unreadCount - ids.length);\n      setIsLoading(false);\n    }\n\n    return response;\n  };\n\n  return (\n    <NotificationContext.Provider\n      value={{\n        notifications,\n        unreadCount,\n        isLoading,\n        error,\n        actions: {\n          fetchNotifications,\n          readNotification,\n        },\n      }}\n    >\n      {children}\n    </NotificationContext.Provider>\n  );\n};\n","import { ErrorResponse, PointLog, ServiceResponse } from '@bzbs/react-api-client';\nimport React, { createContext, useContext, useRef, useState } from 'react';\nimport { useBuzzebeesServiceContext } from './buzzebees_service_provider';\n\ntype PointLogContextType = {\n  pointLogs: PointLog[];\n  isLoading: boolean;\n  error: ErrorResponse | null;\n  canLoadMore: boolean;\n  actions: {\n    fetchPointLogs: (month: string, type: 'earn' | 'burn', top: number) => Promise<ServiceResponse<PointLog[]>>;\n    loadMore: () => Promise<ServiceResponse<PointLog[]>>;\n  };\n};\n\nconst PointLogContext = createContext({\n  pointLogs: [],\n  isLoading: false,\n  error: null,\n  canLoadMore: false,\n  actions: {\n    fetchPointLogs: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    loadMore: async () => ({ type: 'client-error', message: 'Not implemented' }),\n  },\n} as PointLogContextType);\n\nexport function usePointLogContext() {\n  return useContext(PointLogContext);\n}\n\nexport const PointLogProvider = ({ children }: { children: React.ReactNode }) => {\n  const [pointLogs, setPointLogs] = useState<PointLog[]>([]);\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<ErrorResponse | null>(null);\n  const [canLoadMore, setCanLoadMore] = useState(false);\n\n  const { bzbsService } = useBuzzebeesServiceContext();\n\n  const lastRowKey = useRef<string | undefined>(undefined);\n  const currentMonth = useRef<string | undefined>(undefined);\n  const currentType = useRef<'earn' | 'burn'>('earn');\n  const currentTop = useRef<number>(10);\n\n  const fetchPointLogs = async (\n    month: string,\n    type: 'earn' | 'burn',\n    top: number\n  ): Promise<ServiceResponse<PointLog[]>> => {\n    currentMonth.current = month;\n    currentType.current = type;\n    currentTop.current = top;\n    lastRowKey.current = undefined;\n\n    setIsLoading(true);\n    const response = await bzbsService.pointLogApi.getPointLog({\n      month: month,\n      type: type,\n      top: top,\n      lastRowKey: undefined,\n    });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setPointLogs(response.model);\n      setError(null);\n      if (response.model.length === top) {\n        setCanLoadMore(true);\n        lastRowKey.current = response.model[response.model.length - 1].RowKey;\n      }\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const loadMore = async (): Promise<ServiceResponse<PointLog[]>> => {\n    if (!canLoadMore) {\n      return Promise.reject('No more data');\n    }\n\n    if (currentMonth.current === undefined) {\n      return Promise.reject('No month selected');\n    }\n\n    setIsLoading(true);\n    const response = await bzbsService.pointLogApi.getPointLog({\n      month: currentMonth.current!,\n      type: currentType.current!,\n      top: currentTop.current,\n      lastRowKey: lastRowKey.current,\n    });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setPointLogs([...pointLogs, ...response.model]);\n      if (response.model.length < currentTop.current) {\n        setCanLoadMore(false);\n      } else {\n        setCanLoadMore(true);\n        lastRowKey.current = response.model[response.model.length - 1].RowKey;\n      }\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  return (\n    <PointLogContext.Provider\n      value={{\n        pointLogs,\n        isLoading,\n        error,\n        canLoadMore,\n        actions: {\n          fetchPointLogs,\n          loadMore,\n        },\n      }}\n    >\n      {children}\n    </PointLogContext.Provider>\n  );\n};\n","import React, { ReactNode } from 'react';\nimport { AlertProvider } from './alert_provider';\nimport { ConfirmProvider } from './confirm_provider';\n\nexport const PopupProvider = ({ children }: { children: ReactNode }) => {\n  return (\n    <AlertProvider>\n      <ConfirmProvider>{children}</ConfirmProvider>\n    </AlertProvider>\n  );\n};\n","import {\n  ErrorResponse,\n  OtpResponse,\n  RegistrationResponse,\n  ServiceResponse,\n  ValidateOtpResponse,\n} from '@bzbs/react-api-client';\nimport React, { createContext, useContext, useEffect, useRef, useState } from 'react';\nimport { useBuzzebeesServiceContext } from './buzzebees_service_provider';\nimport { useAnalyticsContext } from './analytics_provider';\n\ntype RegisterContextType = {\n  username: string;\n  password: string;\n  confirmPassword: string;\n  contactNumber: string;\n  firstName: string;\n  lastName: string;\n  otp: string;\n  refCode: string;\n  address: string | undefined;\n  gender: string | undefined;\n  birthDate: number | undefined;\n  email: string | undefined;\n  refUserCode: string | undefined;\n  consentVersion: {\n    termAndCondition: string;\n    dataPrivacy: string;\n    marketingOptions: string;\n  } | null;\n  termAndConditionAccepted: boolean;\n  dataPrivacyAccepted: boolean;\n  marketingAccepted: boolean;\n  emailMarketingAccepted: boolean;\n  smsMarketingAccepted: boolean;\n  notificationMarketingAccepted: boolean;\n  lineMarketingAccepted: boolean;\n  phoneMarketingAccepted: boolean;\n  isLoading: boolean;\n  error: ErrorResponse | null;\n  actions: {\n    setUUID(value: string): void;\n    setAppId(value: string): void;\n    setDeviceToken(value: string): void;\n    setClientVersion(value: string): void;\n    setUsername(value: string): void;\n    setPassword(value: string): void;\n    setConfirmPassword(value: string): void;\n    setContactNumber(value: string): void;\n    setFirstName(value: string): void;\n    setLastName(value: string): void;\n    setOtp(value: string): void;\n    setRefCode(value: string): void;\n    setAddress(value: string): void;\n    setGender(value: string): void;\n    setBirthDate(value: number): void;\n    setEmail(value: string): void;\n    setRefUserCode(value: string): void;\n    setTermAndConditionAccepted(value: boolean): void;\n    setDataPrivacyAccepted(value: boolean): void;\n    setMarketingAccepted(value: boolean): void;\n    setEmailMarketingAccepted(value: boolean): void;\n    setSmsMarketingAccepted(value: boolean): void;\n    setNotificationMarketingAccepted(value: boolean): void;\n    setLineMarketingAccepted(value: boolean): void;\n    setPhoneMarketingAccepted(value: boolean): void;\n    setError(value: ErrorResponse | null): void;\n    setLatestConsentVersion(termAndCondition: string, dataPrivacy: string, marketingOptions: string): void;\n    clearData: () => void;\n    sendOtp: () => Promise<ServiceResponse<OtpResponse>>;\n    validateOtp: () => Promise<ServiceResponse<ValidateOtpResponse>>;\n    register: () => Promise<ServiceResponse<RegistrationResponse>>;\n  };\n};\n\nconst RegisterContext = createContext({\n  username: '',\n  password: '',\n  confirmPassword: '',\n  contactNumber: '',\n  firstName: '',\n  lastName: '',\n  otp: '',\n  refCode: '',\n  address: undefined,\n  gender: undefined,\n  birthDate: undefined,\n  email: undefined,\n  refUserCode: undefined,\n  consentVersion: {\n    termAndCondition: '',\n    dataPrivacy: '',\n    marketingOptions: '',\n  },\n  termAndConditionAccepted: false,\n  dataPrivacyAccepted: false,\n  marketingAccepted: false,\n  emailMarketingAccepted: false,\n  smsMarketingAccepted: false,\n  notificationMarketingAccepted: false,\n  lineMarketingAccepted: false,\n  phoneMarketingAccepted: false,\n  isLoading: false,\n  error: null,\n  actions: {\n    setUUID: () => {},\n    setAppId: () => {},\n    setDeviceToken: () => {},\n    setClientVersion: () => {},\n    setUsername: () => {},\n    setPassword: () => {},\n    setConfirmPassword: () => {},\n    setContactNumber: () => {},\n    setFirstName: () => {},\n    setLastName: () => {},\n    setOtp: () => {},\n    setRefCode: () => {},\n    setAddress: () => {},\n    setGender: () => {},\n    setBirthDate: () => {},\n    setEmail: () => {},\n    setRefUserCode: () => {},\n    setTermAndConditionAccepted: () => {},\n    setDataPrivacyAccepted: () => {},\n    setMarketingAccepted: () => {},\n    setEmailMarketingAccepted: () => {},\n    setSmsMarketingAccepted: () => {},\n    setNotificationMarketingAccepted: () => {},\n    setLineMarketingAccepted: () => {},\n    setPhoneMarketingAccepted: () => {},\n    setError: () => {},\n    setLatestConsentVersion: () => {},\n    clearData: () => {},\n    sendOtp: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    validateOtp: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    register: async () => ({ type: 'client-error', message: 'Not implemented' }),\n  },\n} as RegisterContextType);\n\nexport function useRegisterContext() {\n  return useContext(RegisterContext);\n}\n\nexport function RegisterProvider({ children }: { children: React.ReactNode }) {\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<ErrorResponse | null>(null);\n\n  const { bzbsService } = useBuzzebeesServiceContext();\n  const { actions: analyticsActions } = useAnalyticsContext();\n\n  const uuid = useRef<string>('');\n  const appId = useRef<string>('');\n  const deviceToken = useRef<string>('');\n  const clientVersion = useRef<string>('');\n\n  const [username, setUsername] = useState<string>('');\n  const [password, setPassword] = useState<string>('');\n  const [confirmPassword, setConfirmPassword] = useState<string>('');\n\n  const [contactNumber, setContactNumber] = useState<string>('');\n  const [firstName, setFirstName] = useState<string>('');\n  const [lastName, setLastName] = useState<string>('');\n\n  const [otp, setOtp] = useState<string>('');\n  const [refCode, setRefCode] = useState<string>('');\n\n  const [address, setAddress] = useState<string | undefined>();\n  const [gender, setGender] = useState<string | undefined>();\n  const [birthDate, setBirthDate] = useState<number | undefined>();\n  const [email, setEmail] = useState<string | undefined>();\n  const [refUserCode, setRefUserCode] = useState<string | undefined>();\n\n  const [consentVersion, setConsentVersion] = useState<{\n    termAndCondition: string;\n    dataPrivacy: string;\n    marketingOptions: string;\n  } | null>(null);\n\n  const [termAndConditionAccepted, setTermAndConditionAccepted] = useState<boolean>(false);\n  const [dataPrivacyAccepted, setDataPrivacyAccepted] = useState<boolean>(false);\n  const [marketingAccepted, setMarketingAccepted] = useState<boolean>(false);\n  const [emailMarketingAccepted, setEmailMarketingAccepted] = useState<boolean>(false);\n  const [smsMarketingAccepted, setSmsMarketingAccepted] = useState<boolean>(false);\n  const [notificationMarketingAccepted, setNotificationMarketingAccepted] = useState<boolean>(false);\n  const [lineMarketingAccepted, setLineMarketingAccepted] = useState<boolean>(false);\n  const [phoneMarketingAccepted, setPhoneMarketingAccepted] = useState<boolean>(false);\n\n  useEffect(() => {\n    if (marketingAccepted === false) {\n      setEmailMarketingAccepted(false);\n      setSmsMarketingAccepted(false);\n      setNotificationMarketingAccepted(false);\n      setLineMarketingAccepted(false);\n      setPhoneMarketingAccepted(false);\n    }\n  }, [marketingAccepted]);\n\n  const setUUID = (value: string) => {\n    uuid.current = value;\n  };\n\n  const setAppId = (value: string) => {\n    appId.current = value;\n  };\n\n  const setDeviceToken = (value: string) => {\n    deviceToken.current = value;\n  };\n\n  const setClientVersion = (value: string) => {\n    clientVersion.current = value;\n  };\n\n  const setLatestConsentVersion = (termAndCondition: string, dataPrivacy: string, marketingOptions: string) => {\n    setConsentVersion({\n      termAndCondition: termAndCondition,\n      dataPrivacy: dataPrivacy,\n      marketingOptions: marketingOptions,\n    });\n  };\n\n  const sendOtp = async (): Promise<ServiceResponse<OtpResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.authApi.otp({\n      uuid: uuid.current,\n      appId: appId.current,\n      contactNumber: contactNumber.replace(/-/g, ''),\n      channel: 'register',\n    });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setRefCode(response.model.refcode ?? '');\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const validateOtp = async (): Promise<ServiceResponse<ValidateOtpResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.authApi.validateOtp({\n      appId: appId.current,\n      otp: otp,\n      refCode: refCode,\n      contactNumber: contactNumber.replace(/-/g, ''),\n      use: false,\n      channel: 'register',\n    });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setOtp(otp);\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const register = async (): Promise<ServiceResponse<RegistrationResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.registerApi.register({\n      appId: appId.current,\n      uuid: uuid.current,\n      macAddress: '',\n      os: '',\n      platform: '',\n      clientVersion: clientVersion.current,\n      deviceNotificationEnable: true,\n      username: username,\n      password: password,\n      confirmPassword: confirmPassword,\n      firstName: firstName,\n      lastName: lastName,\n      contactNumber: contactNumber.replace(/-/g, ''),\n      otp: otp,\n      refCode: refCode,\n      address: address,\n      gender: gender,\n      birthdate: birthDate,\n      email: email,\n      refUserCode: refUserCode,\n      termAndConditionVersion: consentVersion?.termAndCondition,\n      dataPrivacyVersion: consentVersion?.dataPrivacy,\n      marketingOptionsVersion: consentVersion?.marketingOptions,\n      emailMarketing: emailMarketingAccepted ? '1' : '0',\n      smsMarketing: smsMarketingAccepted ? '1' : '0',\n      notificationMarketing: notificationMarketingAccepted ? '1' : '0',\n      lineMarketing: lineMarketingAccepted ? '1' : '0',\n      phoneMarketing: phoneMarketingAccepted ? '1' : '0',\n      options: {},\n    });\n    setIsLoading(false);\n    if (response.type === 'success') {\n      analyticsActions.trackEvent({\n        action: 'on_click',\n        name: 'register_success',\n        category: 'register',\n      });\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const clearData = () => {\n    setUsername('');\n    setPassword('');\n    setConfirmPassword('');\n    setContactNumber('');\n    setFirstName('');\n    setLastName('');\n    setOtp('');\n    setRefCode('');\n    setAddress(undefined);\n    setGender(undefined);\n    setBirthDate(undefined);\n    setEmail(undefined);\n    setRefUserCode(undefined);\n    setConsentVersion(null);\n    setTermAndConditionAccepted(false);\n    setDataPrivacyAccepted(false);\n    setMarketingAccepted(false);\n    setEmailMarketingAccepted(false);\n    setSmsMarketingAccepted(false);\n    setNotificationMarketingAccepted(false);\n    setLineMarketingAccepted(false);\n    setPhoneMarketingAccepted(false);\n  };\n\n  return (\n    <RegisterContext.Provider\n      value={{\n        isLoading,\n        error,\n        username,\n        password,\n        confirmPassword,\n        contactNumber,\n        firstName,\n        lastName,\n        otp,\n        refCode,\n        address,\n        gender,\n        birthDate,\n        email,\n        refUserCode,\n        consentVersion,\n        termAndConditionAccepted,\n        dataPrivacyAccepted,\n        marketingAccepted,\n        emailMarketingAccepted,\n        smsMarketingAccepted,\n        notificationMarketingAccepted,\n        lineMarketingAccepted,\n        phoneMarketingAccepted,\n        actions: {\n          setUUID,\n          setAppId,\n          setDeviceToken,\n          setClientVersion,\n          setUsername,\n          setPassword,\n          setConfirmPassword,\n          setContactNumber,\n          setFirstName,\n          setLastName,\n          setOtp,\n          setRefCode,\n          setAddress,\n          setGender,\n          setBirthDate,\n          setEmail,\n          setRefUserCode,\n          setTermAndConditionAccepted,\n          setDataPrivacyAccepted,\n          setMarketingAccepted,\n          setEmailMarketingAccepted,\n          setSmsMarketingAccepted,\n          setNotificationMarketingAccepted,\n          setLineMarketingAccepted,\n          setPhoneMarketingAccepted,\n          setError,\n          setLatestConsentVersion,\n          clearData,\n          sendOtp,\n          validateOtp,\n          register,\n        },\n      }}\n    >\n      {children}\n    </RegisterContext.Provider>\n  );\n}\n","import { ErrorResponse, ServiceResponse, ZipCode } from '@bzbs/react-api-client';\nimport React, { createContext, useContext, useState } from 'react';\nimport { useBuzzebeesServiceContext } from './buzzebees_service_provider';\n\nexport type ZipCodeDropDownItem = {\n  name: string;\n  id: string;\n};\n\nexport type ZipCodeContextType = {\n  zipCodes: ZipCode[];\n  provinceDropDownItems: ZipCodeDropDownItem[];\n  districtDropDownItems: ZipCodeDropDownItem[];\n  subDistrictDropDownItems: ZipCodeDropDownItem[];\n  selectedProvinceDropDownItem: ZipCodeDropDownItem | null;\n  selectedDistrictDropDownItem: ZipCodeDropDownItem | null;\n  selectedSubDistrictDropDownItem: ZipCodeDropDownItem | null;\n  isLoading: boolean;\n  error: ErrorResponse | null;\n  actions: {\n    fetchZipCodes: (zipCode: string) => Promise<ServiceResponse<ZipCode[]>>;\n    setSelectedProvinceDropDownItem: (item: ZipCodeDropDownItem | null) => void;\n    setSelectedDistrictDropDownItem: (item: ZipCodeDropDownItem | null) => void;\n    setSelectedSubDistrictDropDownItem: (item: ZipCodeDropDownItem | null) => void;\n    clear(): void;\n  };\n};\n\nconst ZipCodeContext = createContext<ZipCodeContextType>({\n  zipCodes: [],\n  provinceDropDownItems: [],\n  districtDropDownItems: [],\n  subDistrictDropDownItems: [],\n  selectedProvinceDropDownItem: null,\n  selectedDistrictDropDownItem: null,\n  selectedSubDistrictDropDownItem: null,\n  isLoading: false,\n  error: null,\n  actions: {\n    fetchZipCodes: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    setSelectedProvinceDropDownItem: () => {},\n    setSelectedDistrictDropDownItem: () => {},\n    setSelectedSubDistrictDropDownItem: () => {},\n    clear: () => {},\n  },\n});\n\nexport function useZipCodeContext() {\n  return useContext(ZipCodeContext);\n}\n\nfunction getDistinctZipCodeDropDownItems(items: ZipCodeDropDownItem[]): ZipCodeDropDownItem[] {\n  const uniqueItems = new Map<string, ZipCodeDropDownItem>();\n  items.forEach((item) => {\n    if (!uniqueItems.has(item.id)) {\n      uniqueItems.set(item.id, item);\n    }\n  });\n  return Array.from(uniqueItems.values());\n}\n\nexport function ZipCodeProvider({ children }: { children: React.ReactNode }) {\n  const [zipCodes, setZipCodes] = useState<ZipCode[]>([]);\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<ErrorResponse | null>(null);\n\n  const [selectedProvinceDropDownItem, setSelectedProvinceDropDownItem] = useState<ZipCodeDropDownItem | null>(null);\n  const [selectedDistrictDropDownItem, setSelectedDistrictDropDownItem] = useState<ZipCodeDropDownItem | null>(null);\n  const [selectedSubDistrictDropDownItem, setSelectedSubDistrictDropDownItem] = useState<ZipCodeDropDownItem | null>(\n    null\n  );\n\n  const provinceDropDownItems = getDistinctZipCodeDropDownItems(\n    zipCodes.map(\n      (zipCode) =>\n        ({\n          name: zipCode.ProvinceName,\n          id: zipCode.ProvinceCode,\n        }) as ZipCodeDropDownItem\n    )\n  );\n\n  const districtDropDownItems = getDistinctZipCodeDropDownItems(\n    zipCodes\n      .filter((zipCode) => zipCode.ProvinceCode === selectedProvinceDropDownItem?.id)\n      .map(\n        (zipCode) =>\n          ({\n            name: zipCode.DistrictName,\n            id: zipCode.DistrictCode,\n          }) as ZipCodeDropDownItem\n      )\n  );\n\n  const subDistrictDropDownItems = getDistinctZipCodeDropDownItems(\n    zipCodes\n      .filter((zipCode) => zipCode.DistrictCode === selectedDistrictDropDownItem?.id)\n      .map(\n        (zipCode) =>\n          ({\n            name: zipCode.SubDistrictName,\n            id: zipCode.SubDistrictCode,\n          }) as ZipCodeDropDownItem\n      )\n  );\n\n  const { bzbsService } = useBuzzebeesServiceContext();\n\n  const fetchZipCodes = async (zipCode: string): Promise<ServiceResponse<ZipCode[]>> => {\n    setIsLoading(true);\n    const response = await bzbsService.addressApi.zipCodes({ zipCode });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setZipCodes(response.model);\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const clear = () => {\n    setZipCodes([]);\n    setSelectedProvinceDropDownItem(null);\n    setSelectedDistrictDropDownItem(null);\n    setSelectedSubDistrictDropDownItem(null);\n    setError(null);\n  };\n\n  return (\n    <ZipCodeContext.Provider\n      value={{\n        zipCodes,\n        provinceDropDownItems,\n        districtDropDownItems,\n        subDistrictDropDownItems,\n        selectedProvinceDropDownItem,\n        selectedDistrictDropDownItem,\n        selectedSubDistrictDropDownItem,\n        isLoading,\n        error,\n        actions: {\n          fetchZipCodes,\n          setSelectedProvinceDropDownItem,\n          setSelectedDistrictDropDownItem,\n          setSelectedSubDistrictDropDownItem,\n          clear,\n        },\n      }}\n    >\n      {children}\n    </ZipCodeContext.Provider>\n  );\n}\n","import { ErrorResponse, Purchase, ServiceResponse, UseCampaignResponse } from '@bzbs/react-api-client';\nimport React, { createContext, useContext, useRef, useState } from 'react';\nimport { useBuzzebeesServiceContext } from './buzzebees_service_provider';\n\ntype PurchaseContextType = {\n  purchases: Purchase[];\n  isLoading: boolean;\n  error: ErrorResponse | null;\n  canLoadMore: boolean;\n  actions: {\n    fetchPurchases: (\n      config: string,\n      top: number,\n      startDate?: string,\n      endDate?: string\n    ) => Promise<ServiceResponse<Purchase[]>>;\n    use: (redeemKey: string) => Promise<ServiceResponse<UseCampaignResponse>>;\n    loadMore: () => Promise<ServiceResponse<Purchase[]>>;\n  };\n};\n\nconst PurchaseContext = createContext({\n  purchases: [],\n  isLoading: false,\n  error: null,\n  canLoadMore: false,\n  actions: {\n    fetchPurchases: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    use: async () => ({ type: 'client-error', message: 'Not implemented' }),\n    loadMore: async () => ({ type: 'client-error', message: 'Not implemented' }),\n  },\n} as PurchaseContextType);\n\nexport function usePurchaseContext() {\n  return useContext(PurchaseContext);\n}\n\nexport function PurchaseProvider({ children }: { children: React.ReactNode }) {\n  const [purchases, setPurchases] = useState<Purchase[]>([]);\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<ErrorResponse | null>(null);\n  const [canLoadMore, setCanLoadMore] = useState(false);\n\n  const { bzbsService } = useBuzzebeesServiceContext();\n\n  const currentConfig = useRef<string>('purchase');\n  const currentTop = useRef<number>(25);\n  const currentSkip = useRef<number>(0);\n  const currentStartDate = useRef<string>('');\n  const currentEndDate = useRef<string>('');\n\n  const fetchPurchases = async (\n    config: string,\n    top: number,\n    startDate?: string,\n    endDate?: string\n  ): Promise<ServiceResponse<Purchase[]>> => {\n    currentConfig.current = config;\n    currentTop.current = top;\n    currentSkip.current = 0;\n    currentStartDate.current = startDate ?? '';\n    currentEndDate.current = endDate ?? '';\n\n    setIsLoading(true);\n    const response = await bzbsService.historyApi.redeemHistories({\n      config: config,\n      byConfig: true,\n      top: top,\n      skip: currentSkip.current,\n      startDate: startDate,\n      endDate: endDate,\n    });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setPurchases(response.model);\n      setError(null);\n      if (response.model.length === currentTop.current) {\n        setCanLoadMore(true);\n      }\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const loadMore = async (): Promise<ServiceResponse<Purchase[]>> => {\n    currentSkip.current += currentTop.current;\n\n    setIsLoading(true);\n    const response = await bzbsService.historyApi.redeemHistories({\n      config: currentConfig.current,\n      byConfig: true,\n      top: currentTop.current,\n      skip: currentSkip.current,\n      startDate: currentStartDate.current,\n      endDate: currentEndDate.current,\n    });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setPurchases([...purchases, ...response.model]);\n      setError(null);\n      if (response.model.length === currentTop.current) {\n        setCanLoadMore(true);\n      } else {\n        setCanLoadMore(false);\n      }\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  const use = async (redeemKey: string): Promise<ServiceResponse<UseCampaignResponse>> => {\n    setIsLoading(true);\n    const response = await bzbsService.historyApi.use({ redeemKey: redeemKey });\n    setIsLoading(false);\n\n    if (response.type === 'success') {\n      setError(null);\n    } else {\n      setError(response);\n    }\n\n    return response;\n  };\n\n  return (\n    <PurchaseContext.Provider\n      value={{\n        purchases,\n        isLoading,\n        error,\n        canLoadMore,\n        actions: {\n          fetchPurchases,\n          loadMore,\n          use,\n        },\n      }}\n    >\n      {children}\n    </PurchaseContext.Provider>\n  );\n}\n"],"mappings":"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","names":["React","createContext","useContext","createContext","useContext","React","React","createContext","useContext","useState","React","createContext","useContext","useState","createContext","useContext","useState","userId","React","React","createContext","useContext","useState","React","createContext","useContext","useState","createContext","useContext","useState","locale","React","createContext","useContext","useState","uuid","appId","deviceToken","error","token","clientVersion","React","React","createContext","useContext","useEffect","useRef","useState","React","createContext","useContext","useState","createContext","useContext","useState","points","React","createContext","useContext","useRef","useState","useEffect","React","React","createContext","useContext","useRef","useState","createContext","useContext","useState","useRef","React","React","createContext","useContext","useState","createContext","useContext","useState","React","React","createContext","useContext","useState","createContext","useContext","useState","React","React","createContext","useContext","useState","React","createContext","useContext","useState","createContext","useContext","useState","React","React","createContext","useContext","useState","createContext","useContext","useState","React","React","createContext","useContext","useState","createContext","useContext","useState","React","MatomoTracker","React","React","useEffect","MatomoTracker","MatomoTracker","useEffect","React","React","createContext","useContext","useEffect","useState","React","createContext","useContext","useEffect","useState","createContext","useContext","useState","useEffect","React","React","createContext","useContext","useState","createContext","useContext","useState","React","React","createContext","useContext","useRef","useState","createContext","useContext","useState","useRef","React","React","React","React","createContext","useContext","useEffect","useRef","useState","createContext","useContext","useState","useRef","useEffect","React","React","createContext","useContext","useState","createContext","useContext","useState","React","React","MatomoTracker","React","createContext","useContext","useRef","useState","createContext","useContext","useState","useRef","React"]}