diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/AvailableOrganizationController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/AvailableOrganizationController.java new file mode 100644 index 0000000..5123533 --- /dev/null +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/AvailableOrganizationController.java @@ -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 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 filterCharities(String query) { + List 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 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); + } +} diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/CharityPageController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/CharityPageController.java index 8eb853f..5e825e6 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/CharityPageController.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/CharityPageController.java @@ -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; diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/FrontpageController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/FrontpageController.java index f8ffc2a..103dfdb 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/FrontpageController.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/FrontpageController.java @@ -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; @@ -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 @@ -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); } /** @@ -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); } } + diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/LoaderScene.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/LoaderScene.java index 83ace1e..12f7f9b 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/LoaderScene.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/LoaderScene.java @@ -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 = @@ -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 = diff --git a/helpmehelpapplication/src/main/resources/fxml/availableOrganization.fxml b/helpmehelpapplication/src/main/resources/fxml/availableOrganization.fxml index 277b54a..b40acf9 100644 --- a/helpmehelpapplication/src/main/resources/fxml/availableOrganization.fxml +++ b/helpmehelpapplication/src/main/resources/fxml/availableOrganization.fxml @@ -6,44 +6,44 @@ - + - + + xmlns:fx="http://javafx.com/fxml/1" + fx:controller="ntnu.systemutvikling.team6.controller.AvailableOrganizationController"> - + - + - - + @@ -87,13 +87,11 @@ - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -