@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":"useFloatingCards.js","sourceRoot":"","sources":["../../src/hooks/useFloatingCards.ts"],"names":[],"mappings":"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","sourcesContent":["import { useState, useEffect, useCallback } from \"react\";\nimport type { FloatingCardData } from \"../components/FloatingCard\";\nimport { useSDK, type UseSDKOptions } from \"../core/SDKManager\";\nexport type { FloatingCardData } from \"../components/FloatingCard\";\n\ninterface UseFloatingCardsOptions extends UseSDKOptions {\n shopId?: string;\n autoFetch?: boolean;\n currentRoute?: string;\n}\n\ninterface UseFloatingCardsReturn {\n cards: FloatingCardData[];\n loading: boolean;\n error: Error | null;\n dismissedCards: Set<number>;\n dismissCard: (cardId: number) => void;\n resetDismissedCards: () => void;\n fetchCards: () => Promise<void>;\n}\n\n/**\n * Hook to fetch and manage floating cards (campaigns)\n */\nexport function useFloatingCards(\n options: UseFloatingCardsOptions = {},\n): UseFloatingCardsReturn {\n const { \n shopId: propsShopId, \n autoFetch = true, \n // SDK options\n shopInfo,\n locale: propsLocale,\n translations,\n config,\n } = options;\n\n // Get SDK state and auto-initialize\n const sdk = useSDK({ shopInfo, locale: propsLocale, translations, config });\n \n // Use shopId from props or SDK shopInfo\n const shopId = propsShopId || sdk.shopInfo?.id;\n \n // Use locale from SDK\n const locale = sdk.locale;\n\n const [cards, setCards] = useState<FloatingCardData[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const [dismissedCards, setDismissedCards] = useState<Set<number>>(new Set());\n\n const fetchCards = useCallback(async () => {\n if (!shopId) {\n setError(new Error(\"Shop ID is required\"));\n return;\n }\n\n setLoading(true);\n setError(null);\n\n try {\n const id = shopId;\n \n // Extract base URL from SDK config or use defaults\n // sdk.config.apiUrl is typically \"/api/dashboard\", we need just the base \"/api\" part\n let baseUrl: string;\n \n if (sdk.config?.apiUrl) {\n // Extract base URL from dashboard API URL\n // \"/api/dashboard\" -> \"/api\"\n // \"https://ops.trustshop.io/api/dashboard\" -> \"https://ops.trustshop.io/api\"\n const configUrl = sdk.config.apiUrl;\n if (configUrl.includes('/dashboard')) {\n baseUrl = configUrl.replace('/dashboard', '');\n } else {\n // Fallback: assume it's already the base API URL\n baseUrl = configUrl;\n }\n } else {\n // Default fallback\n baseUrl = 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=${id}&locale=${locale}`;\n\n const response = await fetch(apiUrl, {\n method: \"GET\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n ...(sdk.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 if (data.success && Array.isArray(data.data)) {\n const transformedCards: FloatingCardData[] = data.data.map(\n (card: any) => ({\n ...card,\n // Ensure date format\n date: card.date || `Updated: ${new Date().toLocaleDateString()}`,\n // Transform tag tone if needed\n tag: card.tag\n ? {\n ...card.tag,\n tone: card.tag.tone || \"info\",\n }\n : undefined,\n }),\n );\n\n setCards(transformedCards);\n } else {\n setCards([]);\n }\n } catch (err) {\n setError(err instanceof Error ? err : new Error(\"Unknown error\"));\n setCards([]);\n } finally {\n setLoading(false);\n }\n }, [shopId, locale, sdk.config?.apiUrl, sdk.config?.headers]);\n\n const dismissCard = useCallback((cardId: number) => {\n setDismissedCards((prev) => {\n const newSet = new Set(prev);\n newSet.add(cardId);\n\n // Store in localStorage for persistence\n try {\n localStorage.setItem(\n \"trustshop_dismissed_cards\",\n JSON.stringify(Array.from(newSet)),\n );\n } catch (e) {\n console.error(\"Failed to save dismissed cards:\", e);\n }\n\n return newSet;\n });\n }, []);\n\n const resetDismissedCards = useCallback(() => {\n setDismissedCards(new Set());\n try {\n localStorage.removeItem(\"trustshop_dismissed_cards\");\n } catch (e) {\n console.error(\"Failed to clear dismissed cards:\", e);\n }\n }, []);\n\n // Load dismissed cards from localStorage on mount\n useEffect(() => {\n try {\n const stored = localStorage.getItem(\"trustshop_dismissed_cards\");\n if (stored) {\n const parsed = JSON.parse(stored);\n if (Array.isArray(parsed)) {\n setDismissedCards(new Set(parsed));\n }\n }\n } catch (e) {\n console.error(\"Failed to load dismissed cards:\", e);\n }\n }, []);\n\n // Auto-fetch on mount or when shopId/locale changes\n useEffect(() => {\n if (autoFetch && shopId) {\n fetchCards();\n }\n }, [autoFetch, shopId, fetchCards]); // fetchCards already depends on locale\n\n return {\n cards,\n loading,\n error,\n dismissedCards,\n dismissCard,\n resetDismissedCards,\n fetchCards,\n };\n}\n\n/**\n * Get visible (non-dismissed) cards\n */\nexport function useVisibleFloatingCards(\n options: UseFloatingCardsOptions = {},\n): {\n visibleCards: FloatingCardData[];\n loading: boolean;\n error: Error | null;\n dismissCard: (cardId: number) => void;\n resetDismissedCards: () => void;\n hasDismissedCards: boolean;\n} {\n const { currentRoute, ...restOptions } = options;\n // Note: locale is passed through in restOptions\n const {\n cards,\n loading,\n error,\n dismissedCards,\n dismissCard,\n resetDismissedCards,\n } = useFloatingCards(restOptions);\n\n // Filter cards based on:\n // 1. Not dismissed\n // 2. Route matching (if display_pages is set)\n const visibleCards = cards.filter((card) => {\n // Check if card is dismissed\n if (dismissedCards.has(card.id)) {\n return false;\n }\n\n // Check display_pages logic\n if (card.display_pages !== undefined && card.display_pages !== null) {\n // If display_pages is empty array, show on all pages\n if (card.display_pages.length === 0) {\n return true;\n }\n\n // If display_pages has values, check if current route matches\n if (currentRoute !== undefined) {\n // Extract the page key from the route\n // Special handling: \"/\" or \"\" should map to \"dashboard\"\n let currentPage = currentRoute.replace(/^\\//, \"\").split(\"/\")[0];\n\n // Map root route to dashboard (in-app convention)\n if (!currentPage || currentPage === \"\" || currentRoute === \"/\") {\n currentPage = \"dashboard\";\n }\n\n // Debug log for development\n if (\n typeof window !== \"undefined\" &&\n window.location.hostname === \"localhost\"\n ) {\n console.log(\"[FloatingCard] Route matching:\", {\n cardId: card.id,\n currentRoute,\n currentPage,\n display_pages: card.display_pages,\n matches: card.display_pages.includes(currentPage),\n });\n }\n\n // Check if current page is in display_pages\n return card.display_pages.includes(currentPage);\n }\n\n // If no current route provided, assume dashboard\n return card.display_pages.includes(\"dashboard\");\n }\n\n // If display_pages is not defined, show on all pages (backward compatibility)\n return true;\n });\n\n const hasDismissedCards = dismissedCards.size > 0;\n\n return {\n visibleCards,\n loading,\n error,\n dismissCard,\n resetDismissedCards,\n hasDismissedCards,\n };\n}\n"]}
1
+ {"version":3,"file":"useFloatingCards.js","sourceRoot":"","sources":["../../src/hooks/useFloatingCards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAElE,OAAO,EAAE,MAAM,EAAsB,MAAM,oBAAoB,CAAC;AAChE,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAmB5C;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,UAAmC,EAAE;IAErC,MAAM;IACJ,cAAc;IACd,QAAQ,EACR,MAAM,EAAE,WAAW,EACnB,YAAY,EACZ,MAAM,GACP,GAAG,OAAO,CAAC;IAEZ,oCAAoC;IACpC,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;IAE5E,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAc,IAAI,GAAG,EAAE,CAAC,CAAC;IAE7E,uCAAuC;IACvC,MAAM,aAAa,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;IAEpD,sDAAsD;IACtD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE;QACzB,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YACpD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;YACvC,GAAG,IAAI;YACP,qBAAqB;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,EAAE;YAChE,+BAA+B;YAC/B,GAAG,EAAE,IAAI,CAAC,GAAG;gBACX,CAAC,CAAC;oBACE,GAAG,IAAI,CAAC,GAAG;oBACX,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM;iBAC9B;gBACH,CAAC,CAAC,SAAS;SACd,CAAC,CAAuB,CAAC;IAC5B,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,8CAA8C;IAC9C,MAAM,UAAU,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACxC,8CAA8C;QAC9C,qEAAqE;IACvE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,MAAc,EAAE,EAAE;QACjD,iBAAiB,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAEnB,wCAAwC;YACxC,IAAI,CAAC;gBACH,YAAY,CAAC,OAAO,CAClB,2BAA2B,EAC3B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CACnC,CAAC;YACJ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAC;YACtD,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,mBAAmB,GAAG,WAAW,CAAC,GAAG,EAAE;QAC3C,iBAAiB,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC;YACH,YAAY,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,kDAAkD;IAClD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;YACjE,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAClC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1B,iBAAiB,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,+CAA+C;IAC/C,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,sBAAsB,GAAG,CAAC,MAAW,EAAE,EAAE;YAC7C,8DAA8D;QAChE,CAAC,CAAC;QAEF,MAAM,CAAC,gBAAgB,CACrB,6BAA6B,EAC7B,sBAAsB,CACvB,CAAC;QAEF,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,mBAAmB,CACxB,6BAA6B,EAC7B,sBAAsB,CACvB,CAAC;QACJ,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,KAAK;QACL,OAAO,EAAE,GAAG,CAAC,gBAAgB,IAAI,KAAK;QACtC,KAAK,EAAE,GAAG,CAAC,cAAc,IAAI,IAAI;QACjC,cAAc;QACd,WAAW;QACX,mBAAmB;QACnB,UAAU;KACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,UAAmC,EAAE;IASrC,MAAM,EAAE,YAAY,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC;IACjD,gDAAgD;IAChD,MAAM,EACJ,KAAK,EACL,OAAO,EACP,KAAK,EACL,cAAc,EACd,WAAW,EACX,mBAAmB,GACpB,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAElC,yBAAyB;IACzB,mBAAmB;IACnB,8CAA8C;IAC9C,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACzC,6BAA6B;QAC7B,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,4BAA4B;QAC5B,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YACpE,qDAAqD;YACrD,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,8DAA8D;YAC9D,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;gBAC/B,sCAAsC;gBACtC,wDAAwD;gBACxD,IAAI,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAEhE,kDAAkD;gBAClD,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,EAAE,IAAI,YAAY,KAAK,GAAG,EAAE,CAAC;oBAC/D,WAAW,GAAG,WAAW,CAAC;gBAC5B,CAAC;gBAED,4BAA4B;gBAC5B,IACE,OAAO,MAAM,KAAK,WAAW;oBAC7B,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,WAAW,EACxC,CAAC;oBACD,kDAAkD;oBAClD,qBAAqB;oBACrB,kBAAkB;oBAClB,iBAAiB;oBACjB,uCAAuC;oBACvC,uDAAuD;oBACvD,MAAM;gBACR,CAAC;gBAED,4CAA4C;gBAC5C,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAClD,CAAC;YAED,iDAAiD;YACjD,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;QAED,8EAA8E;QAC9E,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,cAAc,CAAC,IAAI,GAAG,CAAC,CAAC;IAElD,OAAO;QACL,YAAY;QACZ,OAAO;QACP,KAAK;QACL,WAAW;QACX,mBAAmB;QACnB,iBAAiB;KAClB,CAAC;AACJ,CAAC","sourcesContent":["import { useState, useEffect, useCallback, useMemo } from \"react\";\nimport type { FloatingCardData } from \"../components/FloatingCard\";\nimport { useSDK, type UseSDKOptions } from \"../core/SDKManager\";\nimport SDKManager from \"../core/SDKManager\";\nexport type { FloatingCardData } from \"../components/FloatingCard\";\n\ninterface UseFloatingCardsOptions extends UseSDKOptions {\n shopId?: string;\n autoFetch?: boolean;\n currentRoute?: string;\n}\n\ninterface UseFloatingCardsReturn {\n cards: FloatingCardData[];\n loading: boolean;\n error: Error | null;\n dismissedCards: Set<number>;\n dismissCard: (cardId: number) => void;\n resetDismissedCards: () => void;\n fetchCards: () => Promise<void>;\n}\n\n/**\n * Hook to fetch and manage floating cards (campaigns)\n * Now uses SDK-managed campaigns data\n */\nexport function useFloatingCards(\n options: UseFloatingCardsOptions = {},\n): UseFloatingCardsReturn {\n const {\n // SDK options\n shopInfo,\n locale: propsLocale,\n translations,\n config,\n } = options;\n\n // Get SDK state and auto-initialize\n const sdk = useSDK({ shopInfo, locale: propsLocale, translations, config });\n\n const [dismissedCards, setDismissedCards] = useState<Set<number>>(new Set());\n\n // Get campaigns data directly from SDK\n const campaignsData = SDKManager.getCampaignsData();\n\n // Transform campaigns data to FloatingCardData format\n const cards = useMemo(() => {\n if (!campaignsData || !Array.isArray(campaignsData)) {\n return [];\n }\n\n return campaignsData.map((card: any) => ({\n ...card,\n // Ensure date format\n date: card.date || `Updated: ${new Date().toLocaleDateString()}`,\n // Transform tag tone if needed\n tag: card.tag\n ? {\n ...card.tag,\n tone: card.tag.tone || \"info\",\n }\n : undefined,\n })) as FloatingCardData[];\n }, [campaignsData]);\n\n // Dummy fetchCards for backward compatibility\n const fetchCards = useCallback(async () => {\n // Data is now managed by SDK, this is a no-op\n // console.log(\"Campaigns data is now managed by SDK automatically\");\n }, []);\n\n const dismissCard = useCallback((cardId: number) => {\n setDismissedCards((prev) => {\n const newSet = new Set(prev);\n newSet.add(cardId);\n\n // Store in localStorage for persistence\n try {\n localStorage.setItem(\n \"trustshop_dismissed_cards\",\n JSON.stringify(Array.from(newSet)),\n );\n } catch (e) {\n console.error(\"Failed to save dismissed cards:\", e);\n }\n\n return newSet;\n });\n }, []);\n\n const resetDismissedCards = useCallback(() => {\n setDismissedCards(new Set());\n try {\n localStorage.removeItem(\"trustshop_dismissed_cards\");\n } catch (e) {\n console.error(\"Failed to clear dismissed cards:\", e);\n }\n }, []);\n\n // Load dismissed cards from localStorage on mount\n useEffect(() => {\n try {\n const stored = localStorage.getItem(\"trustshop_dismissed_cards\");\n if (stored) {\n const parsed = JSON.parse(stored);\n if (Array.isArray(parsed)) {\n setDismissedCards(new Set(parsed));\n }\n }\n } catch (e) {\n console.error(\"Failed to load dismissed cards:\", e);\n }\n }, []);\n\n // Listen for campaigns refresh events from SDK\n useEffect(() => {\n const handleCampaignsRefresh = (_event: any) => {\n // console.log(\"Campaigns refreshed via SDK:\", _event.detail);\n };\n\n window.addEventListener(\n \"trustshop-campaigns-refresh\",\n handleCampaignsRefresh,\n );\n\n return () => {\n window.removeEventListener(\n \"trustshop-campaigns-refresh\",\n handleCampaignsRefresh,\n );\n };\n }, []);\n\n return {\n cards,\n loading: sdk.campaignsLoading || false,\n error: sdk.campaignsError || null,\n dismissedCards,\n dismissCard,\n resetDismissedCards,\n fetchCards,\n };\n}\n\n/**\n * Get visible (non-dismissed) cards\n */\nexport function useVisibleFloatingCards(\n options: UseFloatingCardsOptions = {},\n): {\n visibleCards: FloatingCardData[];\n loading: boolean;\n error: Error | null;\n dismissCard: (cardId: number) => void;\n resetDismissedCards: () => void;\n hasDismissedCards: boolean;\n} {\n const { currentRoute, ...restOptions } = options;\n // Note: locale is passed through in restOptions\n const {\n cards,\n loading,\n error,\n dismissedCards,\n dismissCard,\n resetDismissedCards,\n } = useFloatingCards(restOptions);\n\n // Filter cards based on:\n // 1. Not dismissed\n // 2. Route matching (if display_pages is set)\n const visibleCards = cards.filter((card) => {\n // Check if card is dismissed\n if (dismissedCards.has(card.id)) {\n return false;\n }\n\n // Check display_pages logic\n if (card.display_pages !== undefined && card.display_pages !== null) {\n // If display_pages is empty array, show on all pages\n if (card.display_pages.length === 0) {\n return true;\n }\n\n // If display_pages has values, check if current route matches\n if (currentRoute !== undefined) {\n // Extract the page key from the route\n // Special handling: \"/\" or \"\" should map to \"dashboard\"\n let currentPage = currentRoute.replace(/^\\//, \"\").split(\"/\")[0];\n\n // Map root route to dashboard (in-app convention)\n if (!currentPage || currentPage === \"\" || currentRoute === \"/\") {\n currentPage = \"dashboard\";\n }\n\n // Debug log for development\n if (\n typeof window !== \"undefined\" &&\n window.location.hostname === \"localhost\"\n ) {\n // console.log(\"[FloatingCard] Route matching:\", {\n // cardId: card.id,\n // currentRoute,\n // currentPage,\n // display_pages: card.display_pages,\n // matches: card.display_pages.includes(currentPage),\n // });\n }\n\n // Check if current page is in display_pages\n return card.display_pages.includes(currentPage);\n }\n\n // If no current route provided, assume dashboard\n return card.display_pages.includes(\"dashboard\");\n }\n\n // If display_pages is not defined, show on all pages (backward compatibility)\n return true;\n });\n\n const hasDismissedCards = dismissedCards.size > 0;\n\n return {\n visibleCards,\n loading,\n error,\n dismissCard,\n resetDismissedCards,\n hasDismissedCards,\n };\n}\n"]}
@@ -3,10 +3,14 @@ import { IntegrationItem } from "../types/integration";
3
3
  * Hook to get all partner integrations from dashboard data
4
4
  */
5
5
  export declare function usePartnerIntegrations(): {
6
- groups: any[];
6
+ groups: {
7
+ key: string;
8
+ title: string;
9
+ items: any[];
10
+ }[];
7
11
  loading: boolean;
8
- error: Error | undefined;
9
- integrations: never[];
12
+ error: Error | null;
13
+ integrations: any[];
10
14
  };
11
15
  /**
12
16
  * Hook to get a specific integration by key
@@ -1 +1 @@
1
- {"version":3,"file":"usePartnerIntegration.d.ts","sourceRoot":"","sources":["../../src/hooks/usePartnerIntegration.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;GAEG;AACH,wBAAgB,sBAAsB;;;;;EAerC;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,GACV,eAAe,GAAG,IAAI,CAMxB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG;IACxD,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;CACtB,CAeA"}
1
+ {"version":3,"file":"usePartnerIntegration.d.ts","sourceRoot":"","sources":["../../src/hooks/usePartnerIntegration.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;GAEG;AACH,wBAAgB,sBAAsB;;;;;;;;;EAiCrC;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,GACV,eAAe,GAAG,IAAI,CAMxB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG;IACxD,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;CACtB,CAeA"}
@@ -1,20 +1,37 @@
1
1
  import { useMemo } from "react";
2
2
  import { useSDK } from "../core/SDKManager";
3
+ import SDKManager from "../core/SDKManager";
3
4
  /**
4
5
  * Hook to get all partner integrations from dashboard data
5
6
  */
6
7
  export function usePartnerIntegrations() {
7
- // Legacy hook - components should use SDK directly
8
8
  const sdk = useSDK({});
9
+ // Get dashboard data from SDK
10
+ const dashboardData = SDKManager.getDashboardData();
11
+ // Partner integrations are stored directly in the integrations field
12
+ const integrations = useMemo(() => {
13
+ if (!dashboardData?.integrations) {
14
+ return [];
15
+ }
16
+ return dashboardData.integrations;
17
+ }, [dashboardData]);
18
+ // Group integrations for backward compatibility
9
19
  const groups = useMemo(() => {
10
- // Returning empty for backward compatibility
11
- return [];
12
- }, []);
20
+ if (!integrations || integrations.length === 0) {
21
+ return [];
22
+ }
23
+ // Create a single group with all integrations for now
24
+ return [{
25
+ key: 'all',
26
+ title: 'All Integrations',
27
+ items: integrations
28
+ }];
29
+ }, [integrations]);
13
30
  return {
14
31
  groups,
15
- loading: sdk.loading,
16
- error: sdk.error,
17
- integrations: [],
32
+ loading: sdk.dashboardLoading || false,
33
+ error: sdk.dashboardError || null,
34
+ integrations,
18
35
  };
