From 92f340834f9b36ce0e42333aa3e3b79958f80705 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 15 Jun 2026 10:28:15 +0200 Subject: [PATCH 1/3] Fix allow to to add behavior parameters without needing to declare all capabilities in extension editor --- .../app/src/AssetStore/BehaviorStore/BehaviorListItem.js | 8 +++++++- newIDE/app/src/AssetStore/BehaviorStore/index.js | 9 +++++++-- newIDE/app/src/BehaviorsEditor/NewBehaviorDialog.js | 1 + 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/newIDE/app/src/AssetStore/BehaviorStore/BehaviorListItem.js b/newIDE/app/src/AssetStore/BehaviorStore/BehaviorListItem.js index b455681022ba..9a9008d620a5 100644 --- a/newIDE/app/src/AssetStore/BehaviorStore/BehaviorListItem.js +++ b/newIDE/app/src/AssetStore/BehaviorStore/BehaviorListItem.js @@ -35,6 +35,7 @@ type Props = {| objectType: string, objectBehaviorsTypes: Array, isChildObject: boolean, + canAddCapabilityBehaviors: boolean, behaviorShortHeader: BehaviorShortHeader, matches: ?Array, onChoose: () => void, @@ -48,6 +49,7 @@ export const BehaviorListItem = ({ objectType, objectBehaviorsTypes, isChildObject, + canAddCapabilityBehaviors, behaviorShortHeader, matches, onChoose, @@ -75,7 +77,11 @@ export const BehaviorListItem = ({ ); return ( (!isChildObject || behaviorMetadata.isRelevantForChildObjects()) && - (!behaviorMetadata.isHidden() || + // Behavior parameters and properties don't need to declare all + // capabilities, they will be required by transitivity when attaching + // the behavior to the object. + (canAddCapabilityBehaviors || + !behaviorMetadata.isHidden() || objectBehaviorsTypes.includes(requiredBehaviorType)) ); }); diff --git a/newIDE/app/src/AssetStore/BehaviorStore/index.js b/newIDE/app/src/AssetStore/BehaviorStore/index.js index 07b55d73135a..a57b0a08d1f2 100644 --- a/newIDE/app/src/AssetStore/BehaviorStore/index.js +++ b/newIDE/app/src/AssetStore/BehaviorStore/index.js @@ -71,6 +71,7 @@ type Props = {| deprecatedBehaviorMetadataList: Array, onInstall: (behaviorShortHeader: BehaviorShortHeader) => Promise, onChoose: (behaviorType: string) => void, + canAddCapabilityBehaviors: boolean, |}; const getBehaviorType = (behaviorShortHeader: BehaviorShortHeader) => @@ -86,6 +87,7 @@ export const BehaviorStore = ({ deprecatedBehaviorMetadataList, onInstall, onChoose, + canAddCapabilityBehaviors, }: Props): React.Node => { const preferences = React.useContext(PreferencesContext); const [ @@ -305,8 +307,10 @@ export const BehaviorStore = ({ filteredSearchResults.map(({ item }) => item) } getSearchItemUniqueId={getBehaviorType} - // $FlowFixMe[missing-local-annot] - renderSearchItem={(behaviorShortHeader, onHeightComputed) => ( + renderSearchItem={( + behaviorShortHeader: BehaviorShortHeader, + onHeightComputed + ): React.Node => ( chooseBehavior(i18n, behaviorType)} installedBehaviorMetadataList={installedBehaviorMetadataList} deprecatedBehaviorMetadataList={deprecatedBehaviorMetadataList} + canAddCapabilityBehaviors={shouldShowCapabilityBehaviors} /> )} From e2400f5c05d79c4f595dc20b44738e174fa4ae33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 15 Jun 2026 10:42:42 +0200 Subject: [PATCH 2/3] Better name --- newIDE/app/src/AssetStore/BehaviorStore/BehaviorListItem.js | 6 +++--- newIDE/app/src/AssetStore/BehaviorStore/index.js | 6 +++--- newIDE/app/src/BehaviorsEditor/NewBehaviorDialog.js | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/newIDE/app/src/AssetStore/BehaviorStore/BehaviorListItem.js b/newIDE/app/src/AssetStore/BehaviorStore/BehaviorListItem.js index 9a9008d620a5..57633862d8c3 100644 --- a/newIDE/app/src/AssetStore/BehaviorStore/BehaviorListItem.js +++ b/newIDE/app/src/AssetStore/BehaviorStore/BehaviorListItem.js @@ -35,7 +35,7 @@ type Props = {| objectType: string, objectBehaviorsTypes: Array, isChildObject: boolean, - canAddCapabilityBehaviors: boolean, + shouldCheckCapabilityBehaviors: boolean, behaviorShortHeader: BehaviorShortHeader, matches: ?Array, onChoose: () => void, @@ -49,7 +49,7 @@ export const BehaviorListItem = ({ objectType, objectBehaviorsTypes, isChildObject, - canAddCapabilityBehaviors, + shouldCheckCapabilityBehaviors, behaviorShortHeader, matches, onChoose, @@ -80,7 +80,7 @@ export const BehaviorListItem = ({ // Behavior parameters and properties don't need to declare all // capabilities, they will be required by transitivity when attaching // the behavior to the object. - (canAddCapabilityBehaviors || + (shouldCheckCapabilityBehaviors || !behaviorMetadata.isHidden() || objectBehaviorsTypes.includes(requiredBehaviorType)) ); diff --git a/newIDE/app/src/AssetStore/BehaviorStore/index.js b/newIDE/app/src/AssetStore/BehaviorStore/index.js index a57b0a08d1f2..802d992eb32c 100644 --- a/newIDE/app/src/AssetStore/BehaviorStore/index.js +++ b/newIDE/app/src/AssetStore/BehaviorStore/index.js @@ -71,7 +71,7 @@ type Props = {| deprecatedBehaviorMetadataList: Array, onInstall: (behaviorShortHeader: BehaviorShortHeader) => Promise, onChoose: (behaviorType: string) => void, - canAddCapabilityBehaviors: boolean, + shouldCheckCapabilityBehaviors: boolean, |}; const getBehaviorType = (behaviorShortHeader: BehaviorShortHeader) => @@ -87,7 +87,7 @@ export const BehaviorStore = ({ deprecatedBehaviorMetadataList, onInstall, onChoose, - canAddCapabilityBehaviors, + shouldCheckCapabilityBehaviors, }: Props): React.Node => { const preferences = React.useContext(PreferencesContext); const [ @@ -319,7 +319,7 @@ export const BehaviorStore = ({ objectType={objectType} objectBehaviorsTypes={objectBehaviorsTypes} isChildObject={isChildObject} - canAddCapabilityBehaviors={canAddCapabilityBehaviors} + shouldCheckCapabilityBehaviors={shouldCheckCapabilityBehaviors} onHeightComputed={onHeightComputed} behaviorShortHeader={behaviorShortHeader} matches={getExtensionsMatches(behaviorShortHeader)} diff --git a/newIDE/app/src/BehaviorsEditor/NewBehaviorDialog.js b/newIDE/app/src/BehaviorsEditor/NewBehaviorDialog.js index 5004f2c4a2c3..c9ec69283885 100644 --- a/newIDE/app/src/BehaviorsEditor/NewBehaviorDialog.js +++ b/newIDE/app/src/BehaviorsEditor/NewBehaviorDialog.js @@ -285,7 +285,7 @@ export default function NewBehaviorDialog({ onChoose={behaviorType => chooseBehavior(i18n, behaviorType)} installedBehaviorMetadataList={installedBehaviorMetadataList} deprecatedBehaviorMetadataList={deprecatedBehaviorMetadataList} - canAddCapabilityBehaviors={shouldShowCapabilityBehaviors} + shouldCheckCapabilityBehaviors={shouldShowCapabilityBehaviors} /> )} From 4eaaf83c5b0e5b073e253dd35cc22f8955cb3d38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 15 Jun 2026 13:03:00 +0200 Subject: [PATCH 3/3] Double invert --- newIDE/app/src/AssetStore/BehaviorStore/BehaviorListItem.js | 2 +- newIDE/app/src/BehaviorsEditor/NewBehaviorDialog.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/newIDE/app/src/AssetStore/BehaviorStore/BehaviorListItem.js b/newIDE/app/src/AssetStore/BehaviorStore/BehaviorListItem.js index 57633862d8c3..c3ad78cc7235 100644 --- a/newIDE/app/src/AssetStore/BehaviorStore/BehaviorListItem.js +++ b/newIDE/app/src/AssetStore/BehaviorStore/BehaviorListItem.js @@ -80,7 +80,7 @@ export const BehaviorListItem = ({ // Behavior parameters and properties don't need to declare all // capabilities, they will be required by transitivity when attaching // the behavior to the object. - (shouldCheckCapabilityBehaviors || + (!shouldCheckCapabilityBehaviors || !behaviorMetadata.isHidden() || objectBehaviorsTypes.includes(requiredBehaviorType)) ); diff --git a/newIDE/app/src/BehaviorsEditor/NewBehaviorDialog.js b/newIDE/app/src/BehaviorsEditor/NewBehaviorDialog.js index c9ec69283885..213c19392e5e 100644 --- a/newIDE/app/src/BehaviorsEditor/NewBehaviorDialog.js +++ b/newIDE/app/src/BehaviorsEditor/NewBehaviorDialog.js @@ -285,7 +285,7 @@ export default function NewBehaviorDialog({ onChoose={behaviorType => chooseBehavior(i18n, behaviorType)} installedBehaviorMetadataList={installedBehaviorMetadataList} deprecatedBehaviorMetadataList={deprecatedBehaviorMetadataList} - shouldCheckCapabilityBehaviors={shouldShowCapabilityBehaviors} + shouldCheckCapabilityBehaviors={!shouldShowCapabilityBehaviors} /> )}