/// <summary>
        /// Flyout Facets
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="containerSize"></param>
        /// <returns></returns>
        public ActionResult FlyoutFacets(EntityModel entity, int containerSize = 0)
        {
            SetupViewData(entity, containerSize);
            FacetsWidget widget = (FacetsWidget)entity;

            if (widget.CategoryReference != null)
            {
                widget.CategoryReference.Category = ResolveCategory(widget.CategoryReference);
                if (widget.CategoryReference.Category != null)
                {
                    var cachedData = this.GetCachedFlyoutData(widget.CategoryReference.Category.Id);
                    if (cachedData == null)
                    {
                        var queryResult = ECommerceContext.Client.QueryService.Query(
                            new Api.Model.Query
                        {
                            Category = widget.CategoryReference.Category,
                            ViewType = Api.Model.ViewType.FLYOUT
                        });

                        cachedData = new FlyoutData
                        {
                            FacetGroups = queryResult.FacetGroups.ToList(),
                            Promotions  = queryResult.Promotions.ToList()
                        };
                        this.CacheFlyoutData(widget.CategoryReference.Category.Id, cachedData);
                    }
                    widget.FacetGroups       = cachedData.FacetGroups;
                    widget.RelatedPromotions = cachedData.Promotions;
                }
            }

            return(View(entity.MvcData.ViewName, entity));
        }
 private void CacheFlyoutData(string categoryId, FlyoutData flyoutData)
 {
     // Default cache flyout data in 1 hour. TODO: Have this configurable
     //
     this.flyoutCache.Add(categoryId, flyoutData, DateTimeOffset.Now.AddHours(1.0));
 }