From 6058a512c4e2209fb3a246f90156c2f679f983d0 Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Wed, 2 Jun 2021 10:00:24 -0400 Subject: [PATCH] Move search suggestions to react component --- src/components/pages/SearchPage.js | 7 +++ src/components/search/SearchSuggestions.js | 69 ++++++++++++++++++++++ src/components/search/searchresults.js | 39 ------------ 3 files changed, 76 insertions(+), 39 deletions(-) create mode 100644 src/components/search/SearchSuggestions.js diff --git a/src/components/pages/SearchPage.js b/src/components/pages/SearchPage.js index 7730b96db..ea37bfec5 100644 --- a/src/components/pages/SearchPage.js +++ b/src/components/pages/SearchPage.js @@ -3,6 +3,7 @@ import React, { useState } from 'react'; import SearchFields from '../search/SearchFields'; import SearchResults from '../search/SearchResultsComponent'; +import SearchSuggestions from '../search/SearchSuggestions'; const SearchPage = ({ serverId, parentId, collectionType }) => { const [ query, setQuery ] = useState(null); @@ -10,6 +11,12 @@ const SearchPage = ({ serverId, parentId, collectionType }) => { return ( <> + {!query && + + } ({ + __html: `${name}` +}); + +const SearchSuggestions = ({ serverId, parentId }) => { + const [ suggestions, setSuggestions ] = useState([]); + + useEffect(() => { + const apiClient = ServerConnections.getApiClient(serverId); + + apiClient.getItems(apiClient.getCurrentUserId(), { + SortBy: 'IsFavoriteOrLiked,Random', + IncludeItemTypes: 'Movie,Series,MusicArtist', + Limit: 20, + Recursive: true, + ImageTypeLimit: 0, + EnableImages: false, + ParentId: parentId, + EnableTotalRecordCount: false + }).then(result => setSuggestions(result.Items)); + }, []); + + return ( +
+
+

+ {globalize.translate('Suggestions')} +

+
+ +
+ {suggestions.map(item => ( +
+ ))} +
+
+ ); +}; + +SearchSuggestions.propTypes = { + parentId: PropTypes.string, + serverId: PropTypes.string +}; + +export default SearchSuggestions; diff --git a/src/components/search/searchresults.js b/src/components/search/searchresults.js index f34a8292b..263a2b94c 100644 --- a/src/components/search/searchresults.js +++ b/src/components/search/searchresults.js @@ -1,49 +1,12 @@ import layoutManager from '../layoutManager'; import globalize from '../../scripts/globalize'; import cardBuilder from '../cardbuilder/cardBuilder'; -import { appRouter } from '../appRouter'; import '../../elements/emby-scroller/emby-scroller'; import '../../elements/emby-itemscontainer/emby-itemscontainer'; import '../../elements/emby-button/emby-button'; import ServerConnections from '../ServerConnections'; import template from './searchresults.template.html'; -function loadSuggestions(instance, context, apiClient) { - const options = { - - SortBy: 'IsFavoriteOrLiked,Random', - IncludeItemTypes: 'Movie,Series,MusicArtist', - Limit: 20, - Recursive: true, - ImageTypeLimit: 0, - EnableImages: false, - ParentId: instance.options.parentId, - EnableTotalRecordCount: false - }; - - apiClient.getItems(apiClient.getCurrentUserId(), options).then(function (result) { - if (instance.mode !== 'suggestions') { - result.Items = []; - } - - const html = result.Items.map(function (i) { - const href = appRouter.getRouteUrl(i); - - let itemHtml = ''; - return itemHtml; - }).join(''); - - const searchSuggestions = context.querySelector('.searchSuggestions'); - searchSuggestions.querySelector('.searchSuggestionsList').innerHTML = html; - - if (result.Items.length) { - searchSuggestions.classList.remove('hide'); - } - }); -} - function getSearchHints(instance, apiClient, query) { if (!query.searchTerm) { return Promise.resolve({ @@ -149,10 +112,8 @@ function getSearchHints(instance, apiClient, query) { function search(instance, apiClient, context, value) { if (value || layoutManager.tv) { instance.mode = 'search'; - context.querySelector('.searchSuggestions').classList.add('hide'); } else { instance.mode = 'suggestions'; - loadSuggestions(instance, context, apiClient); } if (instance.options.collectionType === 'livetv') {