public IApuxActionResult Dispatch(string actionNamespace, ApuxAction <JToken> action)
        {
            // set app error as default action dispatch
            IApuxActionResult result = _appErrorActions.Dispatch(action);

            switch (actionNamespace)
            {
            // App error actions
            case Constants.ActionNamespace.APP:
            {
                result = _appErrorActions.Dispatch(action);
            }
            break;

            // Cart actions
            case Constants.ActionNamespace.CART:
            {
                result = _cartActionDispatcher.Dispatch(action);
            }
            break;

            // Product actions
            case Constants.ActionNamespace.PRODUCT:
            {
                result = _productActions.Dispatch(action);
            }
            break;
            }

            return(result);
        }
        public IApuxActionResult RootDispatch(IApuxAction actionRequest)
        {
            // Get action namespace
            var actionNamespace = actionRequest.Type.Split(Constants.ACTION_NAMESPACE_SEPERATOR)[0];
            // instantiate a new action for the request
            var action = new ApuxAction <JToken>(actionRequest.Type, JToken.FromObject(actionRequest.BasePayload));

            // dispatch to child dispatchers using namespace
            IApuxActionResult result = Dispatch(actionNamespace, action);

            // recursively dispatch any returned actions (allows chaining of dispatch actions)
            if (result.Dispatch)
            {
                result = RootDispatch(result);
            }

            return(result);
        }