Search in sources :

Example 6 with IntegerField

use of com.vaadin.flow.component.textfield.IntegerField in project komunumo-server by komunumo.

the class EventDialog method createForm.

// just a lot of fields for the form
@SuppressWarnings("checkstyle:MethodLength")
@Override
public void createForm(@NotNull final FormLayout formLayout, @NotNull final Binder<Event> binder) {
    final var type = new Select<>(EventType.values());
    final var title = new TextField("Title");
    final var subtitle = new TextField("Subtitle");
    final var speaker = new MultiselectComboBox<EventSpeakerEntity>("Speaker");
    final var organizer = new MultiselectComboBox<Member>("Organizer");
    final var description = new RichTextEditor();
    final var keyword = new MultiselectComboBox<KeywordEntity>("Keyword");
    final var agenda = new RichTextEditor();
    final var level = new Select<>(EventLevel.values());
    final var language = new Select<>(EventLanguage.values());
    final var room = new TextField("Room");
    final var travelInstructions = new TextField("Travel instructions");
    final var location = new ComboBox<String>("Location");
    final var webinarUrl = new TextField("Webinar URL");
    final var youtTube = new TextField("YouTube");
    final var date = new DateTimePicker("Date & Time");
    final var duration = new TimePicker("Duration");
    final var eventUrl = new TextField("Event URL");
    final var attendeeLimit = new IntegerField("Attendee limit (0 = no limit)");
    final var membersOnly = new Checkbox("Members only");
    final var published = new Checkbox("Published");
    type.setLabel("Type");
    type.setRequiredIndicatorVisible(true);
    title.setRequiredIndicatorVisible(true);
    title.setValueChangeMode(EAGER);
    title.addValueChangeListener(changeEvent -> {
        if (eventUrl.getValue().equals(URLUtil.createReadableUrl(changeEvent.getOldValue()))) {
            eventUrl.setValue(URLUtil.createReadableUrl(changeEvent.getValue()));
        }
    });
    subtitle.setValueChangeMode(EAGER);
    speaker.setOrdered(true);
    speaker.setItemLabelGenerator(EventSpeakerEntity::fullName);
    speaker.setItems(databaseService.getAllEventSpeakers());
    organizer.setOrdered(true);
    organizer.setItemLabelGenerator(value -> String.format("%s %s", value.getFirstName(), value.getLastName()));
    organizer.setItems(databaseService.getAllAdmins());
    organizer.setRequiredIndicatorVisible(true);
    keyword.setOrdered(true);
    keyword.setItemLabelGenerator(KeywordEntity::keyword);
    keyword.setItems(databaseService.getAllKeywords());
    level.setLabel("Level");
    language.setLabel("Language");
    location.setItems(databaseService.getAllEventLocations());
    location.setAllowCustomValue(true);
    location.addValueChangeListener(changeEvent -> {
        final var value = changeEvent.getValue();
        final var isOnline = "Online".equalsIgnoreCase(value);
        webinarUrl.setEnabled(isOnline);
        webinarUrl.setRequiredIndicatorVisible(published.getValue() && isOnline);
        room.setRequiredIndicatorVisible(!isOnline);
        updateEventUrlPrefix(location, date, eventUrl);
        binder.validate();
    });
    room.setValueChangeMode(EAGER);
    travelInstructions.setValueChangeMode(EAGER);
    webinarUrl.setValueChangeMode(EAGER);
    date.setMin(LocalDateTime.now());
    date.addValueChangeListener(changeEvent -> updateEventUrlPrefix(location, date, eventUrl));
    duration.setStep(Duration.ofMinutes(15));
    duration.setMin(LocalTime.of(1, 0));
    duration.setMax(LocalTime.of(3, 0));
    eventUrl.setValueChangeMode(EAGER);
    updateEventUrlPrefix(location, date, eventUrl);
    attendeeLimit.setMin(0);
    attendeeLimit.setMax(500);
    attendeeLimit.setStep(10);
    attendeeLimit.setHasControls(true);
    published.addValueChangeListener(changeEvent -> {
        final var value = changeEvent.getValue();
        speaker.setRequiredIndicatorVisible(value);
        level.setRequiredIndicatorVisible(value);
        description.setRequiredIndicatorVisible(value);
        language.setRequiredIndicatorVisible(value);
        location.setRequiredIndicatorVisible(value);
        room.setRequiredIndicatorVisible(!"Online".equalsIgnoreCase(location.getValue()));
        date.setRequiredIndicatorVisible(value);
        duration.setRequiredIndicatorVisible(value);
        eventUrl.setRequiredIndicatorVisible(value);
        binder.validate();
    });
    formLayout.add(type, title, subtitle, speaker, organizer, level, new CustomLabel("Description"), description, keyword, new CustomLabel("Agenda"), agenda, language, location, room, travelInstructions, webinarUrl, youtTube, date, duration, eventUrl, attendeeLimit, membersOnly, published);
    binder.forField(type).withValidator(value -> !published.getValue() || value != null, "Please select a type").bind(Event::getType, Event::setType);
    binder.forField(title).withValidator(new StringLengthValidator("Please enter a title (max. 255 chars)", 1, 255)).bind(Event::getTitle, Event::setTitle);
    binder.forField(subtitle).withValidator(new StringLengthValidator("The subtitle is too long (max. 255 chars)", 0, 255)).bind(Event::getSubtitle, Event::setSubtitle);
    binder.forField(speaker).withValidator(value -> !published.getValue() || !value.isEmpty(), "Please select at least one speaker").bind(this::getSpeakers, this::setSpeakers);
    binder.forField(organizer).withValidator(value -> !value.isEmpty(), "Please select at least one organizer").bind(this::getOrganizer, this::setOrganizer);
    binder.forField(level).withValidator(value -> !published.getValue() || value != null, "Please select a level").bind(Event::getLevel, Event::setLevel);
    binder.forField(description.asHtml()).withValidator(value -> !published.getValue() || value != null && !value.isBlank(), "Please enter a description").bind(Event::getDescription, Event::setDescription);
    binder.forField(keyword).bind(this::getKeyword, this::setKeyword);
    binder.forField(agenda.asHtml()).bind(Event::getAgenda, Event::setAgenda);
    binder.forField(language).withValidator(value -> !published.getValue() || value != null, "Please select a language").bind(Event::getLanguage, Event::setLanguage);
    binder.forField(location).withValidator(value -> !published.getValue() || value != null, "Please select a location").bind(Event::getLocation, Event::setLocation);
    binder.forField(room).withValidator(value -> !published.getValue() || "Online".equalsIgnoreCase(location.getValue()) || !value.isBlank(), "Please enter a room").bind(Event::getRoom, Event::setRoom);
    binder.forField(travelInstructions).withValidator(value -> value.isBlank() || URLUtil.isValid(value), "Please enter a valid URL").bind(Event::getTravelInstructions, Event::setTravelInstructions);
    binder.forField(webinarUrl).withValidator(value -> !published.getValue() || !"Online".equalsIgnoreCase(location.getValue()) || URLUtil.isValid(value), "Please enter a valid URL").bind(Event::getWebinarUrl, Event::setWebinarUrl);
    binder.forField(youtTube).bind(Event::getYoutube, Event::setYoutube);
    binder.forField(date).withValidator(value -> isPastEvent(date) || !published.getValue() && (value == null || value.isAfter(LocalDateTime.now())) || value != null && value.isAfter(LocalDateTime.now()), "Please enter a date and time in the future").bind(Event::getDate, Event::setDate);
    binder.forField(duration).withValidator(value -> !published.getValue() || (value != null && value.isAfter(LocalTime.MIN) && value.isBefore(LocalTime.MAX)), "Please enter a duration").bind(Event::getDuration, Event::setDuration);
    // TODO check for duplicates
    binder.forField(eventUrl).withValidator(value -> !published.getValue() || value != null && !value.isBlank(), "Please enter a valid event URL").bind(Event::getEventUrl, Event::setEventUrl);
    binder.forField(attendeeLimit).bind(Event::getAttendeeLimit, Event::setAttendeeLimit);
    binder.forField(membersOnly).bind(Event::getMembersOnly, Event::setMembersOnly);
    binder.forField(published).bind(Event::getPublished, Event::setPublished);
    afterOpen = () -> {
        webinarUrl.setEnabled("Online".equalsIgnoreCase(location.getValue()));
        if (isPastEvent(date)) {
            binder.setReadOnly(true);
            binder.setValidatorsDisabled(true);
            youtTube.setReadOnly(false);
        }
    };
}
Also used : Member(org.komunumo.data.entity.Member) EventLevel(org.komunumo.data.db.enums.EventLevel) Event(org.komunumo.data.entity.Event) CustomLabel(org.komunumo.ui.component.CustomLabel) Select(com.vaadin.flow.component.select.Select) Binder(com.vaadin.flow.data.binder.Binder) LocalDateTime(java.time.LocalDateTime) ComboBox(com.vaadin.flow.component.combobox.ComboBox) EditDialog(org.komunumo.ui.component.EditDialog) KeywordEntity(org.komunumo.data.entity.KeywordEntity) EventLanguage(org.komunumo.data.db.enums.EventLanguage) AuthenticatedUser(org.komunumo.security.AuthenticatedUser) MultiselectComboBox(org.vaadin.gatanaso.MultiselectComboBox) IntegerField(com.vaadin.flow.component.textfield.IntegerField) Duration(java.time.Duration) LocalTime(java.time.LocalTime) TextField(com.vaadin.flow.component.textfield.TextField) EAGER(com.vaadin.flow.data.value.ValueChangeMode.EAGER) URLUtil(org.komunumo.util.URLUtil) Set(java.util.Set) TimePicker(com.vaadin.flow.component.timepicker.TimePicker) EventSpeakerEntity(org.komunumo.data.entity.EventSpeakerEntity) Collectors(java.util.stream.Collectors) FormLayout(com.vaadin.flow.component.formlayout.FormLayout) Checkbox(com.vaadin.flow.component.checkbox.Checkbox) StringLengthValidator(com.vaadin.flow.data.validator.StringLengthValidator) Nullable(org.jetbrains.annotations.Nullable) DatabaseService(org.komunumo.data.service.DatabaseService) RichTextEditor(com.vaadin.flow.component.richtexteditor.RichTextEditor) Year(java.time.Year) NotNull(org.jetbrains.annotations.NotNull) Callback(org.komunumo.Callback) DateTimePicker(org.komunumo.ui.component.DateTimePicker) Span(com.vaadin.flow.component.html.Span) EventType(org.komunumo.data.db.enums.EventType) TimePicker(com.vaadin.flow.component.timepicker.TimePicker) DateTimePicker(org.komunumo.ui.component.DateTimePicker) CustomLabel(org.komunumo.ui.component.CustomLabel) MultiselectComboBox(org.vaadin.gatanaso.MultiselectComboBox) EventSpeakerEntity(org.komunumo.data.entity.EventSpeakerEntity) ComboBox(com.vaadin.flow.component.combobox.ComboBox) MultiselectComboBox(org.vaadin.gatanaso.MultiselectComboBox) StringLengthValidator(com.vaadin.flow.data.validator.StringLengthValidator) IntegerField(com.vaadin.flow.component.textfield.IntegerField) DateTimePicker(org.komunumo.ui.component.DateTimePicker) KeywordEntity(org.komunumo.data.entity.KeywordEntity) Checkbox(com.vaadin.flow.component.checkbox.Checkbox) Select(com.vaadin.flow.component.select.Select) TextField(com.vaadin.flow.component.textfield.TextField) Event(org.komunumo.data.entity.Event) RichTextEditor(com.vaadin.flow.component.richtexteditor.RichTextEditor)

