+
+ {addableOptionalTargetTypes.length > 0 && (
+
}
+ className="square-button ms-interaction-add-target"
+ tooltipId="widgets.filterWidget.addOptionalTargetTooltip"
+ >
+ {addableOptionalTargetTypes.map(type => (
+
+ ))}
+
+ )}
-
+
+
);
};
@@ -47,8 +241,8 @@ export default connect((state) => {
const editingWidget = getEditingWidget(state);
return {
widgetInteractionTree: getWidgetInteractionTreeGenerated(state),
- sourceWidgetId: editingWidget?.id
+ sourceWidgetId: editingWidget?.id,
+ interactions: editingWidget?.interactions || [],
+ allInteractionsWhileEditing: getAllInteractionsWhileEditingSelector(state)
};
}, null)(FilterActionsTab);
-
-
diff --git a/web/client/components/widgets/builder/wizard/filter/FilterDataTab/hooks/__tests__/useAttributeSync-test.jsx b/web/client/components/widgets/builder/wizard/filter/FilterDataTab/hooks/__tests__/useAttributeSync-test.jsx
new file mode 100644
index 00000000000..cd94d461556
--- /dev/null
+++ b/web/client/components/widgets/builder/wizard/filter/FilterDataTab/hooks/__tests__/useAttributeSync-test.jsx
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2026, GeoSolutions Sas.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+import expect from 'expect';
+import React, { useEffect } from 'react';
+import ReactDOM from 'react-dom';
+import { useAttributeSync } from '../useAttributeSync';
+
+const TestComponent = ({ filterData, onChangeProp, onEditorChange, selections, interactions, onReady }) => {
+ const onChange = useAttributeSync(filterData, onChangeProp, onEditorChange, selections, interactions);
+
+ useEffect(() => {
+ onReady(onChange);
+ }, [onChange, onReady]);
+
+ return null;
+};
+
+describe('useAttributeSync hook', () => {
+ beforeEach((done) => {
+ document.body.innerHTML = '