react-native-copilot icon indicating copy to clipboard operation
react-native-copilot copied to clipboard

Tutorial does not show, this.props.start is undefined.

Open hoanghcmus opened this issue 6 years ago • 5 comments

Current Behavior Tutorial does not show when involve this.props.start()

Input Code

import React, { Component } from 'react';

...
...

import {Spinner, Label, View, StyleProvider, Container, List, ListItem, Left, Thumbnail, Right, Header, Content, Form, Footer, FooterTab, Button, Icon, Badge, Card, CardItem, Text, Body } from 'native-base';

...
...

// TODO: IMport Copilot module
import { copilot, walkthroughable, CopilotStep } from '@okgrow/react-native-copilot';

// TODO: Declare walkthrouh element
const CopilotText = walkthroughable(Text);

class Annoucement extends Component {
  static navigationOptions = {
    title: 'Annoucement',
    drawerIcon: (
      <Icon type='Ionicons' name='md-home' style={globalStyles.sideMenuIcon}/>
    )
  }

  constructor(props) {
    super(props);
    this.state = { 
      ...
      ...
    };
  }

  
....
....


handleStartButtonPress() {
  console.log(`hcmus 2: Props: ${JSON.stringify(this.props.start)}`);  // TODO: Alway undefined
}

componentDidMount() {
  console.log(`hcmus 1: Props: ${JSON.stringify(this.props.start)}`); // TODO: Alway undefined
  this.props.copilotEvents.on('stepChange', this.handleStepChange);

  // TODO: Start tutorial --> NO thing happen. Even if invole props.start fron a button's click even, still not show tutorial, nothing happen
  this.props.start();
}

handleStepChange = (step) => {
  console.log(`hcmus 3: Current step is: ${step.name}`);
}


render() {
    return (

      <StyleProvider style={getTheme(platform)}>
      <Root>
      {/* <CopilotStep text="This is a hello world example!" order={1} name="hello">
          <CopilotText onPress={() => this.handleStartButtonPress()}>Hello world!</CopilotText>
        </CopilotStep> */}
      <Container>
      <CustomHeader title='Dashboard'/>

      // TODO: Here is place define step
      <CopilotStep text="This is a hello_222 world example!" order={2} name="hello_222">
          <CopilotText onPress={() => this.handleStartButtonPress()}>Hello world 2222!</CopilotText>
      </CopilotStep>
     
     ...
     ... 

      </Container>
      {this.state.loading &&
        <View style={globalStyles.loading}>
          <Spinner color='white' />
        </View>
      }
      </Root>
      </StyleProvider>
    );
  }
}

// TODO: export copilot
export default copilot({
  animated: true, // Can be true or false
  overlay: 'svg', // Can be either view or svg
})(Annoucement);

Expected behavior/code The tutorial should be shown when invoking the this.props.start()

Environment

  • Device: Nexus 5X - Android SDK Simulator
  • OS: Android 9
  • react-native-copilot: ^2.4.1
  • react-native: 0.55.4
  • react-native-svg: ^6.3.1
  • react-navigation: ^2.11.2

Possible Solution It could be related to react-navigation, I think, but not sure,

Additional context/Screenshots screenshot_1545207647

hoanghcmus avatar Dec 19 '18 08:12 hoanghcmus

I'm using plain old react-native init and copilot is not showing for me. I'm also using react-navigation.

export-mike avatar Jan 03 '19 19:01 export-mike

As I see @hoanghcmus is using native-base UI framework.. this might be the problem ?

DimiTech avatar Jan 10 '19 15:01 DimiTech

@hoanghcmus Try wrapping a react-native View component and with walkthroughable and then use that walkthroughable View to wrap your desired elements.

DimiTech avatar Jan 10 '19 16:01 DimiTech

@DusanDimitric I am also using native-base and I tried your suggestion, and there was not any progress, It works in my main screen, but it does not work in others :|

Arya-Aghaei avatar Jul 21 '19 07:07 Arya-Aghaei

Instead of const CopilotText = walkthroughable(Text); do const CopilotText = walkthroughable(View);

rgordon95 avatar Sep 11 '19 14:09 rgordon95