public async Task <StackLayout> AddBooksWithSpecial(string title, IOrderedEnumerable <WordbookImpressLibrary.Schemas.WordbookSuggestion.infoBooksBook> books, StackLayout stack = null, Action action = null)
        {
            try
            {
                var PreferPrintedBook = WordbookImpressLibrary.Storage.ConfigStorage.Content?.StorePreferPrintedBook ?? true;
                var w = books?.Select((b) => (b?.ids?.FirstOrDefault((id) => id.type == "ASIN" && id.binding == (PreferPrintedBook ? "printed_book" : "ebook")) ?? b?.ids?.FirstOrDefault((id) => id.type == "ASIN" && id.binding == (PreferPrintedBook ? "ebook" : "printed_book")))?.Value)?.Where((s) => s != null)?.ToArray();
                if (w?.Count() > 0)
                {
                    StoreItemsCardContentView storeItems;
                    stack = stack ?? AddFrame();
                    stack.Children.Add(storeItems = new StoreItemsCardContentView(title));

                    var res = await storeItems.StoreItems.AddASIN(w.ToArray());

                    if (action != null)
                    {
                        storeItems.ActionMore = () => { try { action(); } catch { } };
                    }
                    else if (res?.Items?.MoreSearchResultsUrl != null)
                    {
                        storeItems.ActionMore = () => { try { Device.OpenUri(new Uri(res?.Items?.MoreSearchResultsUrl)); } catch { } };
                    }
                    return(stack);
                }
                else
                {
                    return(null);
                }
            }
            catch { return(null); }
        }
        public async Task <StackLayout> AddSearchResult(string title, string word, StackLayout stack = null)
        {
            try
            {
                StoreItemsCardContentView storeItems;
                stack = stack ?? AddFrame();
                stack.Children.Add(storeItems = new StoreItemsCardContentView(title));

                var res = await storeItems.StoreItems.AddSearchResult(word, Nager.AmazonProductAdvertising.Model.AmazonSearchIndex.Books);

                if (res?.Items?.MoreSearchResultsUrl != null)
                {
                    storeItems.ActionMore = () => { try { Device.OpenUri(new Uri(res?.Items?.MoreSearchResultsUrl)); } catch { } };
                }
                return(stack);
            }
            catch { return(null); }
        }
        public async Task <StackLayout> AddRelated(Func <Nager.AmazonProductAdvertising.Model.AmazonItemResponse, string> titleFunc, string ASIN, StackLayout stack = null)
        {
            try
            {
                StoreItemsCardContentView storeItems;
                stack = stack ?? AddFrame();
                stack.Children.Add(storeItems = new StoreItemsCardContentView());

                var res = await storeItems.StoreItems.AddRelaed(ASIN);

                storeItems.ItemsTitle = titleFunc?.Invoke(res.Item1) ?? "";
                if (res.Item2?.Items?.MoreSearchResultsUrl != null)
                {
                    storeItems.ActionMore = () => { try { Device.OpenUri(new Uri(res.Item2?.Items?.MoreSearchResultsUrl)); } catch { } };
                }
                return(stack);
            }
            catch { return(null); }
        }