feat(core): add tracking events to doc role management (#10221)
This commit is contained in:
@@ -4,6 +4,7 @@ import { DocGrantedUsersService } from '@affine/core/modules/permissions';
|
|||||||
import { ShareInfoService } from '@affine/core/modules/share-doc';
|
import { ShareInfoService } from '@affine/core/modules/share-doc';
|
||||||
import { DocRole } from '@affine/graphql';
|
import { DocRole } from '@affine/graphql';
|
||||||
import { useI18n } from '@affine/i18n';
|
import { useI18n } from '@affine/i18n';
|
||||||
|
import { track } from '@affine/track';
|
||||||
import { InformationIcon } from '@blocksuite/icons/rc';
|
import { InformationIcon } from '@blocksuite/icons/rc';
|
||||||
import { useLiveData, useService } from '@toeverything/infra';
|
import { useLiveData, useService } from '@toeverything/infra';
|
||||||
import clsx from 'clsx';
|
import clsx from 'clsx';
|
||||||
@@ -48,6 +49,7 @@ export const MembersPermission = ({
|
|||||||
docDefaultRole === DocRole.Reader || docDefaultRole === DocRole.Editor;
|
docDefaultRole === DocRole.Reader || docDefaultRole === DocRole.Editor;
|
||||||
const changePermission = useCallback(
|
const changePermission = useCallback(
|
||||||
async (docRole: DocRole) => {
|
async (docRole: DocRole) => {
|
||||||
|
track.$.sharePanel.$.modifyDocDefaultRole();
|
||||||
await docGrantedUsersService.updateDocDefaultRole(docRole);
|
await docGrantedUsersService.updateDocDefaultRole(docRole);
|
||||||
shareInfoService.shareInfo.revalidate();
|
shareInfoService.shareInfo.revalidate();
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import {
|
|||||||
WorkspaceMemberStatus,
|
WorkspaceMemberStatus,
|
||||||
} from '@affine/graphql';
|
} from '@affine/graphql';
|
||||||
import { useI18n } from '@affine/i18n';
|
import { useI18n } from '@affine/i18n';
|
||||||
|
import { track } from '@affine/track';
|
||||||
import { ArrowLeftBigIcon } from '@blocksuite/icons/rc';
|
import { ArrowLeftBigIcon } from '@blocksuite/icons/rc';
|
||||||
import { useLiveData, useService } from '@toeverything/infra';
|
import { useLiveData, useService } from '@toeverything/infra';
|
||||||
import clsx from 'clsx';
|
import clsx from 'clsx';
|
||||||
@@ -100,6 +101,7 @@ export const InviteMemberEditor = ({
|
|||||||
|
|
||||||
const onInvite = useAsyncCallback(async () => {
|
const onInvite = useAsyncCallback(async () => {
|
||||||
const selectedMemberIds = selectedMembers.map(member => member.id);
|
const selectedMemberIds = selectedMembers.map(member => member.id);
|
||||||
|
track.$.sharePanel.$.inviteUserDocRole({ control: 'member list' });
|
||||||
try {
|
try {
|
||||||
await docGrantedUsersService.grantUsersRole(
|
await docGrantedUsersService.grantUsersRole(
|
||||||
selectedMemberIds,
|
selectedMemberIds,
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import {
|
|||||||
} from '@affine/core/modules/permissions';
|
} from '@affine/core/modules/permissions';
|
||||||
import { DocRole, UserFriendlyError } from '@affine/graphql';
|
import { DocRole, UserFriendlyError } from '@affine/graphql';
|
||||||
import { useI18n } from '@affine/i18n';
|
import { useI18n } from '@affine/i18n';
|
||||||
|
import track from '@affine/track';
|
||||||
import { useLiveData, useService } from '@toeverything/infra';
|
import { useLiveData, useService } from '@toeverything/infra';
|
||||||
import clsx from 'clsx';
|
import clsx from 'clsx';
|
||||||
import { useCallback, useMemo } from 'react';
|
import { useCallback, useMemo } from 'react';
|
||||||
@@ -148,6 +149,7 @@ const Options = ({
|
|||||||
|
|
||||||
const updateUserRole = useCallback(
|
const updateUserRole = useCallback(
|
||||||
async (userId: string, role: DocRole) => {
|
async (userId: string, role: DocRole) => {
|
||||||
|
track.$.sharePanel.$.modifyUserDocRole({ control: role });
|
||||||
try {
|
try {
|
||||||
const res = await docGrantedUsersService.updateUserRole(userId, role);
|
const res = await docGrantedUsersService.updateUserRole(userId, role);
|
||||||
if (res) {
|
if (res) {
|
||||||
@@ -214,6 +216,7 @@ const Options = ({
|
|||||||
}, [changeToOwner, openConfirmModal, t]);
|
}, [changeToOwner, openConfirmModal, t]);
|
||||||
|
|
||||||
const removeMember = useAsyncCallback(async () => {
|
const removeMember = useAsyncCallback(async () => {
|
||||||
|
track.$.sharePanel.$.modifyUserDocRole({ control: 'Remove' });
|
||||||
try {
|
try {
|
||||||
await docGrantedUsersService.revokeUsersRole(userId);
|
await docGrantedUsersService.revokeUsersRole(userId);
|
||||||
docGrantedUsersService.loadMore();
|
docGrantedUsersService.loadMore();
|
||||||
|
|||||||
@@ -103,6 +103,10 @@ type ShareEvents =
|
|||||||
| 'copyShareLink'
|
| 'copyShareLink'
|
||||||
| 'openShareMenu'
|
| 'openShareMenu'
|
||||||
| 'share';
|
| 'share';
|
||||||
|
type DocRoleEvents =
|
||||||
|
| 'modifyDocDefaultRole'
|
||||||
|
| 'modifyUserDocRole'
|
||||||
|
| 'inviteUserDocRole';
|
||||||
type AuthEvents =
|
type AuthEvents =
|
||||||
| 'requestSignIn'
|
| 'requestSignIn'
|
||||||
| 'signIn'
|
| 'signIn'
|
||||||
@@ -147,6 +151,7 @@ type UserEvents =
|
|||||||
| CmdkEvents
|
| CmdkEvents
|
||||||
| OrganizeEvents
|
| OrganizeEvents
|
||||||
| ShareEvents
|
| ShareEvents
|
||||||
|
| DocRoleEvents
|
||||||
| AuthEvents
|
| AuthEvents
|
||||||
| AccountEvents
|
| AccountEvents
|
||||||
| PaymentEvents
|
| PaymentEvents
|
||||||
@@ -176,7 +181,15 @@ const PageEvents = {
|
|||||||
auth: ['requestSignIn', 'signIn', 'signedIn', 'signInFail', 'signOut'],
|
auth: ['requestSignIn', 'signIn', 'signedIn', 'signInFail', 'signOut'],
|
||||||
},
|
},
|
||||||
sharePanel: {
|
sharePanel: {
|
||||||
$: ['createShareLink', 'copyShareLink', 'export', 'open'],
|
$: [
|
||||||
|
'createShareLink',
|
||||||
|
'copyShareLink',
|
||||||
|
'export',
|
||||||
|
'open',
|
||||||
|
'modifyDocDefaultRole',
|
||||||
|
'modifyUserDocRole',
|
||||||
|
'inviteUserDocRole',
|
||||||
|
],
|
||||||
},
|
},
|
||||||
docInfoPanel: {
|
docInfoPanel: {
|
||||||
$: ['open'],
|
$: ['open'],
|
||||||
@@ -417,6 +430,14 @@ type AttachmentEventArgs = {
|
|||||||
type: string; // file type
|
type: string; // file type
|
||||||
};
|
};
|
||||||
|
|
||||||
|
type DocRoleControlType =
|
||||||
|
| 'Owner'
|
||||||
|
| 'Editor'
|
||||||
|
| 'Manager'
|
||||||
|
| 'Reader'
|
||||||
|
| 'External'
|
||||||
|
| 'Remove';
|
||||||
|
|
||||||
type TabActionControlType =
|
type TabActionControlType =
|
||||||
| 'click'
|
| 'click'
|
||||||
| 'dnd'
|
| 'dnd'
|
||||||
@@ -512,6 +533,12 @@ export type EventArgs = {
|
|||||||
openAttachmentInNewTab: AttachmentEventArgs;
|
openAttachmentInNewTab: AttachmentEventArgs;
|
||||||
openAttachmentInPeekView: AttachmentEventArgs;
|
openAttachmentInPeekView: AttachmentEventArgs;
|
||||||
openAttachmentInSplitView: AttachmentEventArgs;
|
openAttachmentInSplitView: AttachmentEventArgs;
|
||||||
|
modifyUserDocRole: {
|
||||||
|
control: DocRoleControlType;
|
||||||
|
};
|
||||||
|
inviteUserDocRole: {
|
||||||
|
control: 'member list';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
// for type checking
|
// for type checking
|
||||||
|
|||||||
Reference in New Issue
Block a user