SuggestedMultiSelection decoupled from "notification" or checkboxes

Enabled boat classes widget again, fully functional.
This commit is contained in:
Sohaib Baig committed 2026-03-23 14:55:08 +01:00
1 parent c6f0b8f6b1
commit 23f1cd624b
9 files changed
+44 -41

No files matched your search

@@ -61,7 +61,7 @@ public class BoatClassDisplayImpl implements IsWidget, BoatClassSelectionPresent
}
private SuggestedMultiSelection<BoatClassDTO> composeFilter() {
final SuggestedMultiSelection.WidgetFactory<BoatClassDTO> widgetProvider = new SuggestedMultiSelection.WidgetFactory<BoatClassDTO>() {
final SuggestedMultiSelection.WidgetFactory<BoatClassDTO> widgetFactory = new SuggestedMultiSelection.WidgetFactory<BoatClassDTO>() {
@Override
public IsWidget generateItemDescriptionWidget(BoatClassDTO item) {
return new SuggestedMultiSelectionBoatClassItemDescription(item);
@@ -74,11 +74,19 @@ public class BoatClassDisplayImpl implements IsWidget, BoatClassSelectionPresent
return new SuggestedMultiSelection.SelectableSuggestion<BoatClassDTO>(presenter, selectionCallback, text);
}
};
presenter.setSelectionPersistenceCallback(wrapCallbackWithToastResponse(upcomingRacesUi.getValue(),
null, StringMessages.INSTANCE.failedToSetStatusOfUpdatesOnNewResultsForYourFavoredBoatClasses(),
StringMessages.INSTANCE.youWillNowReceiveUpdatesOnNewResultsForYourFavoredBoatClasses(),
StringMessages.INSTANCE.youWillNotReceiveNotificationsForFavoriteBoatClassNewResultsAnymore()));
return new SuggestedMultiSelection<>(presenter, widgetProvider);
final AsyncCallback<VoidResult> callbackWrappedWithToastNotification = new AsyncCallback<VoidResult>() {
@Override
public void onFailure(Throwable caught) {
Notification.notify(StringMessages.INSTANCE.failedToModifyFavoredBoatClasses(), NotificationType.ERROR);
}
@Override
public void onSuccess(VoidResult result) {
Notification.notify(StringMessages.INSTANCE.succesfullyModifiedFavoredBoatClasses(), NotificationType.SUCCESS);
}
};
presenter.setSelectionPersistenceCallback(callbackWrappedWithToastNotification);
return new SuggestedMultiSelection<>(presenter, widgetFactory);
}
private CheckBoxTile composeUpcomingRacesTile() {
@@ -133,12 +141,9 @@ public class BoatClassDisplayImpl implements IsWidget, BoatClassSelectionPresent
}
@Override
public void setNotifyAboutUpcomingRaces(boolean notifyAboutUpcomingRaces) {
public void initResults(boolean notifyAboutUpcomingRaces, boolean notifyAboutResults, Collection<BoatClassDTO> selection) {
upcomingRacesUi.setValue(notifyAboutUpcomingRaces);
}
@Override
public void setNotifyAboutResults(boolean notifyAboutResults) {
resultsUi.setValue(notifyAboutResults);
filterUi.setSelectedItems(selection);
}
}
@@ -66,19 +66,18 @@ public class CompetitorDisplayImpl implements IsWidget, CompetitorSelectionPrese
final AsyncCallback<VoidResult> selectionPersistenceCallback = new AsyncCallback<VoidResult>() {
@Override
public void onFailure(Throwable caught) {
Notification.notify(StringMessages.INSTANCE.failedToAddNewFavoriteCompetitor(), NotificationType.ERROR);
Notification.notify(StringMessages.INSTANCE.failedToModifyFavoriteCompetitors(), NotificationType.ERROR);
}
@Override
public void onSuccess(VoidResult result) {
Notification.notify(StringMessages.INSTANCE.newFavoriteCompetitorAdded(), NotificationType.SUCCESS);
Notification.notify(StringMessages.INSTANCE.favoriteCompetitorsModifiedSuccessfully(), NotificationType.SUCCESS);
}
};
presenter.setSelectionPersistenceCallback(selectionPersistenceCallback);
return new SuggestedMultiSelection<>(presenter, widgetFactory);
}
// TODO add different messages to toast response here
private CheckBoxTile composeTile() {
final BiConsumer<Boolean, AsyncCallback<VoidResult>> onToggle = (isNowTrue, callback) -> {
presenter.persistResults(isNowTrue, wrapCallbackWithToastResponse(isNowTrue, callback),
@@ -14,7 +14,7 @@ public interface BoatClassSelectionPresenter
void setNotifyAboutResults(boolean notifyAboutResults, AsyncCallback<VoidResult> callback);
void initNotifications(boolean notifyAboutUpcomingRaces, boolean notifyAboutResults);
void initNotifications(boolean notifyAboutUpcomingRaces, boolean notifyAboutResults, Collection<BoatClassDTO> selection);
void persistResults(boolean notifyAboutUpcomingRaces, boolean notifyAboutResults,
AsyncCallback<VoidResult> callback, Collection<BoatClassDTO> latestSelectedItems);
@@ -22,10 +22,7 @@ public interface BoatClassSelectionPresenter
void setSelectionPersistenceCallback(AsyncCallback<VoidResult> selectionCallback);
interface Display extends SuggestedMultiSelectionPresenter.Display<BoatClassDTO> {
void setNotifyAboutUpcomingRaces(boolean notifyAboutUpcomingRaces);
void setNotifyAboutResults(boolean notifyAboutResults);
void initResults(boolean notifyAboutUpcomingRaces, boolean notifyAboutResults, Collection<BoatClassDTO> selection);
boolean getNotifyAboutUpcomingRaces();
@@ -9,6 +9,7 @@ import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sailing.gwt.common.client.SharedResources;
import com.sap.sailing.gwt.home.shared.partials.labeledbox.LabeledBox;
import com.sap.sailing.gwt.home.shared.partials.multiselection.BoatClassDisplayImpl;
import com.sap.sailing.gwt.home.shared.partials.multiselection.CompetitorDisplayImpl;
import com.sap.sailing.gwt.home.shared.partials.multiselection.MiscellaneousDisplayImpl;
import com.sap.sailing.gwt.ui.client.FlagImageResolver;
@@ -33,8 +34,8 @@ public class UserPreferences extends Composite implements UserPreferencesView {
SharedResources res;
@UiField(provided = true)
LabeledBox favoriteCompetitorsSelctionUi;
// @UiField(provided = true)
// LabeledBox favoriteBoatClassesSelctionUi;
@UiField(provided = true)
LabeledBox favoriteBoatClassesSelctionUi;
@UiField(provided = true)
LabeledBox miscUi;
@UiField
@@ -45,8 +46,8 @@ public class UserPreferences extends Composite implements UserPreferencesView {
this.presenter = presenter;
favoriteCompetitorsSelctionUi = new CompetitorDisplayImpl(presenter.getFavoriteCompetitorsDataProvider(),
flagImageResolver).selectionUi;
// favoriteBoatClassesSelctionUi = new BoatClassDisplayImpl(
// presenter.getFavoriteBoatClassesDataProvider()).selectionUi;
favoriteBoatClassesSelctionUi = new BoatClassDisplayImpl(
presenter.getFavoriteBoatClassesDataProvider()).selectionUi;
miscUi = (new MiscellaneousDisplayImpl(presenter)).selectionUi;
initWidget(uiBinder.createAndBindUi(this));
// TODO hide notificationsTextUi if the user's mail address is already verified
@@ -23,8 +23,8 @@
<div class="{res.mediaCss.column} {res.mediaCss.small12} {res.mediaCss.medium6} {res.mainCss.spacermargintopmediumsmall}">
<lb:LabeledBox ui:field="favoriteCompetitorsSelctionUi"/>
</div>
<!-- <div class="{res.mediaCss.column} {res.mediaCss.small12} {res.mediaCss.medium6} {res.mainCss.spacermargintopmediumsmall}">
<div class="{res.mediaCss.column} {res.mediaCss.small12} {res.mediaCss.medium6} {res.mainCss.spacermargintopmediumsmall}">
<lb:LabeledBox ui:field="favoriteBoatClassesSelctionUi"/>
</div> -->
</div>
</g:HTMLPanel>
</ui:UiBinder>
@@ -54,7 +54,9 @@ public class UserPreferencesPresenter<C extends ClientFactoryWithDispatch & Erro
final boolean isNotify = result.getFavoriteCompetitors().isNotifyAboutResults();
final Collection<SimpleCompetitorWithIdDTO> selection = result.getFavoriteCompetitors().getSelectedCompetitors();
competitorPresenter.initResults(isNotify, selection);
initFavoriteBoatClasses(result.getFavoriteBoatClasses());
final FavoriteBoatClassesDTO favoriteBoatClasses = result.getFavoriteBoatClasses();
boatClassSelectionPresenter.initNotifications(favoriteBoatClasses.isNotifyAboutUpcomingRaces(),
favoriteBoatClasses.isNotifyAboutResults(), favoriteBoatClasses.getSelectedBoatClasses());
}
};
clientFactory.getDispatch().execute(new GetFavoritesAction(), callback);
@@ -65,12 +67,6 @@ public class UserPreferencesPresenter<C extends ClientFactoryWithDispatch & Erro
return boatClassSelectionPresenter;
}
private void initFavoriteBoatClasses(FavoriteBoatClassesDTO favoriteBoatClasses) {
boatClassSelectionPresenter.initNotifications(favoriteBoatClasses.isNotifyAboutUpcomingRaces(),
favoriteBoatClasses.isNotifyAboutResults());
boatClassSelectionPresenter.initSelectedItems(favoriteBoatClasses.getSelectedBoatClasses());
}
private class BoatClassSelectionPresenterImpl
extends AbstractSuggestedBoatClassMultiSelectionPresenter<BoatClassSelectionPresenter.Display>
implements BoatClassSelectionPresenter {
@@ -78,10 +74,9 @@ public class UserPreferencesPresenter<C extends ClientFactoryWithDispatch & Erro
private AsyncCallback<VoidResult> selectionCallback;
@Override
public void initNotifications(boolean notifyAboutUpcomingRaces, boolean notifyAboutResults) {
public void initNotifications(boolean notifyAboutUpcomingRaces, boolean notifyAboutResults, Collection<BoatClassDTO> selection) {
this.displays.forEach(display -> {
display.setNotifyAboutUpcomingRaces(notifyAboutUpcomingRaces);
display.setNotifyAboutResults(notifyAboutResults);
display.initResults(notifyAboutUpcomingRaces, notifyAboutResults, selection);
});
}
@@ -2570,6 +2570,8 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages,
String youWillNowReceiveUpdatesOnNewResultsForYourFavoredBoatClasses();
String youWillNotReceiveNotificationsForFavoriteBoatClassNewResultsAnymore();
String failedToSetStatusOfUpdatesOnNewResultsForYourFavoredBoatClasses();
String failedToAddNewFavoriteCompetitor();
String newFavoriteCompetitorAdded();
String failedToModifyFavoriteCompetitors();
String favoriteCompetitorsModifiedSuccessfully();
String failedToModifyFavoredBoatClasses();
String succesfullyModifiedFavoredBoatClasses();
}
@@ -2606,5 +2606,7 @@ youWillNotReceiveUpdatesOnUpcomingRacesForYourFavoredBoatClassesAnymore=You will
failedToSetStatusOfUpdatesOnNewResultsForYourFavoredBoatClasses=Failed to set status of notifications for new results of your favored boat classes
youWillNowReceiveUpdatesOnNewResultsForYourFavoredBoatClasses=You will now receive notifications for new results of your favored boat classes
youWillNotReceiveNotificationsForFavoriteBoatClassNewResultsAnymore=You will not receive notifications for new results of your favored boat classes anymore
failedToAddNewFavoriteCompetitor=Failed to add competitor to favorites
newFavoriteCompetitorAdded=New competitor added to favorites
failedToModifyFavoriteCompetitors=Failed to modify favorite competitors
favoriteCompetitorsModifiedSuccessfully=Favorite competitors modified successfully
failedToModifyFavoredBoatClasses=Failed to modify favorite boat classes
succesfullyModifiedFavoredBoatClasses=Successfully modified favored boat classes
@@ -2598,5 +2598,7 @@ youWillNotReceiveNotificationsForFavoriteBoatClassUpcomingRacesAnymore=Sie erhal
failedToSetStatusOfNotificationsForFavoriteBoatClassNewResults=Fehler beim Festlegen des Benachrichtigungsstatus für neue Ergebnisse Ihrer bevorzugten Bootsklasse
youWillNowReceiveNotificationsForFavoriteBoatClassNewResults=Sie erhalten nun Benachrichtigungen über neue Ergebnisse Ihrer bevorzugten Bootsklasse.
youWillNotReceiveNotificationsForFavoriteBoatClassNewResultsAnymore=Sie erhalten keine Benachrichtigungen mehr über neue Ergebnisse Ihrer bevorzugten Bootsklasse.
failedToAddNewFavoriteCompetitor=Konkurrenten konnten nicht zu den Favoriten hinzugefügt werden.
newFavoriteCompetitorAdded=Neuer Konkurrent zu den Favoriten hinzugefügt
failedToModifyFavoriteCompetitors=Es gelang nicht, die bevorzugten Konkurrenten zu beeinflussen.
favoriteCompetitorsModifiedSuccessfully=Favoritenkonkurrenten erfolgreich modifiziert
failedToModifyFavoredBoatClasses=Die bevorzugten Bootsklassen konnten nicht angepasst werden.
succesfullyModifiedFavoredBoatClasses=Die bevorzugten Bootsklassen konnten nicht angepasst werden.