@datlv-trustshop/shopify-inapp-components 0.2.9 โ†’ 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/core/SDKManager.d.ts +36 -4
  2. package/dist/core/SDKManager.d.ts.map +1 -1
  3. package/dist/core/SDKManager.js +210 -63
  4. package/dist/core/SDKManager.js.map +1 -1
  5. package/dist/hooks/index.d.ts +1 -3
  6. package/dist/hooks/index.d.ts.map +1 -1
  7. package/dist/hooks/index.js +1 -3
  8. package/dist/hooks/index.js.map +1 -1
  9. package/dist/hooks/useApps.d.ts +1 -1
  10. package/dist/hooks/useApps.d.ts.map +1 -1
  11. package/dist/hooks/useApps.js +15 -7
  12. package/dist/hooks/useApps.js.map +1 -1
  13. package/dist/hooks/useArticles.d.ts.map +1 -1
  14. package/dist/hooks/useArticles.js +12 -12
  15. package/dist/hooks/useArticles.js.map +1 -1
  16. package/dist/hooks/useBanner.d.ts +1 -1
  17. package/dist/hooks/useBanner.d.ts.map +1 -1
  18. package/dist/hooks/useBanner.js +15 -13
  19. package/dist/hooks/useBanner.js.map +1 -1
  20. package/dist/hooks/useDashboard.d.ts.map +1 -1
  21. package/dist/hooks/useDashboard.js +13 -7
  22. package/dist/hooks/useDashboard.js.map +1 -1
  23. package/dist/hooks/useFloatingCards.d.ts +1 -0
  24. package/dist/hooks/useFloatingCards.d.ts.map +1 -1
  25. package/dist/hooks/useFloatingCards.js +45 -94
  26. package/dist/hooks/useFloatingCards.js.map +1 -1
  27. package/dist/hooks/usePartnerIntegration.d.ts +7 -3
  28. package/dist/hooks/usePartnerIntegration.d.ts.map +1 -1
  29. package/dist/hooks/usePartnerIntegration.js +24 -7
  30. package/dist/hooks/usePartnerIntegration.js.map +1 -1
  31. package/dist/hooks/useWhatsNew.d.ts.map +1 -1
  32. package/dist/hooks/useWhatsNew.js +10 -10
  33. package/dist/hooks/useWhatsNew.js.map +1 -1
  34. package/package.json +1 -1
  35. package/dist/hooks/useFloatingCardActions.d.ts +0 -18
  36. package/dist/hooks/useFloatingCardActions.d.ts.map +0 -1
  37. package/dist/hooks/useFloatingCardActions.js +0 -55
  38. package/dist/hooks/useFloatingCardActions.js.map +0 -1
  39. package/dist/hooks/useFloatingCardEngine.d.ts +0 -22
  40. package/dist/hooks/useFloatingCardEngine.d.ts.map +0 -1
  41. package/dist/hooks/useFloatingCardEngine.js +0 -40
  42. package/dist/hooks/useFloatingCardEngine.js.map +0 -1
  43. package/dist/hooks/useGrowApps.d.ts +0 -11
  44. package/dist/hooks/useGrowApps.d.ts.map +0 -1
  45. package/dist/hooks/useGrowApps.js +0 -15
  46. package/dist/hooks/useGrowApps.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SDKManager.js","sourceRoot":"","sources":["../../src/core/SDKManager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * SDK Manager - Internal singleton for managing global state\n * Components automatically connect to this without manual provider setup\n */\n\nimport { \n loadTranslations, \n getTranslations, \n mergeTranslations,\n type SupportedLocale,\n type SDKTranslations \n} from '../translations/translation-manager';\nimport { generateDashboardConfig, type ShopInfo, type SDKInternalConfig } from '../config/internal-config';\nimport { COMPONENT_DEFAULTS } from '../config/component-defaults';\n\n// ============================================\n// SDK Global State\n// ============================================\n\ninterface SDKState {\n initialized: boolean;\n shopInfo?: ShopInfo;\n locale: SupportedLocale;\n translations: SDKTranslations;\n config: SDKInternalConfig;\n loading: boolean;\n error?: Error;\n}\n\ninterface SDKOptions {\n shopInfo?: ShopInfo;\n locale?: SupportedLocale;\n translations?: Partial<SDKTranslations>;\n config?: Partial<SDKInternalConfig>;\n}\n\n// ============================================\n// SDK Manager Singleton\n// ============================================\n\nclass SDKManagerClass {\n private state: SDKState;\n private listeners: Set<() => void> = new Set();\n private initPromise?: Promise<void>;\n private localeObserver?: MutationObserver;\n private currentDetectedLocale?: SupportedLocale;\n\n constructor() {\n this.state = {\n initialized: false,\n locale: 'en',\n translations: getTranslations('en'),\n config: generateDashboardConfig(),\n loading: false,\n };\n\n // Try to auto-detect Shopify context and locale\n this.autoDetectShopInfo();\n this.autoDetectLocale();\n this.setupLocaleWatcher();\n }\n\n /**\n * Auto-detect current locale from browser/Shopify context\n */\n private autoDetectLocale(): void {\n if (typeof window === 'undefined') return;\n\n try {\n // Method 1: Check Shopify Admin locale (if available)\n const shopifyLocale = this.getShopifyAdminLocale();\n if (shopifyLocale) {\n this.currentDetectedLocale = shopifyLocale;\n this.updateLocale(shopifyLocale);\n console.log('๐ŸŒ Auto-detected Shopify locale:', shopifyLocale);\n return;\n }\n\n // Method 2: Browser language\n const browserLocale = navigator.language || navigator.languages?.[0];\n if (browserLocale) {\n const normalizedLocale = this.normalizeLocale(browserLocale);\n this.currentDetectedLocale = normalizedLocale;\n this.updateLocale(normalizedLocale);\n console.log('๐ŸŒ Auto-detected browser locale:', normalizedLocale);\n }\n } catch (error) {\n console.warn('Failed to auto-detect locale:', error);\n }\n }\n\n /**\n * Get locale from Shopify Admin context\n */\n private getShopifyAdminLocale(): SupportedLocale | null {\n try {\n // Check if we can detect locale from Shopify admin\n const html = document.documentElement;\n const lang = html.getAttribute('lang') || html.getAttribute('xml:lang');\n \n if (lang) {\n return this.normalizeLocale(lang);\n }\n\n // Check meta tags\n const metaLang = document.querySelector('meta[http-equiv=\"content-language\"]');\n if (metaLang) {\n const content = metaLang.getAttribute('content');\n if (content) {\n return this.normalizeLocale(content);\n }\n }\n\n return null;\n } catch {\n return null;\n }\n }\n\n /**\n * Setup watcher for locale changes in the DOM\n */\n private setupLocaleWatcher(): void {\n if (typeof window === 'undefined') return;\n\n try {\n this.localeObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.type === 'attributes' && \n (mutation.attributeName === 'lang' || mutation.attributeName === 'xml:lang')) {\n const newLocale = this.getShopifyAdminLocale();\n if (newLocale && newLocale !== this.currentDetectedLocale) {\n console.log('๐Ÿ”„ Detected locale change:', this.currentDetectedLocale, 'โ†’', newLocale);\n this.currentDetectedLocale = newLocale;\n this.handleLocaleChange(newLocale);\n }\n }\n });\n });\n\n // Watch for changes to document element attributes\n this.localeObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['lang', 'xml:lang']\n });\n\n // Also listen for custom locale change events\n window.addEventListener('trustshop-locale-change', this.handleCustomLocaleChange.bind(this));\n window.addEventListener('shopify-locale-change', this.handleCustomLocaleChange.bind(this));\n \n console.log('๐Ÿ” Locale watcher initialized');\n } catch (error) {\n console.warn('Failed to setup locale watcher:', error);\n }\n }\n\n /**\n * Handle custom locale change events\n */\n private handleCustomLocaleChange = (event: any) => {\n const newLocale = event.detail?.locale || event.detail;\n if (newLocale && typeof newLocale === 'string') {\n const normalizedLocale = this.normalizeLocale(newLocale);\n console.log('๐Ÿ“ก Received locale change event:', normalizedLocale);\n this.handleLocaleChange(normalizedLocale);\n }\n };\n\n /**\n * Handle locale changes (re-fetch data and translations)\n */\n private async handleLocaleChange(newLocale: SupportedLocale): Promise<void> {\n if (newLocale === this.state.locale) return;\n\n try {\n console.log('๐Ÿ”„ Updating SDK locale:', this.state.locale, 'โ†’', newLocale);\n this.updateState({ loading: true });\n\n // Load new translations\n const baseTranslations = await loadTranslations(newLocale);\n const translations = mergeTranslations(baseTranslations);\n\n // Update state\n this.updateState({\n locale: newLocale,\n translations,\n loading: false,\n });\n\n // Trigger re-fetch of API data with new locale\n this.refreshDataWithNewLocale(newLocale);\n\n console.log('โœ… SDK locale updated successfully');\n } catch (error) {\n console.error('โŒ Failed to update SDK locale:', error);\n this.updateState({ loading: false, error: error as Error });\n }\n }\n\n /**\n * Refresh API data with new locale\n */\n private refreshDataWithNewLocale(locale: SupportedLocale): void {\n // Clear any cached data and trigger re-fetch\n // This will cause all components to re-fetch their data\n \n // Emit event for hooks to re-fetch data\n window.dispatchEvent(new CustomEvent('trustshop-data-refresh', {\n detail: { locale, reason: 'locale-change' }\n }));\n\n console.log('๐Ÿ“ก Triggered data refresh for locale:', locale);\n }\n\n /**\n * Normalize locale string to supported format\n */\n private normalizeLocale(locale: string): SupportedLocale {\n if (!locale) return 'en';\n \n // Use the same normalization as translation manager\n const SUPPORTED_LOCALES: SupportedLocale[] = [\n 'cn', 'de', 'dk', 'en', 'es', 'fr', 'ie', 'in',\n 'it', 'jp', 'nl', 'nz', 'pt', 'se', 'vi'\n ];\n \n // Direct match\n if (SUPPORTED_LOCALES.includes(locale as SupportedLocale)) {\n return locale as SupportedLocale;\n }\n \n // Extract base locale (en-US โ†’ en)\n const base = locale.split(/[-_]/)[0].toLowerCase();\n \n // Special mappings\n const mappings: Record<string, SupportedLocale> = {\n 'zh': 'cn',\n 'da': 'dk',\n 'ga': 'ie',\n 'hi': 'in',\n 'ja': 'jp',\n 'mi': 'nz',\n 'sv': 'se',\n };\n \n const mapped = mappings[base] || base;\n \n if (SUPPORTED_LOCALES.includes(mapped as SupportedLocale)) {\n return mapped as SupportedLocale;\n }\n \n return 'en';\n }\n\n /**\n * Manually update locale (for programmatic changes)\n */\n async updateLocale(newLocale: string | SupportedLocale): Promise<void> {\n const normalizedLocale = this.normalizeLocale(newLocale);\n await this.handleLocaleChange(normalizedLocale);\n }\n\n /**\n * Auto-detect shop info from Shopify App Bridge or URL\n */\n private autoDetectShopInfo(): void {\n if (typeof window === 'undefined') return;\n\n try {\n // Method 1: Check if Shopify App Bridge is available\n const shopifyApp = (window as any).ShopifyApp;\n if (shopifyApp) {\n // Extract from App Bridge context if available\n console.log('๐Ÿ” Detected Shopify App Bridge context');\n }\n\n // Method 2: Parse from URL (admin.shopify.com)\n const currentUrl = window.location.href;\n const shopifyAdminMatch = currentUrl.match(\n /https:\\/\\/admin\\.shopify\\.com\\/store\\/([^\\/]+)/\n );\n \n if (shopifyAdminMatch) {\n const [, storeName] = shopifyAdminMatch;\n this.updateState({\n shopInfo: {\n domain: `${storeName}.myshopify.com`,\n id: storeName,\n }\n });\n console.log('๐Ÿ” Auto-detected shop from URL:', storeName);\n }\n } catch (error) {\n console.warn('Failed to auto-detect shop info:', error);\n }\n }\n\n /**\n * Initialize SDK with options (called automatically by components)\n */\n async initialize(options: SDKOptions = {}): Promise<void> {\n if (this.initPromise) {\n return this.initPromise;\n }\n\n this.initPromise = this.performInitialization(options);\n return this.initPromise;\n }\n\n private async performInitialization(options: SDKOptions): Promise<void> {\n try {\n this.updateState({ loading: true });\n\n const locale = options.locale || this.state.locale;\n const shopInfo = options.shopInfo || this.state.shopInfo;\n\n // Load translations\n const baseTranslations = await loadTranslations(locale);\n const translations = mergeTranslations(baseTranslations, options.translations);\n\n // Generate config\n const config = generateDashboardConfig(shopInfo, options.config);\n\n this.updateState({\n initialized: true,\n locale,\n shopInfo,\n translations,\n config,\n loading: false,\n error: undefined,\n });\n\n console.log('โœ… SDK initialized successfully', { locale, shopInfo });\n } catch (error) {\n this.updateState({\n loading: false,\n error: error as Error,\n });\n console.error('โŒ SDK initialization failed:', error);\n throw error;\n }\n }\n\n /**\n * Update SDK state and notify listeners\n */\n private updateState(updates: Partial<SDKState>): void {\n this.state = { ...this.state, ...updates };\n this.notifyListeners();\n }\n\n /**\n * Update configuration (called when components pass new props)\n */\n async updateConfig(options: SDKOptions): Promise<void> {\n const hasChanges = \n options.locale !== this.state.locale ||\n JSON.stringify(options.shopInfo) !== JSON.stringify(this.state.shopInfo);\n\n if (hasChanges) {\n this.initPromise = undefined; // Reset init promise to allow re-initialization\n await this.initialize(options);\n }\n }\n\n /**\n * Get current state\n */\n getState(): SDKState {\n return this.state;\n }\n\n /**\n * Subscribe to state changes\n */\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n private notifyListeners(): void {\n this.listeners.forEach(listener => listener());\n }\n\n /**\n * Get component defaults\n */\n getDefaults() {\n return COMPONENT_DEFAULTS;\n }\n\n /**\n * Check if SDK is ready for use\n */\n isReady(): boolean {\n return this.state.initialized && !this.state.loading && !this.state.error;\n }\n\n /**\n * Cleanup observers and listeners\n */\n destroy(): void {\n if (this.localeObserver) {\n this.localeObserver.disconnect();\n }\n \n if (typeof window !== 'undefined') {\n window.removeEventListener('trustshop-locale-change', this.handleCustomLocaleChange);\n window.removeEventListener('shopify-locale-change', this.handleCustomLocaleChange);\n }\n \n this.listeners.clear();\n console.log('๐Ÿงน SDK Manager cleaned up');\n }\n}\n\n// ============================================\n// Export Singleton Instance\n// ============================================\n\nexport const SDKManager = new SDKManagerClass();\n\n// ============================================\n// React Hook for Components\n// ============================================\n\nimport { useState, useEffect } from 'react';\n\nexport interface UseSDKOptions {\n shopInfo?: ShopInfo;\n locale?: SupportedLocale;\n translations?: Partial<SDKTranslations>;\n config?: Partial<SDKInternalConfig>;\n}\n\n/**\n * Hook for components to connect to SDK Manager\n * Automatically initializes SDK on first use\n */\nexport function useSDK(options: UseSDKOptions = {}) {\n const [state, setState] = useState(() => SDKManager.getState());\n const [isInitializing, setIsInitializing] = useState(false);\n\n // Subscribe to state changes\n useEffect(() => {\n const unsubscribe = SDKManager.subscribe(() => {\n setState(SDKManager.getState());\n });\n return unsubscribe;\n }, []);\n\n // Auto-initialize SDK when component mounts\n useEffect(() => {\n if (!state.initialized && !isInitializing) {\n setIsInitializing(true);\n SDKManager.initialize(options).finally(() => {\n setIsInitializing(false);\n });\n }\n }, [state.initialized, isInitializing]);\n\n // Update config if options change\n useEffect(() => {\n if (state.initialized) {\n SDKManager.updateConfig(options);\n }\n }, [state.initialized, JSON.stringify(options)]);\n\n return {\n ...state,\n isInitializing,\n defaults: SDKManager.getDefaults(),\n isReady: SDKManager.isReady(),\n };\n}\n\nexport default SDKManager;"]}
