import {AvatarUser} from './user'; export enum OnboardingTaskKey { FIRST_PROJECT = 'create_project', FIRST_EVENT = 'send_first_event', INVITE_MEMBER = 'invite_member', SECOND_PLATFORM = 'setup_second_platform', USER_CONTEXT = 'setup_user_context', RELEASE_TRACKING = 'setup_release_tracking', SOURCEMAPS = 'setup_sourcemaps', USER_REPORTS = 'setup_user_reports', ISSUE_TRACKER = 'setup_issue_tracker', ALERT_RULE = 'setup_alert_rules', FIRST_TRANSACTION = 'setup_transactions', } export type OnboardingSupplementComponentProps = { task: OnboardingTask; onCompleteTask: () => void; }; export type OnboardingTaskDescriptor = { task: OnboardingTaskKey; title: string; description: string; /** * Can this task be skipped? */ skippable: boolean; /** * A list of require task keys that must have been completed before these * tasks may be completed. */ requisites: OnboardingTaskKey[]; /** * Should the onboarding task currently be displayed */ display: boolean; /** * An extra component that may be rendered within the onboarding task item. */ SupplementComponent?: React.ComponentType; } & ( | { actionType: 'app' | 'external'; location: string; } | { actionType: 'action'; action: () => void; } ); export type OnboardingTaskStatus = { task: OnboardingTaskKey; status: 'skipped' | 'pending' | 'complete'; user?: AvatarUser | null; dateCompleted?: string; completionSeen?: string; data?: object; }; export type OnboardingTask = OnboardingTaskStatus & OnboardingTaskDescriptor & { /** * Onboarding tasks that are currently incomplete and must be completed * before this task should be completed. */ requisiteTasks: OnboardingTask[]; };