Skip to content

Commit 5854ed7

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

5 files changed

Lines changed: 44 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: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -148,17 +148,26 @@ 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+
// In `isAutoDeployScenario`, `BAIProjectResourceGroupSelect` is never
164+
// mounted (the component returns `null` before reaching the form), so
165+
// its `autoSelectDefault` cannot populate `selectedResourceGroup`. Fall
166+
// back to the sole resource group here — same pattern as
167+
// `ModelCardDeployModal`.
168+
const resourceGroup = isAutoDeployScenario
169+
? resourceGroups[0]?.name
170+
: selectedResourceGroup;
162171

163172
if (!presetId || !resourceGroup) return Promise.resolve();
164173

@@ -307,8 +316,9 @@ const VFolderDeployModalContent: React.FC<VFolderDeployModalContentProps> = ({
307316
>
308317
<BAIProjectResourceGroupSelect
309318
projectName={projectName ?? ''}
310-
value={effectiveResourceGroup}
311-
onChange={(value: string) => setUserSelectedResourceGroup(value)}
319+
value={selectedResourceGroup}
320+
onChange={(value: string) => setSelectedResourceGroup(value)}
321+
autoSelectDefault
312322
style={{ width: '100%' }}
313323
/>
314324
</Form.Item>
@@ -339,7 +349,7 @@ const VFolderDeployModalContent: React.FC<VFolderDeployModalContentProps> = ({
339349
!vfolderId ||
340350
!projectId ||
341351
!effectivePresetId ||
342-
!effectiveResourceGroup ||
352+
!selectedResourceGroup ||
343353
hasNoPresets
344354
}
345355
>
@@ -353,7 +363,7 @@ const VFolderDeployModalContent: React.FC<VFolderDeployModalContentProps> = ({
353363
!vfolderId ||
354364
!projectId ||
355365
!effectivePresetId ||
356-
!effectiveResourceGroup ||
366+
!selectedResourceGroup ||
357367
hasNoPresets
358368
}
359369
>

0 commit comments

Comments
 (0)