File size: 3,299 Bytes
13555f3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {IUser} from '../user'

import {TelemetryHandler} from './telemetry'

export const TelemetryCategory = 'boards'

export const TelemetryActions = {
    ClickChannelHeader: 'clickChannelHeader',
    ClickChannelIntro: 'channelIntro_boardLink',
    ViewBoard: 'viewBoard',
    CreateBoard: 'createBoard',
    DuplicateBoard: 'duplicateBoard',
    DeleteBoard: 'deleteBoard',
    DeleteBoardTemplate: 'deleteBoardTemplate',
    ShareBoard: 'shareBoard',
    CreateBoardTemplate: 'createBoardTemplate',
    CreateBoardViaTemplate: 'createBoardViaTemplate',
    AddTemplateFromBoard: 'AddTemplateFromBoard',
    CreateBoardView: 'createBoardView',
    DuplicateBoardView: 'duplicagteBoardView',
    DeleteBoardView: 'deleteBoardView',
    EditCardProperty: 'editCardProperty',
    ViewCard: 'viewCard',
    CreateCard: 'createCard',
    CreateCardTemplate: 'createCardTemplate',
    CreateCardViaTemplate: 'createCardViaTemplate',
    DuplicateCard: 'duplicateCard',
    DeleteCard: 'deleteCard',
    AddTemplateFromCard: 'addTemplateFromCard',
    ViewSharedBoard: 'viewSharedBoard',
    ShareBoardOpenModal: 'shareBoard_openModal',
    ShareBoardLogin: 'shareBoard_login',
    ShareLinkPublicCopy: 'shareLinkPublic_copy',
    ShareLinkInternalCopy: 'shareLinkInternal_copy',
    ImportArchive: 'settings_importArchive',
    ImportTrello: 'settings_importTrello',
    ImportAsana: 'settings_importAsana',
    ImportNotion: 'settings_importNotion',
    ImportJira: 'settings_importJira',
    ImportTodoist: 'settings_importTodoist',
    ExportArchive: 'settings_exportArchive',
    StartTour: 'welcomeScreen_startTour',
    SkipTour: 'welcomeScreen_skipTour',
    CloudMoreInfo: 'cloud_more_info',
    ViewLimitReached: 'limit_ViewLimitReached',
    ViewLimitCTAPerformed: 'limit_ViewLimitLinkOpen',
    LimitCardCTAPerformed: 'limit_CardLimitCTAPerformed',
    LimitCardLimitReached: 'limit_cardLimitReached',
    LimitCardLimitLinkOpen: 'limit_cardLimitLinkOpen',
    VersionMoreInfo: 'version_more_info',
    ClickChannelsRHSBoard: 'click_board_in_channels_RHS',
}

interface IEventProps {
    channelID?: string
    teamID?: string
    board?: string
    view?: string
    viewType?: string
    card?: string
    cardTemplateId?: string
    boardTemplateId?: string
    shareBoardEnabled?: boolean
}

class TelemetryClient {
    public telemetryHandler?: TelemetryHandler
    public user?: IUser

    setTelemetryHandler(telemetryHandler?: TelemetryHandler): void {
        this.telemetryHandler = telemetryHandler
    }

    setUser(user: IUser): void {
        this.user = user
    }

    trackEvent(category: string, event: string, props?: IEventProps): void {
        if (this.telemetryHandler) {
            const userId = this.user?.id
            this.telemetryHandler.trackEvent(userId || '', '', category, event, props)
        }
    }

    pageVisited(category: string, name: string): void {
        if (this.telemetryHandler) {
            const userId = this.user?.id
            this.telemetryHandler.pageVisited(userId || '', '', category, name)
        }
    }
}

const telemetryClient = new TelemetryClient()

export {TelemetryClient}
export default telemetryClient