Skip to content

Commit

Permalink
Fix object parameter not shown when editing an action/condition when …
Browse files Browse the repository at this point in the history
…the object doesn't exist (#7373)
  • Loading branch information
D8H authored Mar 3, 2025
1 parent 3f7cbc7 commit 5d4523b
Showing 1 changed file with 41 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -90,13 +90,23 @@ type Props = {|
const isParameterVisible = (
parameterMetadata: gdParameterMetadata,
parameterIndex: number,
objectParameterIndex: ?number
objectParameterIndex: number,
objectName: ?string,
projectScopedContainersAccessor: ProjectScopedContainersAccessor
) => {
// Hide parameters that are used only for code generation
if (parameterMetadata.isCodeOnly()) return false;

// For objects, hide the first object parameter, which is by convention the object name.
if (parameterIndex === objectParameterIndex) return false;
if (
parameterIndex === objectParameterIndex &&
objectName &&
projectScopedContainersAccessor
.get()
.getObjectsContainersList()
.hasObjectOrGroupNamed(objectName)
)
return false;

return true;
};
Expand Down Expand Up @@ -132,6 +142,30 @@ const InstructionParametersEditor = React.forwardRef<

const forceUpdate = useForceUpdate();

const getVisibleParametersCount = React.useCallback(
(instructionMetadata: ?gdInstructionMetadata, objectName: ?string) => {
if (!instructionMetadata) return 0;

const objectParameterIndex = getObjectParameterIndex(
instructionMetadata
);

return mapFor(0, instructionMetadata.getParametersCount(), i => {
if (!instructionMetadata) return false;
const parameterMetadata = instructionMetadata.getParameter(i);

return isParameterVisible(
parameterMetadata,
i,
objectParameterIndex,
objectName,
projectScopedContainersAccessor
);
}).filter(isVisible => isVisible).length;
},
[projectScopedContainersAccessor]
);

const focus: FieldFocusFunction = React.useCallback(
options => {
// Verify that there is a field to focus.
Expand All @@ -150,31 +184,13 @@ const InstructionParametersEditor = React.forwardRef<
}
}
},
[project, objectName, instruction, isCondition]
[getVisibleParametersCount, instruction, isCondition, project, objectName]
);

React.useImperativeHandle(ref, () => ({
focus,
}));

const getVisibleParametersCount = (
instructionMetadata: ?gdInstructionMetadata,
objectName: ?string
) => {
if (!instructionMetadata) return 0;

const objectParameterIndex = objectName
? getObjectParameterIndex(instructionMetadata)
: -1;

return mapFor(0, instructionMetadata.getParametersCount(), i => {
if (!instructionMetadata) return false;
const parameterMetadata = instructionMetadata.getParameter(i);

return isParameterVisible(parameterMetadata, i, objectParameterIndex);
}).filter(isVisible => isVisible).length;
};

const openExtension = (i18n: I18nType) => {
if (isDirty) {
const answer = Window.showConfirmDialog(
Expand Down Expand Up @@ -237,9 +253,7 @@ const InstructionParametersEditor = React.forwardRef<
instructionType
);
const tutorialIds = getInstructionTutorialIds(instructionType);
const objectParameterIndex = objectName
? getObjectParameterIndex(instructionMetadata)
: -1;
const objectParameterIndex = getObjectParameterIndex(instructionMetadata);

setupInstructionParameters(
globalObjectsContainer,
Expand Down Expand Up @@ -322,7 +336,9 @@ const InstructionParametersEditor = React.forwardRef<
!isParameterVisible(
parameterMetadata,
i,
objectParameterIndex
objectParameterIndex,
objectName,
projectScopedContainersAccessor
)
)
return null;
Expand Down

0 comments on commit 5d4523b

Please sign in to comment.