1
+ {"version":3,"file":"SDKManager.js","sourceRoot":"","sources":["../../src/core/SDKManager.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * SDK Manager - Internal singleton for managing global state\n * Components automatically connect to this without manual provider setup\n */\n\nimport {\n loadTranslations,\n getTranslations,\n mergeTranslations,\n type SupportedLocale,\n type SDKTranslations,\n} from \"../translations/translation-manager\";\nimport {\n generateDashboardConfig,\n type ShopInfo,\n type SDKInternalConfig,\n} from \"../config/internal-config\";\nimport { COMPONENT_DEFAULTS } from \"../config/component-defaults\";\nimport { DashboardEngine } from \"./engine\";\nimport { DashboardData } from \"../types\";\n\n// ============================================\n// SDK Global State\n// ============================================\n\ninterface SDKState {\n initialized: boolean;\n shopInfo?: ShopInfo;\n locale: SupportedLocale;\n translations: SDKTranslations;\n config: SDKInternalConfig;\n loading: boolean;\n error?: Error;\n dashboardData?: DashboardData | null;\n dashboardLoading?: boolean;\n dashboardError?: Error | null;\n campaignsData?: any[] | null;\n campaignsLoading?: boolean;\n campaignsError?: Error | null;\n}\n\ninterface SDKOptions {\n shopInfo?: ShopInfo;\n locale?: SupportedLocale;\n translations?: Partial<SDKTranslations>;\n config?: Partial<SDKInternalConfig>;\n}\n\n// ============================================\n// SDK Manager Singleton\n// ============================================\n\nclass SDKManagerClass {\n private state: SDKState;\n private listeners: Set<() => void> = new Set();\n private initPromise?: Promise<void>;\n private localeObserver?: MutationObserver;\n private currentDetectedLocale?: SupportedLocale;\n private dashboardEngine?: DashboardEngine;\n\n constructor() {\n this.state = {\n initialized: false,\n locale: \"en\",\n translations: getTranslations(\"en\"),\n config: generateDashboardConfig(),\n loading: false,\n };\n\n // Try to auto-detect Shopify context and locale\n this.autoDetectShopInfo();\n this.autoDetectLocale();\n this.setupLocaleWatcher();\n }\n\n /**\n * Auto-detect current locale from browser/Shopify context\n */\n private autoDetectLocale(): void {\n if (typeof window === \"undefined\") return;\n\n try {\n // Method 1: Check Shopify Admin locale (if available)\n const shopifyLocale = this.getShopifyAdminLocale();\n if (shopifyLocale) {\n this.currentDetectedLocale = shopifyLocale;\n this.updateLocale(shopifyLocale);\n // console.log(\"Auto-detected Shopify locale:\", shopifyLocale);\n return;\n }\n\n // Method 2: Browser language\n const browserLocale = navigator.language || navigator.languages?.[0];\n if (browserLocale) {\n const normalizedLocale = this.normalizeLocale(browserLocale);\n this.currentDetectedLocale = normalizedLocale;\n this.updateLocale(normalizedLocale);\n // console.log(\"Auto-detected browser locale:\", normalizedLocale);\n }\n } catch (error) {\n console.warn(\"Failed to auto-detect locale:\", error);\n }\n }\n\n /**\n * Get locale from Shopify Admin context\n */\n private getShopifyAdminLocale(): SupportedLocale | null {\n try {\n // Check if we can detect locale from Shopify admin\n const html = document.documentElement;\n const lang = html.getAttribute(\"lang\") || html.getAttribute(\"xml:lang\");\n\n if (lang) {\n return this.normalizeLocale(lang);\n }\n\n // Check meta tags\n const metaLang = document.querySelector(\n 'meta[http-equiv=\"content-language\"]',\n );\n if (metaLang) {\n const content = metaLang.getAttribute(\"content\");\n if (content) {\n return this.normalizeLocale(content);\n }\n }\n\n return null;\n } catch {\n return null;\n }\n }\n\n /**\n * Setup watcher for locale changes in the DOM\n */\n private setupLocaleWatcher(): void {\n if (typeof window === \"undefined\") return;\n\n try {\n this.localeObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (\n mutation.type === \"attributes\" &&\n (mutation.attributeName === \"lang\" ||\n mutation.attributeName === \"xml:lang\")\n ) {\n const newLocale = this.getShopifyAdminLocale();\n if (newLocale && newLocale !== this.currentDetectedLocale) {\n // console.log(\n // \"Detected locale change:\",\n // this.currentDetectedLocale,\n // \"โ†’\",\n // newLocale,\n // );\n this.currentDetectedLocale = newLocale;\n this.handleLocaleChange(newLocale);\n }\n }\n });\n });\n\n // Watch for changes to document element attributes\n this.localeObserver.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [\"lang\", \"xml:lang\"],\n });\n\n // Also listen for custom locale change events\n window.addEventListener(\n \"trustshop-locale-change\",\n this.handleCustomLocaleChange.bind(this),\n );\n window.addEventListener(\n \"shopify-locale-change\",\n this.handleCustomLocaleChange.bind(this),\n );\n\n // console.log(\"Locale watcher initialized\");\n } catch (error) {\n console.warn(\"Failed to setup locale watcher:\", error);\n }\n }\n\n /**\n * Handle custom locale change events\n */\n private handleCustomLocaleChange = (event: any) => {\n const newLocale = event.detail?.locale || event.detail;\n if (newLocale && typeof newLocale === \"string\") {\n const normalizedLocale = this.normalizeLocale(newLocale);\n // console.log(\"Received locale change event:\", normalizedLocale);\n this.handleLocaleChange(normalizedLocale);\n }\n };\n\n /**\n * Handle locale changes (re-fetch data and translations)\n */\n private async handleLocaleChange(newLocale: SupportedLocale): Promise<void> {\n if (newLocale === this.state.locale) return;\n\n try {\n // console.log(Updating SDK locale:\", this.state.locale, \"โ†’\", newLocale);\n this.updateState({ loading: true });\n\n // Load new translations\n const baseTranslations = await loadTranslations(newLocale);\n const translations = mergeTranslations(baseTranslations);\n\n // Update config with new locale\n const newConfig = { ...this.state.config, locale: newLocale };\n\n // Update state\n this.updateState({\n locale: newLocale,\n translations,\n config: newConfig,\n loading: false,\n });\n\n // Trigger re-fetch of API data with new locale\n await this.refreshDashboardData(newLocale);\n\n // console.log(\"SDK locale updated successfully\");\n } catch (error) {\n console.error(\" Failed to update SDK locale:\", error);\n this.updateState({ loading: false, error: error as Error });\n }\n }\n\n /**\n * Refresh dashboard data with new locale\n */\n private async refreshDashboardData(locale?: SupportedLocale): Promise<void> {\n try {\n this.updateState({ dashboardLoading: true, dashboardError: null });\n\n const currentLocale = locale || this.state.locale;\n const config = { ...this.state.config, locale: currentLocale };\n\n // Initialize or update dashboard engine\n if (!this.dashboardEngine) {\n this.dashboardEngine = DashboardEngine.getInstance(config);\n } else {\n // Update engine config with new locale\n await this.dashboardEngine.setLocale(currentLocale);\n }\n\n // Fetch dashboard data\n await this.dashboardEngine.init();\n const dashboardData = this.dashboardEngine.getData();\n\n this.updateState({\n dashboardData,\n dashboardLoading: false,\n dashboardError: null,\n });\n\n // Also refresh campaigns data\n await this.refreshCampaignsData(currentLocale);\n\n // Emit event for components to refresh\n window.dispatchEvent(\n new CustomEvent(\"trustshop-data-refresh\", {\n detail: {\n locale: currentLocale,\n reason: \"locale-change\",\n data: dashboardData,\n },\n }),\n );\n\n // console.log(`Dashboard data refreshed for locale: ${currentLocale}`);\n } catch (error) {\n console.error(\"Failed to refresh dashboard data:\", error);\n this.updateState({\n dashboardLoading: false,\n dashboardError: error as Error,\n });\n }\n }\n\n /**\n * Refresh campaigns data with new locale\n */\n private async refreshCampaignsData(locale?: SupportedLocale): Promise<void> {\n try {\n // Only fetch campaigns if we have a shop ID\n if (!this.state.shopInfo?.id) {\n // console.log(\"Skipping campaigns fetch - no shop ID available\");\n return;\n }\n\n this.updateState({ campaignsLoading: true, campaignsError: null });\n\n const currentLocale = locale || this.state.locale;\n const shopId = this.state.shopInfo.id;\n\n // Build campaigns API URL\n let baseUrl: string;\n if (this.state.config?.apiUrl) {\n const configUrl = this.state.config.apiUrl;\n if (configUrl.includes(\"/dashboard\")) {\n baseUrl = configUrl.replace(\"/dashboard\", \"\");\n } else {\n baseUrl = configUrl;\n }\n } else {\n baseUrl =\n typeof window !== \"undefined\" &&\n window.location.hostname === \"localhost\"\n ? \"/api\"\n : \"https://ops.trustshop.io/api\";\n }\n\n const apiUrl = `${baseUrl}/campaigns?shop_id=${shopId}&locale=${currentLocale}`;\n\n const response = await fetch(apiUrl, {\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n \"Accept-Language\": currentLocale,\n ...(this.state.config?.headers || {}),\n },\n credentials: \"include\",\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch campaigns: ${response.statusText}`);\n }\n\n const data = await response.json();\n\n const campaignsData =\n data.success && Array.isArray(data.data) ? data.data : [];\n\n this.updateState({\n campaignsData,\n campaignsLoading: false,\n campaignsError: null,\n });\n\n // Emit event for campaigns refresh\n window.dispatchEvent(\n new CustomEvent(\"trustshop-campaigns-refresh\", {\n detail: { locale: currentLocale, data: campaignsData, shopId },\n }),\n );\n } catch (error) {\n console.error(\"Failed to refresh campaigns data:\", error);\n this.updateState({\n campaignsLoading: false,\n campaignsError: error as Error,\n });\n }\n }\n\n /**\n * Normalize locale string to supported format\n */\n private normalizeLocale(locale: string): SupportedLocale {\n if (!locale) return \"en\";\n\n // Use the same normalization as translation manager\n const SUPPORTED_LOCALES: SupportedLocale[] = [\n \"cn\",\n \"de\",\n \"dk\",\n \"en\",\n \"es\",\n \"fr\",\n \"ie\",\n \"in\",\n \"it\",\n \"jp\",\n \"nl\",\n \"nz\",\n \"pt\",\n \"se\",\n \"vi\",\n ];\n\n // Direct match\n if (SUPPORTED_LOCALES.includes(locale as SupportedLocale)) {\n return locale as SupportedLocale;\n }\n\n // Extract base locale (en-US โ†’ en)\n const base = locale.split(/[-_]/)[0].toLowerCase();\n\n // Special mappings\n const mappings: Record<string, SupportedLocale> = {\n zh: \"cn\",\n da: \"dk\",\n ga: \"ie\",\n hi: \"in\",\n ja: \"jp\",\n mi: \"nz\",\n sv: \"se\",\n };\n\n const mapped = mappings[base] || base;\n\n if (SUPPORTED_LOCALES.includes(mapped as SupportedLocale)) {\n return mapped as SupportedLocale;\n }\n\n return \"en\";\n }\n\n /**\n * Manually update locale (for programmatic changes)\n */\n async updateLocale(newLocale: string | SupportedLocale): Promise<void> {\n const normalizedLocale = this.normalizeLocale(newLocale);\n await this.handleLocaleChange(normalizedLocale);\n }\n\n /**\n * Auto-detect shop info from Shopify App Bridge or URL\n */\n private autoDetectShopInfo(): void {\n if (typeof window === \"undefined\") return;\n\n try {\n // Method 1: Check if Shopify App Bridge is available\n const shopifyApp = (window as any).ShopifyApp;\n if (shopifyApp) {\n }\n\n // Method 2: Parse from URL (admin.shopify.com)\n const currentUrl = window.location.href;\n const shopifyAdminMatch = currentUrl.match(\n /https:\\/\\/admin\\.shopify\\.com\\/store\\/([^\\/]+)/,\n );\n\n if (shopifyAdminMatch) {\n const [, storeName] = shopifyAdminMatch;\n this.updateState({\n shopInfo: {\n domain: `${storeName}.myshopify.com`,\n id: storeName,\n },\n });\n }\n } catch (error) {\n console.warn(\"Failed to auto-detect shop info:\", error);\n }\n }\n\n /**\n * Initialize SDK with options (called automatically by components)\n */\n async initialize(options: SDKOptions = {}): Promise<void> {\n if (this.initPromise) {\n return this.initPromise;\n }\n\n this.initPromise = this.performInitialization(options);\n return this.initPromise;\n }\n\n private async performInitialization(options: SDKOptions): Promise<void> {\n try {\n this.updateState({ loading: true });\n\n const locale = options.locale || this.state.locale;\n const shopInfo = options.shopInfo || this.state.shopInfo;\n\n // Load translations\n const baseTranslations = await loadTranslations(locale);\n const translations = mergeTranslations(\n baseTranslations,\n options.translations,\n );\n\n // Generate config with locale\n const config = {\n ...generateDashboardConfig(shopInfo, options.config),\n locale,\n };\n\n this.updateState({\n initialized: true,\n locale,\n shopInfo,\n translations,\n config,\n loading: false,\n error: undefined,\n });\n\n // Automatically fetch dashboard data after initialization\n await this.refreshDashboardData(locale);\n\n // console.log(\"SDK initialized successfully with dashboard data\", {\n // locale,\n // shopInfo,\n // });\n } catch (error) {\n this.updateState({\n loading: false,\n error: error as Error,\n });\n console.error(\"SDK initialization failed:\", error);\n throw error;\n }\n }\n\n /**\n * Update SDK state and notify listeners\n */\n private updateState(updates: Partial<SDKState>): void {\n this.state = { ...this.state, ...updates };\n this.notifyListeners();\n }\n\n /**\n * Update configuration (called when components pass new props)\n */\n async updateConfig(options: SDKOptions): Promise<void> {\n const hasChanges =\n options.locale !== this.state.locale ||\n JSON.stringify(options.shopInfo) !== JSON.stringify(this.state.shopInfo);\n\n if (hasChanges) {\n this.initPromise = undefined; // Reset init promise to allow re-initialization\n await this.initialize(options);\n }\n }\n\n /**\n * Get current state\n */\n getState(): SDKState {\n return this.state;\n }\n\n /**\n * Subscribe to state changes\n */\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n private notifyListeners(): void {\n this.listeners.forEach((listener) => listener());\n }\n\n /**\n * Get component defaults\n */\n getDefaults() {\n return COMPONENT_DEFAULTS;\n }\n\n /**\n * Get dashboard engine instance\n */\n getDashboardEngine(): DashboardEngine | undefined {\n return this.dashboardEngine;\n }\n\n /**\n * Get dashboard data\n */\n getDashboardData(): DashboardData | null | undefined {\n return this.state.dashboardData;\n }\n\n /**\n * Get campaigns data\n */\n getCampaignsData(): any[] | null | undefined {\n return this.state.campaignsData;\n }\n\n /**\n * Check if SDK is ready for use\n */\n isReady(): boolean {\n return (\n this.state.initialized &&\n !this.state.loading &&\n !this.state.error &&\n !this.state.dashboardLoading\n );\n }\n\n /**\n * Cleanup observers and listeners\n */\n destroy(): void {\n if (this.localeObserver) {\n this.localeObserver.disconnect();\n }\n\n if (typeof window !== \"undefined\") {\n window.removeEventListener(\n \"trustshop-locale-change\",\n this.handleCustomLocaleChange,\n );\n window.removeEventListener(\n \"shopify-locale-change\",\n this.handleCustomLocaleChange,\n );\n }\n\n this.listeners.clear();\n // console.log(\"SDK Manager cleaned up\");\n }\n}\n\n// ============================================\n// Export Singleton Instance\n// ============================================\n\nexport const SDKManager = new SDKManagerClass();\n\n// ============================================\n// React Hook for Components\n// ============================================\n\nimport { useState, useEffect } from \"react\";\n\nexport interface UseSDKOptions {\n shopInfo?: ShopInfo;\n locale?: SupportedLocale;\n translations?: Partial<SDKTranslations>;\n config?: Partial<SDKInternalConfig>;\n}\n\n/**\n * Hook for components to connect to SDK Manager\n * Automatically initializes SDK on first use\n */\nexport function useSDK(options: UseSDKOptions = {}) {\n const [state, setState] = useState(() => SDKManager.getState());\n const [isInitializing, setIsInitializing] = useState(false);\n\n // Subscribe to state changes\n useEffect(() => {\n const unsubscribe = SDKManager.subscribe(() => {\n setState(SDKManager.getState());\n });\n return unsubscribe;\n }, []);\n\n // Auto-initialize SDK when component mounts\n useEffect(() => {\n if (!state.initialized && !isInitializing) {\n setIsInitializing(true);\n SDKManager.initialize(options).finally(() => {\n setIsInitializing(false);\n });\n }\n }, [state.initialized, isInitializing]);\n\n // Update config if options change\n useEffect(() => {\n if (state.initialized) {\n SDKManager.updateConfig(options);\n }\n }, [state.initialized, JSON.stringify(options)]);\n\n return {\n ...state,\n isInitializing,\n defaults: SDKManager.getDefaults(),\n isReady: SDKManager.isReady(),\n dashboardEngine: SDKManager.getDashboardEngine(),\n };\n}\n\nexport default SDKManager;\n"]}
@@ -3,10 +3,8 @@ export * from "./useBanner";
3
3
  export * from "./useApps";
