diff --git a/src/main/java/edu/group5/app/control/LoginController.java b/src/main/java/edu/group5/app/control/LoginController.java index 59a1785..ae9d22e 100644 --- a/src/main/java/edu/group5/app/control/LoginController.java +++ b/src/main/java/edu/group5/app/control/LoginController.java @@ -4,7 +4,7 @@ import edu.group5.app.model.user.User; import edu.group5.app.model.user.UserService; import edu.group5.app.view.loginpage.LoginPageView; -import edu.group5.app.view.loginpage.SignInPageView; +import edu.group5.app.view.loginpage.SignUpPageView; import javafx.scene.control.Alert; import javafx.scene.control.Button; import javafx.scene.control.ButtonType; @@ -24,7 +24,7 @@ public LoginController(AppState appState, NavigationController nav, UserService this.userService = userService; } - public void handleSignIn(SignInPageView view, String firstName, String lastName, String email, char[] passwordChars) { + public void handleSignUp(SignUpPageView view, String firstName, String lastName, String email, char[] passwordChars) { if (firstName == null || firstName.trim().isEmpty() || lastName == null || lastName.trim().isEmpty() || email == null || email.trim().isEmpty() || diff --git a/src/main/java/edu/group5/app/control/NavigationController.java b/src/main/java/edu/group5/app/control/NavigationController.java index ddab7e2..1b794d5 100644 --- a/src/main/java/edu/group5/app/control/NavigationController.java +++ b/src/main/java/edu/group5/app/control/NavigationController.java @@ -11,7 +11,7 @@ import edu.group5.app.view.homepage.HomePageView; import edu.group5.app.view.loginpage.LoginHeader; import edu.group5.app.view.loginpage.LoginPageView; -import edu.group5.app.view.loginpage.SignInPageView; +import edu.group5.app.view.loginpage.SignUpPageView; import edu.group5.app.view.organizationpage.OrganizationPageView; import edu.group5.app.view.userpage.UserPageView; import javafx.scene.layout.BorderPane; @@ -49,9 +49,9 @@ public void showLoginPage() { root.setCenter(new LoginPageView(appState, this, loginController)); } - public void showSignInPage() { + public void showSignUpPage() { root.setTop(loginHeader); - root.setCenter(new SignInPageView(appState, this, loginController)); + root.setCenter(new SignUpPageView(appState, this, loginController)); } public void showPaymentCompletePage() { diff --git a/src/main/java/edu/group5/app/view/Header.java b/src/main/java/edu/group5/app/view/Header.java index 35472e1..6bc6133 100644 --- a/src/main/java/edu/group5/app/view/Header.java +++ b/src/main/java/edu/group5/app/view/Header.java @@ -7,6 +7,14 @@ import javafx.scene.image.ImageView; import javafx.scene.layout.*; +/** + * A main header for the app. + * + *
The header consists of a logo button to homepage, + * a navigation bar with buttons to home page, causes page, + * and about us page. The header also has a profile button + * in the upper right corner.
+ */ public class Header extends BorderPane { private final NavigationController controller; diff --git a/src/main/java/edu/group5/app/view/causespage/CausesPageView.java b/src/main/java/edu/group5/app/view/causespage/CausesPageView.java index a2f3374..f6eb2b5 100644 --- a/src/main/java/edu/group5/app/view/causespage/CausesPageView.java +++ b/src/main/java/edu/group5/app/view/causespage/CausesPageView.java @@ -15,6 +15,23 @@ import java.util.stream.Collectors; import java.util.Comparator; +/** + * A view for the causes page. + * + *This page allows users to browse and search + * for organizations they may want to donate to. + * Organizations are displayed in a grid layout, + * with four organizations per row. Each organization + * is represented as a clickable card containing its name and logo, + * which navigates to the organization's detail page.
+ * + *The page includes a search field that filters the + * displayed organizations based on user input.
+ * + *Logos are fetched asynchronously, and a loading indicator + * is shown while the data is being retrieved. If a logo cannot be loaded, + * a fallback "no image" is displayed.
+ */ public class CausesPageView extends BorderPane { private final AppState appState; private final NavigationController nav; diff --git a/src/main/java/edu/group5/app/view/causespage/OrganizationCard.java b/src/main/java/edu/group5/app/view/causespage/OrganizationCard.java index 2114d17..2ca30bb 100644 --- a/src/main/java/edu/group5/app/view/causespage/OrganizationCard.java +++ b/src/main/java/edu/group5/app/view/causespage/OrganizationCard.java @@ -10,6 +10,16 @@ import javafx.scene.layout.VBox; import javafx.scene.text.Text; +/** + * OrganizationCard represent a single organization card + * in the causes page. + * + *The card displays the organization's logo, name, and verification + * checkmark. If no logo is available, a fallback text ("No image") is shown.
+ * + *The card is clickable. When pressed it navigates + * to the organization's detail page.
+ */ public class OrganizationCard extends VBox { private final AppState appState; private final Organization organization; diff --git a/src/main/java/edu/group5/app/view/donationpage/DonationPageView.java b/src/main/java/edu/group5/app/view/donationpage/DonationPageView.java index 0c5c6c3..9444421 100644 --- a/src/main/java/edu/group5/app/view/donationpage/DonationPageView.java +++ b/src/main/java/edu/group5/app/view/donationpage/DonationPageView.java @@ -18,6 +18,14 @@ import java.math.BigDecimal; import java.util.Objects; +/** + * A view for the Donation Page. + * In the donation page a user can donate a chosen amount + * to the organization they have chosen to donate to. + * + *The donation page consists of payment amount buttons, + * payment method buttons, donation button, and a back to organization page button.
+ */ public class DonationPageView extends BorderPane { private final AppState appState; private final NavigationController nav; diff --git a/src/main/java/edu/group5/app/view/donationpage/PaymentCompletePageView.java b/src/main/java/edu/group5/app/view/donationpage/PaymentCompletePageView.java index fcefe97..e20cfee 100644 --- a/src/main/java/edu/group5/app/view/donationpage/PaymentCompletePageView.java +++ b/src/main/java/edu/group5/app/view/donationpage/PaymentCompletePageView.java @@ -11,6 +11,13 @@ import java.util.Objects; +/** + * A view for the payment complete page. + * When a user have donated an amount, this page opens up. + * + *The page consist of an image that says "Tank You For The Donation", + * and a "back to home" button at the bottom center.
+ */ public class PaymentCompletePageView extends BorderPane { private final NavigationController nav; diff --git a/src/main/java/edu/group5/app/view/homepage/HomePageView.java b/src/main/java/edu/group5/app/view/homepage/HomePageView.java index b40299a..c24b89b 100644 --- a/src/main/java/edu/group5/app/view/homepage/HomePageView.java +++ b/src/main/java/edu/group5/app/view/homepage/HomePageView.java @@ -10,6 +10,14 @@ import javafx.scene.layout.VBox; import javafx.scene.text.Text; +/** + * A view for the homepage. + * In the home page a user can navigate to pages in the heading, + * and they can press the "donate to a cause" button or the "about us" button. + * + *The homepage includes a heading, a "donate to a cause" button, + * and an about us button. The page also has a charity image at the bottom.
+ */ public class HomePageView extends BorderPane { private final AppState appState; private final NavigationController nav; diff --git a/src/main/java/edu/group5/app/view/loginpage/LoginHeader.java b/src/main/java/edu/group5/app/view/loginpage/LoginHeader.java index ad6a412..b5f4296 100644 --- a/src/main/java/edu/group5/app/view/loginpage/LoginHeader.java +++ b/src/main/java/edu/group5/app/view/loginpage/LoginHeader.java @@ -6,6 +6,10 @@ import javafx.scene.layout.BorderPane; import javafx.scene.layout.StackPane; +/** + * A header for the login page and for the SignIn page. + *The header includes a logo of the Help Me Help app.
+ */ public class LoginHeader extends BorderPane { public LoginHeader() { diff --git a/src/main/java/edu/group5/app/view/loginpage/LoginPageView.java b/src/main/java/edu/group5/app/view/loginpage/LoginPageView.java index af972e0..3fb9bb7 100644 --- a/src/main/java/edu/group5/app/view/loginpage/LoginPageView.java +++ b/src/main/java/edu/group5/app/view/loginpage/LoginPageView.java @@ -12,6 +12,14 @@ import java.util.Objects; +/** + * A view for the login page. + * A user can login with email and password. + * If the user does not have an account they can + * press the register button to the SignUp page. + *This page involves a {@code LoginHeader}, an image at the right, + * a login box, an email box, a login button, and a register button.
+ */ public class LoginPageView extends BorderPane { private final AppState appState; private final NavigationController nav; @@ -106,9 +114,9 @@ private Button getLoginBtn() { } public Button getRegisterBtn() { - Button registerBtn = new Button("Don't have an account? Sign In"); + Button registerBtn = new Button("Don't have an account? Sign Up"); registerBtn.setMaxWidth(300); - registerBtn.setOnMouseClicked(e -> nav.showSignInPage()); + registerBtn.setOnMouseClicked(e -> nav.showSignUpPage()); registerBtn.setId("register-btn"); return registerBtn; } diff --git a/src/main/java/edu/group5/app/view/loginpage/SignInPageView.java b/src/main/java/edu/group5/app/view/loginpage/SignUpPageView.java similarity index 75% rename from src/main/java/edu/group5/app/view/loginpage/SignInPageView.java rename to src/main/java/edu/group5/app/view/loginpage/SignUpPageView.java index 946dae4..160f929 100644 --- a/src/main/java/edu/group5/app/view/loginpage/SignInPageView.java +++ b/src/main/java/edu/group5/app/view/loginpage/SignUpPageView.java @@ -12,8 +12,16 @@ import java.util.Objects; - -public class SignInPageView extends BorderPane { +/** + * A view for the SignUp page. + * In this page a user can create an account by writing in first and last name, + * and by adding email and password. If the user already have an account, + * they can press the back to login button to login. + * + *This view contains a first name field, a surname field, a email field, + * a password field, a sign up button, and an back to login button.
+ */ +public class SignUpPageView extends BorderPane { private final AppState appState; private final NavigationController nav; private final LoginController loginController; @@ -24,7 +32,7 @@ public class SignInPageView extends BorderPane { private PasswordField passwordField; private Label errorLabel; - public SignInPageView(AppState appState, NavigationController nav, LoginController loginController) { + public SignUpPageView(AppState appState, NavigationController nav, LoginController loginController) { this.appState = appState; this.nav = nav; this.loginController = loginController; @@ -36,7 +44,7 @@ public SignInPageView(AppState appState, NavigationController nav, LoginControll content.getChildren().addAll(getOuterSection(), getImageSection()); String css = Objects.requireNonNull( - getClass().getResource("/loginpage/signin.css")).toExternalForm(); + getClass().getResource("/loginpage/signup.css")).toExternalForm(); content.getStylesheets().add(css); setCenter(content); @@ -68,16 +76,16 @@ private VBox getOuterSection() { VBox outerSection = new VBox(12); outerSection.setAlignment(Pos.CENTER); HBox.setHgrow(outerSection, Priority.ALWAYS); - outerSection.getChildren().addAll(getSignInBox(), getBackToLoginBtn()); + outerSection.getChildren().addAll(getSignUpBox(), getBackToLoginBtn()); return outerSection; } - private VBox getSignInBox() { - VBox signInSection = new VBox(12); - signInSection.setAlignment(Pos.CENTER); - signInSection.setId("login-box"); - signInSection.getChildren().addAll(getErrorLabel(), getNameRow(), getEmailBox(), getPasswordBox(), getSignInBtn()); - return signInSection; + private VBox getSignUpBox() { + VBox signUpSection = new VBox(12); + signUpSection.setAlignment(Pos.CENTER); + signUpSection.setId("login-box"); + signUpSection.getChildren().addAll(getErrorLabel(), getNameRow(), getEmailBox(), getPasswordBox(), getSignUpBtn()); + return signUpSection; } private Label getErrorLabel() { @@ -126,18 +134,18 @@ private VBox getPasswordBox() { return passwordBox; } - private Button getSignInBtn() { - Button signInBtn = new Button("Sign In"); - signInBtn.setMaxWidth(300); - signInBtn.setId("login-btn"); - signInBtn.setOnMouseClicked(e -> loginController.handleSignIn( + private Button getSignUpBtn() { + Button signUpBtn = new Button("Sign Up"); + signUpBtn.setMaxWidth(300); + signUpBtn.setId("login-btn"); + signUpBtn.setOnMouseClicked(e -> loginController.handleSignUp( this, getFirstName(), getLastName(), getEmail(), getPassword() )); - return signInBtn; + return signUpBtn; } public Button getBackToLoginBtn() { diff --git a/src/main/java/edu/group5/app/view/organizationpage/OrganizationPageView.java b/src/main/java/edu/group5/app/view/organizationpage/OrganizationPageView.java index 4e4b616..53c623b 100644 --- a/src/main/java/edu/group5/app/view/organizationpage/OrganizationPageView.java +++ b/src/main/java/edu/group5/app/view/organizationpage/OrganizationPageView.java @@ -20,6 +20,15 @@ import java.util.Objects; +/** + * A view for displaying information about a selected organization. + * + *The page shows the organization's logo, name, and description. + * If no logo is available, a fallback "No image" is displayed.
+ * + *The page also includes a donate button that navigates to the + * donation page, and a back button to return to the causes page.
+ */ public class OrganizationPageView extends BorderPane { private final AppState appState; private final NavigationController nav; diff --git a/src/main/resources/loginpage/signin-image.png b/src/main/resources/loginpage/signup-image.png similarity index 100% rename from src/main/resources/loginpage/signin-image.png rename to src/main/resources/loginpage/signup-image.png diff --git a/src/main/resources/loginpage/signin.css b/src/main/resources/loginpage/signup.css similarity index 90% rename from src/main/resources/loginpage/signin.css rename to src/main/resources/loginpage/signup.css index d14af06..fcd8751 100644 --- a/src/main/resources/loginpage/signin.css +++ b/src/main/resources/loginpage/signup.css @@ -1,5 +1,5 @@ #image-section { - -fx-background-image: url("/loginpage/signin-image.png"); + -fx-background-image: url("/loginpage/signup-image.png"); -fx-background-size: auto; -fx-background-position: right center; -fx-background-repeat: no-repeat;