Skip to content

Analytics & Insights

Overview & Architecture

The Analytics System provides comprehensive tracking and insights for user interactions, asset performance, and system usage across the Admin Frontend application. It tracks user actions, collects browser and location data, and provides visual analytics dashboards with insights graphs.

Key Features

  • Event Tracking: Comprehensive tracking of user actions (views, downloads, shares, searches, uploads, etc.)
  • User Context: Automatic collection of browser, OS, and geographic location data
  • Insights Dashboard: Visual analytics with weekly insights graphs (views, downloads, shares)
  • Transaction Tracking: Secure transaction activity logging with data encoding
  • Asset Analytics: Per-asset analytics summary with views, downloads, and shares counts
  • Subscription-Based Access: Insights visibility controlled by subscription plans

File Structure

Core Analytics Store & State Management

JavaScript Files (.js)

  • store/analytics/index.js - Analytics Vuex store
    • Manages analytics state
    • User agent and location data
    • Transaction tracking
    • Insights transaction data

Analytics Tracking Functions

JavaScript Mixin Files (.js)

  • mixins/common-functions.js - Common functions mixin

    • dispatchAnalytics method for tracking user actions, events, and transactions
    • dispatchAnalyticsShare method for share-specific analytics
    • User agent and location data collection
    • Data encoding and obfuscation
  • mixins/upload-common.js - Upload common mixin

    • Tracks upload analytics events
    • Version upload analytics
    • Handles analytics dispatch for uploaded files

Insights Display Components

Vue Component Files (.vue)

  • components/dam/Insights/InsightsGraph.vue - Insights graph component

    • Displays weekly insights with bar charts
    • Shows views, downloads, and shares data
    • Chart.js-based visualization
  • components/dam/Insights/InsightsTabGraph.vue - Insights tab graph component

    • Displays insights in tabbed format with bar charts
    • Handles subscription-based access
    • Weekly insights visualization

Chart/Visualization Components

Vue Component Files (.vue)

  • components/plugins/Bar.vue - Bar chart component
    • Chart.js-based bar chart
    • Used for displaying analytics data
    • Configurable chart options

Analytics Integration in Pages

Vue Page Files (.vue)

  • pages/_workspace_id/dam/dashboard/index.vue - Dashboard page

    • Displays weekly insights card with analytics data
    • Tracks dashboard views
  • pages/_workspace_id/dam/files_id.vue - File details page

    • Displays asset insights tab
    • Shows views, downloads, shares counts
    • Weekly insights graphs
    • Calls getAssetsAnalyticsSummary API
  • pages/_workspace_id/dam/folders/index.vue - Folders list page

    • Tracks folder-related analytics
  • pages/_workspace_id/dam/folders_id/index.vue - Folder details page

    • Tracks folder view and operation analytics
  • pages/_workspace_id/dam/collage/index.vue - Collage list page

    • Tracks collage list analytics
  • pages/_workspace_id/dam/collage_id/index.vue - Collage details page

    • Tracks collage view and operation analytics
  • pages/_workspace_id/dam/uploaded.vue - Uploaded assets page

    • Tracks uploaded assets analytics
  • pages/_workspace_id/dam/search.vue - Search page

    • Tracks search analytics
  • pages/shared-assets_type.vue - Shared assets page

    • Tracks shared asset view analytics for anonymous users
  • pages/_brand_name/shared-assets_type.vue - Brand portal shared assets page

    • Tracks brand portal asset view analytics

Analytics Integration in Components

Vue Component Files (.vue)

  • components/dam/Collage/FileListingCard.vue - File listing card component

    • Tracks asset views
    • Builds analytics payload for asset viewing events
  • components/dam/Folders/FolderCard.vue - Folder card component

    • Tracks folder-related analytics events
  • components/dam/Collage/index.vue - Collage component

    • Tracks collage-related analytics events
  • components/dam/SearchAssets.vue - Search assets component

    • Tracks search and asset view analytics
  • components/dam/SearchFolders.vue - Search folders component

    • Tracks folder search analytics
  • components/dam/SearchCollages.vue - Search collages component

    • Tracks collage search analytics
  • components/dam/BreadCrumbs.vue - Breadcrumbs component

    • Tracks navigation analytics
  • components/dam/SearchBreadCrumbs.vue - Search breadcrumbs component

    • Tracks search navigation analytics
  • components/dam/AssetList/Versions.vue - Versions component

    • Tracks version-related analytics events
  • components/dam/AssetList/AddTags.vue - Add tags component

    • Tracks tag-related analytics
  • components/dam/FileTagInput.vue - File tag input component

    • Tracks tag input analytics
  • components/dam/AssetUpload.vue - Asset upload component

    • Tracks upload analytics events
    • Includes version upload analytics
  • components/dam/Dialogs/ShareAssetDialog/index.vue - Share asset dialog

    • Tracks sharing analytics events
  • components/dam/Dialogs/SaveToCollage.vue - Save to collage dialog

    • Tracks collage save analytics
  • components/dam/Dialogs/PermissionDialog.vue - Permission dialog

    • Tracks permission change analytics
  • components/dam/Dialogs/CreateCollageDialog.vue - Create collage dialog

    • Tracks collage creation analytics
  • components/dam/Dialogs/AddTags/AddMultipleTags.vue - Add multiple tags dialog

    • Tracks bulk tag operations analytics
  • components/dam/Dialogs/FileConversionDialog.vue - File conversion dialog

    • Tracks file conversion analytics
  • components/dam/Dialogs/miniUploadDialog.vue - Mini upload dialog

    • Tracks mini upload analytics
  • components/dam/Dialogs/FolderDialogs/FolderDialog.vue - Folder dialog

    • Tracks folder operation analytics
  • components/dam/Dialogs/QuickViewDialog.vue - Quick view dialog

    • Tracks quick view analytics
  • components/dam/table/shareLinkListTable.vue - Share link list table

    • Tracks share link analytics
  • components/theme/global/DamNotification.vue - DAM notification component

    • Tracks notification click analytics
    • Builds analytics payload for navigation from notifications
  • components/theme/global/LeftMenu.vue - Left menu component

    • May track navigation analytics

Analytics Icons

Vue Component Files (.vue)

  • components/svg/CollageInsightIcon.vue - Insight icon SVG component
    • Used in UI to indicate insights/analytics

Component Documentation

Analytics Store (store/analytics/index.js)

The Analytics Vuex store manages analytics state and transaction data.

State Structure:

javascript
{
  userAgentAndLocation: {
    location: {},  // Geographic location data
    agent: {}     // Browser and OS information
  },
  emailTracking: {},  // Email-related tracking
  eventQueue: []      // Queued analytics events
}

Actions:

  • fetchUserAgentAndLocation - Fetches browser and location data
  • addTransactionActivity - Adds transaction to queue
  • getInsightsTransactionData - Retrieves insights transaction data

Getters:

  • userAgentAndLocation - Returns browser and location data
  • eventQueue - Returns queued events

Common Functions Mixin (mixins/common-functions.js)

dispatchAnalytics(payload)

Dispatches analytics event to backend with automatic browser and location data collection.

Parameters:

  • payload (Object) - Analytics event data
    • event (String, required) - Main event type: 'asset', 'collage', 'folder', 'shared'
    • sub_event (String, required) - Specific action: 'viewed', 'downloaded', 'update', 'deleted', etc.
    • environment (String, required) - Context: 'admin' (authenticated) or 'anonymous' (public)
    • asset_id (Number[], optional) - Array of asset IDs (for asset events)
    • collection_id (Number, optional) - Collage/collection ID (for collage events)
    • category_id (Number[], optional) - Array of folder IDs (for folder events)
    • version_id (Number, optional) - Version ID (for version-specific events)
    • share_id (Number, optional) - Share ID (for shared events)
    • workspace_id (Number, optional) - Workspace identifier (usually auto-detected)

