Giter Club home page Giter Club logo

Comments (7)

adamstep avatar adamstep commented on July 20, 2024

Hi @terryatgithub , in your code sample what does hyperviewRef refer to? I'm guessing this may be causing problems.

As to your question about supporting question about supporting the Android back button:
I think what is needed is not a custom behavior, but a new trigger. The action you want (navigate) already exists, but the trigger (back-button-press) does not exist:

<behavior trigger="back-button-press" action="navigate" href="/home.xml" />

This trigger would need to be added to the HyperRef class, adding an event listener to componentDidMount and cleaning up in componentWillUnmount.

One thing I'm not sure about: currently the functionality of "back" is handled by react-navigation library. So it's possible that pressing back will always unwind the navigation stack, even if we add other behaviors on top of it. I'm not sure about the best way to address this. @flochtililoch or @ashwinibm any thoughts?

from hyperview.

terryatgithub avatar terryatgithub commented on July 20, 2024

hi @adamstep ,

  1. hyperviewRef is a standard react ref that refer to the Hyperview component,
    both two methods will fail the same error as above mentioned pic.
const androidBackBehavior = {
    action: 'android-back-action',
    callback: (element: Element, onUpdate: HvComponentOnUpdate, getRoot: HvGetRoot, updateRoot: HvUpdateRoot) => {
      const href = element?.getAttributeNode('action-href')?.nodeValue;
      const action = element?.getAttributeNode('action-action')?.nodeValue;

      // method 1: error
      hyperviewRef.current.onUpdate(href, action, {}, {}); 

     // method 2: the same error too.
      onUpdate(href, action, {}, {}); 

    }
  };                                                                                           
                                                                                               
 <Hyperview                                                                         
        ref={hyperviewRef} // <-------------------- _this is the ref_ 
        back={goBack}
        closeModal={closeModal}
        fetch={(input: any) => {
          return fetchWrapper(input, customHeaders);
        }}
        navigate={navigate}
        navigation={navigation}
        openModal={openModal}
        push={push}
        replace={navigation.replace}
        formatDate={formatDate}
        behaviors={[androidBackBehavior]}
 />
  1. will there be the same error if use trigger back-button-press?
  2. Is there specific schedule to implement this feature? It's a function that will affect the user experience flow.
    thanks a lot.

from hyperview.

adamstep avatar adamstep commented on July 20, 2024
  1. will there be the same error if use trigger back-button-press?

I don't think there will be an error in this case, because we don't need the ref passed to the behavior. I believe that's causing the error, the ref gets replaced after every update.

  1. Is there specific schedule to implement this feature? It's a function that will affect the user experience flow.

I will discuss it with the team tomorrow evening, will have a better idea at that time. Like I said, this implementation is a bit tricky since we need to account for the default behavior of react-navigation library.

from hyperview.

terryatgithub avatar terryatgithub commented on July 20, 2024

ok, i see. thank you so much, and looking forward to good news.

from hyperview.

ashwinibm avatar ashwinibm commented on July 20, 2024

Hi @terryatgithub , in your code sample what does hyperviewRef refer to? I'm guessing this may be causing problems.

As to your question about supporting question about supporting the Android back button:
I think what is needed is not a custom behavior, but a new trigger. The action you want (navigate) already exists, but the trigger (back-button-press) does not exist:

<behavior trigger="back-button-press" action="navigate" href="/home.xml" />

This trigger would need to be added to the HyperRef class, adding an event listener to componentDidMount and cleaning up in componentWillUnmount.

One thing I'm not sure about: currently the functionality of "back" is handled by react-navigation library. So it's possible that pressing back will always unwind the navigation stack, even if we add other behaviors on top of it. I'm not sure about the best way to address this. @flochtililoch or @ashwinibm any thoughts?

Perhaps we could use the BackHandler provided by react-native to do some custom handling? For example, to disable going back on some screen or going back to the root screen or navigate to a certain screen. May need to watch out for react-navigation behaviors like you mentioned.

from hyperview.

ashwinibm avatar ashwinibm commented on July 20, 2024

It's probably better to handle this at the app level. I've created an example on the demo app that creates a wrapper component where we can customize android back handling. It's a simplified example but one can adapt this to check other route params for example.
#272

from hyperview.

terryatgithub avatar terryatgithub commented on July 20, 2024

@ashwinibm it's a great idea, I will adapt it and try to see how to handle different navigation requirements in different pages.
thanks a lot.

from hyperview.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.