Skip to content

Commit 9904d72

Browse files
committed
feat(FR-2889): auto-select default resource group in deployment modals
1 parent ee90cf4 commit 9904d72

5 files changed

Lines changed: 37 additions & 16 deletions

File tree

react/src/components/DeploymentAddRevisionCustomContent.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1125,7 +1125,10 @@ export const DeploymentAddRevisionCustomContent: React.FC<
11251125
stays visible during resource-group re-fetch.
11261126
*/}
11271127
<Suspense fallback={<Skeleton active paragraph={{ rows: 4 }} />}>
1128-
<ResourceAllocationFormItems enableResourcePresets />
1128+
<ResourceAllocationFormItems
1129+
enableResourcePresets
1130+
autoSelectFirstResourceGroup
1131+
/>
11291132
</Suspense>
11301133

11311134
<Collapse

react/src/components/DeploymentAddRevisionPresetContent.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ export const DeploymentAddRevisionPresetContent: React.FC<
264264
>
265265
<BAIProjectResourceGroupSelect
266266
projectName={projectName ?? ''}
267+
autoSelectDefault
267268
style={{ width: '100%' }}
268269
/>
269270
</Form.Item>

react/src/components/ModelCardDeployModal.tsx

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,13 @@ const ModelCardDeployModalContent: React.FC<
105105
userSelectedPresetId ??
106106
(availablePresets[0]?.id ? toLocalId(availablePresets[0].id) : undefined);
107107

108-
const [userSelectedResourceGroup, setUserSelectedResourceGroup] = useState<
108+
// `BAIProjectResourceGroupSelect` will auto-select the "default" group
109+
// (or the first available group) via `autoSelectDefault` once resource
110+
// groups load, calling our `onChange` with the chosen value — so this
111+
// state simply mirrors the selection without a derived fallback.
112+
const [selectedResourceGroup, setSelectedResourceGroup] = useState<
109113
string | undefined
110114
>(undefined);
111-
const effectiveResourceGroup =
112-
userSelectedResourceGroup ?? resourceGroups[0]?.name;
113115

114116
const handleDeploy = (): Promise<void> => {
115117
if (!modelCardRowId || !projectId) return Promise.resolve();
@@ -119,7 +121,7 @@ const ModelCardDeployModalContent: React.FC<
119121
: effectivePresetId;
120122
const resourceGroup = isAutoDeployScenario
121123
? resourceGroups[0]?.name
122-
: effectiveResourceGroup;
124+
: selectedResourceGroup;
123125

124126
if (!presetId || !resourceGroup) return Promise.resolve();
125127

@@ -274,8 +276,9 @@ const ModelCardDeployModalContent: React.FC<
274276
>
275277
<BAIProjectResourceGroupSelect
276278
projectName={projectName ?? ''}
277-
value={effectiveResourceGroup}
278-
onChange={(value: string) => setUserSelectedResourceGroup(value)}
279+
value={selectedResourceGroup}
280+
onChange={(value: string) => setSelectedResourceGroup(value)}
281+
autoSelectDefault
279282
style={{ width: '100%' }}
280283
/>
281284
</Form.Item>
@@ -301,7 +304,7 @@ const ModelCardDeployModalContent: React.FC<
301304
!modelCardRowId ||
302305
!projectId ||
303306
!effectivePresetId ||
304-
!effectiveResourceGroup
307+
!selectedResourceGroup
305308
}
306309
>
307310
{t('modelStore.Deploy')}