Example:

javascript
await this.dispatchAnalytics({
  asset_id: [asset.id],
  event: 'asset',
  sub_event: 'viewed',
  environment: 'admin'
})

Features:

  • Automatically collects browser and location information
  • Encodes and obfuscates transaction data
  • Sends to backend API endpoint
  • Handles errors gracefully

dispatchAnalyticsShare(payload)

Dispatches share-specific analytics event for anonymous/public access tracking.

Parameters:

  • payload (Object) - Share analytics data
    • share_id (Number, required) - Share identifier
    • event (String, required) - Event type: 'asset', 'collage', 'folder', or 'shared'
    • sub_event (String, required) - Action: 'viewed', 'downloaded', 'shared', 'embeded'
    • environment (String, required) - Always 'anonymous' for shared access
    • asset_id (Number[], optional) - Array of asset IDs (if sharing assets)
    • category_id (Number[], optional) - Array of folder IDs (if sharing folders)
    • collection_id (Number, optional) - Collage ID (if sharing collage)
    • workspace_id (Number, optional) - Workspace identifier

Example:

javascript
await this.dispatchAnalyticsShare({
  share_id: shareId,
  asset_id: [asset.id],
  event: 'shared',
  sub_event: 'viewed',
  environment: 'anonymous',
  workspace_id: this.workspaceId
})

Insights Graph Component (components/dam/Insights/InsightsGraph.vue)

Displays weekly insights with bar charts for views, downloads, and shares.

Props:

  • insightsData (Object) - Insights data object
    • views (Array) - Weekly views data
    • downloads (Array) - Weekly downloads data
    • shares (Array) - Weekly shares data
  • loading (Boolean) - Loading state

Features:

  • Bar chart visualization using Chart.js
  • Weekly data aggregation
  • Responsive design
  • Loading states

Insights Tab Graph Component (components/dam/Insights/InsightsTabGraph.vue)

Displays insights in tabbed format with subscription-based access control.

Props:

  • insightsData (Object) - Insights data
  • subscriptionPlan (String) - Current subscription plan
  • loading (Boolean) - Loading state

Features:

  • Tabbed interface for different metrics
  • Subscription-based visibility
  • Chart visualization
  • Access control integration

Analytics Events

The analytics system uses a structured event model with event and sub_event properties. All events are tracked with browser and location data automatically collected by the mixin.

Event Structure

Analytics events follow this structure:

  • event: Main entity type ('asset', 'collage', 'folder', 'shared')
  • sub_event: Specific action performed on the entity
  • environment: Context ('admin' for authenticated users, 'anonymous' for shared/public access)
  • Entity IDs: asset_id, collection_id (for collages), category_id (for folders), share_id, version_id

Components Tracking Analytics

FileListingCard.vue - Tracks:

  • Asset views
  • Asset viewing events with analytics payload

QuickViewDialog.vue - Tracks:

  • Quick view interactions

Asset Details Page (files_id.vue) - Tracks:

  • Asset view analytics
  • Calls getAssetsAnalyticsSummary API for insights

AssetUpload.vue - Tracks:

  • Upload events
  • Version upload analytics

Versions.vue - Tracks:

  • Version-related analytics events

FileConversionDialog.vue - Tracks:

  • File conversion analytics

miniUploadDialog.vue - Tracks:

  • Mini upload analytics

FolderCard.vue - Tracks:

  • Folder-related analytics events

FolderDialog.vue - Tracks:

  • Folder operation analytics (create, edit, move, copy, delete)

Folders Pages (folders/index.vue, folders_id/index.vue) - Tracks:

  • Folder view and operation analytics

Collage Component (index.vue) - Tracks:

  • Collage-related analytics events

CreateCollageDialog.vue - Tracks:

  • Collage creation analytics

SaveToCollage.vue - Tracks:

  • Collage save analytics