19
36
  }
20
37
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"usePartnerIntegration.js","sourceRoot":"","sources":["../../src/hooks/usePartnerIntegration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAG5C;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,mDAAmD;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAEvB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,6CAA6C;QAC7C,OAAO,EAAW,CAAC;IACrB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,MAAM;QACN,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,YAAY,EAAE,EAAE;KACjB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,GAAW;IAEX,MAAM,EAAE,YAAY,EAAE,GAAG,sBAAsB,EAAE,CAAC;IAElD,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC;IACpE,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAW;IAKrD,MAAM,WAAW,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAEpD,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QACrE,CAAC;QAED,mDAAmD;QACnD,MAAM,WAAW,GAAG,GAAG,KAAK,gBAAgB,CAAC;QAC7C,MAAM,QAAQ,GAAG,GAAG,KAAK,YAAY,CAAC;QACtC,MAAM,WAAW,GAAG,CAAC,WAAW,CAAC,mBAAmB,CAAC;QAErD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IAChD,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;AACzB,CAAC","sourcesContent":["import { useMemo } from \"react\";\nimport { useSDK } from \"../core/SDKManager\";\nimport { IntegrationItem } from \"../types/integration\";\n\n/**\n * Hook to get all partner integrations from dashboard data\n */\nexport function usePartnerIntegrations() {\n // Legacy hook - components should use SDK directly\n const sdk = useSDK({});\n\n const groups = useMemo(() => {\n // Returning empty for backward compatibility\n return [] as any[];\n }, []);\n\n return {\n groups,\n loading: sdk.loading,\n error: sdk.error,\n integrations: [],\n };\n}\n\n/**\n * Hook to get a specific integration by key\n */\nexport function usePartnerIntegrationByKey(\n key: string,\n): IntegrationItem | null {\n const { integrations } = usePartnerIntegrations();\n\n return useMemo(() => {\n return integrations.find((item: any) => item.key === key) || null;\n }, [integrations, key]);\n}\n\n/**\n * Hook to get integration status\n */\nexport function usePartnerIntegrationStatus(key: string): {\n isConnected: boolean;\n isActive: boolean;\n isInstalled: boolean;\n} {\n const integration = usePartnerIntegrationByKey(key);\n\n return useMemo(() => {\n if (!integration) {\n return { isConnected: false, isActive: false, isInstalled: false };\n }\n\n // Check based on integration key and button states\n const isConnected = key === \"google_reviews\";\n const isActive = key !== \"after_ship\";\n const isInstalled = !integration.button_install_text;\n\n return { isConnected, isActive, isInstalled };\n }, [integration, key]);\n}\n"]}
1
+ {"version":3,"file":"usePartnerIntegration.js","sourceRoot":"","sources":["../../src/hooks/usePartnerIntegration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAG5C;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAEvB,8BAA8B;IAC9B,MAAM,aAAa,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;IAEpD,qEAAqE;IACrE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE;QAChC,IAAI,CAAC,aAAa,EAAE,YAAY,EAAE,CAAC;YACjC,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,aAAa,CAAC,YAAY,CAAC;IACpC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IAEpB,gDAAgD;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,sDAAsD;QACtD,OAAO,CAAC;gBACN,GAAG,EAAE,KAAK;gBACV,KAAK,EAAE,kBAAkB;gBACzB,KAAK,EAAE,YAAY;aACpB,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,OAAO;QACL,MAAM;QACN,OAAO,EAAE,GAAG,CAAC,gBAAgB,IAAI,KAAK;QACtC,KAAK,EAAE,GAAG,CAAC,cAAc,IAAI,IAAI;QACjC,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CACxC,GAAW;IAEX,MAAM,EAAE,YAAY,EAAE,GAAG,sBAAsB,EAAE,CAAC;IAElD,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC;IACpE,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,GAAW;IAKrD,MAAM,WAAW,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAEpD,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;QACrE,CAAC;QAED,mDAAmD;QACnD,MAAM,WAAW,GAAG,GAAG,KAAK,gBAAgB,CAAC;QAC7C,MAAM,QAAQ,GAAG,GAAG,KAAK,YAAY,CAAC;QACtC,MAAM,WAAW,GAAG,CAAC,WAAW,CAAC,mBAAmB,CAAC;QAErD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IAChD,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;AACzB,CAAC","sourcesContent":["import { useMemo } from \"react\";\nimport { useSDK } from \"../core/SDKManager\";\nimport SDKManager from \"../core/SDKManager\";\nimport { IntegrationItem } from \"../types/integration\";\n\n/**\n * Hook to get all partner integrations from dashboard data\n */\nexport function usePartnerIntegrations() {\n const sdk = useSDK({});\n \n // Get dashboard data from SDK\n const dashboardData = SDKManager.getDashboardData();\n\n // Partner integrations are stored directly in the integrations field\n const integrations = useMemo(() => {\n if (!dashboardData?.integrations) {\n return [];\n }\n return dashboardData.integrations;\n }, [dashboardData]);\n\n // Group integrations for backward compatibility\n const groups = useMemo(() => {\n if (!integrations || integrations.length === 0) {\n return [];\n }\n // Create a single group with all integrations for now\n return [{\n key: 'all',\n title: 'All Integrations',\n items: integrations\n }];\n }, [integrations]);\n\n return {\n groups,\n loading: sdk.dashboardLoading || false,\n error: sdk.dashboardError || null,\n integrations,\n };\n}\n\n/**\n * Hook to get a specific integration by key\n */\nexport function usePartnerIntegrationByKey(\n key: string,\n): IntegrationItem | null {\n const { integrations } = usePartnerIntegrations();\n\n return useMemo(() => {\n return integrations.find((item: any) => item.key === key) || null;\n }, [integrations, key]);\n}\n\n/**\n * Hook to get integration status\n */\nexport function usePartnerIntegrationStatus(key: string): {\n isConnected: boolean;\n isActive: boolean;\n isInstalled: boolean;\n} {\n const integration = usePartnerIntegrationByKey(key);\n\n return useMemo(() => {\n if (!integration) {\n return { isConnected: false, isActive: false, isInstalled: false };\n }\n\n // Check based on integration key and button states\n const isConnected = key === \"google_reviews\";\n const isActive = key !== \"after_ship\";\n const isInstalled = !integration.button_install_text;\n\n return { isConnected, isActive, isInstalled };\n }, [integration, key]);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"useWhatsNew.d.ts","sourceRoot":"","sources":["../../src/hooks/useWhatsNew.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC;IAClE,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,KAAK,iBAAiB,EAAE,CAAC;IAC7E,eAAe,EAAE,MAAM,iBAAiB,GAAG,IAAI,CAAC;CACjD;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,iBAAiB,CA8B7D;AAED,wBAAgB,eAAe,IAAI,iBAAiB,GAAG,IAAI,CAG1D;AAED,wBAAgB,eAAe,IAAI,iBAAiB,EAAE,CAGrD"}
1
+ {"version":3,"file":"useWhatsNew.d.ts","sourceRoot":"","sources":["../../src/hooks/useWhatsNew.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC;IAClE,gBAAgB,EAAE,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,KAAK,iBAAiB,EAAE,CAAC;IAC7E,eAAe,EAAE,MAAM,iBAAiB,GAAG,IAAI,CAAC;CACjD;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,iBAAiB,CA+B7D;AAED,wBAAgB,eAAe,IAAI,iBAAiB,GAAG,IAAI,CAG1D;AAED,wBAAgB,eAAe,IAAI,iBAAiB,EAAE,CAGrD"}
@@ -1,24 +1,24 @@
1
1
  import { useMemo } from "react";
2
2
  import { useSDK } from "../core/SDKManager";
3
3
  export function useWhatsNew(limit) {
4
- // Legacy hook - components should use SDK directly
5
- const sdk = useSDK({});
4
+ const sdk = useSDK();
6
5
  const updates = useMemo(() => {
7
- // Returning empty for backward compatibility
8
- return [];
9
- }, [limit]);
10
- const getUpdate = (_id) => {
11
- return undefined; // Legacy compatibility
6
+ if (!sdk.dashboardEngine)
7
+ return [];
8
+ return sdk.dashboardEngine.getWhatsNew(limit);
9
+ }, [sdk.dashboardEngine, sdk.dashboardData, limit]);
10
+ const getUpdate = (id) => {
11
+ return updates.find(update => update.id === id || update.id === String(id) || update.id === Number(id));
12
12
  };
13
- const getUpdatesByType = (_type) => {
14
- return []; // Legacy compatibility
13
+ const getUpdatesByType = (type) => {
14
+ return updates.filter(update => update.type === type);
15
15
  };
16
16
  const getLatestUpdate = () => {
17
17
  return updates[0] || null;
18
18
  };
19
19
  return {
20
20
  updates,
21
- loading: sdk.loading,
21
+ loading: sdk.dashboardLoading || false,
22
22
  getUpdate,
23
23
  getUpdatesByType,
24
24
  getLatestUpdate,
@@ -1 +1 @@
1
- {"version":3,"file":"useWhatsNew.js","sourceRoot":"","sources":["../../src/hooks/useWhatsNew.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,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,6CAA6C;QAC7C,OAAO,EAAE,CAAC;IACZ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,SAAS,GAAG,CAAC,GAAoB,EAAiC,EAAE;QACxE,OAAO,SAAS,CAAC,CAAC,uBAAuB;IAC3C,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CACvB,KAAkC,EACb,EAAE;QACvB,OAAO,EAAE,CAAC,CAAC,uBAAuB;IACpC,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,GAA6B,EAAE;QACrD,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC5B,CAAC,CAAC;IAEF,OAAO;QACL,OAAO;QACP,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,SAAS;QACT,gBAAgB;QAChB,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,EAAE,gBAAgB,EAAE,GAAG,WAAW,EAAE,CAAC;IAC3C,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import { useMemo } from \"react\";\nimport { useSDK } from \"../core/SDKManager\";\nimport { ProductUpdateItem } from \"../types\";\n\nexport interface UseWhatsNewResult {\n updates: ProductUpdateItem[];\n loading: boolean;\n getUpdate: (id: string | number) => ProductUpdateItem | undefined;\n getUpdatesByType: (type: \"major\" | \"minor\" | \"patch\") => ProductUpdateItem[];\n getLatestUpdate: () => ProductUpdateItem | null;\n}\n\nexport function useWhatsNew(limit?: number): UseWhatsNewResult {\n // Legacy hook - components should use SDK directly\n const sdk = useSDK({});\n\n const updates = useMemo(() => {\n // Returning empty for backward compatibility\n return [];\n }, [limit]);\n\n const getUpdate = (_id: string | number): ProductUpdateItem | undefined => {\n return undefined; // Legacy compatibility\n };\n\n const getUpdatesByType = (\n _type: \"major\" | \"minor\" | \"patch\",\n ): ProductUpdateItem[] => {\n return []; // Legacy compatibility\n };\n\n const getLatestUpdate = (): ProductUpdateItem | null => {\n return updates[0] || null;\n };\n\n return {\n updates,\n loading: sdk.loading,\n getUpdate,\n getUpdatesByType,\n getLatestUpdate,\n };\n}\n\nexport function useLatestUpdate(): ProductUpdateItem | null {\n const { updates } = useWhatsNew(1);\n return updates[0] || null;\n}\n\nexport function useMajorUpdates(): ProductUpdateItem[] {\n const { getUpdatesByType } = useWhatsNew();\n return getUpdatesByType(\"major\");\n}\n"]}
1
+ {"version":3,"file":"useWhatsNew.js","sourceRoot":"","sources":["../../src/hooks/useWhatsNew.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,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,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,SAAS,GAAG,CAAC,EAAmB,EAAiC,EAAE;QACvE,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAC3B,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CACzE,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CACvB,IAAiC,EACZ,EAAE;QACvB,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACxD,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,GAA6B,EAAE;QACrD,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC5B,CAAC,CAAC;IAEF,OAAO;QACL,OAAO;QACP,OAAO,EAAE,GAAG,CAAC,gBAAgB,IAAI,KAAK;QACtC,SAAS;QACT,gBAAgB;QAChB,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,EAAE,gBAAgB,EAAE,GAAG,WAAW,EAAE,CAAC;IAC3C,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import { useMemo } from \"react\";\nimport { useSDK } from \"../core/SDKManager\";\nimport { ProductUpdateItem } from \"../types\";\n\nexport interface UseWhatsNewResult {\n updates: ProductUpdateItem[];\n loading: boolean;\n getUpdate: (id: string | number) => ProductUpdateItem | undefined;\n getUpdatesByType: (type: \"major\" | \"minor\" | \"patch\") => ProductUpdateItem[];\n getLatestUpdate: () => ProductUpdateItem | null;\n}\n\nexport function useWhatsNew(limit?: number): UseWhatsNewResult {\n const sdk = useSDK();\n\n const updates = useMemo(() => {\n if (!sdk.dashboardEngine) return [];\n return sdk.dashboardEngine.getWhatsNew(limit);\n }, [sdk.dashboardEngine, sdk.dashboardData, limit]);\n\n const getUpdate = (id: string | number): ProductUpdateItem | undefined => {\n return updates.find(update => \n update.id === id || update.id === String(id) || update.id === Number(id)\n );\n };\n\n const getUpdatesByType = (\n type: \"major\" | \"minor\" | \"patch\",\n ): ProductUpdateItem[] => {\n return updates.filter(update => update.type === type);\n };\n\n const getLatestUpdate = (): ProductUpdateItem | null => {\n return updates[0] || null;\n };\n\n return {\n updates,\n loading: sdk.dashboardLoading || false,\n getUpdate,\n getUpdatesByType,\n getLatestUpdate,\n };\n}\n\nexport function useLatestUpdate(): ProductUpdateItem | null {\n const { updates } = useWhatsNew(1);\n return updates[0] || null;\n}\n\nexport function useMajorUpdates(): ProductUpdateItem[] {\n const { getUpdatesByType } = useWhatsNew();\n return getUpdatesByType(\"major\");\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datlv-trustshop/shopify-inapp-components",
3
- "version": "0.2.9",
3
+ "version": "0.2.10",
4
4
  "private": false,
5
5
  "description": "React TypeScript components for Shopify in-app dashboard content",
6
6
  "main": "dist/index.js",
@@ -1,18 +0,0 @@
1
- import { FloatingCardData } from '../components/FloatingCard';
2
- export interface FloatingCardActionsConfig {
3
- navigate: (path: string) => void;
4
- onOpenPricing?: () => void;
5
- onDismiss?: (cardId: string | number) => void;
6
- specialRoutes?: {
7
- [key: string]: () => void;
8
- };
9
- }
10
- export interface FloatingCardActionsReturn {
11
- handlePrimaryAction: (card: FloatingCardData) => void;
12
- handleSecondaryAction: (card: FloatingCardData) => void;
13
- handleDismiss: (cardId: string | number) => void;
14
- resolveAction: (action: FloatingCardData['primary_action'] | FloatingCardData['secondary_action']) => void;
15
- }
16
- export declare const useFloatingCardActions: (config: FloatingCardActionsConfig) => FloatingCardActionsReturn;
17
- export default useFloatingCardActions;
18
- //# sourceMappingURL=useFloatingCardActions.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useFloatingCardActions.d.ts","sourceRoot":"","sources":["../../src/hooks/useFloatingCardActions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IAC9C,aAAa,CAAC,EAAE;QACd,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;KAC3B,CAAC;CACH;AAED,MAAM,WAAW,yBAAyB;IACxC,mBAAmB,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACtD,qBAAqB,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACxD,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IACjD,aAAa,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAC;CAC5G;AAED,eAAO,MAAM,sBAAsB,GACjC,QAAQ,yBAAyB,KAChC,yBA2EF,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -1,55 +0,0 @@
1
- import { useCallback } from 'react';
2
- export const useFloatingCardActions = (config) => {
3
- const { navigate, onOpenPricing, onDismiss, specialRoutes = {} } = config;
4
- const resolveAction = useCallback((action) => {
5
- if (!action?.url)
6
- return;
7
- const url = action.url;
8
- // Check for special routes first
9
- if (url === '/pricing' || url.startsWith('/pricing?')) {
10
- if (onOpenPricing) {
11
- onOpenPricing();
12
- return;
13
- }
14
- }
15
- // Check custom special routes
16
- for (const [route, handler] of Object.entries(specialRoutes)) {
17
- if (url === route || url.startsWith(`${route}?`)) {
18
- handler();
19
- return;
20
- }
21
- }
22
- // Handle internal routes (starts with /)
23
- if (url.startsWith('/')) {
24
- navigate(url);
25
- return;
26
- }
27
- // Handle external links
28
- if ((url.startsWith('http://') || url.startsWith('https://')) &&
29
- action.external !== false) {
30
- window.open(url, '_blank', 'noopener,noreferrer');
31
- return;
32
- }
33
- // Fallback to navigation for relative paths or unknown formats
34
- navigate(url);
35
- }, [navigate, onOpenPricing, specialRoutes]);
36
- const handlePrimaryAction = useCallback((card) => {
37
- resolveAction(card.primary_action);
38
- }, [resolveAction]);
39
- const handleSecondaryAction = useCallback((card) => {
40
- resolveAction(card.secondary_action);
41
- }, [resolveAction]);
42
- const handleDismiss = useCallback((cardId) => {
43
- if (onDismiss) {
44
- onDismiss(cardId);
45
- }
46
- }, [onDismiss]);
47
- return {
48
- handlePrimaryAction,
49
- handleSecondaryAction,
50
- handleDismiss,
51
- resolveAction,
52
- };
53
- };
54
- export default useFloatingCardActions;
55
- //# sourceMappingURL=useFloatingCardActions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useFloatingCardActions.js","sourceRoot":"","sources":["../../src/hooks/useFloatingCardActions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAmBpC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,MAAiC,EACN,EAAE;IAC7B,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,GAAG,EAAE,EAAE,GAAG,MAAM,CAAC;IAE1E,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,MAAiF,EAAE,EAAE;QACpF,IAAI,CAAC,MAAM,EAAE,GAAG;YAAE,OAAO;QAEzB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QAEvB,iCAAiC;QACjC,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACtD,IAAI,aAAa,EAAE,CAAC;gBAClB,aAAa,EAAE,CAAC;gBAChB,OAAO;YACT,CAAC;QACH,CAAC;QAED,8BAA8B;QAC9B,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YAC7D,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;gBACjD,OAAO,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,GAAG,CAAC,CAAC;YACd,OAAO;QACT,CAAC;QAED,wBAAwB;QACxB,IACE,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACzD,MAAM,CAAC,QAAQ,KAAK,KAAK,EACzB,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QAED,+DAA+D;QAC/D,QAAQ,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC,EACD,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,CAAC,CACzC,CAAC;IAEF,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,IAAsB,EAAE,EAAE;QACzB,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACrC,CAAC,EACD,CAAC,aAAa,CAAC,CAChB,CAAC;IAEF,MAAM,qBAAqB,GAAG,WAAW,CACvC,CAAC,IAAsB,EAAE,EAAE;QACzB,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACvC,CAAC,EACD,CAAC,aAAa,CAAC,CAChB,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAC/B,CAAC,MAAuB,EAAE,EAAE;QAC1B,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAC;IAEF,OAAO;QACL,mBAAmB;QACnB,qBAAqB;QACrB,aAAa;QACb,aAAa;KACd,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,sBAAsB,CAAC","sourcesContent":["import { useCallback } from 'react';\nimport { FloatingCardData } from '../components/FloatingCard';\n\nexport interface FloatingCardActionsConfig {\n navigate: (path: string) => void;\n onOpenPricing?: () => void;\n onDismiss?: (cardId: string | number) => void;\n specialRoutes?: {\n [key: string]: () => void;\n };\n}\n\nexport interface FloatingCardActionsReturn {\n handlePrimaryAction: (card: FloatingCardData) => void;\n handleSecondaryAction: (card: FloatingCardData) => void;\n handleDismiss: (cardId: string | number) => void;\n resolveAction: (action: FloatingCardData['primary_action'] | FloatingCardData['secondary_action']) => void;\n}\n\nexport const useFloatingCardActions = (\n config: FloatingCardActionsConfig\n): FloatingCardActionsReturn => {\n const { navigate, onOpenPricing, onDismiss, specialRoutes = {} } = config;\n\n const resolveAction = useCallback(\n (action: FloatingCardData['primary_action'] | FloatingCardData['secondary_action']) => {\n if (!action?.url) return;\n\n const url = action.url;\n\n // Check for special routes first\n if (url === '/pricing' || url.startsWith('/pricing?')) {\n if (onOpenPricing) {\n onOpenPricing();\n return;\n }\n }\n\n // Check custom special routes\n for (const [route, handler] of Object.entries(specialRoutes)) {\n if (url === route || url.startsWith(`${route}?`)) {\n handler();\n return;\n }\n }\n\n // Handle internal routes (starts with /)\n if (url.startsWith('/')) {\n navigate(url);\n return;\n }\n\n // Handle external links\n if (\n (url.startsWith('http://') || url.startsWith('https://')) &&\n action.external !== false\n ) {\n window.open(url, '_blank', 'noopener,noreferrer');\n return;\n }\n\n // Fallback to navigation for relative paths or unknown formats\n navigate(url);\n },\n [navigate, onOpenPricing, specialRoutes]\n );\n\n const handlePrimaryAction = useCallback(\n (card: FloatingCardData) => {\n resolveAction(card.primary_action);\n },\n [resolveAction]\n );\n\n const handleSecondaryAction = useCallback(\n (card: FloatingCardData) => {\n resolveAction(card.secondary_action);\n },\n [resolveAction]\n );\n\n const handleDismiss = useCallback(\n (cardId: string | number) => {\n if (onDismiss) {\n onDismiss(cardId);\n }\n },\n [onDismiss]\n );\n\n return {\n handlePrimaryAction,\n handleSecondaryAction,\n handleDismiss,\n resolveAction,\n };\n};\n\nexport default useFloatingCardActions;"]}
@@ -1,22 +0,0 @@
1
- import { FloatingCardActionsConfig } from './useFloatingCardActions';
2
- import { FloatingCardData } from '../components/FloatingCard';
3
- export interface FloatingCardEngineConfig extends Omit<FloatingCardActionsConfig, 'onDismiss'> {
4
- shopId?: string;
5
- currentRoute?: string;
6
- }
7
- export interface FloatingCardEngineReturn {
8
- visibleCards: FloatingCardData[];
9
- loading: boolean;
10
- error: Error | null;
11
- handlePrimaryAction: (card: FloatingCardData) => void;
12
- handleSecondaryAction: (card: FloatingCardData) => void;
13
- handleDismiss: (cardId: string | number) => void;
14
- resolveAction: (action: FloatingCardData['primary_action'] | FloatingCardData['secondary_action']) => void;
15
- }
16
- /**
17
- * Comprehensive hook that combines floating card data fetching with action handling.
18
- * This provides a complete solution for floating card functionality.
19
- */
20
- export declare const useFloatingCardEngine: (config: FloatingCardEngineConfig) => FloatingCardEngineReturn;
21
- export default useFloatingCardEngine;
22
- //# sourceMappingURL=useFloatingCardEngine.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useFloatingCardEngine.d.ts","sourceRoot":"","sources":["../../src/hooks/useFloatingCardEngine.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,MAAM,WAAW,wBAAyB,SAAQ,IAAI,CAAC,yBAAyB,EAAE,WAAW,CAAC;IAC5F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IAEvC,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAGpB,mBAAmB,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACtD,qBAAqB,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACxD,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IAGjD,aAAa,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAC;CAC5G;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAChC,QAAQ,wBAAwB,KAC/B,wBAmCF,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
@@ -1,40 +0,0 @@
1
- import { useVisibleFloatingCards } from './useFloatingCards';
2
- import { useFloatingCardActions } from './useFloatingCardActions';
3
- /**
4
- * Comprehensive hook that combines floating card data fetching with action handling.
5
- * This provides a complete solution for floating card functionality.
6
- */
7
- export const useFloatingCardEngine = (config) => {
8
- const { shopId, currentRoute, navigate, onOpenPricing, specialRoutes } = config;
9
- // Fetch visible floating cards
10
- const { visibleCards, dismissCard, loading, error } = useVisibleFloatingCards({
11
- shopId,
12
- currentRoute,
13
- });
14
- // Set up action handlers with dismiss integrated
15
- const actions = useFloatingCardActions({
16
- navigate,
17
- onOpenPricing,
18
- specialRoutes,
19
- onDismiss: (cardId) => {
20
- // Convert to number if needed for compatibility
21
- const id = typeof cardId === 'string' ? parseInt(cardId, 10) : cardId;
22
- if (!isNaN(id)) {
23
- dismissCard(id);
24
- }
25
- },
26
- });
27
- return {
28
- // Data
29
- visibleCards,
30
- loading,
31
- error,
32
- // Actions
33
- handlePrimaryAction: actions.handlePrimaryAction,
34
- handleSecondaryAction: actions.handleSecondaryAction,
35
- handleDismiss: actions.handleDismiss,
36
- resolveAction: actions.resolveAction,
37
- };
38
- };
39
- export default useFloatingCardEngine;
40
- //# sourceMappingURL=useFloatingCardEngine.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useFloatingCardEngine.js","sourceRoot":"","sources":["../../src/hooks/useFloatingCardEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAA6B,MAAM,0BAA0B,CAAC;AAuB7F;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,MAAgC,EACN,EAAE;IAC5B,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IAEhF,+BAA+B;IAC/B,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,uBAAuB,CAAC;QAC5E,MAAM;QACN,YAAY;KACb,CAAC,CAAC;IAEH,iDAAiD;IACjD,MAAM,OAAO,GAAG,sBAAsB,CAAC;QACrC,QAAQ;QACR,aAAa;QACb,aAAa;QACb,SAAS,EAAE,CAAC,MAAuB,EAAE,EAAE;YACrC,gDAAgD;YAChD,MAAM,EAAE,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACtE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;gBACf,WAAW,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;KACF,CAAC,CAAC;IAEH,OAAO;QACL,OAAO;QACP,YAAY;QACZ,OAAO;QACP,KAAK;QAEL,UAAU;QACV,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,qBAAqB,EAAE,OAAO,CAAC,qBAAqB;QACpD,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,qBAAqB,CAAC","sourcesContent":["import { useVisibleFloatingCards } from './useFloatingCards';\nimport { useFloatingCardActions, FloatingCardActionsConfig } from './useFloatingCardActions';\nimport { FloatingCardData } from '../components/FloatingCard';\n\nexport interface FloatingCardEngineConfig extends Omit<FloatingCardActionsConfig, 'onDismiss'> {\n shopId?: string;\n currentRoute?: string;\n}\n\nexport interface FloatingCardEngineReturn {\n // Data from useVisibleFloatingCards\n visibleCards: FloatingCardData[];\n loading: boolean;\n error: Error | null;\n \n // Actions\n handlePrimaryAction: (card: FloatingCardData) => void;\n handleSecondaryAction: (card: FloatingCardData) => void;\n handleDismiss: (cardId: string | number) => void;\n \n // Direct action resolver for custom use cases\n resolveAction: (action: FloatingCardData['primary_action'] | FloatingCardData['secondary_action']) => void;\n}\n\n/**\n * Comprehensive hook that combines floating card data fetching with action handling.\n * This provides a complete solution for floating card functionality.\n */\nexport const useFloatingCardEngine = (\n config: FloatingCardEngineConfig\n): FloatingCardEngineReturn => {\n const { shopId, currentRoute, navigate, onOpenPricing, specialRoutes } = config;\n\n // Fetch visible floating cards\n const { visibleCards, dismissCard, loading, error } = useVisibleFloatingCards({\n shopId,\n currentRoute,\n });\n\n // Set up action handlers with dismiss integrated\n const actions = useFloatingCardActions({\n navigate,\n onOpenPricing,\n specialRoutes,\n onDismiss: (cardId: string | number) => {\n // Convert to number if needed for compatibility\n const id = typeof cardId === 'string' ? parseInt(cardId, 10) : cardId;\n if (!isNaN(id)) {\n dismissCard(id);\n }\n },\n });\n\n return {\n // Data\n visibleCards,\n loading,\n error,\n \n // Actions\n handlePrimaryAction: actions.handlePrimaryAction,\n handleSecondaryAction: actions.handleSecondaryAction,\n handleDismiss: actions.handleDismiss,\n resolveAction: actions.resolveAction,\n };\n};\n\nexport default useFloatingCardEngine;"]}
@@ -1,11 +0,0 @@
1
- /**
2
- * Hook to access grow apps data from the dashboard context
3
- * @returns Object containing grow apps array and loading/error states
4
- */
5
- export declare function useGrowApps(): {
6
- apps: import("..").GrowApp[];
7
- loading: boolean;
8
- error: Error | null;
9
- isEmpty: boolean;
10
- };
11
- //# sourceMappingURL=useGrowApps.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useGrowApps.d.ts","sourceRoot":"","sources":["../../src/hooks/useGrowApps.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,WAAW;;;;;EAS1B"}
@@ -1,15 +0,0 @@
1
- import { useDashboard } from "./useDashboard";
2
- /**
3
- * Hook to access grow apps data from the dashboard context
4
- * @returns Object containing grow apps array and loading/error states
5
- */
6
- export function useGrowApps() {
7
- const { data, loading, error } = useDashboard();
8
- return {
9
- apps: data?.grow_apps || [],
10
- loading,
11
- error,
12
- isEmpty: !data?.grow_apps || data.grow_apps.length === 0,
13
- };
14
- }
15
- //# sourceMappingURL=useGrowApps.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useGrowApps.js","sourceRoot":"","sources":["../../src/hooks/useGrowApps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,CAAC;IAEhD,OAAO;QACL,IAAI,EAAE,IAAI,EAAE,SAAS,IAAI,EAAE;QAC3B,OAAO;QACP,KAAK;QACL,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;KACzD,CAAC;AACJ,CAAC","sourcesContent":["import { useDashboard } from \"./useDashboard\";\n\n/**\n * Hook to access grow apps data from the dashboard context\n * @returns Object containing grow apps array and loading/error states\n */\nexport function useGrowApps() {\n const { data, loading, error } = useDashboard();\n\n return {\n apps: data?.grow_apps || [],\n loading,\n error,\n isEmpty: !data?.grow_apps || data.grow_apps.length === 0,\n };\n}\n"]}