feat(deployment): add configure deployment flow with marketplace quoting#3362
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds deployment-intent parsing and draft persistence, introduces a quote-lifecycle state machine, threads locked and cancel-edit state through configure panes and cards, and switches marketplace data to placement offers. ChangesConfigure deployment locking, drafts, and offers
Estimated code review effort🎯 4 (Complex) | ⏱️ ~75 minutes Possibly related PRs
Suggested reviewers
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #3362 +/- ##
==========================================
- Coverage 69.63% 68.20% -1.43%
==========================================
Files 1088 998 -90
Lines 26663 24306 -2357
Branches 6408 5938 -470
==========================================
- Hits 18566 16579 -1987
+ Misses 7113 6769 -344
+ Partials 984 958 -26
*This pull request uses carry forward flags. Click here to find out more.
🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.tsx (1)
78-91: 🎯 Functional Correctness | 🟠 MajorDisable the locked placement name and region controls
pointer-events-noneonly blocks mouse/touch. The name field and region select still receive keyboard focus and can be edited while locked, so the lock is bypassed. Wrap them in a disabled<fieldset>(or passdisabledthrough) to make the controls truly inert. The JSDoc also says these controls are disabled, which is not true today.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.tsx` around lines 78 - 91, The locked placement UI in PlacementCard still allows keyboard focus and editing because pointer-events-none only blocks mouse interaction. Update the PlacementCard component so the placement name input (InlineEditInput) and the RegionSelect are truly disabled when locked, preferably by wrapping the controls in a disabled fieldset or plumbing a disabled prop through those components. Keep the existing locked check consistent with the JSDoc and ensure the remove button behavior remains unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.tsx`:
- Around line 97-99: The lock behavior around IpEndpointsSection is only applied
by the wrapper, so keyboard interaction still allows endpoint edits. Pass the
locked state from DeploymentPane into IpEndpointsSection and make the section
itself non-interactive using a disabled fieldset or inert behavior, ensuring the
Add endpoint and edit/remove controls are blocked when locked.
In `@apps/deploy-web/src/queries/usePlacementOffers.ts`:
- Line 108: The returned status in usePlacementOffers is only reflecting
screened state, so listBids failures during quoting are hidden from
MarketplacePane. Update the usePlacementOffers return value to combine the
listBids query’s isLoading/isError with screened state when phase === "quoting",
while keeping the existing screened-only behavior for other phases. Use the
phase check and the existing listBids/screened query results in
usePlacementOffers to locate and adjust the flags.
---
Outside diff comments:
In
`@apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.tsx`:
- Around line 78-91: The locked placement UI in PlacementCard still allows
keyboard focus and editing because pointer-events-none only blocks mouse
interaction. Update the PlacementCard component so the placement name input
(InlineEditInput) and the RegionSelect are truly disabled when locked,
preferably by wrapping the controls in a disabled fieldset or plumbing a
disabled prop through those components. Keep the existing locked check
consistent with the JSDoc and ensure the remove button behavior remains
unchanged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 70226f14-9323-439e-b6a3-028fc99dd604
📒 Files selected for processing (47)
apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/AdditionalSection/AdditionalSection.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/HardwareSection/HardwareSection.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentHeader/ConfigureDeploymentHeader.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentHeader/ConfigureDeploymentHeader.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.spec.tsapps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.tsapps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.spec.tsapps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.tsapps/deploy-web/src/pages/new-deployment/configure/[[...dseq]].tsxapps/deploy-web/src/queries/usePlacementOffers.spec.tsapps/deploy-web/src/queries/usePlacementOffers.tsapps/deploy-web/src/queries/useScreenedProviders.spec.tsxapps/deploy-web/src/queries/useScreenedProviders.tsapps/deploy-web/src/utils/urlUtils.spec.tsapps/deploy-web/src/utils/urlUtils.tsapps/deploy-web/tests/ui/configure-deployment-flow.spec.tsapps/deploy-web/tests/ui/pages/ConfigureDeploymentPage.tspackages/ui/components/collapsible-card.spec.tsxpackages/ui/components/collapsible-card.tsxpackages/ui/components/number-unit-input.spec.tsxpackages/ui/components/number-unit-input.tsx
b32e33a to
53b3f2e
Compare
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.tsx`:
- Around line 55-59: The active draft is being pinned on first render by the
useState captures in ConfigureDeployment and then reused in resolvedIntent and
persistDraftIdInUrl(), which causes stale draft state when the URL changes on
the same page instance. Replace the one-time draftId and persistedSdl
initialization with values derived from the current intent/draft on each render,
and make sure persistDraftIdInUrl() and the related draft-resume logic always
use the latest draftId from ConfigureDeployment rather than the initial one.
In
`@apps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/useConfigureDraft.ts`:
- Around line 9-10: The storage access in DEPENDENCIES.getStorage and the draft
handling in useConfigureDraft still only guard against missing storage, but
window.localStorage, getItem, setItem, and removeItem can throw as well. Update
the storage wrapper used by draft.read/draft.write/draft.remove to catch these
failures and degrade to a safe no-op instead of letting configure screen
rendering crash. Use the existing getStorage, draft.read, draft.write, and
draft.remove symbols to add try/catch protection around all storage
interactions.
In
`@apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.ts`:
- Around line 28-29: Treat an empty draftId as missing in deploymentIntent
parsing: the current draftId handling in the deployment flow preserves an empty
string, which prevents fresh ID minting and can disable persistence for
?draftId= URLs. Update the draftId normalization in the intent-building logic so
that blank values become undefined, keeping the behavior consistent with the
downstream useConfigureDraft path.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 04dd8709-cd28-4bb6-94cc-48a668d880d3
📒 Files selected for processing (14)
apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/useConfigureDraft.spec.tsapps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/useConfigureDraft.tsapps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.spec.tsapps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.tsapps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.spec.tsapps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.tsapps/deploy-web/src/utils/urlUtils.spec.tsapps/deploy-web/src/utils/urlUtils.tsapps/deploy-web/tests/ui/configure-deployment-flow.spec.tsapps/deploy-web/tests/ui/pages/ConfigureDeploymentPage.ts
🚧 Files skipped from review as they are similar to previous changes (6)
- apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.spec.ts
- apps/deploy-web/tests/ui/pages/ConfigureDeploymentPage.ts
- apps/deploy-web/src/utils/urlUtils.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.spec.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.ts
d4c37b1 to
8ac4738
Compare
There was a problem hiding this comment.
🧹 Nitpick comments (1)
apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.spec.tsx (1)
35-45: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd coverage for locked-row selection.
These tests only prove the textbox is disabled. The production code also relies on
disabled:pointer-events-noneso clicks on the locked name still select the row; without a test for that contract, a future class change can silently break locked-row selection.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.spec.tsx` around lines 35 - 45, The current ServiceRow.spec tests only verify the Service name textbox enabled/disabled state, but they do not cover the locked-row click behavior that depends on the row’s disabled pointer-events styling. Update the ServiceRow test coverage to exercise the locked row interaction through the ServiceRow/setup path and assert that clicking the locked name still selects the row via the existing selection callback/state, so future changes to the locked styling do not break selection behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In
`@apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.spec.tsx`:
- Around line 35-45: The current ServiceRow.spec tests only verify the Service
name textbox enabled/disabled state, but they do not cover the locked-row click
behavior that depends on the row’s disabled pointer-events styling. Update the
ServiceRow test coverage to exercise the locked row interaction through the
ServiceRow/setup path and assert that clicking the locked name still selects the
row via the existing selection callback/state, so future changes to the locked
styling do not break selection behavior.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 38913e51-87f4-4757-bdc5-aa420778a103
📒 Files selected for processing (54)
apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/AdditionalSection/AdditionalSection.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/HardwareSection/HardwareSection.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentHeader/ConfigureDeploymentHeader.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentHeader/ConfigureDeploymentHeader.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/IpEndpointsSection/IpEndpointsSection.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/IpEndpointsSection/IpEndpointsSection.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/useConfigureDraft.spec.tsapps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/useConfigureDraft.tsapps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.spec.tsapps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.tsapps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.spec.tsapps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.tsapps/deploy-web/src/components/sdl/RegionSelect/RegionSelect.tsxapps/deploy-web/src/pages/new-deployment/configure/[[...dseq]].tsxapps/deploy-web/src/queries/usePlacementOffers.spec.tsapps/deploy-web/src/queries/usePlacementOffers.tsapps/deploy-web/src/queries/useScreenedProviders.spec.tsxapps/deploy-web/src/queries/useScreenedProviders.tsapps/deploy-web/src/utils/urlUtils.spec.tsapps/deploy-web/src/utils/urlUtils.tsapps/deploy-web/tests/ui/configure-deployment-flow.spec.tsapps/deploy-web/tests/ui/pages/ConfigureDeploymentPage.tspackages/ui/components/collapsible-card.spec.tsxpackages/ui/components/collapsible-card.tsxpackages/ui/components/number-unit-input.spec.tsxpackages/ui/components/number-unit-input.tsx
✅ Files skipped from review due to trivial changes (1)
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.spec.tsx
🚧 Files skipped from review as they are similar to previous changes (49)
- packages/ui/components/number-unit-input.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/AdditionalSection/AdditionalSection.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.tsx
- packages/ui/components/number-unit-input.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentHeader/ConfigureDeploymentHeader.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.spec.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.tsx
- apps/deploy-web/src/queries/useScreenedProviders.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.spec.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/HardwareSection/HardwareSection.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/IpEndpointsSection/IpEndpointsSection.spec.tsx
- apps/deploy-web/src/utils/urlUtils.spec.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentHeader/ConfigureDeploymentHeader.tsx
- packages/ui/components/collapsible-card.tsx
- apps/deploy-web/tests/ui/pages/ConfigureDeploymentPage.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.spec.tsx
- apps/deploy-web/src/queries/useScreenedProviders.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/IpEndpointsSection/IpEndpointsSection.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.ts
- apps/deploy-web/src/utils/urlUtils.ts
- apps/deploy-web/src/queries/usePlacementOffers.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.tsx
- apps/deploy-web/tests/ui/configure-deployment-flow.spec.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.spec.tsx
- packages/ui/components/collapsible-card.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/useConfigureDraft.spec.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/useConfigureDraft.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.tsx
- apps/deploy-web/src/queries/usePlacementOffers.spec.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.tsx
8ac4738 to
3d85351
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@apps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/useConfigureDraft.spec.ts`:
- Around line 102-107: The unreadable-entry spec in useConfigureDraft.spec.ts is
being masked because setup() clears localStorage after the test seeds the value,
so the JSON.parse failure path in readDraft is never hit. Update setup() to
accept and write a raw stored draft entry after window.localStorage.clear(),
then use that path in the "ignores an unreadable entry instead of throwing" test
so it truly exercises the unreadable-entry branch and validates the parse-catch
behavior.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 1bae2d05-0ed2-4c4d-ad38-28c17ed0c12e
📒 Files selected for processing (54)
apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/AdditionalSection/AdditionalSection.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/HardwareSection/HardwareSection.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeployment/ConfigureDeployment.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentHeader/ConfigureDeploymentHeader.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentHeader/ConfigureDeploymentHeader.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/IpEndpointsSection/IpEndpointsSection.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/IpEndpointsSection/IpEndpointsSection.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.spec.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.tsxapps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/useConfigureDraft.spec.tsapps/deploy-web/src/components/deployments/ConfigureDeployment/useConfigureDraft/useConfigureDraft.tsapps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.spec.tsapps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.tsapps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.spec.tsapps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.tsapps/deploy-web/src/components/sdl/RegionSelect/RegionSelect.tsxapps/deploy-web/src/pages/new-deployment/configure/[[...dseq]].tsxapps/deploy-web/src/queries/usePlacementOffers.spec.tsapps/deploy-web/src/queries/usePlacementOffers.tsapps/deploy-web/src/queries/useScreenedProviders.spec.tsxapps/deploy-web/src/queries/useScreenedProviders.tsapps/deploy-web/src/utils/urlUtils.spec.tsapps/deploy-web/src/utils/urlUtils.tsapps/deploy-web/tests/ui/configure-deployment-flow.spec.tsapps/deploy-web/tests/ui/pages/ConfigureDeploymentPage.tspackages/ui/components/collapsible-card.spec.tsxpackages/ui/components/collapsible-card.tsxpackages/ui/components/number-unit-input.spec.tsxpackages/ui/components/number-unit-input.tsx
🚧 Files skipped from review as they are similar to previous changes (49)
- apps/deploy-web/src/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/PaneLockBanner/PaneLockBanner.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/IpEndpointsSection/IpEndpointsSection.spec.tsx
- apps/deploy-web/tests/ui/configure-deployment-flow.spec.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplaceProvidersTable/MarketplaceProvidersTable.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/AdditionalSection/AdditionalSection.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.spec.tsx
- packages/ui/components/number-unit-input.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentHeader/ConfigureDeploymentHeader.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentHeader/ConfigureDeploymentHeader.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ComputeResourcesCard/ComputeResourcesCard.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.spec.tsx
- apps/deploy-web/src/utils/urlUtils.spec.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.ts
- apps/deploy-web/src/components/sdl/RegionSelect/RegionSelect.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/ServiceRow/ServiceRow.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentPanes/ConfigureDeploymentPanes.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/IpEndpointsSection/IpEndpointsSection.tsx
- packages/ui/components/number-unit-input.spec.tsx
- packages/ui/components/collapsible-card.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ImageRuntimeCard/ImageRuntimeCard.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.spec.tsx
- apps/deploy-web/tests/ui/pages/ConfigureDeploymentPage.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/HardwareSection/HardwareSection.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/ConfigurationPane.tsx
- apps/deploy-web/src/queries/useScreenedProviders.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/MarketplacePane/MarketplacePane.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/DeploymentPane.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/RamStorageCard/RamStorageCard.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/deploymentIntent.spec.ts
- apps/deploy-web/src/queries/usePlacementOffers.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/DeploymentPane/PlacementCard/PlacementCard.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigureDeploymentForm/ConfigureDeploymentForm.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/ConfigurationPane/PersistentStorageCard/PersistentStorageCard.tsx
- packages/ui/components/collapsible-card.tsx
- apps/deploy-web/src/utils/urlUtils.ts
- apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.spec.ts
- apps/deploy-web/src/queries/useScreenedProviders.spec.tsx
- apps/deploy-web/src/components/deployments/ConfigureDeployment/useDeploymentFlow/useDeploymentFlow.ts
- apps/deploy-web/src/queries/usePlacementOffers.spec.ts
3d85351 to
68ef97c
Compare
Introduce the "Configure your deployment" screen: a deployment pane with placement/service cards and a configuration pane, plus the request-quotes lifecycle that creates the deployment and scopes the marketplace to the placement. Persist the working SDL draft per draft id and restore it across reloads. Lock the panes while quotes are active: SDL-mutating controls (image, cpu, placement/service name, region) are disabled while placements and services stay selectable, and clicking a locked control falls through to select it.
68ef97c to
3c42df4
Compare
Why
The new "Configure your deployment" screen had the spec cards but no way to actually request quotes or interact with providers — its quoting/locked state and the marketplace were unfinished. This PR wires the deployment lifecycle flow (request quotes → quoting → cancel & edit) into the screen and adds the Marketplace pane, so a user can see screened providers while configuring and the live bids for their placement once quoting.
Part of CON-423
What
useDeploymentFlow):configuring → creating → quoting → closing, with the dseq mirrored into the route (new-deployment/configure/[[...dseq]]) so a reload resumes quoting. Request quotes creates the deployment; Cancel and edit closes it.gseq, with a pre-bid screened fallback so the list is never blank. Bid rows take their name (organization, else host), region and audited flag from the provider list.configure-deployment-flow.spec.ts) driving create → locked → cancel & edit.Follow-ups (not in this PR): draft persistence so a reload keeps the edited SDL instead of re-applying the template; responsive panes to avoid horizontal scroll at narrow widths; the lease-creation step.
Screen.Recording.2026-06-25.at.14.38.26.mov
Summary by CodeRabbit