diff --git a/src/lib/actions/analytics.ts b/src/lib/actions/analytics.ts index 19975c6eea..adab81b44f 100644 --- a/src/lib/actions/analytics.ts +++ b/src/lib/actions/analytics.ts @@ -138,6 +138,59 @@ export function isTrackingAllowed() { } } +export enum Click { + BackupRestoreClick = 'click_backup_restore', + BreadcrumbClick = 'click_breadcrumb', + ConnectRepositoryClick = 'click_connect_repository', + CreditsRedeemClick = 'click_credits_redeem', + CloudSignupClick = 'click_cloud_signup', + DatabaseAttributeDelete = 'click_attribute_delete', + DatabaseIndexDelete = 'click_index_delete', + DatabaseCollectionDelete = 'click_collection_delete', + DatabaseDatabaseDelete = 'click_database_delete', + DomainCreateClick = 'click_domain_create', + DomainDeleteClick = 'click_domain_delete', + DomainRetryDomainVerificationClick = 'click_domain_retry_domain_verification', + FeedbackSubmitClick = 'click_leave_feedback', + FilterApplyClick = 'click_apply_filter', + FunctionsRedeployClick = 'click_function_redeploy', + FunctionsDeploymentDeleteClick = 'click_deployment_delete', + KeyCreateClick = 'click_key_create', + MenuDropDownClick = 'click_menu_dropdown', + MenuOverviewClick = 'click_menu_overview', + ModalCloseClick = 'click_close_modal', + MessagingScheduleClick = 'click_messaging_schedule', + MessagingTopicCreateClick = 'click_messaging_topic_create', + MessagingTargetCreateClick = 'click_messaging_target_create', + MembershipDeleteClick = 'click_delete_membership', + PlatformCreateClick = 'click_platform_create', + OrganizationClickCreate = 'click_create_organization', + OrganizationClickUpgrade = 'click_organization_upgrade', + OnboardingSetupDatabaseClick = 'click_onboarding_setup_database', + OnboardingApiReferencesClick = 'click_onboarding_api_references', + OnboardingTutorialsClick = 'click_onboarding_tutorials', + OnboardingStorageQuickstartClick = 'click_onboarding_storage_quickstart', + OnboardingFunctionsQuickstartClick = 'click_onboarding_functions_quickstart', + OnboardingAuthEmailPasswordClick = 'click_onboarding_auth_email_password', + OnboardingAuthOauth2Click = 'click_onboarding_auth_oauth2', + OnboardingAuthAllMethodsClick = 'click_onboarding_auth_all_methods', + OnboardingDiscordClick = 'click_onboarding_discord', + StorageBucketDeleteClick = 'click_bucket_delete', + SettingsWebhookUpdateSignatureClick = 'click_webhook_update_signature', + SettingsWebhookDeleteClick = 'click_webhook_delete', + SettingsInstallProviderClick = 'click_install_provider', + SettingsStartMigrationClick = 'click_start_migration', + SubmitFormClick = 'click_submit_form', + ShowCustomIdClick = 'click_show_custom_id', + SupportOpenClick = 'click_open_support_menu', + PromoClick = 'click_promo', + PolicyDeleteClick = 'click_policy_delete', + VariablesCreateClick = 'click_variable_create', + VariablesUpdateClick = 'click_variable_update', + VariablesImportClick = 'click_variable_import', + WebsiteOpenClick = 'click_open_website' +} + export enum Submit { DownloadDPA = 'submit_download_dpa', Error = 'submit_error', @@ -158,6 +211,9 @@ export enum Submit { AccountRecoveryCodesCreate = 'submit_account_recovery_codes_create', AccountRecoveryCodesUpdate = 'submit_account_recovery_codes_update', AccountDeleteIdentity = 'submit_account_delete_identity', + FeedbackSubmit = 'submit_leave_feedback', + FilterClear = 'submit_clear_filter', + FilterApply = 'submit_filter_apply', UserCreate = 'submit_user_create', UserDelete = 'submit_user_delete', UserUpdateEmail = 'submit_user_update_email', @@ -165,6 +221,7 @@ export enum Submit { UserUpdateName = 'submit_user_update_name', UserUpdatePassword = 'submit_user_update_password', UserUpdatePhone = 'submit_user_update_phone', + UserUpdateMfa = 'submit_user_update_mfa', UserUpdatePreferences = 'submit_user_update_preferences', UserUpdateStatus = 'submit_user_update_status', UserUpdateVerificationEmail = 'submit_user_update_verification_email', @@ -186,9 +243,12 @@ export enum Submit { MemberDelete = 'submit_member_delete', MembershipUpdate = 'submit_membership_update', MembershipUpdateStatus = 'submit_membership_update_status', + MessagingTargetUpdate = 'submit_messaging_target_update', + MessagingUpdateHtmlMode = 'submit_update_html_mode', ProviderUpdate = 'submit_provider_update', TeamCreate = 'submit_team_create', TeamDelete = 'submit_team_delete', + TeamUpdatePreferences = 'submit_team_update_preferences', TeamUpdateName = 'submit_team_update_name', AuthLimitUpdate = 'submit_auth_limit_update', AuthStatusUpdate = 'submit_auth_status_update', @@ -231,6 +291,7 @@ export enum Submit { FunctionUpdateTimeout = 'submit_function_update_timeout', FunctionUpdateEvents = 'submit_function_update_events', FunctionUpdateScopes = 'submit_function_key_update_scopes', + FunctionUpdateRuntime = 'submit_function_update_runtime', FunctionConnectRepo = 'submit_function_connect_repo', FunctionDisconnectRepo = 'submit_function_disconnect_repo', FunctionRedeploy = 'submit_function_redeploy', @@ -249,9 +310,11 @@ export enum Submit { KeyUpdateName = 'submit_key_update_name', KeyUpdateScopes = 'submit_key_update_scopes', KeyUpdateExpire = 'submit_key_update_expire', + PlatformCreate = 'submit_platform_create', PlatformDelete = 'submit_platform_delete', PlatformUpdate = 'submit_platform_update', + DomainCreate = 'submit_domain_create', DomainDelete = 'submit_domain_delete', DomainUpdateVerification = 'submit_domain_update_verification', @@ -344,5 +407,6 @@ export enum Submit { SiteActivateDeployment = 'submit_site_activate_deployment', RecordCreate = 'submit_dns_record_create', RecordUpdate = 'submit_dns_record_update', - RecordDelete = 'submit_dns_record_delete' + RecordDelete = 'submit_dns_record_delete', + SearchClear = 'submit_clear_search' } diff --git a/src/lib/commandCenter/panels/template.svelte b/src/lib/commandCenter/panels/template.svelte index d23c1f4055..83071bcafc 100644 --- a/src/lib/commandCenter/panels/template.svelte +++ b/src/lib/commandCenter/panels/template.svelte @@ -10,6 +10,7 @@ import { clearSubPanels, popSubPanel, subPanels } from '../subPanels'; import { IconArrowSmRight } from '@appwrite.io/pink-icons-svelte'; import { Icon, Keyboard, Layout } from '@appwrite.io/pink-svelte'; + import { Submit, trackEvent } from '$lib/actions/analytics'; /* eslint no-undef: "off" */ type Option = $$Generic & { group?: string }>; @@ -22,6 +23,7 @@ let selected = 0; let usingKeyboard = false; let contentEl: HTMLElement; + let didSearch = false; async function triggerOption(option: Option) { const prevPanels = $subPanels.length; @@ -43,6 +45,14 @@ if (!open) return; usingKeyboard = true; + if (search.length > 0) { + didSearch = true; + } + + if (search === '' && didSearch) { + trackEvent(Submit.SearchClear); + } + let canceled = false; dispatch('keydown', { originalEvent: event, diff --git a/src/lib/components/billing/alerts/limitReached.svelte b/src/lib/components/billing/alerts/limitReached.svelte index f3b5cc4b91..bf150261e8 100644 --- a/src/lib/components/billing/alerts/limitReached.svelte +++ b/src/lib/components/billing/alerts/limitReached.svelte @@ -1,7 +1,7 @@ @@ -8,6 +9,11 @@

Upgrade your plan to add more {service}

- +
diff --git a/src/lib/components/customId.svelte b/src/lib/components/customId.svelte index 9301b04a1b..0db5336dc2 100644 --- a/src/lib/components/customId.svelte +++ b/src/lib/components/customId.svelte @@ -1,5 +1,5 @@ diff --git a/src/lib/components/fakeModal.svelte b/src/lib/components/fakeModal.svelte index 105bba4cc8..405bd82337 100644 --- a/src/lib/components/fakeModal.svelte +++ b/src/lib/components/fakeModal.svelte @@ -2,7 +2,7 @@ import { Alert } from '$lib/components'; import { onMount } from 'svelte'; import Form from '$lib/elements/forms/form.svelte'; - import { trackEvent } from '$lib/actions/analytics'; + import { Click, trackEvent } from '$lib/actions/analytics'; import { clickOnEnter } from '$lib/helpers/a11y'; export let show = false; @@ -23,7 +23,7 @@ function handleBLur(event: MouseEvent) { if (event.target === backdrop) { - trackEvent('click_close_modal', { + trackEvent(Click.ModalCloseClick, { from: 'backdrop' }); closeModal(); @@ -38,7 +38,7 @@ function handleKeydown(event: KeyboardEvent) { if (event.key === 'Escape') { event.preventDefault(); - trackEvent('click_close_modal', { + trackEvent(Click.ModalCloseClick, { from: 'escape' }); closeModal(); @@ -100,7 +100,7 @@ aria-label="Close Modal" title="Close Modal" on:click={() => - trackEvent('click_close_modal', { + trackEvent(Click.ModalCloseClick, { from: 'button' })} on:click={closeModal}> diff --git a/src/lib/components/filters/filters.svelte b/src/lib/components/filters/filters.svelte index 509f283d39..6d9e7067f1 100644 --- a/src/lib/components/filters/filters.svelte +++ b/src/lib/components/filters/filters.svelte @@ -16,6 +16,7 @@ import { createEventDispatcher } from 'svelte'; import { Icon, Layout, Popover } from '@appwrite.io/pink-svelte'; import { IconFilter, IconFilterLine } from '@appwrite.io/pink-icons-svelte'; + import { Click, Submit, trackEvent } from '$lib/actions/analytics'; export let query = '[]'; export let columns: Writable; @@ -25,6 +26,7 @@ export let clearOnClick = false; // When enabled the user doesn't have to click apply to clear the filters export let enableApply = false; export let quickFilters = false; + export let analyticsSource = ''; let displayQuickFilters = quickFilters; const dispatch = createEventDispatcher(); @@ -53,12 +55,14 @@ selectedColumn = null; queries.clearAll(); if (clearOnClick) { + trackEvent(Submit.FilterClear, { source: analyticsSource }); queries.apply(); } } function apply() { if (quickFilters && displayQuickFilters) { + trackEvent(Submit.FilterApply, { source: analyticsSource }); dispatch('apply'); } else if ( selectedColumn && @@ -118,7 +122,13 @@
- + diff --git a/src/routes/(console)/project-[project]/databases/database-[database]/settings/+page.svelte b/src/routes/(console)/project-[project]/databases/database-[database]/settings/+page.svelte index 6cecdb91ab..bab02f56a8 100644 --- a/src/routes/(console)/project-[project]/databases/database-[database]/settings/+page.svelte +++ b/src/routes/(console)/project-[project]/databases/database-[database]/settings/+page.svelte @@ -1,7 +1,7 @@ @@ -20,7 +21,12 @@ - + diff --git a/src/routes/(console)/project-[project]/settings/webhooks/[webhook]/updateSignature.svelte b/src/routes/(console)/project-[project]/settings/webhooks/[webhook]/updateSignature.svelte index ddbd8da2a9..1632e7dbcd 100644 --- a/src/routes/(console)/project-[project]/settings/webhooks/[webhook]/updateSignature.svelte +++ b/src/routes/(console)/project-[project]/settings/webhooks/[webhook]/updateSignature.svelte @@ -4,6 +4,7 @@ import { Link } from '@appwrite.io/pink-svelte'; import Regenerate from './regenerate.svelte'; import { webhook } from './store'; + import { Click, trackEvent } from '$lib/actions/analytics'; let showRegenerate = false; @@ -22,7 +23,13 @@
- + diff --git a/src/routes/(console)/project-[project]/sites/(components)/connectRepoModal.svelte b/src/routes/(console)/project-[project]/sites/(components)/connectRepoModal.svelte index 4800cd5373..c346b5468c 100644 --- a/src/routes/(console)/project-[project]/sites/(components)/connectRepoModal.svelte +++ b/src/routes/(console)/project-[project]/sites/(components)/connectRepoModal.svelte @@ -11,7 +11,7 @@ import ConnectGit from '$lib/components/git/connectGit.svelte'; import { Adapter, BuildRuntime, Framework, type Models } from '@appwrite.io/console'; import { addNotification } from '$lib/stores/notifications'; - import { trackEvent } from '$lib/actions/analytics'; + import { Click, trackEvent } from '$lib/actions/analytics'; import { invalidate } from '$app/navigation'; import { Dependencies } from '$lib/constants'; import RepositoryBehaviour from '$lib/components/git/repositoryBehaviour.svelte'; @@ -114,7 +114,7 @@ action="button" {callbackState} on:connect={(e) => { - trackEvent('click_connect_repository', { + trackEvent(Click.ConnectRepositoryClick, { from: 'sites' }); repository.set(e.detail); diff --git a/src/routes/(console)/project-[project]/sites/create-site/configuration.svelte b/src/routes/(console)/project-[project]/sites/create-site/configuration.svelte index 984786eeaa..c6f964b38b 100644 --- a/src/routes/(console)/project-[project]/sites/create-site/configuration.svelte +++ b/src/routes/(console)/project-[project]/sites/create-site/configuration.svelte @@ -32,6 +32,7 @@ import CreateVariableModal from './createVariableModal.svelte'; import DeleteVariableModal from './deleteVariableModal.svelte'; import UpdateVariableModal from './updateVariableModal.svelte'; + import { Click, trackEvent } from '$lib/actions/analytics'; export let frameworks: Models.Framework[]; export let selectedFramework: Models.Framework; @@ -134,18 +135,36 @@ {#if variables?.length} - {/if} diff --git a/src/routes/(console)/project-[project]/sites/create-site/finish/+page.svelte b/src/routes/(console)/project-[project]/sites/create-site/finish/+page.svelte index 1b76cda097..9f0e41c5d3 100644 --- a/src/routes/(console)/project-[project]/sites/create-site/finish/+page.svelte +++ b/src/routes/(console)/project-[project]/sites/create-site/finish/+page.svelte @@ -12,6 +12,7 @@ import { onMount } from 'svelte'; import AddCollaboratorModal from '../../(components)/addCollaboratorModal.svelte'; import { protocol } from '$routes/(console)/store'; + import { Click, trackEvent } from '$lib/actions/analytics'; export let data; @@ -91,6 +92,11 @@ { + trackEvent(Click.DomainCreateClick, { + source: 'sites_create_finish' + }); + }} href={`${base}/project-${$page.params.project}/sites/site-${data.site.$id}/domains`}> ) { - trackEvent('click_connect_repository', { + trackEvent(Click.ConnectRepositoryClick, { from: 'cover' }); repository.set(e.detail); diff --git a/src/routes/(console)/project-[project]/sites/create-site/templates/template-[template]/+page.svelte b/src/routes/(console)/project-[project]/sites/create-site/templates/template-[template]/+page.svelte index 8ac8b5d942..6bcaf752ff 100644 --- a/src/routes/(console)/project-[project]/sites/create-site/templates/template-[template]/+page.svelte +++ b/src/routes/(console)/project-[project]/sites/create-site/templates/template-[template]/+page.svelte @@ -2,7 +2,7 @@ import { goto } from '$app/navigation'; import { base } from '$app/paths'; import { page } from '$app/stores'; - import { Submit, trackError, trackEvent } from '$lib/actions/analytics'; + import { Click, Submit, trackError, trackEvent } from '$lib/actions/analytics'; import { Card } from '$lib/components'; import { Button, Form } from '$lib/elements/forms'; import { Wizard } from '$lib/layout'; @@ -296,7 +296,7 @@ product="sites" action="button" on:connect={(e) => { - trackEvent('click_connect_repository', { + trackEvent(Click.ConnectRepositoryClick, { from: 'template-wizard' }); repository.set(e.detail); diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/domains/+page.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/domains/+page.svelte index 1471261a17..0362801ab6 100644 --- a/src/routes/(console)/project-[project]/sites/site-[site]/domains/+page.svelte +++ b/src/routes/(console)/project-[project]/sites/site-[site]/domains/+page.svelte @@ -28,6 +28,7 @@ import SearchQuery from '$lib/components/searchQuery.svelte'; import { app } from '$lib/stores/app'; import { RuleType } from '$lib/stores/sdk'; + import { Click, trackEvent } from '$lib/actions/analytics'; import CreateAppwriteDomainModal from './createAppwriteDomainModal.svelte'; export let data; @@ -44,7 +45,9 @@ - @@ -123,6 +126,9 @@ selectedDomain = domain; showDelete = true; toggle(e); + trackEvent(Click.DomainDeleteClick, { + source: 'sites_domain_overview' + }); }}> Delete diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/domainsOverview.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/domainsOverview.svelte index f00afae23b..3ec3358b11 100644 --- a/src/routes/(console)/project-[project]/sites/site-[site]/domainsOverview.svelte +++ b/src/routes/(console)/project-[project]/sites/site-[site]/domainsOverview.svelte @@ -10,6 +10,7 @@ import { Link } from '$lib/elements'; import { Button } from '$lib/elements/forms'; import { Card, Trim } from '$lib/components'; + import { Click, trackEvent } from '$lib/actions/analytics'; export let proxyRuleList: Models.ProxyRuleList; @@ -54,6 +55,11 @@ diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/settings/+page.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/settings/+page.svelte index 0b32fe2002..ccc537820a 100644 --- a/src/routes/(console)/project-[project]/sites/site-[site]/settings/+page.svelte +++ b/src/routes/(console)/project-[project]/sites/site-[site]/settings/+page.svelte @@ -65,7 +65,8 @@ isGlobal={false} globalVariableList={data.globalVariables} variableList={data.variables} - product="site" /> + product="site" + analyticsSource="site_settings" /> diff --git a/src/routes/(console)/project-[project]/storage/bucket-[bucket]/settings/+page.svelte b/src/routes/(console)/project-[project]/storage/bucket-[bucket]/settings/+page.svelte index 6c6733d8de..d3767a49bb 100644 --- a/src/routes/(console)/project-[project]/storage/bucket-[bucket]/settings/+page.svelte +++ b/src/routes/(console)/project-[project]/storage/bucket-[bucket]/settings/+page.svelte @@ -87,6 +87,7 @@ import { GRACE_PERIOD_OVERRIDE } from '$lib/system'; import { isValueOfStringEnum } from '$lib/helpers/types'; import type { PageData } from './$types'; + import { Click } from '$lib/actions/analytics'; export let data: PageData; @@ -442,7 +443,12 @@ - + {/if} diff --git a/src/routes/(console)/project-[project]/storage/bucket-[bucket]/settings/updateMaxFileSize.svelte b/src/routes/(console)/project-[project]/storage/bucket-[bucket]/settings/updateMaxFileSize.svelte index c5b32d2252..63bce10e7c 100644 --- a/src/routes/(console)/project-[project]/storage/bucket-[bucket]/settings/updateMaxFileSize.svelte +++ b/src/routes/(console)/project-[project]/storage/bucket-[bucket]/settings/updateMaxFileSize.svelte @@ -1,5 +1,5 @@