Example 7 with IntegerField

use of com.vaadin.flow.component.textfield.IntegerField in project flow-components by vaadin.

the class AbstractItemCountGridPage method initDataProvider.

private void initDataProvider() {
    menuBar.add("Defined / Undefined size");
    dataProvider = new LazyLoadingProvider();
    Button button1 = new Button("withUndefinedSize() -> undefined size", event -> switchToUndefinedSize());
    button1.setId(UNDEFINED_SIZE_BUTTON_ID);
    menuBar.add(button1);
    menuBar.add(new Hr());
    Button button2 = new Button("setDataProvider(FetchCallback) -> undefined size", event -> switchToUndefinedSizeCallback());
    menuBar.add(button2);
    button2.setId("fetchcallback");
    dataProviderSizeInput = new IntegerField("Fixed size backend size");
    menuBar.add(dataProviderSizeInput, new Hr());
    fetchCallbackSizeInput = new IntegerField("Undefined-size backend size", event -> fetchCallbackSize = event.getValue());
    fetchCallbackSizeInput.setId(UNDEFINED_SIZE_BACKEND_SIZE_INPUT_ID);
    fetchCallbackSizeInput.setWidthFull();
    menuBar.add(fetchCallbackSizeInput, new Hr());
    Button button3 = new Button("setDefinedSize(CountCallback) -> defined size", event -> switchToDefinedSize());
    menuBar.add(button3);
    button3.setId(DEFINED_SIZE_BUTTON_ID);
    Button button4 = new Button("setDataProvider(DataProvider) -> defined size", event -> switchToDataProvider());
    menuBar.add(button4);
    button4.setId(DATA_PROVIDER_BUTTON_ID);
    dataProviderSizeInput.setId(DATA_PROVIDER_SIZE_INPUT_ID);
    dataProviderSizeInput.setValue(dataProviderSize);
    dataProviderSizeInput.setWidthFull();
    dataProviderSizeInput.addValueChangeListener(event -> {
        dataProviderSize = event.getValue();
        dataProvider.refreshAll();
    });
    dataProviderSizeInput.setEnabled(false);
    menuBar.add(dataProviderSizeInput, new Hr());
    Checkbox checkbox = new Checkbox("Show fetch query logs", event -> logPanel.setVisible(event.getSource().getValue()));
    checkbox.setValue(true);
    menuBar.add(checkbox);
}
Also used : IntStream(java.util.stream.IntStream) Grid(com.vaadin.flow.component.grid.Grid) Query(com.vaadin.flow.data.provider.Query) ValueProvider(com.vaadin.flow.function.ValueProvider) VerticalLayout(com.vaadin.flow.component.orderedlayout.VerticalLayout) Div(com.vaadin.flow.component.html.Div) AbstractBackEndDataProvider(com.vaadin.flow.data.provider.AbstractBackEndDataProvider) Hr(com.vaadin.flow.component.html.Hr) Logger(java.util.logging.Logger) Checkbox(com.vaadin.flow.component.checkbox.Checkbox) Button(com.vaadin.flow.component.button.Button) Stream(java.util.stream.Stream) FlexLayout(com.vaadin.flow.component.orderedlayout.FlexLayout) IntegerField(com.vaadin.flow.component.textfield.IntegerField) RouterLink(com.vaadin.flow.router.RouterLink) BeforeEnterObserver(com.vaadin.flow.router.BeforeEnterObserver) Range(com.vaadin.flow.internal.Range) Button(com.vaadin.flow.component.button.Button) Checkbox(com.vaadin.flow.component.checkbox.Checkbox) Hr(com.vaadin.flow.component.html.Hr) IntegerField(com.vaadin.flow.component.textfield.IntegerField)

