+ * Sets up initial model values and activates listener.
*
*/
public void initController() {
setupPlayerInfo();
-
+ model.searchQueryProperty().addListener((obs) -> handleSearchQuery());
}
/**
@@ -192,16 +194,42 @@ public void setupPlayerInfo() {
* Sets share list model to found after name.
*
*
- * @param query - Input in searchbar.
*/
- public void handleSearchQuery(String query) {
- if (query == null || query.isBlank()) {
+ public void handleSearchQuery() {
+ if (model.searchQueryProperty().get() == null || model.searchQueryProperty().get().isBlank()) {
+ setShareModel(sharesSorted); // Get back to "no search"
+ return;
+ }
+
+ List sharesFound = sharesSorted.stream()
+ .filter(share -> share.getStock().toString().toLowerCase()
+ .contains(model.searchQueryProperty().get().toLowerCase()))
+ .toList();
+
+ setShareModel(sharesFound);
+
+ }
+
+ /**
+ * Overloaded method for handeling searchbar search.
+ *
+ *
+ * Sets share list model to found after name.
+ *
+ *
+ * @param initialSearch - initial search input.
+ *
+ */
+ public void handleSearchQuery(String initialSearch) {
+ if (initialSearch == null || initialSearch.isBlank()) {
setShareModel(sharesSorted); // Get back to "no search"
return;
}
List sharesFound = sharesSorted.stream()
- .filter(share -> share.getStock().toString().toLowerCase().contains(query.toLowerCase())).toList();
+ .filter(share -> share.getStock().toString().toLowerCase()
+ .contains(initialSearch.toLowerCase()))
+ .toList();
setShareModel(sharesFound);
diff --git a/src/main/java/edu/ntnu/idi/idatt/view/primary/portfolio/PortfolioModel.java b/src/main/java/edu/ntnu/idi/idatt/view/primary/portfolio/PortfolioModel.java
index 27a13eb..1ea8088 100644
--- a/src/main/java/edu/ntnu/idi/idatt/view/primary/portfolio/PortfolioModel.java
+++ b/src/main/java/edu/ntnu/idi/idatt/view/primary/portfolio/PortfolioModel.java
@@ -4,6 +4,7 @@
import edu.ntnu.idi.idatt.view.components.elements.ShareComponent;
import edu.ntnu.idi.idatt.view.primary.portfolio.viewmodel.PlayerInfoModel;
import javafx.beans.property.SimpleObjectProperty;
+import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Node;
@@ -15,6 +16,7 @@
public class PortfolioModel implements Model {
private final ObservableList shareList = FXCollections.observableArrayList();
+ private final SimpleStringProperty searchQueryProperty = new SimpleStringProperty();
private final PlayerInfoModel playerInfoModel = new PlayerInfoModel();
/**
@@ -26,6 +28,15 @@ public ObservableList getShareList() {
return shareList;
}
+ /**
+ * Getter for search query property.
+ *
+ * @return SimpleStringProperty;
+ */
+ public SimpleStringProperty searchQueryProperty() {
+ return searchQueryProperty;
+ }
+
/**
* Getter for the playerInfoModel.
*
diff --git a/src/main/java/edu/ntnu/idi/idatt/view/primary/portfolio/PortfolioView.java b/src/main/java/edu/ntnu/idi/idatt/view/primary/portfolio/PortfolioView.java
index e987722..132dc30 100644
--- a/src/main/java/edu/ntnu/idi/idatt/view/primary/portfolio/PortfolioView.java
+++ b/src/main/java/edu/ntnu/idi/idatt/view/primary/portfolio/PortfolioView.java
@@ -8,6 +8,7 @@
import edu.ntnu.idi.idatt.view.primary.portfolio.sections.PlayerInfoSection;
import edu.ntnu.idi.idatt.view.primary.portfolio.viewmodel.PlayerInfoModel;
import javafx.beans.binding.Bindings;
+import javafx.beans.property.SimpleStringProperty;
import javafx.geometry.Insets;
import javafx.scene.Parent;
import javafx.scene.control.ScrollPane;
@@ -21,8 +22,8 @@
*/
public class PortfolioView extends AbstractViewUI {
- Consumer searchQueryHandler;
- Consumer sortHandle;
+ private SimpleStringProperty searchQueryProperty;
+ private Consumer sortHandle;
private VBox shareList;
private PlayerInfoSection playerInfoSection;
@@ -70,7 +71,7 @@ public Parent createNavigation() {
@Override
public Parent createHeader() {
return UIFactory.createHeader("Search after holdings..",
- query -> searchQueryHandler.accept(query),
+ queryProperty -> searchQueryProperty = queryProperty,
List.of(
"Oldest first",
"Newest first",
@@ -101,7 +102,7 @@ public Parent createToolbar() {
@Override
public Parent createMenu() {
return UIFactory.createMenu("Account",
- List.of(" • Portfolio", " • Transactions"),
+ List.of("Portfolio", "Transactions"),
() -> {
},
() -> SceneManager.switchTo(SceneFactory.createTransactionView()));
@@ -117,6 +118,7 @@ public Parent createMenu() {
*/
public void setModel(PortfolioModel model) {
Bindings.bindContent(shareList.getChildren(), model.getShareList());
+ model.searchQueryProperty().bind(searchQueryProperty);
setPlayerInfoSectionModel(model.playerInfoModel());
@@ -152,7 +154,6 @@ public void setPlayerInfoSectionModel(PlayerInfoModel model) {
* @param controller - PortfolioController instance.
*/
public void setController(PortfolioController controller) {
- searchQueryHandler = (query) -> controller.handleSearchQuery(query);
sortHandle = (sortAction) -> controller.sortSharesBy(sortAction);
playerInfoSection.finishButtonClicked(() -> controller.eventFinishGame());
}
diff --git a/src/main/java/edu/ntnu/idi/idatt/view/primary/portfolio/sections/PlayerInfoSection.java b/src/main/java/edu/ntnu/idi/idatt/view/primary/portfolio/sections/PlayerInfoSection.java
index 1331a6c..4a2347a 100644
--- a/src/main/java/edu/ntnu/idi/idatt/view/primary/portfolio/sections/PlayerInfoSection.java
+++ b/src/main/java/edu/ntnu/idi/idatt/view/primary/portfolio/sections/PlayerInfoSection.java
@@ -40,6 +40,10 @@ public PlayerInfoSection() {
List