@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.
- package/dist/core/SDKManager.d.ts +36 -4
- package/dist/core/SDKManager.d.ts.map +1 -1
- package/dist/core/SDKManager.js +210 -63
- package/dist/core/SDKManager.js.map +1 -1
- package/dist/hooks/index.d.ts +1 -3
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -3
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useApps.d.ts +1 -1
- package/dist/hooks/useApps.d.ts.map +1 -1
- package/dist/hooks/useApps.js +15 -7
- package/dist/hooks/useApps.js.map +1 -1
- package/dist/hooks/useArticles.d.ts.map +1 -1
- package/dist/hooks/useArticles.js +12 -12
- package/dist/hooks/useArticles.js.map +1 -1
- package/dist/hooks/useBanner.d.ts +1 -1
- package/dist/hooks/useBanner.d.ts.map +1 -1
- package/dist/hooks/useBanner.js +15 -13
- package/dist/hooks/useBanner.js.map +1 -1
- package/dist/hooks/useDashboard.d.ts.map +1 -1
- package/dist/hooks/useDashboard.js +13 -7
- package/dist/hooks/useDashboard.js.map +1 -1
- package/dist/hooks/useFloatingCards.d.ts +1 -0
- package/dist/hooks/useFloatingCards.d.ts.map +1 -1
- package/dist/hooks/useFloatingCards.js +45 -94
- package/dist/hooks/useFloatingCards.js.map +1 -1
- package/dist/hooks/usePartnerIntegration.d.ts +7 -3
- package/dist/hooks/usePartnerIntegration.d.ts.map +1 -1
- package/dist/hooks/usePartnerIntegration.js +24 -7
- package/dist/hooks/usePartnerIntegration.js.map +1 -1
- package/dist/hooks/useWhatsNew.d.ts.map +1 -1
- package/dist/hooks/useWhatsNew.js +10 -10
- package/dist/hooks/useWhatsNew.js.map +1 -1
- package/package.json +1 -1
- package/dist/hooks/useFloatingCardActions.d.ts +0 -18
- package/dist/hooks/useFloatingCardActions.d.ts.map +0 -1
- package/dist/hooks/useFloatingCardActions.js +0 -55
- package/dist/hooks/useFloatingCardActions.js.map +0 -1
- package/dist/hooks/useFloatingCardEngine.d.ts +0 -22
- package/dist/hooks/useFloatingCardEngine.d.ts.map +0 -1
- package/dist/hooks/useFloatingCardEngine.js +0 -40
- package/dist/hooks/useFloatingCardEngine.js.map +0 -1
- package/dist/hooks/useGrowApps.d.ts +0 -11
- package/dist/hooks/useGrowApps.d.ts.map +0 -1
- package/dist/hooks/useGrowApps.js +0 -15
- 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"]}
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -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 "./
|
|
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,
|
|
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"}
|
package/dist/hooks/index.js
CHANGED
|
@@ -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 "./
|
|
11
|
-
export * from "./useFloatingCardEngine";
|
|
9
|
+
export * from "./useTranslations";
|
|
12
10
|
//# sourceMappingURL=index.js.map
|
package/dist/hooks/index.js.map
CHANGED
|
@@ -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,
|
|
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"]}
|
package/dist/hooks/useApps.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/hooks/useApps.js
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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":"
|
|
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,
|
|
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
|
-
|
|
5
|
-
const sdk = useSDK({});
|
|
4
|
+
const sdk = useSDK();
|
|
6
5
|
const articles = useMemo(() => {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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 = (
|
|
14
|
-
return
|
|
13
|
+
const getArticlesByCategory = (category) => {
|
|
14
|
+
return articles.filter(article => article.category === category);
|
|
15
15
|
};
|
|
16
|
-
const getLatestArticles = (
|
|
17
|
-
return
|
|
16
|
+
const getLatestArticles = (limitCount) => {
|
|
17
|
+
return articles.slice(0, limitCount);
|
|
18
18
|
};
|
|
19
19
|
return {
|
|
20
20
|
articles,
|
|
21
|
-
loading: sdk.
|
|
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,
|
|
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(
|
|
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;
|
|
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"}
|
package/dist/hooks/useBanner.js
CHANGED
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
return null;
|
|
12
|
+
const banners = useBanners("top_banner");
|
|
13
|
+
return banners[0] || null;
|
|
10
14
|
}
|
|
11
15
|
export function usePopupBanner() {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return null;
|
|
16
|
+
const banners = useBanners("popup");
|
|
17
|
+
return banners[0] || null;
|
|
15
18
|
}
|
|
16
19
|
export function useFooterBanner() {
|
|
17
|
-
|
|
18
|
-
|
|
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":"
|
|
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":"
|
|
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
|
-
//
|
|
5
|
+
// Get dashboard data from SDK
|
|
6
|
+
const dashboardData = SDKManager.getDashboardData();
|
|
6
7
|
return {
|
|
7
|
-
data: null,
|
|
8
|
-
loading: sdk.
|
|
9
|
-
error: sdk.
|
|
10
|
-
refresh: async () => {
|
|
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:
|
|
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,
|
|
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"]}
|
|
@@ -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;
|
|
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 {
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
//
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
//
|
|
78
|
+
// Listen for campaigns refresh events from SDK
|
|
132
79
|
useEffect(() => {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
|
|
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
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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);
|