diff --git a/libs/ui-lib/lib/ocm/components/clusterConfiguration/operators/OperatorCheckbox.tsx b/libs/ui-lib/lib/ocm/components/clusterConfiguration/operators/OperatorCheckbox.tsx index ba36c2ded6..31815625f4 100644 --- a/libs/ui-lib/lib/ocm/components/clusterConfiguration/operators/OperatorCheckbox.tsx +++ b/libs/ui-lib/lib/ocm/components/clusterConfiguration/operators/OperatorCheckbox.tsx @@ -140,7 +140,7 @@ const OperatorCheckbox = ({ (sb) => !!bundles.find((b) => b.id === sb)?.operators?.includes(operatorId), ); - const isChecked = values.selectedOperators.includes(operatorId) || isInBundle; + const isChecked = values.selectedOperators.includes(operatorId); const parentOperator = preflightRequirements?.operators?.find((op) => op.dependencies?.includes(operatorId), diff --git a/libs/ui-lib/lib/ocm/components/clusterWizard/OperatorsSelect.tsx b/libs/ui-lib/lib/ocm/components/clusterWizard/OperatorsSelect.tsx index 0c5353fd5c..0ce94e52d7 100644 --- a/libs/ui-lib/lib/ocm/components/clusterWizard/OperatorsSelect.tsx +++ b/libs/ui-lib/lib/ocm/components/clusterWizard/OperatorsSelect.tsx @@ -11,6 +11,7 @@ import { handleApiError, LoadingState, OperatorsValues, + selectOlmOperators, singleClusterOperators, useAlerts, useStateSafely, @@ -36,7 +37,23 @@ const OperatorsSelect = ({ const [isExpanded, setIsExpanded] = React.useState(false); const [supportedOperators, setSupportedOperators] = useStateSafely([]); const isSingleClusterFeatureEnabled = useFeature('ASSISTED_INSTALLER_SINGLE_CLUSTER_FEATURE'); - const { values } = useFormikContext(); + const { values, setFieldValue } = useFormikContext(); + + // Sync selected operators with monitored operators from the cluster + // If there's more than 1 monitored OLM operator, it means the user has previously selected operators + // and we should restore their selection. If there's 0 or 1, it's a fresh page visit. + React.useEffect(() => { + const olmOperators = selectOlmOperators(cluster); + if (olmOperators.length > 0) { + const monitoredOperatorNames = olmOperators + .map((op) => op.name) + .filter((name): name is string => !!name); + void setFieldValue('selectedOperators', monitoredOperatorNames); + } + // Only run on initial mount + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + React.useEffect(() => { const fetchSupportedOperators = async () => { try {