Type in the search-bar and the remote package list reacts.

It doesn't do any actual searching yet though. Also switching between page doesn't work like it's supposed to yet (and probalby more of that sort of cases).

part of CURA-8559
This commit is contained in:
Remco Burema 2021-11-12 14:01:05 +01:00
parent bc0b7301e5
commit d7ac307ace
No known key found for this signature in database
GPG Key ID: 215C49431D43F98C
2 changed files with 30 additions and 3 deletions

View File

@ -32,6 +32,7 @@ class RemotePackageList(PackageList):
self._scope = JsonDecoratorScope(UltimakerCloudScope(CuraApplication.getInstance())) self._scope = JsonDecoratorScope(UltimakerCloudScope(CuraApplication.getInstance()))
self._package_type_filter = "" self._package_type_filter = ""
self._search_string = ""
self._request_url = self._initialRequestUrl() self._request_url = self._initialRequestUrl()
self.isLoadingChanged.emit() self.isLoadingChanged.emit()
@ -69,6 +70,7 @@ class RemotePackageList(PackageList):
self._request_url = self._initialRequestUrl() self._request_url = self._initialRequestUrl()
packageTypeFilterChanged = pyqtSignal() packageTypeFilterChanged = pyqtSignal()
searchStringChanged = pyqtSignal()
def setPackageTypeFilter(self, new_filter: str) -> None: def setPackageTypeFilter(self, new_filter: str) -> None:
if new_filter != self._package_type_filter: if new_filter != self._package_type_filter:
@ -76,6 +78,12 @@ class RemotePackageList(PackageList):
self.reset() self.reset()
self.packageTypeFilterChanged.emit() self.packageTypeFilterChanged.emit()
def setSearchString(self, new_search: str) -> None:
if new_search != self._search_string:
self._search_string = new_search
self.reset()
self.searchStringChanged.emit()
@pyqtProperty(str, fset = setPackageTypeFilter, notify = packageTypeFilterChanged) @pyqtProperty(str, fset = setPackageTypeFilter, notify = packageTypeFilterChanged)
def packageTypeFilter(self) -> str: def packageTypeFilter(self) -> str:
""" """
@ -84,14 +92,26 @@ class RemotePackageList(PackageList):
""" """
return self._package_type_filter return self._package_type_filter
@pyqtProperty(str, fset = setSearchString, notify = searchStringChanged)
def searchString(self) -> str:
"""
Get the string the user is currently searching for within the packages, or an empty string if no extra search
filter has to be applied. Does not override package-type filter!
:return: String the user is searching for. Empty denotes 'no search filter'.
"""
return self._search_string
def _initialRequestUrl(self) -> str: def _initialRequestUrl(self) -> str:
""" """
Get the URL to request the first paginated page with. Get the URL to request the first paginated page with.
:return: A URL to request. :return: A URL to request.
""" """
request_url = f"{Marketplace.PACKAGES_URL}?limit={self.ITEMS_PER_PAGE}"
if self._package_type_filter != "": if self._package_type_filter != "":
return f"{Marketplace.PACKAGES_URL}?package_type={self._package_type_filter}&limit={self.ITEMS_PER_PAGE}" request_url += f"&package_type={self._package_type_filter}"
return f"{Marketplace.PACKAGES_URL}?limit={self.ITEMS_PER_PAGE}" if self._search_string != "":
request_url += f"" # TODO
return request_url
def _parseResponse(self, reply: "QNetworkReply") -> None: def _parseResponse(self, reply: "QNetworkReply") -> None:
""" """

View File

@ -14,6 +14,8 @@ Window
id: marketplaceDialog id: marketplaceDialog
property variant catalog: UM.I18nCatalog { name: "cura" } property variant catalog: UM.I18nCatalog { name: "cura" }
signal searchStringChanged(string new_search)
minimumWidth: UM.Theme.getSize("modal_window_minimum").width minimumWidth: UM.Theme.getSize("modal_window_minimum").width
minimumHeight: UM.Theme.getSize("modal_window_minimum").height minimumHeight: UM.Theme.getSize("modal_window_minimum").height
width: minimumWidth width: minimumWidth
@ -92,7 +94,7 @@ Window
id: searchBar id: searchBar
Layout.preferredHeight: parent.height Layout.preferredHeight: parent.height
Layout.fillWidth: true Layout.fillWidth: true
//onTextEdited: // TODO! onTextEdited: marketplaceDialog.searchStringChanged(text)
} }
// Page selection. // Page selection.
@ -168,6 +170,11 @@ Window
function onLoaded() function onLoaded()
{ {
pageTitle.text = content.item.pageTitle pageTitle.text = content.item.pageTitle
searchStringChanged.connect(onSearchStringChanged)
}
function onSearchStringChanged(new_search)
{
content.item.model.searchString = new_search
} }
} }
} }