Conversation
…tion for Azure IPAM
…that were not being accounted for properly
…ue to improper handling of missing vNETs and vHUBs
…DataGrid component
…d removed legacy Microsoft Graph SDK v1 support
…PowerShell SDK v14
… Azure PowerShell SDK v14
…rphaned screenshots
There was a problem hiding this comment.
Pull request overview
This PR is a major Azure IPAM v4.0.0 release spanning UI modernization (React/MSAL/AG Grid), backend/auth hardening, deployment updates, examples, and extensive documentation refresh.
Changes:
- UI: React 19 + MSAL v5 migration, centralized token acquisition (
tokenService) + newAuthHandler, AG Grid migration with shared grid wrappers/utilities. - Engine/infra: Added standalone NIC discovery, hardened reservation/network association logic, enabled Key Vault soft delete in templates, updated Dockerfiles/base images.
- Docs/examples: Large documentation overhaul plus new/updated Bash/PowerShell/Terraform/Bicep examples.
Reviewed changes
Copilot reviewed 128 out of 188 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| ui/src/features/analysis/visualize/visualize.jsx | Ref handling changes in search component |
| ui/src/features/analysis/peering/peering.jsx | Ref handling changes in search component |
| ui/src/features/ipam/ipamSlice.jsx | Added replaceBlockNetworksAsync thunk and reducers |
| deploy/deploy.ps1 | Added Get-AccessToken helper and updated token usage |
| deploy/update.ps1 | Added Get-AccessToken helper and updated token usage |
| migrate/migrate.ps1 | Added Get-AccessToken helper and updated token usage |
| ui/src/features/DiscoverTable/Utils/ProgressCellRenderer.jsx | New AG Grid progress cell renderer |
Comments suppressed due to low confidence (2)
ui/src/features/analysis/visualize/visualize.jsx:567
Searchis no longer wrapped inReact.forwardRef, but it still relies onuseImperativeHandle(ref, ...)and is used as<Search ref={searchRef} ... />. In React,refis not passed as a normal prop to function components, so this will leaverefundefined and breaksearchRef.current.*calls (e.g.,getValue(),hasValue()). RestoreReact.forwardRef((props, ref) => ...)(or rename the prop to something likesearchRefand pass it explicitly) so the imperative handle is wired correctly.
ui/src/features/analysis/peering/peering.jsx:664Searchis no longer wrapped inReact.forwardRef, but it still usesuseImperativeHandle(ref, ...)and is rendered as<Search ref={searchRef} ... />. Sincerefis not delivered as a normal prop to function components, the imperative methods (clearSearch(),hasValue(), etc.) won’t be exposed andsearchRef.currentusage will break. ConvertSearchback toReact.forwardRef((props, ref) => ...)(or pass an explicitly named ref prop) to make the imperative handle work.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 128 out of 188 changed files in this pull request and generated 1 comment.
Comments suppressed due to low confidence (1)
ui/src/features/analysis/visualize/visualize.jsx:567
Searchis no longer wrapped inReact.forwardRef, but it still callsuseImperativeHandle(ref, ...)and the parent uses<Search ref={searchRef} />. In React,refis not passed as a normal prop, sorefhere will beundefinedandsearchRef.currentwill staynull(breakinggetValue()/hasValue()calls and potentially crashing effects that dereference it). ConvertSearchback toReact.forwardRef((props, ref) => ...)(or rename to an explicit prop likeinnerRefand update callers) so the imperative API works.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 129 out of 189 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (1)
ui/src/features/analysis/visualize/visualize.jsx:553
Searchis no longer wrapped inReact.forwardRef, but it still tries to receiverefvia props and usesuseImperativeHandle(ref, ...). In React,refis not passed as a normal prop to function components, sosearchRefwill never be wired up and the imperative API (getValue,hasValue, etc.) will be broken (and can also cause warnings like “Function components cannot be given refs”). ConvertSearchback toReact.forwardRef(acceptingrefas the 2nd arg) and removereffrom the props destructuring.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…-react + react-compiler and addressed new errors identified by ESLint v10
…ugins for the latest recommended ones
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 129 out of 189 changed files in this pull request and generated no new comments.
Comments suppressed due to low confidence (2)
ui/src/features/analysis/visualize/visualize.jsx:553
Searchis no longer wrapped inReact.forwardRef, but it still relies on arefargument (useImperativeHandle(ref, ...)). In React,ref={searchRef}is not passed as a normal prop, sorefwill beundefinedhere andsearchRef.currentwill never get the imperative API (breaking calls likesearchRef.current.hasValue()/getValue()). ConvertSearchback toReact.forwardRef((props, ref) => ...)(or rename to an explicit prop likeinnerRefand pass it manually).
ui/src/features/analysis/peering/peering.jsx:654Searchis defined as a normal component that destructures{ ref, ... }, but it's used as<Search ref={searchRef} />and callsuseImperativeHandle(ref, ...). React does not passrefthrough props unless the component usesReact.forwardRef, sosearchRef.current.setValue/clearSearch/...will break at runtime. RestoreReact.forwardRefforSearch(or pass a differently named prop likeinnerRef).
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
Azure IPAM v4.0.0
This is a major release that delivers significant framework upgrades, a data grid migration, authentication modernization, comprehensive documentation overhaul, revamped examples, and numerous bug fixes.
Major Framework & Dependency Upgrades
forwardRefwrappers (ref-as-prop), removal ofPropTypes, explicitnullforuseRef()calls, and migration ofLoadingButtontoButton@azure/msal-browser4.x → 5.x,@azure/msal-react3.x → 5.x): Removed obsolete config, consolidated event types, fixed silent token timeout recovery (timed_outerror code), and prevented iframe fallback timeout loopsag-grid-community/ag-grid-react35.x): Complete migration to AG Grid including centralizedDataGridcomponent, custom styling, column state persistence, unified data loading overlays, and custom cell renderers (drill-down, info, progress)vite7.x → 8.x,@vitejs/plugin-react5.x → 6.x): Migrated to Vite 8 which replaces Rollup with Rolldown and esbuild with Oxc for bundling, transforms, and minification. Removedvite-plugin-eslint2(redundant with editor-based linting and incompatible with Vite 8)@eslint-react/eslint-plugin,eslint-plugin-react-compiler), replacingeslint-plugin-reactandeslint-plugin-react-hooks. Addeddist/ignore, fixedno-useless-assignmentviolations, and removed unusedeslint-plugin-jestEngine & Backend
msal,azure-common,azure-keyvault-secrets, andsix; addedazure-mgmt-resource-subscriptionsto address Azure SDK module separationUI & UX Improvements
AuthHandlerfor MSAL error handling, centralized token acquisition viatokenServiceDraggablePapercomponent: Replacedreact-draggablepackage with a purpose-built componentDataGridandConfigureGridcomponents with shared filter utilities, consistent loading overlays, and AG Grid custom styling (brightnessfilter for row hover)Deployment, Build & Infrastructure
Get-AzAccessTokenbreaking changes (fixes Breaking changes to Get-AzAccessToken #343); updated deploy & migrate scriptsDocumentation Overhaul
.markdownlint.jsonconfigurationExamples
examples/scripts/folder with new helper scripts and READMETesting
Bug Fixes
Get-AzAccessTokenbreaking changes not accounted for[major]