diff --git a/packages/core/admin/admin/src/components/Widgets.tsx b/packages/core/admin/admin/src/components/Widgets.tsx index 9d82a5eb17..c437de35b7 100644 --- a/packages/core/admin/admin/src/components/Widgets.tsx +++ b/packages/core/admin/admin/src/components/Widgets.tsx @@ -1,4 +1,4 @@ -import { useAuth } from '@strapi/admin/strapi-admin'; +import { useAuth, useTracking } from '@strapi/admin/strapi-admin'; import { Avatar, Badge, Box, Flex, Typography } from '@strapi/design-system'; import { Earth, Images, User, Key, Files, Layout, Graph, Webhooks } from '@strapi/icons'; import { useIntl } from 'react-intl'; @@ -85,6 +85,7 @@ const LinkCell = styled(Link)` `; const KeyStatisticsWidget = () => { + const { trackUsage } = useTracking(); const { formatMessage, locale } = useIntl(); const { data: countDocuments, isLoading: isLoadingCountDocuments } = useGetCountDocumentsQuery(); const { data: countKeyStatistics, isLoading: isLoadingKeyStatistics } = @@ -216,6 +217,7 @@ const KeyStatisticsWidget = () => { to={item.link} key={`key-statistics-${key}`} data-testid={`stat-${key}`} + onClick={() => trackUsage('didOpenKeyStatisticsWidgetLink', { itemKey: key })} > { it('should render the widget with info from props', () => { render( - + actual widget content ); @@ -19,7 +23,10 @@ describe('Homepage Widget component', () => { it('should render a spinner while a widget is loading', () => { render( - + ); @@ -30,7 +37,10 @@ describe('Homepage Widget component', () => { it('should render an error message when a widget fails to load', () => { render( - + ); @@ -41,7 +51,10 @@ describe('Homepage Widget component', () => { it('should render a custom error message when provided', () => { render( - + Custom error message ); @@ -52,7 +65,10 @@ describe('Homepage Widget component', () => { it('should render a no data message when a widget has no data', () => { render( - + ); @@ -62,7 +78,10 @@ describe('Homepage Widget component', () => { it('should render a custom no data message when provided', () => { render( - + Custom no data message ); diff --git a/packages/core/admin/admin/src/features/Tracking.tsx b/packages/core/admin/admin/src/features/Tracking.tsx index 0d2fb2c92a..7db26837ca 100644 --- a/packages/core/admin/admin/src/features/Tracking.tsx +++ b/packages/core/admin/admin/src/features/Tracking.tsx @@ -175,7 +175,6 @@ export interface EventWithoutProperties { | 'willEditEditLayout' | 'willEditEmailTemplates' | 'willEditEntryFromButton' - | 'willEditEntryFromHome' | 'willEditEntryFromList' | 'willEditReleaseFromHome' | 'willEditFieldOfContentType' @@ -187,7 +186,7 @@ export interface EventWithoutProperties { | 'willEditStage' | 'willFilterEntries' | 'willInstallPlugin' - | 'willOpenAuditLogDetails' + | 'willOpenAuditLogDetailsFromHome' | 'willUnpublishEntry' | 'willSaveComponent' | 'willSaveContentType' @@ -411,6 +410,27 @@ interface DidStartGuidedTour { }; } +interface WillEditEntryFromHome { + name: 'willEditEntryFromHome'; + properties: { + entryType: 'edited' | 'published' | 'assigned'; + }; +} + +interface DidOpenHomeWidgetLink { + name: 'didOpenHomeWidgetLink'; + properties: { + widgetUID: string; + }; +} + +interface DidOpenKeyStatisticsWidgetLink { + name: 'didOpenKeyStatisticsWidgetLink'; + properties: { + itemKey: string; + }; +} + type EventsWithProperties = | CreateEntryEvents | PublishEntryEvents @@ -436,7 +456,10 @@ type EventsWithProperties = | DidUpdateCTBSchema | DidSkipGuidedTour | DidCompleteGuidedTour - | DidStartGuidedTour; + | DidStartGuidedTour + | DidOpenHomeWidgetLink + | DidOpenKeyStatisticsWidgetLink + | WillEditEntryFromHome; export type TrackingEvent = EventWithoutProperties | EventsWithProperties; export interface UseTrackingReturn { diff --git a/packages/core/admin/admin/src/pages/Home/HomePage.tsx b/packages/core/admin/admin/src/pages/Home/HomePage.tsx index 5c7f17bdea..3ce362fc8a 100644 --- a/packages/core/admin/admin/src/pages/Home/HomePage.tsx +++ b/packages/core/admin/admin/src/pages/Home/HomePage.tsx @@ -12,6 +12,7 @@ import { Widget } from '../../components/WidgetHelpers'; import { useEnterprise } from '../../ee'; import { useAuth } from '../../features/Auth'; import { useStrapiApp } from '../../features/StrapiApp'; +import { useTracking } from '../../features/Tracking'; import { FreeTrialEndedModal } from './components/FreeTrialEndedModal'; import { FreeTrialWelcomeModal } from './components/FreeTrialWelcomeModal'; @@ -23,15 +24,21 @@ import type { WidgetType } from '@strapi/admin/strapi-admin'; * WidgetRoot * -----------------------------------------------------------------------------------------------*/ -interface WidgetRootProps extends Pick { +interface WidgetRootProps + extends Pick { children: React.ReactNode; } -export const WidgetRoot = ({ title, icon = PuzzlePiece, children, link }: WidgetRootProps) => { +export const WidgetRoot = ({ title, icon = PuzzlePiece, children, link, uid }: WidgetRootProps) => { + const { trackUsage } = useTracking(); const { formatMessage } = useIntl(); const id = React.useId(); const Icon = icon; + const handleClickOnLink = () => { + trackUsage('didOpenHomeWidgetLink', { widgetUID: uid }); + }; + return ( {formatMessage(link.label)} @@ -157,7 +165,12 @@ const HomePageCE = () => { {filteredWidgets.map((widget) => ( - + diff --git a/packages/core/admin/ee/admin/src/components/AuditLogs/Widgets.tsx b/packages/core/admin/ee/admin/src/components/AuditLogs/Widgets.tsx index e7c3741b89..b98d12e093 100644 --- a/packages/core/admin/ee/admin/src/components/AuditLogs/Widgets.tsx +++ b/packages/core/admin/ee/admin/src/components/AuditLogs/Widgets.tsx @@ -30,7 +30,7 @@ const LastActivityTable = ({ items }: { items: AuditLog[] }) => { }; const handleRowClick = (document: AuditLog) => () => { - trackUsage('willOpenAuditLogDetails'); + trackUsage('willOpenAuditLogDetailsFromHome'); const link = getAuditLogDetailsLink(document); navigate(link); }; @@ -74,7 +74,7 @@ const LastActivityTable = ({ items }: { items: AuditLog[] }) => { trackUsage('willOpenAuditLogDetails')} + onClick={() => trackUsage('willOpenAuditLogDetailsFromHome')} label={formatMessage({ id: 'global.details', defaultMessage: 'Details', diff --git a/packages/core/content-manager/admin/src/components/Widgets.tsx b/packages/core/content-manager/admin/src/components/Widgets.tsx index e1bb76ba58..2e28e18ad1 100644 --- a/packages/core/content-manager/admin/src/components/Widgets.tsx +++ b/packages/core/content-manager/admin/src/components/Widgets.tsx @@ -32,7 +32,13 @@ const CellTypography = styled(Typography)` white-space: nowrap; `; -const RecentDocumentsTable = ({ documents }: { documents: RecentDocument[] }) => { +const RecentDocumentsTable = ({ + documents, + type, +}: { + documents: RecentDocument[]; + type: 'edited' | 'published'; +}) => { const { formatMessage } = useIntl(); const { trackUsage } = useTracking(); const navigate = useNavigate(); @@ -46,7 +52,9 @@ const RecentDocumentsTable = ({ documents }: { documents: RecentDocument[] }) => }; const handleRowClick = (document: RecentDocument) => () => { - trackUsage('willEditEntryFromHome'); + trackUsage('willEditEntryFromHome', { + entryType: type, + }); const link = getEditViewLink(document); navigate(link); }; @@ -95,7 +103,7 @@ const RecentDocumentsTable = ({ documents }: { documents: RecentDocument[] }) => trackUsage('willEditEntryFromHome')} + onClick={() => trackUsage('willEditEntryFromHome', { type })} label={formatMessage({ id: 'content-manager.actions.edit.label', defaultMessage: 'Edit', @@ -140,7 +148,7 @@ const LastEditedWidget = () => { ); } - return ; + return ; }; /* ------------------------------------------------------------------------------------------------- @@ -170,7 +178,7 @@ const LastPublishedWidget = () => { ); } - return ; + return ; }; /* ------------------------------------------------------------------------------------------------- diff --git a/packages/core/review-workflows/admin/src/components/Widgets.tsx b/packages/core/review-workflows/admin/src/components/Widgets.tsx index 6e6555608a..d88c5e9315 100644 --- a/packages/core/review-workflows/admin/src/components/Widgets.tsx +++ b/packages/core/review-workflows/admin/src/components/Widgets.tsx @@ -19,7 +19,13 @@ const CellTypography = styled(Typography)` white-space: nowrap; `; -const RecentDocumentsTable = ({ documents }: { documents: RecentDocument[] }) => { +const RecentDocumentsTable = ({ + documents, + type, +}: { + documents: RecentDocument[]; + type: 'assigned'; +}) => { const { formatMessage } = useIntl(); const { trackUsage } = useTracking(); const navigate = useNavigate(); @@ -33,7 +39,7 @@ const RecentDocumentsTable = ({ documents }: { documents: RecentDocument[] }) => }; const handleRowClick = (document: RecentDocument) => () => { - trackUsage('willEditEntryFromHome'); + trackUsage('willEditEntryFromHome', { entryType: type }); const link = getEditViewLink(document); navigate(link); }; @@ -85,7 +91,7 @@ const RecentDocumentsTable = ({ documents }: { documents: RecentDocument[] }) => trackUsage('willEditEntryFromHome')} + onClick={() => trackUsage('willEditEntryFromHome', { entryType: type })} label={formatMessage({ id: 'content-manager.actions.edit.label', defaultMessage: 'Edit', @@ -130,7 +136,7 @@ const AssignedWidget = () => { ); } - return ; + return ; }; export { AssignedWidget };