Example 8 with IntegerField

use of com.vaadin.flow.component.textfield.IntegerField in project flow-components by vaadin.

the class AbstractItemCountGridPage method initEstimateOptions.

private void initEstimateOptions() {
    menuBar.add("Item Count Estimate Configuration");
    itemCountEstimateInput = new IntegerField("setItemCountEstimate", event -> grid.getLazyDataView().setItemCountEstimate(event.getValue()));
    itemCountEstimateInput.setId(ITEM_COUNT_ESTIMATE_INPUT);
    itemCountEstimateInput.setWidthFull();
    itemCountEstimateIncreaseInput = new IntegerField("setItemCountEstimateIncrease", event -> grid.getLazyDataView().setItemCountEstimateIncrease(event.getValue()));
    itemCountEstimateIncreaseInput.setId(ITEM_COUNT_ESTIMATE_INCREASE_INPUT);
    itemCountEstimateIncreaseInput.setWidthFull();
    menuBar.add(itemCountEstimateInput, itemCountEstimateIncreaseInput);
}
Also used : IntStream(java.util.stream.IntStream) Grid(com.vaadin.flow.component.grid.Grid) Query(com.vaadin.flow.data.provider.Query) ValueProvider(com.vaadin.flow.function.ValueProvider) VerticalLayout(com.vaadin.flow.component.orderedlayout.VerticalLayout) Div(com.vaadin.flow.component.html.Div) AbstractBackEndDataProvider(com.vaadin.flow.data.provider.AbstractBackEndDataProvider) Hr(com.vaadin.flow.component.html.Hr) Logger(java.util.logging.Logger) Checkbox(com.vaadin.flow.component.checkbox.Checkbox) Button(com.vaadin.flow.component.button.Button) Stream(java.util.stream.Stream) FlexLayout(com.vaadin.flow.component.orderedlayout.FlexLayout) IntegerField(com.vaadin.flow.component.textfield.IntegerField) RouterLink(com.vaadin.flow.router.RouterLink) BeforeEnterObserver(com.vaadin.flow.router.BeforeEnterObserver) Range(com.vaadin.flow.internal.Range) IntegerField(com.vaadin.flow.component.textfield.IntegerField)

