Skip to content

Commit 853f416

Browse files
committed
UIEXT-3206: Add runFinishedProvider property to SimpleButtonWidget
This is a precursor to allowing frontend button to be disabled on click until the action has finished. UIEXT-3206 (WebUI-Migration SDF Reader)
1 parent 114ff8d commit 853f416

File tree

4 files changed

+27
-0
lines changed

4 files changed

+27
-0
lines changed

org.knime.core.ui/src/eclipse/org/knime/core/webui/node/dialog/defaultdialog/internal/button/SimpleButtonWidget.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import java.lang.annotation.Retention;
5555
import java.lang.annotation.Target;
5656

57+
import org.knime.core.webui.node.dialog.defaultdialog.widget.updates.NoopStringProvider;
5758
import org.knime.node.parameters.updates.ButtonReference;
5859
import org.knime.node.parameters.updates.StateProvider;
5960

@@ -77,4 +78,13 @@
7778
*/
7879
Icon icon() default Icon.NONE;
7980

81+
/**
82+
* An optional provider that is to be used if a long-running action is triggered and the user should be prevented
83+
* from clicking the button again until the action has finished. The button will be disabled whenever clicked and
84+
* re-enabled once the provider provides a new uuid.
85+
*
86+
* @return provide a unique uuid once the button action has finished which lets frontend know the button can be
87+
* re-enabled
88+
*/
89+
Class<? extends StateProvider<String>> runFinishedProvider() default NoopStringProvider.class;
8090
}

org.knime.core.ui/src/eclipse/org/knime/core/webui/node/dialog/defaultdialog/jsonforms/JsonFormsConsts.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,11 @@ private UiSchema() {
224224
*/
225225
public static final String TAG_MESSAGE = "message";
226226

227+
/**
228+
* Used to re-activate a button after its action has been performed.
229+
*/
230+
public static final String TAG_RUN_FINISHED = "runFinished";
231+
227232
/**
228233
* Used for providing the possible formats of a {@link DateTimeFormatPickerWidget}
229234
*/

org.knime.core.ui/src/eclipse/org/knime/core/webui/node/dialog/defaultdialog/jsonforms/uischema/UiSchemaOptionsGenerator.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@
109109
import org.knime.core.webui.node.dialog.defaultdialog.internal.widget.WidgetInternal;
110110
import org.knime.core.webui.node.dialog.defaultdialog.jsonforms.DateTimeUtil;
111111
import org.knime.core.webui.node.dialog.defaultdialog.jsonforms.EnumUtil;
112+
import org.knime.core.webui.node.dialog.defaultdialog.jsonforms.JsonFormsConsts.UiSchema;
112113
import org.knime.core.webui.node.dialog.defaultdialog.jsonforms.JsonFormsConsts.UiSchema.Format;
113114
import org.knime.core.webui.node.dialog.defaultdialog.jsonforms.JsonFormsScopeUtil;
114115
import org.knime.core.webui.node.dialog.defaultdialog.jsonforms.renderers.RendererToJsonFormsUtil;
@@ -342,6 +343,10 @@ void addOptionsTo(final ObjectNode control) {
342343
default -> throw new IllegalArgumentException("Unexpected value: " + simpleButtonWidget.icon());
343344
});
344345
}
346+
if (!NoopStringProvider.class.equals(simpleButtonWidget.runFinishedProvider())) {
347+
getOrCreateProvidedOptions(control).add(UiSchema.TAG_RUN_FINISHED);
348+
}
349+
345350
}
346351

347352
final var isValueSwitch = annotatedWidgets.contains(ValueSwitchWidget.class);

org.knime.core.ui/src/eclipse/org/knime/core/webui/node/dialog/defaultdialog/util/updates/WidgetTreesToRefsAndStateProviders.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
import org.knime.core.data.DataType;
6464
import org.knime.core.node.util.CheckUtils;
6565
import org.knime.core.webui.node.dialog.defaultdialog.DefaultNodeDialog;
66+
import org.knime.core.webui.node.dialog.defaultdialog.internal.button.SimpleButtonWidget;
6667
import org.knime.core.webui.node.dialog.defaultdialog.internal.dynamic.DataAndDialog;
6768
import org.knime.core.webui.node.dialog.defaultdialog.internal.dynamic.DynamicParameters;
6869
import org.knime.core.webui.node.dialog.defaultdialog.internal.dynamic.DynamicParameters.DynamicParametersProvider;
@@ -348,6 +349,12 @@ public Optional<List<UiState>> getUiStateProviders(final TreeNode<WidgetGroup> n
348349
TextMessage::value, //
349350
null //
350351
), //
352+
new UiStateProviderAnnotationSpec<>(//
353+
UiSchema.TAG_RUN_FINISHED, //
354+
SimpleButtonWidget.class, //
355+
SimpleButtonWidget::runFinishedProvider, //
356+
NoopStringProvider.class //
357+
), //
351358
new UiStateProviderAnnotationSpec<>( //
352359
UiSchema.TAG_ARRAY_LAYOUT_ELEMENT_TITLE, //
353360
ArrayWidgetInternal.class, //

0 commit comments

Comments
 (0)