import * as React from 'react'; import { Placement, Popper, PopperChildrenProps } from 'react-popper'; import { OnboardingCard } from 'ts/components/onboarding/onboarding_card'; import { ContinueButtonDisplay, OnboardingTooltip } from 'ts/components/onboarding/onboarding_tooltip'; import { Animation } from 'ts/components/ui/animation'; import { Container } from 'ts/components/ui/container'; import { Overlay } from 'ts/components/ui/overlay'; export interface Step { target: string; title?: string; content: React.ReactNode; placement?: Placement; shouldHideBackButton?: boolean; shouldHideNextButton?: boolean; continueButtonDisplay?: ContinueButtonDisplay; continueButtonText?: string; } export interface OnboardingFlowProps { steps: Step[]; stepIndex: number; isRunning: boolean; onClose: () => void; updateOnboardingStep: (stepIndex: number) => void; disableOverlay?: boolean; isMobile: boolean; } export class OnboardingFlow extends React.Component { public static defaultProps = { disableOverlay: false, isMobile: false, }; public render(): React.ReactNode { if (!this.props.isRunning) { return null; } let onboardingElement = null; if (this.props.isMobile) { onboardingElement = {this._renderOnboardignCard()}; } else { onboardingElement = ( {this._renderPopperChildren.bind(this)} ); } if (this.props.disableOverlay) { return onboardingElement; } return {onboardingElement}; } private _getElementForStep(): Element { return document.querySelector(this._getCurrentStep().target); } private _renderPopperChildren(props: PopperChildrenProps): React.ReactNode { return (
{this._renderToolTip()}
); } private _renderToolTip(): React.ReactNode { const { steps, stepIndex } = this.props; const step = steps[stepIndex]; const isLastStep = steps.length - 1 === stepIndex; return ( ); } private _renderOnboardignCard(): React.ReactNode { const { steps, stepIndex } = this.props; const step = steps[stepIndex]; const isLastStep = steps.length - 1 === stepIndex; return ( ); } private _getCurrentStep(): Step { return this.props.steps[this.props.stepIndex]; } private _goToNextStep(): void { const nextStep = this.props.stepIndex + 1; if (nextStep < this.props.steps.length) { this.props.updateOnboardingStep(nextStep); } else { this.props.onClose(); } } private _goToPrevStep(): void { const nextStep = this.props.stepIndex - 1; if (nextStep >= 0) { this.props.updateOnboardingStep(nextStep); } else { this.props.onClose(); } } }