Search code examples
bixbybixbystudio

How to conditional statements in action output in Bixby


Hi I want to go to another action by putting a conditional statement in the action output. What should I do?

For example

action (~~) {
  description (Validate items passed from javascript)
  collect {
    input (~~) {
      type (~~)
      min (~~) max (~~)
    }
  }

  type(~~~)

  output (items){
    on-empty(items.item1){ // if items.item1 is empty.
      replan { // go to case1Action.
            intent {
              goal : case1Action
              value : ~~~~~
            }
          }
    }else{ // else
      replan { // go to case2Action.
            intent {
              goal : case2Action
              value : ~~~~~
            }
          }
    }
  }

or I want to select the view according to the output value.(Actually this is the purpose of the question)

output (items){
    if(items.item1 == "goFirstCase"){
      // First case view
    }else{
      // Second case view
    }
  }

Solution

  • I think by "select a different view according to the output value" I presume you mean you want to change what shows on the screen? because a "view" actually is comprised of the dialog, layout, and conversation-drivers. https://bixbydevelopers.com/dev/docs/dev-guide/developers/building-views.views

    For majority of use cases, there's really only one result-view that will be used, and any of the three contents of a view can be changed based on your preferred conditions as the above answer suggests.

    within a view you can have the three different components defined with these three blocks: message for dialog, render for layout, and conversation-drivers

    using your example,

    //in a result-view
    message {
        if (items.item1 == "firstCase") {
            template-macro (firstCase-result-dialog) {//enter params}
        }
    }
    render {
        if (size(items) > 1) {
            list-of (items) {
                where-each (item) {
                    if (item == "firstCase") {
                        layout-match (item) {
                            mode (Summary)
                        }
                        // OR use layout-macro
                        layout-macro (firstCase-result-summary-thumbnail-card) {//enter params}
                    }
                }
            }
        }
    }
    

    similar conditional work can be done on conversation-drivers of course.