Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implements Organizations Administrator Views #2

Merged
merged 2 commits into from
Jan 13, 2021
Merged

Implements Organizations Administrator Views #2

merged 2 commits into from
Jan 13, 2021

Conversation

NickDelta
Copy link
Owner

This issue closes #1

@NickDelta NickDelta changed the title Implement Organizations Administrator Views Implements Organizations Administrator Views Jan 10, 2021
@NickDelta
Copy link
Owner Author

Απ'ότι φαίνεται τα draft pull requests δεν είναι διαθέσιμα σε private repos ακόμα και με GitHub Pro. Θέλει Organization τύπο. Μην ξεγελαστείτε και κάνετε review, δεν είναι ακόμα 100% έτοιμο, αύριο θα σας ενημερώσω για το πότε να αρχίσετε να το βλέπετε.

@NickDelta
Copy link
Owner Author

@j-christou @viviangourgioti Το PR είναι πλέον έτοιμο προς review.

@NickDelta NickDelta added the feature This issue implements a functional requirement label Jan 12, 2021
Copy link
Contributor

@ichrist-gr ichrist-gr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Πολυ καλος, απλως να εξηγησουμε καποιες λειτουργιες

Button backButton = UIUtils.createButton("Back", VaadinIcon.ARROW_LEFT, ButtonVariant.LUMO_PRIMARY);
backButton.getStyle().set("position","absolute");
backButton.getStyle().set("bottom","10px");
backButton.getStyle().set("left","10px"); //I waited for the buttons not to be aligned but somehow they are with this style

backButton.addClickListener(listener -> UI.getCurrent().navigate("organizations"));
backButton.addClickListener(listener -> UI.getCurrent().navigate(RouteConstants.PAGE_ORGS_ADMIN));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Παρολο που το χρησιμοποιησα και γω, δεν θυμαμαι τι κανει η navigate to entity..βασικα ποιος ειναι ο σκοπος της

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

μια εξηγηση σε αυτη την κλαση την ηθελα κι εγω γιατι θα με βοηθησει και στο δικο μου issue

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ουσιαστικά θέλουμε να ενημερώνουμε το URL server-side. Δες λίγο τη συμπεριφορά της μπάρας του URL στον browser σου όταν πας να κάνεις edit τον χρήστη. Δεν αλλάζει το URL;

Στις SPAs (Single-Page-Applications - δες εδώ ορισμό SPA - ουσιαστικά τόσο καιρό μια τέτοια λύση δουλεύουμε), το URL δεν αλλάζει αυτόματα συνήθως και οι σελίδες δεν έχουν μοναδικό URL. Μέσω τον Routers ή άλλων μηχανισμών το framework που χρησιμοποιείτε καταλαβαίνει που θέλει ο χρήστης να πάει ή τι θέλει να δει.

Υπάρχουν κάποια μεικονεκτήματα σε αυτό, ένα από αυτά είναι ότι πχ:

Αν ο χρήστης θέλει να κάνει save έναν σύνδεσμο της εφαρμογής μας στον οποίο θέλει αν τον πατάει να κάνει edit έναν συγκεκριμένο χρήστη, τότε εξαιτίας του φαινομένου που περιέγραψα πιο πάνω, δεν θα μπορεί να το κάνει.

Οπότε είναι δικιά μας δουλεία να παράγουμε τέτοια URL και να δίνουμε στο Vaadin να καταλαβαίνει (μέσω του interface HasUrlParameter<E> και της μεθόδου setParameter()) τι πρέπει να κάνει αν κάποιος/α χειροκίνητα (ή server-side όπως κάνω με τη μετάβαση από οργανισμούς σε supervisors του οργανισμού που επέλεξε ο χρήστης) δώσει τέτοιο link.

Δες και docs για το UI.navigate()

@@ -172,13 +187,17 @@ public void setParameter(BeforeEvent event, @WildcardParameter String path)
if(paths.size() == 2 || paths.size() > 4 )
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Για ποιο λογο να πουμε αν ειναι 2 η πανω απο 4? εφοσον και σενα 2 τιμες εχει το url, max 3

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Expected contents are ["organizations","supervisors",{organization},{userId}]

Άρα υποχρεωτικά η λίστα θα έχει τα 2 πρώτα Strings (αλλιώς δεν θα ήμασταν σε αυτό το view). Αυτό το view δεν δουλεύει αν δοθεί το όνομα του οργανισμού ως 3η παράμετρος. Αρά αν η λίστα είναι μεγέθους 2 δεν μας κάνει. Το λέω optional το organization γιατί αν δεν το φροντίσει το view των οργανισμών ή ο χρήστης χειροκίνητα τότε δεν θα είναι στα paths.

Με άλλα λόγια είναι υποχρεωτικό το organization για να δουλέψει αλλά μπορεί να συμβεί και το ενδεχόμενο να μη δοθεί. Αν δεν δοθεί το name του οργανισμού βαρά 404.

Το 4ο που είναι το id του χρήστη είναι εντελώς προαιρετικό. Αν το δώσει, τότε πήγαινε τον χρήστη κατευθείαν στην edit φόρμα.

Δεν αναμένουμε παραπάνω από 4 paths οπότε βαρά 404 αν γίνει κάτι τέτοιο.

setSizeFull();

}

//Setup internationalization (Only English for us)
public CrudI18n setupI18n()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

παρομοιως και αυτη η μεθοδος δεν καταλαβαινω τη χρησιμοτητα της

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ρυθμίζει το κείμενο που εμφανίζεται στα διάφορα κουμπιά/ταμπέλες του CRUD Component. Πχ new button, edit button κτλ.

}


}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Εδώ ενώ στο περίπου καταλαβαίνω τι κάνεις.Γιατί εγώ χρησιμοποίησα διαφορετικό τρόπο?έχει σχεση με το keycloak?

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ναι το έχω ξαναπεί. Άλλιώς επικοινωνούμε με τον σέρβερ του keycloak και αλλιώς με το δικό μας backend.

Το keycloak ως εμπορικό προϊόν έχει και δικό του admin client για το API του. Αυτόν τον client τον τροποποίησα για να υποστηρίζει και το Organzations Endpoint που περιγράφω στο NickDelta/hermes-keycloak-image#4.

Το back-end μας δεν έχει τέτοιο client υλοποιημένο. Εσύ χρησιμοποιείς το KeycloakRestTemplate για την επικοινωνία.

Ίδιος σκοπός στην τελική, διαφορετικά εργαλεία για την επίτευξή τους. That's how software works.

if(VaadinSecurity.check().hasRole("ROLE_ORGS_ADMIN")){
menu.addNaviItem(VaadinIcon.BUILDING,"Organizations", OrganizationsView.class);
}

return menu;
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Αυτά μου φαίνονται λίγο περίεργα αλλα τα βασικα τα καταλαβα

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Δεν νομίζω ότι είναι τόσο παράξενα χαχαχα. Ουσιαστικά εδώ λες ανάλογα με τον ρόλο που έχεις εμφάνισε και τα κατάλληλα Tabs στο μενού πλάι.

@NickDelta NickDelta merged commit 3ec143b into main Jan 13, 2021
@NickDelta NickDelta deleted the feature-1 branch January 13, 2021 23:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature This issue implements a functional requirement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Implement Organizations Administrator Views
3 participants