4
4
  export * from "./useArticles";
5
5
  export * from "./useWhatsNew";
6
- export * from "./useGrowApps";
7
6
  export * from "./usePartnerIntegration";
8
7
  export * from "./useFloatingCards";
9
8
  export * from "./useCampaignTracking";
10
- export * from "./useFloatingCardActions";
11
- export * from "./useFloatingCardEngine";
9
+ export * from "./useTranslations";
12
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC"}
@@ -3,10 +3,8 @@ export * from "./useBanner";
3
3
  export * from "./useApps";
4
4
  export * from "./useArticles";
5
5
  export * from "./useWhatsNew";
6
- export * from "./useGrowApps";
7
6
  export * from "./usePartnerIntegration";
8
7
  export * from "./useFloatingCards";
9
8
  export * from "./useCampaignTracking";
10
- export * from "./useFloatingCardActions";
11
- export * from "./useFloatingCardEngine";
9
+ export * from "./useTranslations";
12
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,yBAAyB,CAAC","sourcesContent":["export * from \"./useDashboard\";\nexport * from \"./useBanner\";\nexport * from \"./useApps\";\nexport * from \"./useArticles\";\nexport * from \"./useWhatsNew\";\nexport * from \"./useGrowApps\";\nexport * from \"./usePartnerIntegration\";\nexport * from \"./useFloatingCards\";\nexport * from \"./useCampaignTracking\";\nexport * from \"./useFloatingCardActions\";\nexport * from \"./useFloatingCardEngine\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC","sourcesContent":["export * from \"./useDashboard\";\nexport * from \"./useBanner\";\nexport * from \"./useApps\";\nexport * from \"./useArticles\";\nexport * from \"./useWhatsNew\";\nexport * from \"./usePartnerIntegration\";\nexport * from \"./useFloatingCards\";\nexport * from \"./useCampaignTracking\";\nexport * from \"./useTranslations\";\n"]}
@@ -1,4 +1,4 @@
1
1
  import { AppItem, AppGroup } from "../types";
2
- export declare function useApps(_group?: AppGroup): AppItem[];
2
+ export declare function useApps(group?: AppGroup): AppItem[];
3
3
  export declare function useAppGroups(): AppGroup[];
4
4
  //# sourceMappingURL=useApps.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useApps.d.ts","sourceRoot":"","sources":["../../src/hooks/useApps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE7C,wBAAgB,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,EAAE,CAIpD;AAED,wBAAgB,YAAY,IAAI,QAAQ,EAAE,CAIzC"}
1
+ {"version":3,"file":"useApps.d.ts","sourceRoot":"","sources":["../../src/hooks/useApps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAI7C,wBAAgB,OAAO,CAAC,KAAK,CAAC,EAAE,QAAQ,GAAG,OAAO,EAAE,CAOnD;AAED,wBAAgB,YAAY,IAAI,QAAQ,EAAE,CAOzC"}
@@ -1,11 +1,19 @@
1
- export function useApps(_group) {
2
- // Legacy hook - components should use SDK directly
3
- // Returning empty for backward compatibility
4
- return [];
1
+ import { useSDK } from "../core/SDKManager";
2
+ import { useMemo } from "react";
3
+ export function useApps(group) {
4
+ const sdk = useSDK();
5
+ return useMemo(() => {
6
+ if (!sdk.dashboardEngine)
7
+ return [];
8
+ return sdk.dashboardEngine.getApps(group);
9
+ }, [sdk.dashboardEngine, sdk.dashboardData, group]);
5
10
  }
6
11
  export function useAppGroups() {
7
- // Legacy hook - components should use SDK directly
8
- // Returning empty for backward compatibility
9
- return [];
12
+ const sdk = useSDK();
13
+ return useMemo(() => {
14
+ if (!sdk.dashboardEngine)
15
+ return [];
16
+ return sdk.dashboardEngine.getAppGroups();
17
+ }, [sdk.dashboardEngine, sdk.dashboardData]);
10
18
  }
11
19
  //# sourceMappingURL=useApps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useApps.js","sourceRoot":"","sources":["../../src/hooks/useApps.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,OAAO,CAAC,MAAiB;IACvC,mDAAmD;IACnD,6CAA6C;IAC7C,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,qDAAqD;IACrD,6CAA6C;IAC7C,OAAO,EAAE,CAAC;AACZ,CAAC","sourcesContent":["import { AppItem, AppGroup } from \"../types\";\n\nexport function useApps(_group?: AppGroup): AppItem[] {\n // Legacy hook - components should use SDK directly\n // Returning empty for backward compatibility\n return [];\n}\n\nexport function useAppGroups(): AppGroup[] {\n // Legacy hook - components should use SDK directly \n // Returning empty for backward compatibility\n return [];\n}\n"]}
1
+ {"version":3,"file":"useApps.js","sourceRoot":"","sources":["../../src/hooks/useApps.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,MAAM,UAAU,OAAO,CAAC,KAAgB;IACtC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IAErB,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,CAAC,GAAG,CAAC,eAAe;YAAE,OAAO,EAAE,CAAC;QACpC,OAAO,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IAErB,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,CAAC,GAAG,CAAC,eAAe;YAAE,OAAO,EAAE,CAAC;QACpC,OAAO,GAAG,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;IAC5C,CAAC,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;AAC/C,CAAC","sourcesContent":["import { AppItem, AppGroup } from \"../types\";\nimport { useSDK } from \"../core/SDKManager\";\nimport { useMemo } from \"react\";\n\nexport function useApps(group?: AppGroup): AppItem[] {\n const sdk = useSDK();\n \n return useMemo(() => {\n if (!sdk.dashboardEngine) return [];\n return sdk.dashboardEngine.getApps(group);\n }, [sdk.dashboardEngine, sdk.dashboardData, group]);\n}\n\nexport function useAppGroups(): AppGroup[] {\n const sdk = useSDK();\n \n return useMemo(() => {\n if (!sdk.dashboardEngine) return [];\n return sdk.dashboardEngine.getAppGroups();\n }, [sdk.dashboardEngine, sdk.dashboardData]);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useArticles.d.ts","sourceRoot":"","sources":["../../src/hooks/useArticles.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;IAC7D,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;IAC3D,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;CACrD;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,iBAAiB,CA4B7D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,GAAE,MAAU,GAAG,WAAW,EAAE,CAMlE;AAED,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAc/C"}
1
+ {"version":3,"file":"useArticles.d.ts","sourceRoot":"","sources":["../../src/hooks/useArticles.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;IAC7D,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;IAC3D,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;CACrD;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,iBAAiB,CA6B7D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,GAAE,MAAU,GAAG,WAAW,EAAE,CAMlE;AAED,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAc/C"}
@@ -1,24 +1,24 @@
1
1
  import { useMemo } from "react";
2
2
  import { useSDK } from "../core/SDKManager";
3
3
  export function useArticles(limit) {
4
- // Legacy hook - components should use SDK directly
5
- const sdk = useSDK({});
4
+ const sdk = useSDK();
6
5
  const articles = useMemo(() => {
7
- // Returning empty for backward compatibility
8
- return [];
9
- }, [limit]);
10
- const getArticle = (_id) => {
11
- return undefined; // Legacy compatibility
6
+ if (!sdk.dashboardEngine)
7
+ return [];
8
+ return sdk.dashboardEngine.getArticles(limit);
9
+ }, [sdk.dashboardEngine, sdk.dashboardData, limit]);
10
+ const getArticle = (id) => {
11
+ return articles.find(article => article.id === id || article.id === String(id) || article.id === Number(id));
12
12
  };
13
- const getArticlesByCategory = (_category) => {
14
- return []; // Legacy compatibility
13
+ const getArticlesByCategory = (category) => {
14
+ return articles.filter(article => article.category === category);
15
15
  };
16
- const getLatestArticles = (_limitCount) => {
17
- return []; // Legacy compatibility
16
+ const getLatestArticles = (limitCount) => {
17
+ return articles.slice(0, limitCount);
18
18
  };
19
19
  return {
20
20
  articles,
21
- loading: sdk.loading,
21
+ loading: sdk.dashboardLoading || false,
22
22
  getArticle,
23
23
  getArticlesByCategory,
24
24
  getLatestArticles,
@@ -1 +1 @@
1
- {"version":3,"file":"useArticles.js","sourceRoot":"","sources":["../../src/hooks/useArticles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAW5C,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,mDAAmD;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAEvB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;QAC5B,6CAA6C;QAC7C,OAAO,EAAE,CAAC;IACZ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,UAAU,GAAG,CAAC,GAAoB,EAA2B,EAAE;QACnE,OAAO,SAAS,CAAC,CAAC,uBAAuB;IAC3C,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,CAAC,SAAiB,EAAiB,EAAE;QACjE,OAAO,EAAE,CAAC,CAAC,uBAAuB;IACpC,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,WAAmB,EAAiB,EAAE;QAC/D,OAAO,EAAE,CAAC,CAAC,uBAAuB;IACpC,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ;QACR,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,UAAU;QACV,qBAAqB;QACrB,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB,CAAC;IACjD,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,WAAW,EAAE,CAAC;IAEtD,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;IAEnC,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QAErC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjB,CAAC","sourcesContent":["import { useMemo } from \"react\";\nimport { useSDK } from \"../core/SDKManager\";\nimport { ArticleItem } from \"../types\";\n\nexport interface UseArticlesResult {\n articles: ArticleItem[];\n loading: boolean;\n getArticle: (id: string | number) => ArticleItem | undefined;\n getArticlesByCategory: (category: string) => ArticleItem[];\n getLatestArticles: (limit: number) => ArticleItem[];\n}\n\nexport function useArticles(limit?: number): UseArticlesResult {\n // Legacy hook - components should use SDK directly\n const sdk = useSDK({});\n\n const articles = useMemo(() => {\n // Returning empty for backward compatibility\n return [];\n }, [limit]);\n\n const getArticle = (_id: string | number): ArticleItem | undefined => {\n return undefined; // Legacy compatibility\n };\n\n const getArticlesByCategory = (_category: string): ArticleItem[] => {\n return []; // Legacy compatibility\n };\n\n const getLatestArticles = (_limitCount: number): ArticleItem[] => {\n return []; // Legacy compatibility\n };\n\n return {\n articles,\n loading: sdk.loading,\n getArticle,\n getArticlesByCategory,\n getLatestArticles,\n };\n}\n\nexport function useLatestArticles(limit: number = 5): ArticleItem[] {\n const { articles, getLatestArticles } = useArticles();\n\n return useMemo(() => {\n return getLatestArticles(limit);\n }, [articles, limit]);\n}\n\nexport function useArticleCategories(): string[] {\n const { articles } = useArticles();\n\n return useMemo(() => {\n const categories = new Set<string>();\n\n articles.forEach((article) => {\n if (article.category) {\n categories.add(article.category);\n }\n });\n\n return Array.from(categories);\n }, [articles]);\n}\n"]}
1
+ {"version":3,"file":"useArticles.js","sourceRoot":"","sources":["../../src/hooks/useArticles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAW5C,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IAErB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;QAC5B,IAAI,CAAC,GAAG,CAAC,eAAe;YAAE,OAAO,EAAE,CAAC;QACpC,OAAO,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;IAEpD,MAAM,UAAU,GAAG,CAAC,EAAmB,EAA2B,EAAE;QAClE,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAC7B,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAC5E,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,qBAAqB,GAAG,CAAC,QAAgB,EAAiB,EAAE;QAChE,OAAO,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;IACnE,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,UAAkB,EAAiB,EAAE;QAC9D,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,OAAO;QACL,QAAQ;QACR,OAAO,EAAE,GAAG,CAAC,gBAAgB,IAAI,KAAK;QACtC,UAAU;QACV,qBAAqB;QACrB,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB,CAAC;IACjD,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,WAAW,EAAE,CAAC;IAEtD,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;IAEnC,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QAErC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjB,CAAC","sourcesContent":["import { useMemo } from \"react\";\nimport { useSDK } from \"../core/SDKManager\";\nimport { ArticleItem } from \"../types\";\n\nexport interface UseArticlesResult {\n articles: ArticleItem[];\n loading: boolean;\n getArticle: (id: string | number) => ArticleItem | undefined;\n getArticlesByCategory: (category: string) => ArticleItem[];\n getLatestArticles: (limit: number) => ArticleItem[];\n}\n\nexport function useArticles(limit?: number): UseArticlesResult {\n const sdk = useSDK();\n\n const articles = useMemo(() => {\n if (!sdk.dashboardEngine) return [];\n return sdk.dashboardEngine.getArticles(limit);\n }, [sdk.dashboardEngine, sdk.dashboardData, limit]);\n\n const getArticle = (id: string | number): ArticleItem | undefined => {\n return articles.find(article => \n article.id === id || article.id === String(id) || article.id === Number(id)\n );\n };\n\n const getArticlesByCategory = (category: string): ArticleItem[] => {\n return articles.filter(article => article.category === category);\n };\n\n const getLatestArticles = (limitCount: number): ArticleItem[] => {\n return articles.slice(0, limitCount);\n };\n\n return {\n articles,\n loading: sdk.dashboardLoading || false,\n getArticle,\n getArticlesByCategory,\n getLatestArticles,\n };\n}\n\nexport function useLatestArticles(limit: number = 5): ArticleItem[] {\n const { articles, getLatestArticles } = useArticles();\n\n return useMemo(() => {\n return getLatestArticles(limit);\n }, [articles, limit]);\n}\n\nexport function useArticleCategories(): string[] {\n const { articles } = useArticles();\n\n return useMemo(() => {\n const categories = new Set<string>();\n\n articles.forEach((article) => {\n if (article.category) {\n categories.add(article.category);\n }\n });\n\n return Array.from(categories);\n }, [articles]);\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import { BannerItem, BannerType } from "../types";
2
- export declare function useBanners(_type?: BannerType): BannerItem[];
2
+ export declare function useBanners(type?: BannerType): BannerItem[];
3
3
  export declare function useTopBanner(): BannerItem | null;
4
4
  export declare function usePopupBanner(): BannerItem | null;
5
5
  export declare function useFooterBanner(): BannerItem | null;
@@ -1 +1 @@
1
- {"version":3,"file":"useBanner.d.ts","sourceRoot":"","sources":["../../src/hooks/useBanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAElD,wBAAgB,UAAU,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAI3D;AAED,wBAAgB,YAAY,IAAI,UAAU,GAAG,IAAI,CAIhD;AAED,wBAAgB,cAAc,IAAI,UAAU,GAAG,IAAI,CAIlD;AAED,wBAAgB,eAAe,IAAI,UAAU,GAAG,IAAI,CAInD"}
1
+ {"version":3,"file":"useBanner.d.ts","sourceRoot":"","sources":["../../src/hooks/useBanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAIlD,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAO1D;AAED,wBAAgB,YAAY,IAAI,UAAU,GAAG,IAAI,CAGhD;AAED,wBAAgB,cAAc,IAAI,UAAU,GAAG,IAAI,CAGlD;AAED,wBAAgB,eAAe,IAAI,UAAU,GAAG,IAAI,CAGnD"}
@@ -1,21 +1,23 @@
1
- export function useBanners(_type) {
2
- // This is a legacy hook - components should use the SDK directly
3
- // Keeping for backward compatibility but returning empty for now
4
- return [];
1
+ import { useSDK } from "../core/SDKManager";
2
+ import { useMemo } from "react";
3
+ export function useBanners(type) {
4
+ const sdk = useSDK();
5
+ return useMemo(() => {
6
+ if (!sdk.dashboardEngine)
7
+ return [];
8
+ return sdk.dashboardEngine.getActiveBanners(type);
9
+ }, [sdk.dashboardEngine, sdk.dashboardData, type]);
5
10
  }
6
11
  export function useTopBanner() {
7
- // This is a legacy hook - TopBanner component should use SDK directly
8
- // Keeping for backward compatibility but returning null for now
9
- return null;
12
+ const banners = useBanners("top_banner");
13
+ return banners[0] || null;
10
14
  }
11
15
  export function usePopupBanner() {
12
- // This is a legacy hook - PopupBanner component should use SDK directly
13
- // Keeping for backward compatibility but returning null for now
14
- return null;
16
+ const banners = useBanners("popup");
17
+ return banners[0] || null;
15
18
  }
16
19
  export function useFooterBanner() {
17
- // This is a legacy hook - FooterBanner component should use SDK directly
18
- // Keeping for backward compatibility but returning null for now
19
- return null;
20
+ const banners = useBanners("footer_banner");
21
+ return banners[0] || null;
20
22
  }
21
23
  //# sourceMappingURL=useBanner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBanner.js","sourceRoot":"","sources":["../../src/hooks/useBanner.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,UAAU,CAAC,KAAkB;IAC3C,iEAAiE;IACjE,iEAAiE;IACjE,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,wEAAwE;IACxE,gEAAgE;IAChE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,wEAAwE;IACxE,kEAAkE;IAClE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,yEAAyE;IACzE,gEAAgE;IAChE,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { BannerItem, BannerType } from \"../types\";\n\nexport function useBanners(_type?: BannerType): BannerItem[] {\n // This is a legacy hook - components should use the SDK directly\n // Keeping for backward compatibility but returning empty for now\n return [];\n}\n\nexport function useTopBanner(): BannerItem | null {\n // This is a legacy hook - TopBanner component should use SDK directly \n // Keeping for backward compatibility but returning null for now\n return null;\n}\n\nexport function usePopupBanner(): BannerItem | null {\n // This is a legacy hook - PopupBanner component should use SDK directly\n // Keeping for backward compatibility but returning null for now \n return null;\n}\n\nexport function useFooterBanner(): BannerItem | null {\n // This is a legacy hook - FooterBanner component should use SDK directly\n // Keeping for backward compatibility but returning null for now\n return null;\n}\n"]}
1
+ {"version":3,"file":"useBanner.js","sourceRoot":"","sources":["../../src/hooks/useBanner.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,MAAM,UAAU,UAAU,CAAC,IAAiB;IAC1C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IAErB,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,CAAC,GAAG,CAAC,eAAe;YAAE,OAAO,EAAE,CAAC;QACpC,OAAO,GAAG,CAAC,eAAe,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;IACzC,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAC5C,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC","sourcesContent":["import { BannerItem, BannerType } from \"../types\";\nimport { useSDK } from \"../core/SDKManager\";\nimport { useMemo } from \"react\";\n\nexport function useBanners(type?: BannerType): BannerItem[] {\n const sdk = useSDK();\n\n return useMemo(() => {\n if (!sdk.dashboardEngine) return [];\n return sdk.dashboardEngine.getActiveBanners(type);\n }, [sdk.dashboardEngine, sdk.dashboardData, type]);\n}\n\nexport function useTopBanner(): BannerItem | null {\n const banners = useBanners(\"top_banner\");\n return banners[0] || null;\n}\n\nexport function usePopupBanner(): BannerItem | null {\n const banners = useBanners(\"popup\");\n return banners[0] || null;\n}\n\nexport function useFooterBanner(): BannerItem | null {\n const banners = useBanners(\"footer_banner\");\n return banners[0] || null;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useDashboard.d.ts","sourceRoot":"","sources":["../../src/hooks/useDashboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,IAAI,kBAAkB,CAcjD"}
1
+ {"version":3,"file":"useDashboard.d.ts","sourceRoot":"","sources":["../../src/hooks/useDashboard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,IAAI,kBAAkB,CAoBjD"}
@@ -1,15 +1,21 @@
1
1
  import { useSDK } from "../core/SDKManager";
2
+ import SDKManager from "../core/SDKManager";
2
3
  export function useDashboard() {
3
- // Legacy hook - use useSDK instead
4
4
  const sdk = useSDK({});
5
- // Return a compatible structure for backward compatibility
5
+ // Get dashboard data from SDK
6
+ const dashboardData = SDKManager.getDashboardData();
6
7
  return {
7
- data: null, // Dashboard data not available in provider-less architecture
8
- loading: sdk.loading,
9
- error: sdk.error || null,
10
- refresh: async () => { }, // No-op for backward compatibility
8
+ data: dashboardData || null,
9
+ loading: sdk.dashboardLoading || false,
10
+ error: sdk.dashboardError || null,
11
+ refresh: async () => {
12
+ // Trigger a refresh through SDK
13
+ if (SDKManager.getDashboardEngine()) {
14
+ await SDKManager.getDashboardEngine().refresh();
15
+ }
16
+ },
11
17
  isInitialized: sdk.initialized,
12
- lastFetch: null, // Not tracked in provider-less architecture
18
+ lastFetch: dashboardData ? new Date() : null,
13
19
  locale: sdk.locale,
14
20
  };
15
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useDashboard.js","sourceRoot":"","sources":["../../src/hooks/useDashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAa5C,MAAM,UAAU,YAAY;IAC1B,mCAAmC;IACnC,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAEvB,2DAA2D;IAC3D,OAAO;QACL,IAAI,EAAE,IAAI,EAAE,6DAA6D;QACzE,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,IAAI;QACxB,OAAO,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAE,mCAAmC;QAC5D,aAAa,EAAE,GAAG,CAAC,WAAW;QAC9B,SAAS,EAAE,IAAI,EAAE,4CAA4C;QAC7D,MAAM,EAAE,GAAG,CAAC,MAAM;KACnB,CAAC;AACJ,CAAC","sourcesContent":["import { useSDK } from \"../core/SDKManager\";\nimport { DashboardData } from \"../types\";\n\nexport interface UseDashboardResult {\n data: DashboardData | null;\n loading: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n isInitialized: boolean;\n lastFetch: Date | null;\n locale: string;\n}\n\nexport function useDashboard(): UseDashboardResult {\n // Legacy hook - use useSDK instead\n const sdk = useSDK({});\n \n // Return a compatible structure for backward compatibility\n return {\n data: null, // Dashboard data not available in provider-less architecture\n loading: sdk.loading,\n error: sdk.error || null,\n refresh: async () => {}, // No-op for backward compatibility\n isInitialized: sdk.initialized,\n lastFetch: null, // Not tracked in provider-less architecture\n locale: sdk.locale,\n };\n}\n"]}
1
+ {"version":3,"file":"useDashboard.js","sourceRoot":"","sources":["../../src/hooks/useDashboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAa5C,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAEvB,8BAA8B;IAC9B,MAAM,aAAa,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;IAEpD,OAAO;QACL,IAAI,EAAE,aAAa,IAAI,IAAI;QAC3B,OAAO,EAAE,GAAG,CAAC,gBAAgB,IAAI,KAAK;QACtC,KAAK,EAAE,GAAG,CAAC,cAAc,IAAI,IAAI;QACjC,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,gCAAgC;YAChC,IAAI,UAAU,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBACpC,MAAM,UAAU,CAAC,kBAAkB,EAAG,CAAC,OAAO,EAAE,CAAC;YACnD,CAAC;QACH,CAAC;QACD,aAAa,EAAE,GAAG,CAAC,WAAW;QAC9B,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI;QAC5C,MAAM,EAAE,GAAG,CAAC,MAAM;KACnB,CAAC;AACJ,CAAC","sourcesContent":["import { useSDK } from \"../core/SDKManager\";\nimport SDKManager from \"../core/SDKManager\";\nimport { DashboardData } from \"../types\";\n\nexport interface UseDashboardResult {\n data: DashboardData | null;\n loading: boolean;\n error: Error | null;\n refresh: () => Promise<void>;\n isInitialized: boolean;\n lastFetch: Date | null;\n locale: string;\n}\n\nexport function useDashboard(): UseDashboardResult {\n const sdk = useSDK({});\n \n // Get dashboard data from SDK\n const dashboardData = SDKManager.getDashboardData();\n \n return {\n data: dashboardData || null,\n loading: sdk.dashboardLoading || false,\n error: sdk.dashboardError || null,\n refresh: async () => {\n // Trigger a refresh through SDK\n if (SDKManager.getDashboardEngine()) {\n await SDKManager.getDashboardEngine()!.refresh();\n }\n },\n isInitialized: sdk.initialized,\n lastFetch: dashboardData ? new Date() : null,\n locale: sdk.locale,\n };\n}\n"]}
@@ -17,6 +17,7 @@ interface UseFloatingCardsReturn {
17
17
  }
18
18
  /**
19
19
  * Hook to fetch and manage floating cards (campaigns)
20
+ * Now uses SDK-managed campaigns data
20
21
  */
21
22
  export declare function useFloatingCards(options?: UseFloatingCardsOptions): UseFloatingCardsReturn;
22
23
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"useFloatingCards.d.ts","sourceRoot":"","sources":["../../src/hooks/useFloatingCards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,UAAU,uBAAwB,SAAQ,aAAa;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,sBAAsB;IAC9B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CAqKxB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,uBAA4B,GACpC;IACD,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,iBAAiB,EAAE,OAAO,CAAC;CAC5B,CA2EA"}
1
+ {"version":3,"file":"useFloatingCards.d.ts","sourceRoot":"","sources":["../../src/hooks/useFloatingCards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEhE,YAAY,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,UAAU,uBAAwB,SAAQ,aAAa;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,sBAAsB;IAC9B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE,uBAA4B,GACpC,sBAAsB,CAkHxB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,uBAA4B,GACpC;IACD,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,iBAAiB,EAAE,OAAO,CAAC;CAC5B,CA2EA"}
@@ -1,95 +1,42 @@
1
- import { useState, useEffect, useCallback } from "react";
1
+ import { useState, useEffect, useCallback, useMemo } from "react";
2
2
  import { useSDK } from "../core/SDKManager";
3
+ import SDKManager from "../core/SDKManager";
3
4
  /**
4
5
  * Hook to fetch and manage floating cards (campaigns)
6
+ * Now uses SDK-managed campaigns data
5
7
  */
6
8
  export function useFloatingCards(options = {}) {
7
- const { shopId: propsShopId, autoFetch = true,
9
+ const {
8
10
  // SDK options
9
11
  shopInfo, locale: propsLocale, translations, config, } = options;
10
12
  // Get SDK state and auto-initialize
11
13
  const sdk = useSDK({ shopInfo, locale: propsLocale, translations, config });
12
- // Use shopId from props or SDK shopInfo
13
- const shopId = propsShopId || sdk.shopInfo?.id;
14
- // Use locale from SDK
15
- const locale = sdk.locale;
16
- const [cards, setCards] = useState([]);
17
- const [loading, setLoading] = useState(false);
18
- const [error, setError] = useState(null);
19
14
  const [dismissedCards, setDismissedCards] = useState(new Set());
20
- const fetchCards = useCallback(async () => {
21
- if (!shopId) {
22
- setError(new Error("Shop ID is required"));
23
- return;
15
+ // Get campaigns data directly from SDK
16
+ const campaignsData = SDKManager.getCampaignsData();
17
+ // Transform campaigns data to FloatingCardData format
18
+ const cards = useMemo(() => {
19
+ if (!campaignsData || !Array.isArray(campaignsData)) {
20
+ return [];
24
21
  }
25
- setLoading(true);
26
- setError(null);
27
- try {
28
- const id = shopId;
29
- // Extract base URL from SDK config or use defaults
30
- // sdk.config.apiUrl is typically "/api/dashboard", we need just the base "/api" part
31
- let baseUrl;
32
- if (sdk.config?.apiUrl) {
33
- // Extract base URL from dashboard API URL
34
- // "/api/dashboard" -> "/api"
35
- // "https://ops.trustshop.io/api/dashboard" -> "https://ops.trustshop.io/api"
36
- const configUrl = sdk.config.apiUrl;
37
- if (configUrl.includes('/dashboard')) {
38
- baseUrl = configUrl.replace('/dashboard', '');
39
- }
40
- else {
41
- // Fallback: assume it's already the base API URL
42
- baseUrl = configUrl;
22
+ return campaignsData.map((card) => ({
23
+ ...card,
24
+ // Ensure date format
25
+ date: card.date || `Updated: ${new Date().toLocaleDateString()}`,
26
+ // Transform tag tone if needed
27
+ tag: card.tag
28
+ ? {
29
+ ...card.tag,
30
+ tone: card.tag.tone || "info",
43
31
  }
44
- }
45
- else {
46
- // Default fallback
47
- baseUrl = typeof window !== "undefined" &&
48
- window.location.hostname === "localhost"
49
- ? "/api"
50
- : "https://ops.trustshop.io/api";
51
- }
52
- const apiUrl = `${baseUrl}/campaigns?shop_id=${id}&locale=${locale}`;
53
- const response = await fetch(apiUrl, {
54
- method: "GET",
55
- headers: {
56
- Accept: "application/json",
57
- "Content-Type": "application/json",
58
- ...(sdk.config?.headers || {}),
59
- },
60
- credentials: "include",
61
- });
62
- if (!response.ok) {
63
- throw new Error(`Failed to fetch campaigns: ${response.statusText}`);
64
- }
65
- const data = await response.json();
66
- if (data.success && Array.isArray(data.data)) {
67
- const transformedCards = data.data.map((card) => ({
68
- ...card,
69
- // Ensure date format
70
- date: card.date || `Updated: ${new Date().toLocaleDateString()}`,
71
- // Transform tag tone if needed
72
- tag: card.tag
73
- ? {
74
- ...card.tag,
75
- tone: card.tag.tone || "info",
76
- }
77
- : undefined,
78
- }));
79
- setCards(transformedCards);
80
- }
81
- else {
82
- setCards([]);
83
- }
84
- }
85
- catch (err) {
86
- setError(err instanceof Error ? err : new Error("Unknown error"));
87
- setCards([]);
88
- }
89
- finally {
90
- setLoading(false);
91
- }
92
- }, [shopId, locale, sdk.config?.apiUrl, sdk.config?.headers]);
32
+ : undefined,
33
+ }));
34
+ }, [campaignsData]);
35
+ // Dummy fetchCards for backward compatibility
36
+ const fetchCards = useCallback(async () => {
37
+ // Data is now managed by SDK, this is a no-op
38
+ // console.log("Campaigns data is now managed by SDK automatically");
39
+ }, []);
93
40
  const dismissCard = useCallback((cardId) => {
94
41
  setDismissedCards((prev) => {
95
42
  const newSet = new Set(prev);
@@ -128,16 +75,20 @@ export function useFloatingCards(options = {}) {
128
75
  console.error("Failed to load dismissed cards:", e);
129
76
  }
130
77
  }, []);
131
- // Auto-fetch on mount or when shopId/locale changes
78
+ // Listen for campaigns refresh events from SDK
132
79
  useEffect(() => {
133
- if (autoFetch && shopId) {
134
- fetchCards();
135
- }
136
- }, [autoFetch, shopId, fetchCards]); // fetchCards already depends on locale
80
+ const handleCampaignsRefresh = (_event) => {
81
+ // console.log("Campaigns refreshed via SDK:", _event.detail);
82
+ };
83
+ window.addEventListener("trustshop-campaigns-refresh", handleCampaignsRefresh);
84
+ return () => {
85
+ window.removeEventListener("trustshop-campaigns-refresh", handleCampaignsRefresh);
86
+ };
87
+ }, []);
137
88
  return {
138
89
  cards,
139
- loading,
140
- error,
90
+ loading: sdk.campaignsLoading || false,
91
+ error: sdk.campaignsError || null,
141
92
  dismissedCards,
142
93
  dismissCard,
143
94
  resetDismissedCards,
@@ -177,13 +128,13 @@ export function useVisibleFloatingCards(options = {}) {
177
128
  // Debug log for development
178
129
  if (typeof window !== "undefined" &&
179
130
  window.location.hostname === "localhost") {
180
- console.log("[FloatingCard] Route matching:", {
181
- cardId: card.id,
182
- currentRoute,
183
- currentPage,
184
- display_pages: card.display_pages,
185
- matches: card.display_pages.includes(currentPage),
186
- });
131
+ // console.log("[FloatingCard] Route matching:", {
132
+ // cardId: card.id,
133
+ // currentRoute,
134
+ // currentPage,
135
+ // display_pages: card.display_pages,
136
+ // matches: card.display_pages.includes(currentPage),
137
+ // });
187
138
  }
188
139
  // Check if current page is in display_pages
189
140
  return card.display_pages.includes(currentPage);