Collage Pages (collage/index.vue, collage_id/index.vue) - Tracks:

  • Collage list and view analytics

SearchAssets.vue - Tracks:

  • Search analytics
  • Asset view analytics from search

SearchFolders.vue - Tracks:

  • Folder search analytics

SearchCollages.vue - Tracks:

  • Collage search analytics

Search Page (search.vue) - Tracks:

  • Search analytics

BreadCrumbs.vue - Tracks:

  • Navigation analytics

SearchBreadCrumbs.vue - Tracks:

  • Search navigation analytics

AddTags.vue - Tracks:

  • Tag-related analytics

FileTagInput.vue - Tracks:

  • Tag input analytics

AddMultipleTags.vue - Tracks:

  • Bulk tag operations analytics

Share & Permission Events

ShareAssetDialog - Tracks:

  • Sharing analytics events

PermissionDialog.vue - Tracks:

  • Permission change analytics

shareLinkListTable.vue - Tracks:

  • Share link analytics

Shared Assets Pages (shared-assets_type.vue, _brand_name/shared-assets_type.vue) - Tracks:

  • Shared asset view analytics (for anonymous users)
  • Brand portal asset view analytics

DamNotification.vue - Tracks:

  • Notification click analytics
  • Navigation from notifications with analytics payload

LeftMenu.vue - May track:

  • Navigation analytics

Dashboard Events

Dashboard Page (dashboard/index.vue) - Tracks:

  • Dashboard views
  • Displays weekly insights card with analytics data

Uploaded Assets Page (uploaded.vue) - Tracks:

  • Uploaded assets analytics

Event Types

Asset Events (event: 'asset')

Sub EventDescriptionRequired FieldsOptional Fields
viewedAsset viewedasset_idcollection_id, category_id
downloadedAsset downloadedasset_idcollection_id
updateAsset updated/metadata changedasset_id
updatedAsset updated (alternative)asset_id
deletedAsset deletedasset_id
archivedAsset archivedasset_id
addedAsset added/uploadedasset_id
tags-addedTags added to assetasset_id
tags-removedTags removed from assetasset_id
permission-updatedAsset permissions changedasset_id
version-deleteAsset version deletedasset_id, version_id
version-restoreAsset version restoredasset_id, version_id
duplicatedAsset duplicatedasset_id
movedAsset moved to different folderasset_idcategory_id (destination)
sharedAsset sharedasset_idshare_id
embededAsset embed code createdasset_idshare_id
convertedAsset file format convertedasset_id

Collage Events (event: 'collage')

Sub EventDescriptionRequired FieldsOptional Fields
viewedCollage viewedcollection_id
downloadedCollage assets downloadedcollection_idasset_id (array)
updateCollage updated/renamedcollection_id
deletedCollage deletedcollection_id
createdCollage createdcollection_idasset_id (array)
asset-addedAsset added to collagecollection_id, asset_id
asset-removedAsset removed from collagecollection_id, asset_id
permission-updatedCollage permissions changedcollection_id
sharedCollage sharedcollection_idshare_id

Folder Events (event: 'folder')

Sub EventDescriptionRequired FieldsOptional Fields
viewedFolder viewedcategory_id
downloadedFolder assets downloadedcategory_id
updateFolder updated/renamedcategory_id
deletedFolder deletedcategory_id
createdFolder createdcategory_id
movedFolder movedcategory_id
permission-updatedFolder permissions changedcategory_id

Shared Events (event: 'shared')

Used for anonymous/public access tracking via share links.

Sub EventDescriptionRequired FieldsOptional Fields
viewedShared asset/folder viewed (anonymous)share_idasset_id, category_id
downloadedShared asset/folder downloaded (anonymous)share_idasset_id, category_id

Event Examples

Asset View

javascript
this.dispatchAnalytics({
  asset_id: [asset.id],
  event: 'asset',
  sub_event: 'viewed',
  environment: 'admin'
})

Asset Download

