Skip to content

Commit

Permalink
feature: modified searchbar
Browse files Browse the repository at this point in the history
  • Loading branch information
cathrkri committed Mar 27, 2026
1 parent e2e1796 commit 81a8e61
Show file tree
Hide file tree
Showing 6 changed files with 159 additions and 490 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
package ntnu.systemutvikling.team6.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.control.TextField;
import javafx.scene.layout.FlowPane;
import ntnu.systemutvikling.team6.database.DatabaseManager;
import ntnu.systemutvikling.team6.models.Charity;
import ntnu.systemutvikling.team6.models.CharityRegistry;

public class AvailableOrganizationController {

@FXML private TextField searchField;
@FXML private FlowPane cardsContainer;

private Charity charity;
private List<Charity> allCharities;

@FXML
public void initialize() {
DatabaseManager db = new DatabaseManager();
CharityRegistry charities = db.getCharitiesFromDB();
allCharities = charities.getAllCharities();

// Start empty and show matching cards when the user types in the search field.
cardsContainer.getChildren().clear();

searchField
.textProperty()
.addListener(
(observable, oldValue, newValue) -> displayCharities(filterCharities(newValue)));
}

private List<Charity> filterCharities(String query) {
List<Charity> matches = new ArrayList<>();

query = query.toLowerCase().trim();

if (query.isEmpty()) {
return matches;
}

for (Charity charity : allCharities) {
String name = charity.getName().toLowerCase();
String description = charity.getDescription().toLowerCase();

if (name.contains(query) || description.contains(query)) {
matches.add(charity);
}
}
return matches;
}

private void displayCharities(List<Charity> charities) {
cardsContainer.getChildren().clear();

for (Charity charity : charities) {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/organizationCard.fxml"));
Parent card = loader.load();

OrganizationCardController cardController = loader.getController();
cardController.setOrganization(charity);

cardsContainer.getChildren().add(card);
} catch (IOException e) {
throw new RuntimeException("Could not load organization card.", e);
}
}
}

/**
* The method initialize the search in searchbar.
* @param query
*/
@FXML
public void setInitialSearch(String query) {
if (query == null || query.isBlank()) {
return;
}

searchField.setText(query);
}

/**
* This method is used to switch to the front page.
*
* @param event action event from button click
*/
@FXML
public void switchToFrontPage(ActionEvent event) {
LoaderScene.LoadScene("FrontPage", event, charity);
}

/**
* This method is used to switch to the charity page for the selected charity.
*
* @param event action event from button click
*/
public void switchToCharityPage(ActionEvent event) {
LoaderScene.LoadScene("CharityPage", event, charity);
}

/**
* This method is used to switch to the donation page.
*
* @param event action event from button click
*/
@FXML
public void switchToDonationPage(ActionEvent event) {
LoaderScene.LoadScene("DonationPage", event, charity);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
* to donate to it. It also has a button to return to the front page.
*/
public class CharityPageController {

@FXML private Label CharityDescription;

@FXML private Label CharityName;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.FlowPane;
import ntnu.systemutvikling.team6.database.DatabaseManager;
import ntnu.systemutvikling.team6.models.Charity;
Expand Down Expand Up @@ -35,6 +36,9 @@ public class FrontpageController {

@FXML private Label PreApproved_Percentage;

@FXML private TextField frontSearchField;


/**
* Initialize method for the front page. This method is called when the front page is loaded. It
* retrieves the list of charities and donations from the database. The list of charities is
Expand Down Expand Up @@ -95,7 +99,7 @@ public void initialize() {
* @param event
*/
public void switchToCharityPage(ActionEvent event) {
LoaderScene.LoadScene("CharityPage", event, featuredCharity);
LoaderScene.LoadScene("CharityPage", event, featuredCharity, null);
}

/**
Expand All @@ -104,6 +108,18 @@ public void switchToCharityPage(ActionEvent event) {
* @param event
*/
public void switchToDonationPage(ActionEvent event) {
LoaderScene.LoadScene("DonationPage", event, featuredCharity);
LoaderScene.LoadScene("DonationPage", event, featuredCharity, null);
}

@FXML
public void handleFrontSearch(ActionEvent event) {
String query = frontSearchField.getText().trim();

if (query.isEmpty()) {
return;
}

LoaderScene.LoadScene("availableOrganization", event, null, query);
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public class LoaderScene {
* @param event
* @param charity
*/
public static void LoadScene(String sceneName, ActionEvent event, Charity charity) {
public static void LoadScene(String sceneName, ActionEvent event, Charity charity, String query) {
try {
System.out.println(HmHApplication.class.getResource("/fxml/" + sceneName + ".fxml"));
FXMLLoader fxmlLoader =
Expand All @@ -45,6 +45,9 @@ public static void LoadScene(String sceneName, ActionEvent event, Charity charit
if (controller instanceof DonationPageController donationController) {
donationController.setCharity(charity);
}
if (controller instanceof AvailableOrganizationController availableOrganizationController) {
availableOrganizationController.setInitialSearch(query);
}

Stage stage = (Stage) ((Node) event.getSource()).getScene().getWindow();
Image icon =
Expand Down
Loading

0 comments on commit 81a8e61

Please sign in to comment.