MantraJS retrieve data from actions

Hi,
Is there any way of retrieving data from actions, which calls and retrieves data from Meteor methods?

Regards,

as with any flux-like architecture, your actions should change some kind of state. in mantra / meteor the state is usually in minimongo-collections or in LocalState (a reactive dictionary).

so your methods can return data, but you would usually store that into localState or in a meteor-collection.

if you want to bypass this principle, you can have your action receive a callback-function. The action then calls the method and passes the result to the passed callback-function.

@macrozone thank you for your reply.
I am trying to follow that principle and storing my data into LocalState as below:

 applyFilter({Meteor, LocalState,FlowRouter},survey_id,filter){
        Meteor.call('_answers.getAggregateData',survey_id,filter,(error,responce)=>{
            if(error){
                Bert.alert(error.reason,'danger');
            }else{

                return LocalState.set('graph_data',responce);
            }
        });
    },

And reading that data from LocalState in my composer. But I am not able to access this data in my component.
Below is my composer.

import {useDeps} from 'react-simple-di';
import {composeWithTracker, composeAll} from 'react-komposer';


export const composer = ({context, clearErrors,permission_denied,_id}, onData) => {
  const {Meteor, Collections, LocalState} = context();
  const error = LocalState.get('SURVEY_ERROR');
  const loggedIn = Meteor.user();
  const graph_data=LocalState.get('graph_data');
  
  if (Meteor.subscribe('_surveys.single',_id).ready()) {
    
      const survey = Collections.surveys.findOne({_id:_id});
      const answerCount = survey.answerCount;

      Meteor.call('_answers.getAggregateData',_id,null,(error,responce) => {
      if ( error ) {
        Bert.alert( error.reason );
      } else {
       for(var i=0;i<responce.length;i++){
              responce[i]._id.seq=i;
      }
       onData(null, {responce,answerCount,survey,graph_data});  
    }
  });
  }     
  return clearErrors;
};

export const depsMapper = (context, actions) => ({
  clearErrors: actions._survey.clearErrors,
  applyFilter: actions._survey.applyFilter,
  permission_denied: actions._survey.permissionDenied,
  context: () => context
});

export default (component) => composeAll(
    composeWithTracker(composer),
    useDeps(depsMapper)
  )(component);

What am I missing?

Regards.

in your composer you now also call the meteor-method, is that intended?

also log what graph_data is when you call your action (with the method).

does it change? Maybe add debugger statements.

Yes it is because aggregate function in mongo is not reactive, so I am achieving it through methods.
In actions I am calling same method but with some filters. As a result I would like to render same component with different data.

According to my logs graph_data is being set in first click but component is getting data in next click. I can not understand why it is happening so.