javascript
this.dispatchAnalytics({
  asset_id: [asset.id],
  event: 'asset',
  sub_event: 'downloaded',
  environment: 'admin'
})

Collage View

javascript
this.dispatchAnalytics({
  collection_id: collage.id,
  event: 'collage',
  sub_event: 'viewed',
  environment: 'admin'
})

Folder Creation

javascript
this.dispatchAnalytics({
  category_id: [folder.id],
  event: 'folder',
  sub_event: 'created',
  environment: 'admin'
})

Shared Asset View (Anonymous)

javascript
this.dispatchAnalyticsShare({
  share_id: shareId,
  asset_id: [asset.id],
  event: 'shared',
  sub_event: 'viewed',
  environment: 'anonymous',
  workspace_id: workspaceId
})

Analytics Payload Structure

Standard Payload

javascript
{
  // Entity Identifiers (at least one required)
  asset_id: number[],          // Array of asset IDs (for asset events)
  collection_id: number,       // Collage/collection ID (for collage events)
  category_id: number[],       // Array of folder IDs (for folder events)
  version_id: number,          // Version ID (for version-specific events)
  share_id: number,            // Share ID (for shared events)
  
  // Event Definition (required)
  event: string,               // Main event type: 'asset', 'collage', 'folder', 'shared'
  sub_event: string,           // Specific action: 'viewed', 'downloaded', 'update', etc.
  environment: string,         // Context: 'admin' (authenticated) or 'anonymous' (public)
  
  // Workspace Context (optional, usually auto-detected)
  workspace_id: number,         // Workspace identifier
  
  // Browser & Location Data (automatically added by mixin)
  userAgentAndLocation: {
    location: {
      country: string,
      region: string,
      city: string,
      latitude: number,
      longitude: number
    },
    agent: {
      browser: string,
      browserVersion: string,
      os: string,
      osVersion: string,
      device: string,
      userAgent: string
    }
  }
}

Share Payload (dispatchAnalyticsShare)

javascript
{
  // Share-specific identifiers
  share_id: number,            // Share identifier (required)
  asset_id: number[],          // Asset IDs (if sharing assets)
  category_id: number[],       // Folder IDs (if sharing folders)
  collection_id: number,       // Collage ID (if sharing collage)
  
  // Event Definition
  event: string,               // 'asset', 'collage', 'folder', or 'shared'
  sub_event: string,           // 'viewed', 'downloaded', 'shared', 'embeded'
  environment: 'anonymous',    // Always 'anonymous' for shared access
  workspace_id: number,        // Workspace identifier
  
  // Browser & Location Data (automatically added)
  userAgentAndLocation: {
    // ... browser and location data
  }
}

Payload Examples

Asset View with Context

javascript
{
  asset_id: [123],
  event: 'asset',
  sub_event: 'viewed',
  environment: 'admin',
  collection_id: 456,  // If viewed from collage
  category_id: [789]   // If viewed from folder
}

Collage Download

javascript
{
  collection_id: 456,
  asset_id: [123, 124, 125],  // Assets being downloaded
  event: 'collage',
  sub_event: 'downloaded',
  environment: 'admin'
}

Folder Creation

javascript
{
  category_id: [789],
  event: 'folder',
  sub_event: 'created',
  environment: 'admin'
}

Version Operations

javascript
{
  asset_id: [123],
  version_id: 5,
  event: 'asset',
  sub_event: 'version-delete',  // or 'version-restore'
  environment: 'admin'
}

Tag Operations

javascript
{
  asset_id: [123],
  event: 'asset',
  sub_event: 'tags-added',  // or 'tags-removed'
  environment: 'admin'
}

Browser Information Collection

The analytics system automatically collects:

  • User Agent Information:

    • Browser name and version
    • Operating system and version
    • Device type
    • Full user agent string
  • Geographic Location (via API):

    • Country
    • Region/State
    • City
    • Latitude and longitude
  • Collection Method:

    • Fetched from /api/browser-os endpoint
    • Cached in Vuex store
    • Automatically included in all analytics events