Example 9 with IntegerField

use of com.vaadin.flow.component.textfield.IntegerField in project flow-components by vaadin.

the class AbstractItemCountComboBoxPage method initDataCommunicatorOptions.

private void initDataCommunicatorOptions() {
    IntegerField pageSizeInput = new IntegerField("Page Size", event -> comboBox.setPageSize(event.getValue()));
    pageSizeInput.setValue(comboBox.getPageSize());
    pageSizeInput.setWidthFull();
    menuBar.add("DataCommunicator Configuration");
    menuBar.add(pageSizeInput);
}
Also used : IntegerField(com.vaadin.flow.component.textfield.IntegerField)

Example 10 with IntegerField

use of com.vaadin.flow.component.textfield.IntegerField in project flow-components by vaadin.

the class AbstractItemCountComboBoxPage method initDataProvider.

private void initDataProvider() {
    menuBar.add("Defined / Undefined size");
    dataProvider = new LazyLoadingProvider();
    NativeButton button1 = new NativeButton("withUndefinedSize() -> undefined size", event -> switchToUndefinedSize());
    button1.setId(UNDEFINED_SIZE_BUTTON_ID);
    menuBar.add(button1);
    menuBar.add(new Hr());
    NativeButton button2 = new NativeButton("setDataProvider(FetchCallback) -> undefined size", event -> switchToUndefinedSizeCallback());
    menuBar.add(button2);
    button2.setId(SWITCH_TO_UNDEFINED_SIZE_BUTTON_ID);
    dataProviderSizeInput = new IntegerField("Fixed size backend size");
    menuBar.add(dataProviderSizeInput, new Hr());
    fetchCallbackSizeInput = new IntegerField("Undefined-size backend size", event -> fetchCallbackSize = event.getValue());
    fetchCallbackSizeInput.setId(UNDEFINED_SIZE_BACKEND_SIZE_INPUT_ID);
    fetchCallbackSizeInput.setWidthFull();
    menuBar.add(fetchCallbackSizeInput, new Hr());
    NativeButton button3 = new NativeButton("setDefinedSize(CountCallback) -> defined size", event -> switchToDefinedSize());
    menuBar.add(button3);
    button3.setId(DEFINED_SIZE_BUTTON_ID);
    NativeButton button4 = new NativeButton("setDataProvider(DataProvider) -> defined size", event -> switchToDataProvider());
    menuBar.add(button4);
    button4.setId(DATA_PROVIDER_BUTTON_ID);
    dataProviderSizeInput.setId(DATA_PROVIDER_SIZE_INPUT_ID);
    dataProviderSizeInput.setValue(dataProviderSize);
    dataProviderSizeInput.setWidthFull();
    dataProviderSizeInput.addValueChangeListener(event -> {
        dataProviderSize = event.getValue();
        dataProvider.refreshAll();
    });
    dataProviderSizeInput.setEnabled(false);
    menuBar.add(dataProviderSizeInput, new Hr());
    Checkbox checkbox = new Checkbox("Show fetch query logs", event -> logPanel.setVisible(event.getSource().getValue()));
    checkbox.setValue(true);
    menuBar.add(checkbox);
}
Also used : IntStream(java.util.stream.IntStream) Query(com.vaadin.flow.data.provider.Query) BeforeEnterEvent(com.vaadin.flow.router.BeforeEnterEvent) VerticalLayout(com.vaadin.flow.component.orderedlayout.VerticalLayout) Div(com.vaadin.flow.component.html.Div) NativeButton(com.vaadin.flow.component.html.NativeButton) AbstractBackEndDataProvider(com.vaadin.flow.data.provider.AbstractBackEndDataProvider) Hr(com.vaadin.flow.component.html.Hr) Logger(java.util.logging.Logger) ComboBox(com.vaadin.flow.component.combobox.ComboBox) Checkbox(com.vaadin.flow.component.checkbox.Checkbox) Stream(java.util.stream.Stream) FlexLayout(com.vaadin.flow.component.orderedlayout.FlexLayout) IntegerField(com.vaadin.flow.component.textfield.IntegerField) RouterLink(com.vaadin.flow.router.RouterLink) BeforeEnterObserver(com.vaadin.flow.router.BeforeEnterObserver) Range(com.vaadin.flow.internal.Range) NativeButton(com.vaadin.flow.component.html.NativeButton) Checkbox(com.vaadin.flow.component.checkbox.Checkbox) Hr(com.vaadin.flow.component.html.Hr) IntegerField(com.vaadin.flow.component.textfield.IntegerField)