react/src/components/SessionFormItems/ResourceAllocationFormItems.tsx

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,15 @@ interface ResourceAllocationFormItemsProps {
8888
showRemainingWarning?: boolean;
8989
forceImageMinValues?: boolean;
9090
hideClusterFormItems?: boolean;
91+
/**
92+
* Opt-in: when the form field has no value, auto-select the project's
93+
* "default" resource group (or the first available one). Forwarded to
94+
* `BAIProjectResourceGroupSelect`'s `autoSelectDefault` prop. Off by
95+
* default to preserve existing behavior for shared callers like
96+
* `SessionLauncherPage` / `ServiceLauncherPageContent` that pre-fill
97+
* the form themselves.
98+
*/
99+
autoSelectFirstResourceGroup?: boolean;
91100
extraAcceleratorRules?: Array<{
92101
warningOnly?: boolean;
93102
validator: (rule: unknown, value: number) => Promise<void>;
@@ -102,6 +111,7 @@ const ResourceAllocationFormItems: React.FC<
102111
forceImageMinValues = false,
103112
showRemainingWarning = false,
104113
hideClusterFormItems = false,
114+
autoSelectFirstResourceGroup = false,
105115
extraAcceleratorRules,
106116
}) => {
107117
const form = Form.useFormInstance<MergedResourceAllocationFormValue>();
@@ -534,6 +544,7 @@ const ResourceAllocationFormItems: React.FC<
534544
>
535545
<BAIProjectResourceGroupSelect
536546
projectName={currentProject.name}
547+
autoSelectDefault={autoSelectFirstResourceGroup}
537548
showSearch
538549
/>
539550
</Form.Item>

react/src/components/VFolderDeployModal.tsx

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -148,17 +148,19 @@ const VFolderDeployModalContent: React.FC<VFolderDeployModalContentProps> = ({
148148
userSelectedPresetId ??
149149
(availablePresets[0]?.id ? toLocalId(availablePresets[0].id) : undefined);
150150

151-
const [userSelectedResourceGroup, setUserSelectedResourceGroup] = useState<
151+
// `BAIProjectResourceGroupSelect` will auto-select the "default" group
152+
// (or the first available group) via `autoSelectDefault` once resource
153+
// groups load, calling our `onChange` with the chosen value — so this
154+
// state simply mirrors the selection without a derived fallback.
155+
const [selectedResourceGroup, setSelectedResourceGroup] = useState<
152156
string | undefined
153157
>(undefined);
154-
const effectiveResourceGroup =
155-
userSelectedResourceGroup ?? resourceGroups[0]?.name;
156158

157159
const handleDeploy = (): Promise<void> => {
158160
if (!vfolderId || !projectId) return Promise.resolve();
159161

160162
const presetId = effectivePresetId;
161-
const resourceGroup = effectiveResourceGroup;
163+
const resourceGroup = selectedResourceGroup;
162164

163165
if (!presetId || !resourceGroup) return Promise.resolve();
164166

@@ -307,8 +309,9 @@ const VFolderDeployModalContent: React.FC<VFolderDeployModalContentProps> = ({
307309
>
308310
<BAIProjectResourceGroupSelect
309311
projectName={projectName ?? ''}
310-
value={effectiveResourceGroup}
311-
onChange={(value: string) => setUserSelectedResourceGroup(value)}
312+
value={selectedResourceGroup}
313+
onChange={(value: string) => setSelectedResourceGroup(value)}
314+
autoSelectDefault
312315
style={{ width: '100%' }}
313316
/>
314317
</Form.Item>
@@ -339,7 +342,7 @@ const VFolderDeployModalContent: React.FC<VFolderDeployModalContentProps> = ({
339342
!vfolderId ||
340343
!projectId ||
341344
!effectivePresetId ||
342-
!effectiveResourceGroup ||
345+
!selectedResourceGroup ||
343346
hasNoPresets
344347
}
345348
>
@@ -353,7 +356,7 @@ const VFolderDeployModalContent: React.FC<VFolderDeployModalContentProps> = ({
353356
!vfolderId ||
354357
!projectId ||
355358
!effectivePresetId ||
356-
!effectiveResourceGroup ||
359+
!selectedResourceGroup ||
357360
hasNoPresets
358361
}
359362
>

0 commit comments

Comments
 (0)