Data Encoding & Security

Analytics data is processed through multiple encoding layers for security:

  1. JSON Stringification: Converts payload object to JSON string
  2. Base64 Encoding: Encodes JSON string to Base64
  3. String Reversal: Reverses the string (obfuscation)
  4. API Transmission: Sends encoded data to backend

Example Flow:

javascript
// Original payload
{ action: 'view_asset', asset_id: 123 }

// Step 1: JSON stringify
'{"action":"view_asset","asset_id":123}'

// Step 2: Base64 encode
'eyJhY3Rpb24iOiJ2aWV3X2Fzc2V0IiwiYXNzZXRfaWQiOjEyM30='

// Step 3: Reverse string
'=03M2d1i_tessa_2i:noitca{je'

// Step 4: Send to API

API Integration

Analytics Endpoints

POST /add-transaction-activity

Main endpoint for tracking user actions and events.

Request Body:

javascript
{
  transaction_data: string,  // Encoded and obfuscated analytics payload
  workspace_id: string|number
}

Response:

javascript
{
  success: boolean,
  message: string,
  transaction_id: string  // Optional transaction identifier
}

POST /transaction-activity

Alternative endpoint for tracking share-related transactions.

Request Body:

javascript
{
  transaction_data: string,  // Encoded share analytics payload
  workspace_id: string|number
}

POST /digital-assets/analytics/summary

Get analytics summary for assets.

Request Body:

javascript
{
  asset_ids: string[]|number[],  // Array of asset IDs
  workspace_id: string|number,
  date_range: {                   // Optional
    start_date: string,
    end_date: string
  }
}

Response:

javascript
{
  summaries: [
    {
      asset_id: string|number,
      views: number,
      downloads: number,
      shares: number,
      weekly_data: {
        views: number[],
        downloads: number[],
        shares: number[]
      }
    }
  ]
}

GET /api/browser-os

Get user agent and location information.

Response:

javascript
{
  location: {
    country: string,
    region: string,
    city: string,
    latitude: number,
    longitude: number
  },
  agent: {
    browser: string,
    browserVersion: string,
    os: string,
    osVersion: string,
    device: string,
    userAgent: string
  }
}

Workflows

Asset View Tracking

  1. User views an asset (FileListingCard, QuickViewDialog, or Asset Details page)
  2. Component builds analytics payload with event: 'asset', sub_event: 'viewed'
  3. Component calls dispatchAnalytics with the payload
  4. Mixin collects browser and location data automatically
  5. Payload is encoded and sent to /add-transaction-activity
  6. Backend processes and stores the transaction

Upload Tracking

  1. User uploads a file (AssetUpload component)
  2. File uploads to S3
  3. Upload completes → event: 'asset', sub_event: 'added' with asset_id
  4. If folder created during upload → event: 'folder', sub_event: 'created'
  5. Analytics payload includes asset_id and environment context

Share Tracking

  1. User shares an asset (ShareAssetDialog)
  2. Share link/embed created → event: 'asset', sub_event: 'shared' or 'embeded'
  3. dispatchAnalytics called with share creation event
  4. When share is accessed by anonymous user → dispatchAnalyticsShare called
  5. Anonymous access tracked with event: 'shared', sub_event: 'viewed' or 'downloaded'
  6. Share analytics sent to /transaction-activity endpoint

Insights Display

  1. User navigates to Dashboard or Asset Details page
  2. Component calls getAssetsAnalyticsSummary API
  3. Backend returns views, downloads, shares counts and weekly data
  4. InsightsGraph or InsightsTabGraph displays data in bar charts
  5. Subscription plan checked for access control

Search Tracking

  1. User performs search (SearchAssets, SearchFolders, SearchCollages)
  2. When user views asset from search → event: 'asset', sub_event: 'viewed'
  3. When user views folder from search → event: 'folder', sub_event: 'viewed'
  4. When user views collage from search → event: 'collage', sub_event: 'viewed'
  5. User interactions from search results tracked with standard asset/folder/collage events