Aggregations

IntegerField (com.vaadin.flow.component.textfield.IntegerField)12 Div (com.vaadin.flow.component.html.Div)7 Checkbox (com.vaadin.flow.component.checkbox.Checkbox)6 ComboBox (com.vaadin.flow.component.combobox.ComboBox)5 FlexLayout (com.vaadin.flow.component.orderedlayout.FlexLayout)5 VerticalLayout (com.vaadin.flow.component.orderedlayout.VerticalLayout)5 Button (com.vaadin.flow.component.button.Button)4 Hr (com.vaadin.flow.component.html.Hr)4 TextField (com.vaadin.flow.component.textfield.TextField)4 AbstractBackEndDataProvider (com.vaadin.flow.data.provider.AbstractBackEndDataProvider)4 Query (com.vaadin.flow.data.provider.Query)4 Range (com.vaadin.flow.internal.Range)4 BeforeEnterObserver (com.vaadin.flow.router.BeforeEnterObserver)4 RouterLink (com.vaadin.flow.router.RouterLink)4 Logger (java.util.logging.Logger)4 IntStream (java.util.stream.IntStream)4 Stream (java.util.stream.Stream)4 FormLayout (com.vaadin.flow.component.formlayout.FormLayout)2 Grid (com.vaadin.flow.component.grid.Grid)2 NativeButton (com.vaadin.flow.component.html.NativeButton)2