Remove blacklist concept

This commit is contained in:
fragosti
2018-05-29 15:15:30 -07:00
parent 92cb5e10be
commit 30ac5fcb5e
4 changed files with 20 additions and 66 deletions

View File

@@ -12,11 +12,11 @@ export interface Step {
title?: string; title?: string;
content: React.ReactNode; content: React.ReactNode;
placement?: Placement; placement?: Placement;
hideBackButton?: boolean;
} }
export interface OnboardingFlowProps { export interface OnboardingFlowProps {
steps: Step[]; steps: Step[];
blacklistedStepIndices: number[];
stepIndex: number; stepIndex: number;
isRunning: boolean; isRunning: boolean;
onClose: () => void; onClose: () => void;
@@ -24,14 +24,6 @@ export interface OnboardingFlowProps {
} }
export class OnboardingFlow extends React.Component<OnboardingFlowProps> { export class OnboardingFlow extends React.Component<OnboardingFlowProps> {
public componentDidMount(): void {
this._setOnboardingStepBasedOnBlacklist(this.props.stepIndex);
}
public componentWillReceiveProps(nextProps: OnboardingFlowProps): void {
this._setOnboardingStepBasedOnBlacklist(nextProps.stepIndex);
}
public render(): React.ReactNode { public render(): React.ReactNode {
if (!this.props.isRunning) { if (!this.props.isRunning) {
return null; return null;
@@ -45,51 +37,6 @@ export class OnboardingFlow extends React.Component<OnboardingFlowProps> {
); );
} }
private _setOnboardingStepBasedOnBlacklist(nextIndex: number): void {
const blacklistedSteps = this.props.blacklistedStepIndices;
const newStepIndex = this._adjustedStepBasedOnBlacklist(
this.props.stepIndex,
nextIndex,
this.props.steps.length,
blacklistedSteps,
);
if (newStepIndex !== nextIndex) {
this.props.setOnboardingStep(newStepIndex);
}
}
private _adjustedStepBasedOnBlacklist(
currentStep: number,
nextStep: number,
totalSteps: number,
blacklistedSteps: number[],
): number {
if (!blacklistedSteps.includes(nextStep)) {
return nextStep;
}
let newStep = nextStep;
const op = nextStep >= currentStep ? _.add : _.subtract;
let didSearch = false;
while (blacklistedSteps.includes(newStep)) {
newStep = op(newStep, 1);
if (newStep < 0) {
if (didSearch) {
break;
}
newStep = totalSteps - 1;
didSearch = true;
}
if (newStep >= totalSteps) {
if (didSearch) {
break;
}
newStep = 0;
didSearch = true;
}
}
return newStep;
}
private _getElementForStep(): Element { private _getElementForStep(): Element {
return document.querySelector(this._getCurrentStep().target); return document.querySelector(this._getCurrentStep().target);
} }
@@ -112,6 +59,7 @@ export class OnboardingFlow extends React.Component<OnboardingFlowProps> {
title={step.title} title={step.title}
content={step.content} content={step.content}
isLastStep={isLastStep} isLastStep={isLastStep}
hideBackButton={step.hideBackButton}
onClose={this.props.onClose} onClose={this.props.onClose}
onClickNext={this._goToNextStep.bind(this)} onClickNext={this._goToNextStep.bind(this)}
onClickBack={this._goToPrevStep.bind(this)} onClickBack={this._goToPrevStep.bind(this)}

View File

@@ -11,6 +11,7 @@ export interface OnboardingTooltipProps {
onClose: () => void; onClose: () => void;
onClickNext: () => void; onClickNext: () => void;
onClickBack: () => void; onClickBack: () => void;
hideBackButton?: boolean;
} }
export const OnboardingTooltip: React.StatelessComponent<OnboardingTooltipProps> = (props: OnboardingTooltipProps) => ( export const OnboardingTooltip: React.StatelessComponent<OnboardingTooltipProps> = (props: OnboardingTooltipProps) => (
@@ -19,7 +20,7 @@ export const OnboardingTooltip: React.StatelessComponent<OnboardingTooltipProps>
<div className="flex flex-column"> <div className="flex flex-column">
{props.title} {props.title}
{props.content} {props.content}
<button onClick={props.onClickBack}>Back</button> {!props.hideBackButton && <button onClick={props.onClickBack}>Back</button>}
<button onClick={props.onClickNext}>Skip</button> <button onClick={props.onClickNext}>Skip</button>
<button onClick={props.onClose}>Close</button> <button onClick={props.onClose}>Close</button>
</div> </div>

View File

@@ -35,6 +35,7 @@ const steps: Step[] = [
content: content:
'In order to start trading on any 0x relayer in the 0x ecosystem, you need to complete two simple steps', 'In order to start trading on any 0x relayer in the 0x ecosystem, you need to complete two simple steps',
placement: 'right', placement: 'right',
hideBackButton: true,
}, },
{ {
target: '.wallet', target: '.wallet',
@@ -45,16 +46,15 @@ const steps: Step[] = [
export class PortalOnboardingFlow extends React.Component<PortalOnboardingFlowProps> { export class PortalOnboardingFlow extends React.Component<PortalOnboardingFlowProps> {
public componentDidMount(): void { public componentDidMount(): void {
this._autoStartOnboardingIfShould(); this._overrideOnboardingStateIfShould();
} }
public componentDidUpdate(): void { public componentDidUpdate(): void {
this._autoStartOnboardingIfShould(); this._overrideOnboardingStateIfShould();
} }
public render(): React.ReactNode { public render(): React.ReactNode {
return ( return (
<OnboardingFlow <OnboardingFlow
steps={steps} steps={steps}
blacklistedStepIndices={this._getBlacklistedStepIndices()}
stepIndex={this.props.stepIndex} stepIndex={this.props.stepIndex}
isRunning={this.props.isRunning} isRunning={this.props.isRunning}
onClose={this.props.setIsRunning.bind(this, false)} onClose={this.props.setIsRunning.bind(this, false)}
@@ -67,21 +67,28 @@ export class PortalOnboardingFlow extends React.Component<PortalOnboardingFlowPr
return !_.isEmpty(this.props.userAddress); return !_.isEmpty(this.props.userAddress);
} }
private _getBlacklistedStepIndices(): number[] { private _overrideOnboardingStateIfShould(): void {
this._autoStartOnboardingIfShould();
this._adjustStepIfShould();
}
private _adjustStepIfShould(): void {
if (this._isAddressAvailable()) { if (this._isAddressAvailable()) {
return [0, 1]; if (this.props.stepIndex < 2) {
this.props.setOnboardingStep(2);
}
return;
} }
const isExternallyInjected = utils.isExternallyInjected( const isExternallyInjected = utils.isExternallyInjected(
this.props.providerType, this.props.providerType,
this.props.injectedProviderName, this.props.injectedProviderName,
); );
const twoAndOn = _.range(2, steps.length);
if (isExternallyInjected) { if (isExternallyInjected) {
return [0].concat(twoAndOn); this.props.setOnboardingStep(1);
return;
} }
return twoAndOn; this.props.setOnboardingStep(0);
} }
private _autoStartOnboardingIfShould(): void { private _autoStartOnboardingIfShould(): void {
if (!this.props.isRunning && !this.props.hasBeenSeen && this.props.blockchainIsLoaded) { if (!this.props.isRunning && !this.props.hasBeenSeen && this.props.blockchainIsLoaded) {
this.props.setIsRunning(true); this.props.setIsRunning(true);

View File

@@ -34,8 +34,6 @@ const styles: Styles = {
backgroundColor: colors.white, backgroundColor: colors.white,
borderRadius: ROOT_HEIGHT, borderRadius: ROOT_HEIGHT,
boxShadow: `0px 4px 6px ${colors.walletBoxShadow}`, boxShadow: `0px 4px 6px ${colors.walletBoxShadow}`,
zIndex: zIndex.aboveOverlay,
position: 'relative',
}, },
}; };