Component Integration Examples

Tracking Asset View

vue
<template>
  <div @click="handleAssetClick(asset)">
    <!-- Asset display -->
  </div>
</template>

<script>
import commonFunctions from '~/mixins/common-functions'

export default {
  mixins: [commonFunctions],
  methods: {
    async handleAssetClick(asset) {
      // Track asset view
      const payload = {
        asset_id: [asset.id],
        event: 'asset',
        sub_event: 'viewed',
        environment: 'admin'
      }
      
      // Add context if viewing from folder or collage
      if (this.currentFolderId) {
        payload.category_id = [this.currentFolderId]
      }
      
      await this.dispatchAnalytics(payload)
      
      // Navigate to asset details
      this.$router.push(`/${this.$route.params.workspace_id}/dam/files/${asset.id}`)
    }
  }
}
</script>

Tracking Upload

vue
<script>
import commonFunctions from '~/mixins/common-functions'
import uploadCommon from '~/mixins/upload-common'

export default {
  mixins: [commonFunctions, uploadCommon],
  methods: {
    async handleUploadComplete(file, asset) {
      // Track upload completion
      await this.dispatchAnalytics({
        asset_id: [asset.id],
        event: 'asset',
        sub_event: 'added',
        environment: 'admin'
      })
    }
  }
}
</script>

Displaying Insights

vue
<template>
  <div>
    <InsightsGraph
      v-if="insightsData"
      :insights-data="insightsData"
      :loading="loading"
    />
  </div>
</template>

<script>
import InsightsGraph from '~/components/dam/Insights/InsightsGraph.vue'

export default {
  components: {
    InsightsGraph
  },
  data() {
    return {
      insightsData: null,
      loading: false
    }
  },
  async mounted() {
    await this.fetchInsights()
  },
  methods: {
    async fetchInsights() {
      this.loading = true
      try {
        const response = await this.$axios.post('/digital-assets/analytics/summary', {
          asset_ids: [this.assetId],
          workspace_id: this.$route.params.workspace_id
        })
        this.insightsData = response.data.summaries[0]
      } finally {
        this.loading = false
      }
    }
  }
}
</script>

Tracking Share Events

vue
<script>
import commonFunctions from '~/mixins/common-functions'

export default {
  mixins: [commonFunctions],
  methods: {
    async handleShareCreated(share) {
      // Track share creation
      await this.dispatchAnalytics({
        asset_id: [share.asset_id],
        event: 'asset',
        sub_event: share.type === 'embed' ? 'embeded' : 'shared',
        environment: 'admin'
      })
      
      // Track anonymous access when share is viewed
      // This would be in the shared assets page
      await this.dispatchAnalyticsShare({
        share_id: share.id,
        asset_id: [share.asset_id],
        event: 'shared',
        sub_event: 'viewed',
        environment: 'anonymous',
        workspace_id: this.workspaceId
      })
    }
  }
}
</script>

Permission Management

Subscription-Based Insights Access

Insights visibility is controlled by subscription plans:

  • Premium Plans: Full access to insights and analytics
  • Basic Plans: Limited or no access to insights
  • Free Plans: No insights access

The InsightsTabGraph component checks subscription plan before displaying data:

javascript
computed: {
  canViewInsights() {
    const plan = this.$store.getters['subscription/currentPlan']
    return ['premium', 'enterprise'].includes(plan)
  }
}

Best Practices

  1. Always Include Workspace ID: Most analytics events require workspace_id
  2. Use Appropriate Action Names: Follow the event naming convention
  3. Include Context: Add additional_data for event-specific context
  4. Handle Errors Gracefully: Analytics failures should not break user experience
  5. Respect Privacy: Only track necessary data, respect user privacy settings
  6. Batch When Possible: For bulk operations, consider batching analytics events
  7. Test Analytics: Verify events are being tracked correctly in development