Skip to content

Latest commit

 

History

History
276 lines (271 loc) · 138 KB

breaking-changes.md

File metadata and controls

276 lines (271 loc) · 138 KB

Breaking Changes in the last four months

  • Additional Q&A about breaking changes can be found here
  • To ask a question about breaking changes use this

6.0.303.11

7364462xplat Microsoft.Portal.Tools to ship correctly named target file dotnetcore correct ordered target import



Expected Errors:

- those that use VS GUI for installing NuGet packages will get  warning MSB4011: "Microsoft.Portal.Tools.5.0.303...\build\Microsoft.Portal.Tools.targets" cannot be imported again. It was already imported at "...\Microsoft.Portal.Tools.5.0.303....\build\Microsoft.Portal.Tools.V2.targets (3,3)". This is most likely a build authoring error. This subsequent import will be ignored.

Solution:

- Your \*.csproj has an import to both Microsoft.Portal.Tools.targets and Microsoft.Portal.Tools.V2.targets. Drop the import to Microsoft.Portal.Tools.V2.targets and retain the import to Microsoft.Portal.Tools.targets.

Reason For Breaking Change

- xplat PackageReference syntax requires targets file to be named the same as the NuGet package for correct ordering of imports.
- NuGet convention states that build\ targets should have the same name as the NuGet Package.

7343607Add dependency MSBuild DLLs to Bundle

This change introduces some required DLLs for running Bundle.exe in certain stand-alone configurations (outside of an MSBuild pipeline) which were previously unaccounted for.
This change is not expected to be breaking.

7283821xplat disable brotli and cloudbuild symlink resolution when running on nix


Expected Errors:

- If you're running MSBUILD 14 the build will produce

```
Unhandled Exception: System.Runtime.InteropServices.COMException: Invalid value for registry (Exception from HRESULT: 0x80040153 (REGDB_E_INVALIDVALUE))
   at System.Runtime.InteropServices.RuntimeEnvironment.GetDeveloperPath()
   at System.AppDomain.SetupFusionStore(AppDomainSetup info, AppDomainSetup oldInfo)
   at System.AppDomain.SetupDomain(Boolean allowRedirects, String path, String configFile, String[] propertyNames, String[] propertyValues)
```

Solution:

- Update to a modern version of msbuild >= 15.0

Reason For Breaking Change

- MsBuild 14.0 was released with Visual Studio 2015.
- MsBuild 15.0 or above required for xplat support.

7278961Add support for pin part to Dashboard experience into msportalfx-test


Expected Errors:

- Extensions running tests on pinning a part or blade to dashboards will have their tests fail as the new pin to dashboard pane will launch and tests will timeout with an exception. 
- Extension that run pin tests should also ensure that full portal is instantiated during tests with Dashboards accessible as pin functionality needs access to recent dashboards for pinning. 

Solution:

- To continue running tests upgrade to the latest Microsoft.Portal.TestFramework.CSharp nuget version 1.0.210.0 or higher. The test framework will automatically handle pinning a blade to the most recent dashboard. 
- For pin tests that make use of pinning of a part using Fx/Pinner/Pin function calls to framework or that validate pinning of extension developed parts, should now handle the context pane opening in tests by finding the pin context pane and then pin button and clicking on the pin button.

Reason For Breaking Change
New pin to any dashboard functionality launches a context pane for users to select a dashboard or create new. This new UI flow will cause existing tests to fail if they aren't handling the context pane.

7261315Normalize msportalfx-test to import/from pattern



**Expected Errors:**

- After updating to the latest Msportalfx-Test framework, you may get the following compile error:

`This module is declared with using 'export =', and can only be used with a default import when using the 'esModuleInterop' flag.`

The error will be surrounded with a lot of other errors about non existent properties and implicit any types, which are rooted in the initial error mentioned above.

**Solution:**

- In your tsconfig.json, add a new compiler option as follow: `"esModuleInterop"true`

Note that enabling `esModuleInterop` may create new errors once it is turned on like these:

- `Type originates at this import. A namespace-style import cannot be called or constructed, and will cause a failure at runtime. Consider using a default import or import require here instead.`
- `Type 'typeof Q' has no call signatures.`

They should be few, and likely are related to your import of the Q, nconf and assert libraries. Fix for Q and other errors as such:

Before: `import * as Q from "q";`

After: `import Q from "q";`

**Reason For Breaking Change**

- Normalization of import pattern improves the code maintainability and import/from is the pattern that aligns with ES6. The current import/require pattern is maintained and still works.

7232935Obsolete old file download control



**Expected Errors:**
You will hit compilation error when using the below view models as they are getting obsoleted,
MsPortalFx.ViewModels.Controls.FileDownload
MsPortalFx.ViewModels.Controls.FileDownloadButton

**Solution:**
Please migrate to the new AMD modules in Fx/Controls/FileDownload for download scenarios.

**Reason For Breaking Change**
MsPortalFx namespace in non-AMD module. For perf reasons and using new api pattern we have exposed AMD modules under Fx/Controls and asking partners to migrate to new API patterns.
Please refer to https://aka.ms/portalfx/breaking for more details.

7216444[Hubs] [Breaking change] Obsolete MsPortalFx.Base.Net


 
**Expected Errors:**
 - Expect compile-time errors when using APIs in MsPortalFx.Base.Net module.
 
**Solution:**
 - Please use MsPortalFx.Base.Net2 or preferably the "Fx/Ajax" module for the functionality previously used in MsPortalFx.Base.Net
 
**Reason For Breaking Change**
 - MsPortalFx.Base.Net was deprecated in 2017. marking as obsolete so these older APIs can be removed in a future SDK.

7212383update to eslint v7


Expected Errors:

-  no known expected errors however teams with a high level of customization e.g using rules that are now deprecated may need to update per the eslint7 migration guide.

Solution:

- Its unlikely that you will be impacted however if you are follow the relevant eslint7 migration guide https://eslint.org/docs/user-guide/migrating-to-7.0.0#breaking-changes-for-users

Reason For Breaking Change

- fixes an eslint bug on windows that we contributed back impacts our workflow
- replaces synchronous CLIEngine with new async ESLint api

7165931Deprecate/Obsolete old Donut/Gauge controls



**Expected Errors:**
You will hit compilation error when using MsPortalFx view models for the below ontrols as these are getting obsoleted.

MsPortalFx.ViewModels.Controls.Visualization.Donut
MsPortalFx.ViewModels.Controls.Visualization.QuotaGauge
MsPortalFx.ViewModels.Controls.Visualization.SingleValueGauge

**Solution:**
Please migrate to the new AMD modules in Fx/Controls/
Fx/Controls/Donut
Fx/Controls/QuotaGauge
Fx/Controls/SingleValueGauge

**Reason For Breaking Change**
MsPortalFx namespace in non-AMD module. For perf reasons and using new api pattern we have exposed AMD modules under Fx/Controls and asking partners to migrate to new API patterns.
Please refer to https://aka.ms/portalfx/breaking for more details.


7103953[Hubs][Breaking change] Remove enableSupportTroubleshoot from ResourceMenuOptions

 
**Expected Errors:**
 
  • Expect compile-time errors when using the "enableSupportTroubleshoot" option in ResourceMenuOptions for an asset type.
 
**Solution:**
 
  • Use the enableSupportTroubleshootV2 option
 
**Reason For Breaking Change**
 
  • enableSupportTroubleshoot option adds a resource menu option that targets the same blade as enableSupportTroubleshootV2. Removing old option to reduce API bloat.

7102872Remove HeroBanner and other already obsoleted APIs



**Expected Errors:**
  1. 'signInFlags' are no longer supported in Fx/Redirect.ForceSignInOptions and usage of those will cause a compile time error and a runtime failure
  2. MsPortalFx.ViewModels.Controls.TypableControl, MsPortalFx.ViewModels.Controls.ValidationPlacements and MsPortalFx.ViewModels.Controls.Visualization.CsmTopology have been removed from runtime. These were already obsoleted and extensions should not have been using them.
  3. MsPortalFx.ViewModels.Controls.HeroBanner has been removed and any usage of this will cause a compile time error.

**Solution:**
  1. Use 'signInParameters' instead of 'signInFlags' in Fx/Redirect.ForceSigInOptions
  2. For the controls which are removed from runtime, there should not be any action item from extensions as they were already obsoleted and should not have been used anymore as they are outside of backward compatibility window.
  3. MsPortalFx.ViewModels.Controls.HeroBanner is no longer supported. If you still depend on it, you can build the experience yourself using custom HTML.
**Reason For Breaking Change**
  1. Sign in workflows are changed and the model of passing parameters has been updated.
  2. MsPortalFx.ViewModels.Controls.HeroBanner has only a single usage and is very basic UI. If this is still needed, extensions should build this experience on their own using custom HTML.

7066128Update Portal SDK to TypeScript 3.9



**Expected Errors:**
There may be typing errors where there were none before, due to the improved type inference, especially with callbacks and union types.

**Solution:**
Please review the [Breaking Changes in TypeScript](https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes) wiki to understand the breaking changes and options to re-solve issues.

**Reason For Breaking Change**
The TypeScript compiler in use by the SDK has been upgraded to 3.9 (from 3.5).
There are a few breaking changes in the compiler itself. See [Breaking Changes in TypeScript](https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes).
There are a lot of improvements and new  features in the language and bug fixes / improvements in the compiler. Please read the articles for [3.6](https://devblogs.microsoft.com/typescript/announcing-typescript-3-6/), [3.7](https://devblogs.microsoft.com/typescript/announcing-typescript-3-7/), [3.8](https://devblogs.microsoft.com/typescript/announcing-typescript-3-8/) and [3.9](https://devblogs.microsoft.com/typescript/announcing-typescript-3-9/) if you are interested in the full details of what changed since 3.5.

7064237Deprecate StaticSection



**Expected Warnings:**
MsPortalFx.ViewModels.Forms.StaticSection.ViewModel is no longer supported. 

**Solution:**
Please use Fx/Controls/Sections in place of this control. You might need to change the template a little as the StaticSection supported adding children directly in the template, whereas the Section control only allows adding children via the ViewModel.

**Reason For Breaking Change**
The old variants of controls are being deprecated for the newer more performant AMD versions of controls.

7063649Deprecate old selector models



**Expected Errors:**
MsPortalFx.ViewModels.Forms.CreatorAndSelectorV2
MsPortalFx.ViewModels.Controls.Wizard
MsPortalFx.ViewModels.Forms.Selector
- [...].[...] is no longer a supported navigation/layout model. Please redesign the blades for better full screen blade experiences.

**Solution:**
Redesign the blades for better full screen blade experiences.

**Reason For Breaking Change**
These three controls are no longer a supported navigation/layout model and has been communicated as deprecated for 2+ years. Extensions should redesign the blades for a better full-screen experience.

7063623Deprecate old list view



The MsPortalFx.ViewModels.Controls.Lists.ListView and MsPortalFx.ViewModels.Controls.Lists.Gallery controls are being deprecated.  Going forward extensions should use "Fx/Controls/ListView" instead.  Build processes may run into the following errors.

TsLint rule violations:
"ViewModel is deprecated: MsPortalFx.ViewModels.Controls.Lists.ListView is deprecated."

To resolve the violations replace MsPortalFx.ViewModels.Controls.Lists.ListView and MsPortalFx.ViewModels.Controls.Lists.Gallery controls with the "Fx/Controls/ListView" control.

SpecPickerExtenders may also run into compilation errors such as:

"is not assignable to type 'SpecPickerExtender'"
"'selectionMode' in type '' is not assignable to the same property in base type 'SpecPickerExtender'"

To fix the SpecPickerExtender change usage of "MsPortalFx.ViewModels.Controls.Lists.ListView.SelectionMode" to "HubsExtension.Azure.SpecPicker.SelectionMode".

PairedTimeline usage may also run into compilation errors such as:

"is not assignable to parameter of type 'ExtensionOptions'"
"Property 'selectable' in type '' is not assignable to the same property in base type 'ExtensionOptions'."
"Property 'selectionMode' in type '' is not assignable to the same property in base type 'SelectableOptions'"

To fix the PairedTimeline change usage of types from "MsPortalFx.ViewModels.Controls.Lists.ListView" to equivalent types from "Fx/Controls/PairedTimeline".

7063515Deprecate old chart controls



**Expected Errors:**
You will hit tslint errors when using the below view models as they are getting deprecated,
 MsPortalFx.ViewModels.Controls.Visualization.Chart
 MsPortalFx.ViewModels.Controls.Visualization.SimpleChart

**Solution:**
 Please migrate to Fx/Controls/LineChart or Fx/Controls/BarChart or Fx/Controls/AreaChart or Fx/Controls/ScatterChart.
   

**Reason For Breaking Change**
MsPortalFx namespace in non-AMD module. For perf reasons and using new api pattern we have exposed AMD modules under Fx/Controls and asking partners to migrate to new API patterns.
Please refer to https://aka.ms/portalfx/breaking for more details.

7063498Deprecate/Obsolete old balloons



**Expected Errors:** Usage of the old `Balloon` view models and options (i.e. `MsPortalFx.ViewModels.Controls.Balloon` and `MsPortalFx.ViewModels.Controls.DockedBalloon`) will be flagged as a compile-time TSLint error at build time:

 * @deprecated [...][Docked]Balloon[...] is deprecated. Use Fx/Controls/InfoBalloon instead.
 * Please refer to https://aka.ms/portalfx/breaking for more details.

Image


**Solution:** Please use Fx/Controls/InfoBalloon instead:
**Reason For Breaking Change:** This control has a better accessibility support in the new variant.


7063490Deprecate old controls: MsPortalFx.ViewModels.Controls.InfoBox, MsPortalFx.ViewModels.Forms.CustomHtml, MsPortalFx.ViewModels.Forms.Section



**Expected Errors:**
Users of these controls would see a warning which says that the control is deprecated and should be replaced by a newer control.
  • MsPortalFx.ViewModels.Controls.InfoBox
  • MsPortalFx.ViewModels.Forms.CustomHtml
  • MsPortalFx.ViewModels.Forms.Section

**Solution:**
Please use the newer control defined under "Fx/Controls" instead of using MsPortalFx controls.
Example, import CustomHtmlfrom "Fx/Controls/CustomHtml" instead of MsPortalFx.ViewModels.Forms.CustomHtml.

The deprecated controls and their replacements are mentioned below:

Deprecated Control -> Replacement control

MsPortalFx.ViewModels.Controls.InfoBox           -> Fx/Controls/InfoBox
MsPortalFx.ViewModels.Forms.CustomHtml       -> Fx/Controls/CustomHtml       
MsPortalFx.ViewModels.Forms.Section               -> Fx/Controls/Section              

**Reason For Breaking Change**
We are no longer supporting these controls. They are deprecated and should be replaced by corresponding newer controls.


7063486Remove old controls



**Expected Errors:** The following interfaces and classes have been marked as of type `Obsolete` and their usages will be flagged as compile errors at build time:

MsPortalFx.ViewModels.Controls.Splitter.Options and 
MsPortalFx.ViewModels.Controls.Splitter.ViewModel
MsPortalFx.ViewModels.Controls.SearchBox.Options and 
MsPortalFx.ViewModels.Controls.SearchBox.ViewModel

MsPortalFx.ViewModels.Controls.Visualization.ProgressBar.Options,
MsPortalFx.ViewModels.Controls.Visualization.ProgressBar.Contract, and 
MsPortalFx.ViewModels.Controls.Visualization.ProgressBar.ViewModel

MsPortalFx.ViewModels.Controls.TextBlock.Options and 
MsPortalFx.ViewModels.Controls.TextBlock.ViewModel

MsPortalFx.ViewModels.Controls.Forms.CopyableLabel.Options,
MsPortalFx.ViewModels.Controls.Forms.CopyableLabel.Contract, and
MsPortalFx.ViewModels.Controls.Forms.CopyableLabel.ViewModel

MsPortalFx.ViewModels.Controls.SimpleButton.Options and 
MsPortalFx.ViewModels.Controls.SimpleButton.ViewModel

Additionally, `MsPortalFx.ViewModels.PartOperationList.progressBarViewModel` is getting obsoleted: please do not use this API field anymore as it is of type `Obsolete` and will consequently generate compile time build errors.

**Solution:** Please use the corresponding "Fx/Controls" entities in the place of the obsolete items above e.g. "Fx/Controls/Splitter" instead of "MsPortalFx.ViewModels.Controls.Splitter" etc.

These can all be discovered at https://aka.ms/portalfx/playground

**Reason For Breaking Change** This control has a one-to-one mapping with the newer control. These can be easily replaced (with minimal hand coding) if you use the tool from Replacement tool. 


7063465Deprecate old MsPortalFx map



**Expected Errors:**
You will hit tslint errors when using MsPortalFx.ViewModels.Controls.Visualization.Map view models as they are getting obsoleted,


**Solution:**
If you are using basic map, please migrate to the new AMD modules in Fx/Controls/Map.
Legacy MsPortalx HexagonLayout map should be used by SQL extension only. Other extensions should migrate to Fx/Controls/Map.

**Reason For Breaking Change**
MsPortalFx namespace in non-AMD module. For perf reasons and using new api pattern we have exposed AMD modules under Fx/Controls and asking partners to migrate to new API patterns.
Please refer to https://aka.ms/portalfx/breaking for more details.

7063455Remove old diffeditor and deprecate old editor



**Expected Errors:**

  1.  The following interfaces and classes have been marked as of type `Obsolete` and their usages will be flagged as compile errors at build time:
    1. MsPortalFx.ViewModels.Controls.Documents.DiffEditor.Options,
      MsPortalFx.ViewModels.Controls.Documents.DiffEditor.Contract, and 
      MsPortalFx.ViewModels.Controls.Documents.DiffEditor.ViewModel

  2. Usage of the old Editor control in MsPortalFx.ViewModels.Controls.Documents.Editor and its `Editor` `ViewModel`, `Contract`, `Options`, and all its other 24 exported types (i.e. `MsPortalFx.ViewModels.Controls.Documents.Editor.ViewModel`, `MsPortalFx.ViewModels.Controls.Documents.Editor.Contract`, `MsPortalFx.ViewModels.Controls.Documents.Editor.Options`, etc.) will be flagged as a compile-time TSLint error at build time e.g.:
    1.  * @deprecated MsPortalFx.ViewModels.Controls.Documents.Editor[...] is deprecated. Use Fx/Controls/Editor instead.
       * Please refer to https://aka.ms/portalfx/breaking for more details.
**Solution:** Please use the corresponding Fx controls instead:
  1. Fx/Controls/DiffEditor, and
  2. Fx/Controls/Editor respectively.
They can both be found among playground controls at https://aka.ms/portalfx/playground 

**Reason For Breaking Change** For the old DiffEditor and old Editor controls respectively:
  1. This control has a one-to-one mapping with the newer control. These can be easily replaced (with minimal hand coding) if you use the tool from Replacement tool. 
  2. This control has a one-to-one mapping for all functionality with the new control. The only thing different is that the newer variant does not support DiscussionThreads. If you are not using that capability, you should migrate to the newer control as it has more functionality. 

7063452Deprecate/Obsolete old frame controls



**Expected Errors:**
You will hit compilation error when using MsPortalFx.ViewModels.Controls.Internal.IFrameV2 view model as old IFrameV2 control is getting obsoleted.

You will see tslint errors when using MsPortalFx.ViewModels.Controls.Internal.IFrame view model as old IFrame control is getting deprecated and will be obsoleted in future.

**Solution:**
Please migrate to the new AMD modules in Fx/Controls/FrameControls if you are using MsPortalFx.ViewModels.Controls.Internal.IFrame or MsPortalFx.ViewModels.Controls.Internal.IFrameV2 controls.

**Reason For Breaking Change**
MsPortalFx namespace in non-AMD module. For perf reasons and using new api pattern we have exposed AMD modules under Fx/Controls and asking partners to migrate to new API patterns.
Please refer to https://aka.ms/portalfx/breaking for more details.

7063375Deprecate editscope controls



**Expected Errors:**
Users of these controls would see a warning which says that the control is deprecated and should be replaced by a newer control. The controls being deprecated in this Task are as follows:

MsPortalFx.ViewModels.Forms.OAuthButton
MsPortalFx.ViewModels.Forms.DatePicker
MsPortalFx.ViewModels.Forms.Slider
MsPortalFx.ViewModels.Forms.DateTimePicker
MsPortalFx.ViewModels.Forms.PasswordBox
MsPortalFx.ViewModels.Forms.MultiLineTextBox
MsPortalFx.ViewModels.Forms.NumericTextBox
MsPortalFx.ViewModels.Forms.CheckBox
MsPortalFx.ViewModels.Forms.OptionsGroup
MsPortalFx.ViewModels.Forms.TextBox


**Solution:**
Please use the newer control defined under "Fx/Controls" instead of using MsPortalFx controls.
Example, import OAuthButton from "Fx/Controls/OAuthButton" instead of MsPortalFx.ViewModels.Forms.OAuthButton
The deprecated controls and their replacements are mentioned below:

Deprecated Control -> Replacement control

MsPortalFx.ViewModels.Forms.OAuthButton           -> Fx/Controls/OAuthButton 
MsPortalFx.ViewModels.Forms.DatePicker               -> Fx/Controls/DatePicker 
MsPortalFx.ViewModels.Forms.Slider                       -> Fx/Controls/Slider 
MsPortalFx.ViewModels.Forms.DateTimePicker       -> Fx/Controls/DateTimePicker 
MsPortalFx.ViewModels.Forms.PasswordBox           -> Fx/Controls/PasswordBox 
MsPortalFx.ViewModels.Forms.MultiLineTextBox     -> Fx/Controls/MultiLineTextBox 
MsPortalFx.ViewModels.Forms.NumericTextBox      -> Fx/Controls/NumericTextBox 
MsPortalFx.ViewModels.Forms.CheckBox                -> Fx/Controls/CheckBox 
MsPortalFx.ViewModels.Forms.OptionsGroup         -> Fx/Controls/OptionsGroup 
MsPortalFx.ViewModels.Forms.TextBox                   -> Fx/Controls/TextBox 

**Reason For Breaking Change**
We are no longer supporting these controls. They are deprecated and should be replaced by corresponding newer controls. 

7063363Remove editscope controls with less than 10 usages



**Expected Errors:** The following interfaces and classes have been marked as of type `Obsolete` and their usages will be flagged as compile errors at build time:

MsPortalFx.ViewModels.Forms.CustomValueSlider.Options and 
MsPortalFx.ViewModels.Forms.CustomValueSlider.ViewModel
MsPortalFx.ViewModels.Forms.DateTimeRangePicker.Options and 
MsPortalFx.ViewModels.Forms.DateTimeRangePicker.ViewModel

MsPortalFx.ViewModels.Forms.DayPicker.Options and 
MsPortalFx.ViewModels.Forms.DayPicker.ViewModel

MsPortalFx.ViewModels.Forms.DurationPicker.Options and 
MsPortalFx.ViewModels.Forms.DurationPicker.ViewModel

MsPortalFx.ViewModels.Forms.RangeSlider.Options and 
MsPortalFx.ViewModels.Forms.RangeSlider.ViewModel

MsPortalFx.ViewModels.Forms.TimePicker.Options and 
MsPortalFx.ViewModels.Forms.TimePicker.ViewModel

**Solution:** Please use the corresponding "Fx/Controls" entities in the place of the obsolete items above e.g. "Fx/Controls/DayPicker" instead of "MsPortalFx.ViewModels.Forms.DayPicker" etc.

These can all be discovered at https://aka.ms/portalfx/playground
 * Please refer to https://aka.ms/portalfx/breaking for more details.

**Reason For Breaking Change** This control has a one-to-one mapping with the newer control. It might use EditScope but has really low usage (less than 10 across all extensions).  In case you rely on EditScope, you can use How to migrate page to add support for EditScope to the new control. 


7063320Update Pill APIs to not rely on MsPortalFx APIs



**Expected Errors:**
Pill view model's tooltip property is obsoleted as it had dependency with MsPortalFx DockedBalloon view model.
Pill's DialogEditor usages will see compilation error for using the below two MsPortalFx types,
MsPortalFx.ViewModels.Dialog.DialogResult
MsPortalFx.ViewModels.CustomDialogButton

**Solution:**
For tooltip property, please migrate to use infoBalloonContent property to specify the tooltip.
For MsPortalFx.ViewModels.Dialog.DialogResult type, please migrate to use DialogButton from "Fx/Composition/Dialog"
For MsPortalFx.ViewModels.CustomDialogButton type, please migrate to use CustomDialogButton from "Fx/Composition/Dialog"


**Reason For Breaking Change**
AMD Fx APIs are getting cleaned up to not have any legacy MsPortalFx dependencies.
Migrating to AMD module will be more performant and will use the latest recommended API patterns.
Please refer to https://aka.ms/portalfx/breaking for more details.


7063314Remove 'size' and 'image' from infobox



**Expected Errors:**
'size' and 'image' property is no longer supported in Fx/Controls/InfoBox. These will cause a compile time error if used.

**Solution:**
If you relied on the 'size' property, then you should now move to choosing the styling based on the appropriate control factory method (create vs createInline) for the Fx/Control/InfoBox. Please refer to the guidance on the playground for more details on when to use which variant.

If you relied on the 'image' property, that is now being removed as we want to only support standard infoBox styles. You can simply remove the image from the control and set the 'style' option to get similar/identical behavior. In case you were using custom images, that is no longer supported, and unfortunately you would need to build this experience by hand using custom HTML.

**Reason For Breaking Change**
The removal of the 'size' property was primarily for better API segregation between the 2 types of the infoboxes as there is functional differences between the 2 variants.

The removal of the 'image' property was to ensure consistency across all infoboxes and for better control on styling and theming, which custom images were hindering.

7063306Remove 'boxSize' from checkbox



**Expected Errors:**
'boxSize ' is no longer supported in Fx/Controls/CheckBox & Fx/Controls/TriStateCheckBox and will result in a compile time error

**Solution:**
Remove the use of 'boxSize' from checkboxes

**Reason For Breaking Change**
Based on design reviews and alignment to Fabric UI, checkboxes will now only have a single standard size.

7063304Remove unused and duplicate icons



**Expected Errors:**
If using an icon that has been removed, you will get a building with wording  similar to "This expression is not callable".

**Solution:**
Use the following table to find a replacement for your icon:

Deleted icons

Use this instead

AddAlternate

Add

AddBoxed

Add

Clone

Copy

Commits

Commit

Disabled

Disable

EditInverted

Edit

ForPlacementOnly

Disable

GearAlternate

Gear

GitLogo

Logos.Git

GitLogoBox

Logos.GitBox

InstallVisualStudio

DownloadFlat

LoadingLoader

LoadingSpinner

NumberError

Error

NumberSuccess

Check

Plus

Add

PolyResourceList

PolyResourceGroupList

ShellAdd

Add

QuickStart

AzureQuickStart

Settings

Gear

ShellCollapse

CaretDown

Tag

Tags

Tour

InfoFlat

VisualStudio

Logos.VisualStudio

VisualStudioLogoBox

Logos.VisualStudioBox

ArrowWideUp

ArrowUp

ArrowWideDown

ArrowDown

ShellFilter

Filter

ShellPin

Pin

PolyResourceList

PolyResourceGroupList

ShellSave

Save



**Reason For Breaking Change**
Certain icons will be removed since they are not used or they have an identical existing replacement. 

7063289Deprecate hotspot



**Expected Errors:** Usage of the `HotSpot` view models and options will be flagged as a compile-time TSLint error at build time:

 * @deprecated [...]HotSpot[...] is deprecated. Use fxclick directly in your HTML template instead.
 * Please refer to https://aka.ms/portalfx/breaking for more details.


Image

Image


**Solution:** Extensions should build the HTML themselves and use `fxclick` binding to hook up on-click handlers. 

Please use `fxclick` instead in your own HTML template:


**Reason For Breaking Change:** This control has accessibility issues  and is an old pattern of creating links.


7063286Remove deprecated Part types



**Expected Errors:**
PartKind
- This part is no longer supported. Use a custom part instead.
- This part is no longer supported. Use Essentials control instead.

Part
- ResourceSummary.[...] This part is no longer supported. Please use Fx/Controls/Essentials instead.
- SingValueGauge.[...] This part is no longer supported.  Please use a custom part with SingleValueGauge and Metrics control.
- QuotaGauge.[...] This part is no longer supported. Please use custom part with QuotaGauge and Metrics control instead.
- Donut.[...] This part is no longer supported. Please use custom part with the Donut, Legend and Metrics control instead.


**Solution:**
- for ResourceSummary part:  Please replace it with the Essentials control.
- for SingleValueGauge part:  Please replace it with a custom part using SingleValueGauge and Metrics control.
- for QuotaGauge part:  Please replace it with a custom part using QuotaGauge and Metrics control.
- for Donut part: Please replace it with a custom part using Donut, Legend and Metrics control.

**Reason For Breaking Change**
ResourceSummary Part: 

This part was communicated as deprecated for over 2+ years. Extensions should move to using the Essentials control.


SingleValueGauge Part: 

This part is a basic wrapper over existing controls and has low usage. This is easy to replace with a custom part with the SingleValueGauge and Metrics control.


QuotaGauge Part:

This part is a basic wrapper over existing controls and has low usage. This is easy to replace with a custom part with the QuotaGauge and Metrics control.


Donut Part:

This part is a basic wrapper over existing controls and has low usage. This is easy to replace with a custom part with the Donut, Legend and Metrics control.


7063240Remove deprecated dropdowns



**Expected Errors:**
The following old dropdowns are removed:
FxImpl.ViewModels.Forms.CreatorAndComboBox
MsPortalFx.ViewModels.Obsolete.Forms.GroupDropDown
MsPortalFx.ViewModels.Obsolete.Forms.FilterComboBox
MsPortalFx.ViewModels.Obsolete.Forms.MultiSelectDropDown
MsPortalFx.ViewModels.Obsolete.Forms.DropDown
You will see a compile time error if you are using these.

As part of the above the "MultiselectDropDownFormFieldInfo' and 'HtmlBindingsType.MultiselectDropDown' have also been removed as the underlying dropdown is not supported anymore.

**Solution:**
For the dropdowns, you should use Fx/Controls/DropDown or Fx/Controls/ComboBox depending on what your use case is.
For the grid changes, you should move using the DroDownFormFieldInfo or GroupDropDownFormFieldInfo. For some of the missing functionalities from MultiselectDropDownFormFieldInfo, those are no longer supported due to user feedback and consistency issues and if you are using any of those, feel free to reach out to the framework team to go over alternatives. 

**Reason For Breaking Change**
The old dropdowns were obsoleted almost 3 years ago and are now being removed. The new dropdown is accessible and much more performant and should have functional parity.

7063136Deprecate inline editing mode in Pill



**Expected Errors:**
Pill InlineEditor is getting deprecated.
You will see TS lint errors if you are using Pill's InlineEditor.

**Solution:**
Please migrate to DialogEditor or CustomEditor for your scenario.

**Reason For Breaking Change**
InlineEditor is getting deprecated after user feedbacks around jumpyness of the UX and the dropdown/pill movement. We want to streamline the UX with less jumpiness and recomending DialogEditor to be used uniformly.
Please refer to https://aka.ms/portalfx/breaking for more details.


6623500[Hubs] [Breaking change] Obsolete the old hubs dropdowns

6623485[Hubs] [Breaking change] Deprecate the WidthInPixels property in PDL


The PDL compiler will emit an error if the ARG browse Column entry uses the WidthInPixels property.  This property has been superseded by the Width property which includes grid column units such as 'px' for pixel units and 'fr' for fractional units.

For a one-to-one mapping, replace:

WidthInPixels="50"

with:

Width="50px"

However, given the benefits of using fractional units, it would be better to start with replacing this:

WidthInPixels="50"

with:

Width="50fr"

And then adjusting to suit the column for better resizing.

6585041Pin Part to Dashboard Experience


Expected Errors:

- Extensions running tests on pinning a part or blade to dashboards will have their tests fail as the new pin to dashboard pane will launch and tests will timeout with an exception. 
- Extension that run pin tests should also ensure that full portal is instantiated during tests with Dashboards accessible as pin functionality needs access to recent dashboards for pinning. 

Solution:

- To continue running tests upgrade to the latest Microsoft.Portal.TestFramework.CSharp nuget version 1.0.210.0 or higher. The test framework will automatically handle pinning a blade to the most recent dashboard. 
- For pin tests that make use of pinning of a part using Fx/Pinner/Pin function calls to framework or that validate pinning of extension developed parts, should now handle the context pane opening in tests by finding the pin context pane and then pin button and clicking on the pin button.

Reason For Breaking Change
New pin to any dashboard functionality launches a context pane for users to select a dashboard or create new. This new UI flow will cause existing tests to fail if they aren't handling the context pane.

6449603Cleanup isLogo usage from code



**Expected Errors:**

- Usage of the `isLogo` SVG options will be flagged as compile error at build time.
- SVG attribute `data-islogo` is flagged at runtime as unsupported. This has no effect on rendering.

**Solution:**

- Remove `isLogo`. The option has not have effect since September 2019, and this is cleanup work on our API surface.

**Reason For Breaking Change**

- This deprecation and removal is a simplification of the SVG options to reduce confusion on how to preserve colors on the rendered SVG. Now the embedded colors are respected, and when none are provided, they are themed in their respective context.

6433114Update the OWIN library to version 4.1



Expected Errors:

- The IIdentityFederationMetadataSource interface and the corresponding IdentitiyFederationMetadataSource class have been removed as they are no longer required in the new library.
- The constructor for class Microsoft.Portal.Security.AzureActiveDirectory.JwtValidater does not have the IIdentityFederationMetadataSource parameter.
- The constructor for class Microsoft.Portal.Security.AzureActiveDirectory.JwtValidationParameters has been changed to accept a list of signing keys instead of signing tokens.

Solution:

- You'll have to modify the code to meet the new variables.

Reason For Breaking Change

- This change upgrages to the latest OWIN v4.1. The breaking changes introduced in this work item are because of underlying changes in the latest OWIN library.
- There's no concept of a SecurityToken anymore. It has been changed to SigningKeys instead. So this is going to break anyone using this class if they adopt the new SDK.
- Also, the federation metadata used to be in XML format. The new federation metadata endpoint uses JSON format. So, corresponding changes have been made to how the federation metadata is read.

6063098[Hubs][Breaking change] Obsolete armEndpointLowerCase in Fx/Ajax


 
**Expected Errors:**
 - Expect compile-time errors when using armEndpointLowerCase from the Fx/Ajax module
 
**Solution:**
 - Use the getEndpoints() function in the Fx/Ajax module to get the set of commonly-used endpoints, and lowercase the `arm` property if necessary
 
**Reason For Breaking Change**
 - Unnecessary duplication with getEndpoints()

6016095Add running ESLint deprecated rule in extension build targets, breaking



Expected Errors:

- `Install the azure portal CLI using 'npm install -g @microsoft/azureportalcli' documentation https://aka.ms/portalfx/apclidoc
- msbuild warnings and errors corresponding to lint warnings/errors

Solution:

- For warnings and errors recommended approach: fix lint warnings/errors by moving to the recommended APIs. If you can't immediately implement the recommended fix you can silence the lint warning/error using standard eslint disable comments https://eslint.org/docs/user-guide/configuring#disabling-rules-with-inline-comments.  If you do this we recommend you take a work item and include a reference to that in the comment. Disabling linting will drop that use from telemetry and as such you may be broken in a future release if we remove the said API based on apparent non/usage.

Reason For Breaking Change

Linting will run on dev mode builds builds targeting local hosting service i.e whenever RunBundlerInDevMode=true for the following reasons
- clear notification of deprecated APIs for for extension developers
- telemetry for portal to understand which deprecated APIs are not in use and can be removed
- telemetry for portal to understand which deprecated APIs are in heavy use and need --fix rule automation and/or documentation for migration
- lint for code hygiene, we will drip feed a larger set of rules into the core ruleset over time rather then all at once to avoid large amount of linting warn/errors. if you want to be proactive update to use the recommended set, see linting in https://aka.ms/portalfx/apcli 

5142904Remove 'autosize' API from viewmodel partcontainer and part composition



**Expected Errors:**

- Calls to `autoSize` API on the PartContainer will now break build since the API was removed.

**Solution:**

- Remove calls to `autosize`. If applicable, migrate to `resizeTo` API on the same container.

**Reason For Breaking Change**

- The API was developed as a prototype and was solely usable by a single extension. That extension already cleaned up their usage. Other usage was already not working and just dead code as such.

5012171Remove the 'Browse' noPDL blade from ART browse, the 'BrowseResource' blade is the appropriate blade


If you are using the Browse noPDL blade, switch your code to use BrowseResource noPDL blade.  If you have used the MsPortalFx.Base.Constants.AssetTypes.BrowseBlade constant in Base.Constants.ts, switch to the MsPortalFx.Base.Constants.AssetTypes.BrowseResourceBlade constant (though the value is the same).

If you have a deep link to the Browse blade (#blade/HubsExtension/Browse) switch the deep link to the BrowseResource blade (#blade/HubsExtension/BrowseResource).

3822777Deprecate browse V1 (PDL + code in shell and hubs)


Browse V1 has been deprecated for some time and no teams are actively using browse V1 at this point.  We confirmed the usage using Kusto telemetry logs and have mitigation in place for the few pinning parts remaining.

This means that the ServiceViewModel's for Browse, Grid, Security and DynamicBlade have all been set to Obsolete and implementation code in FX has been removed.

Affected:
PDL compiler will emit a compile error for Browse Type="ServiceViewModel". Either remove the Browse entry from PDL or change the Type to:
  • ResourceType for all ARM resource or
  • AssetTypeBlade for custom browse using the asset type's blade property.

PDL compiler will emit a compile error for GridColumns entry, please remove that entry from PDL.

PDL compiler will emit a compile error for Security entry, please remove that entry from PDL.

PDL compiler will (and has) emitted a compile error for DynamicBlade entry, please remove that entry from PDL.

If you have an asset type view model which referenced one of the following interfaces, it is safe to remove that reference:

MsPortalFx.ViewModels.Services.Browse.Contract
MsPortalFx.ViewModels.Services.DynamicBlade.Contract
MsPortalFx.ViewModels.Services.GridColumns.Contract
MsPortalFx.ViewModels.Services.Security.Contract

Similarly, if you have an asset view model which derived from one of the following base classes, it is safe to remove that reference:

MsPortalFx.ViewModels.Services.Browse.Service
MsPortalFx.ViewModels.Services.DynamicBlade.Service
MsPortalFx.ViewModels.Services.GridColumns.Service
MsPortalFx.ViewModels.Services.Security.Service


3331114Obsolete MsPortalFx.ViewModels.Controls.PreviewTag



**Expected Errors:**
MsPortalFx.ViewModels.Controls.PreviewTag is no longer supported and will cause a compile time error is used.

**Solution:**
This control is no longer supported and would need to be replaced with custom HTML if still needed.

**Reason For Breaking Change**
This was a control created for internal use of preview features and is not intended to be used externally. On code scan it was determined that no extension is currently using this.

2729311MsPortalFx.ViewModels.Services.ResourceTypes needs clean up


Most of the APIs in MsPortalFx.ViewModels.Services.ResourceTypes are being deprecated.  There are performance issues with the majority of the APIs due to excessive regex use and constantly parsing the IDs.

The Fx/ArmId module should be used instead:

import { ArmId } from "Fx/ResourceManagement";

The ArmId namespace has two main functions, 'parse()' and 'stringify' which operator like JSON's parse and stringify.  The parse takes any string value and will produce an 'ArmId' interface which at the top level contains a 'kind' property which if of type const enum ArmId.Kind.  If the resource ID parsed is null or not a valid resource ID (including subscription ID or resource group ID), the kind property will be ArmId.Kind.Invalid but the function never returns null.  If the kind is not Invalid, it is one of the other kinds which represents a valid ID.  The stringify function takes a parsed ArmId and the ArmId.Kind for the string and produces a canonical string for that ID.  This two way translation also parsing and stringifying the IDs.

For optimum performance any parse() calls inside of loops or in observable subscriptions/computeds should be avoided.  Intead in these cases, parse the ID once and store the resulting ArmId value which can be reasoned over many times without the penalty of parsing the resource ID.

Some of the existing ResourceTypes APIs have fairly direct translations:

Deprecated | New Recipe
-- | --
isTenantResource(resource) | ArmId.parse(resource).kind === ArmId.Kind.TenantResource
isSubscriptionId(id) | ArmId.parse(id).kind === ArmId.Kind.Subscription
isResourceGroupId(id) | ArmId.parse(id).kind === ArmId.Kind.ResourceGroup
isResourceId(id) | ArmId.parse(id).kind === ArmId.Kind.Resource
isTagId(id) | ArmId.parse(id).kind === ArmId.Kind.SubscriptionTagValue
isResourceManagerId(id) | ArmId.parse(id).kind !== ArmId.Kind.Invalid

The following interfaces are replaced by a single ArmId interface with the kind property and all the properties under the follow interfaces:

Deprecated | ArmId
-- | --
ISubscriptionDescriptor | ArmId
IResourceGroupDescriptor | ArmId
IResourceManagerDescriptor | ArmId
IResourceDescriptorBase | ArmId
IResourceDescriptor | ArmId
IDeploymentDescriptor | ArmId
ITagDescriptor | ArmId

Subsequently, all the following APIs should be replaced with single ArmId.parse() call:

Deprecated | ArmId.parse()
-- | --
parseSubscriptionDescriptor | ArmId.parse()
parseResourceGroupDescriptor | ArmId.parse()
parseResourceDescriptor | ArmId.parse()
parseResourceManagerDescriptor | ArmId.parse()
parseDeploymentDescriptor | ArmId.parse()
parseTagDescriptor | ArmId.parse()

And all the following build APIs should be replaced with single ArmId.stringify() call with the desired Kind:

Deprecated | ArmId.stringify()
-- | --
buildDeploymentId ArmId.stringify()
buildSubscriptionIdFromDescriptor ArmId.stringify()
buildSubscriptionIdFromResourceGroupDescriptor ArmId.stringify()
buildSubscriptionIdFromResourceDescriptor ArmId.stringify()
buildSubscriptionIdFromResourceGroupId ArmId.stringify() - use ArmId.parse() on the resource group ID
buildSubscriptionIdFromResourceId ArmId.stringify() - use ArmId.parse() on the resource ID
buildResourceGroupIdFromDescriptor ArmId.stringify()
buildResourceGroupIdFromResourceDescriptor ArmId.stringify()
buildResourceGroupIdFromResourceId ArmId.stringify() - use ArmId.parse() on the resource ID
buildResourceIdFromDescriptor ArmId.stringify()

For the compare functions, simply toLowerCase() each ID and use string comparison:

compareSubscriptionId
compareResourceGroupId
compareResourceId
compareResourceManagerId

Similarly, for the buildLowerCaseXxx() functions, simply toLowerCase() the ID:

buildLowerCaseSubscriptionId
buildLowerCaseResourceGroupId
buildLowerCaseResourceId

Others require some work:

isDeploymentId should use parse(id), then check that the kind is Resource and that the provider is 'Microsoft.Resources' and type is 'deployments'

buildSubscriptionIdFromSubscriptionName (and buildSubscriptionFromId) - use `/subscriptions/${subscription}`

buildResourceGroupIdFromSubscriptionAndResourceGroupName - use subscription ? `/subscriptions/${subscription}${resourceGroup ? `/resourceGroups/${resourceGroup}` : ``}` : ``

buildResourceTypeFromResourceDescriptor - use armId.resourceType

buildResourceTypeFromResourceId (and buildResourceTypeFromResourceManagerId) - use ArmId.parse(resourceId).resourceType

buildTopmostParentResourceIdFromDescriptor - use `/subscriptions/${armId.subscription}/resourceGroups/${armId.resourceGroup}/providers/${armId.provider}/${armId.resourceTypes[0]}/${armId.resourceIds[0]}`

buildParentResourceIdFromDescriptor - there is no great way to handle this case other than parsing the resource ID using ArmId.parse(), then trimming the last entry from the resourceTypes and resourceIds and then calling ArmId.stringify().  This is a special case and should be implemented locally however.

isParentResource - use:
         const pattern = toLowerCase(parentResourceId) + "/";
         return startsWith(toLowerCase(childResourceId), pattern);

buildTagName - use: `${tagPrefix}:${resourceId}`

buildRelatedTagName - use: `hidden-related:${resourceId}`

buildLinkTagName - use: `hidden-link:${resourceId}`

tryBuildResourceManagerKey - use: ArmId.parse(id) !== ArmId.Kind.Invalid ? id.toLowerCase() : null

subscriptionContainsResourceGroup - use: 
         const subscriptionArmId = ArmId.parse(subscriptionId);
         if (subscriptionArmId.subscription === ArmId.parse(resourceGroupId).subscription && subscriptionArmId.kind === ArmId.Kind.Subscription) {}

subscriptionContainsResource - use:
         const subscriptionArmId = ArmId.parse(subscriptionId);
         if (subscriptionArmId.subscription === ArmId.parse(resourceId).subscription && subscriptionArmId.kind === ArmId.Kind.Subscription) {}

resourceGroupContainsResource - use: 
         const rgArmId = ArmId.parse(resourceGroupId);
         const resArmId = ArmId.parse(resourceId);
         if (rgArmId.subscription === resArmId.subscription && rgArmId.resourceGroup === resArmId.resourceGroup && rgArmId.kind === ArmId.Kind.ResourceGroup) {}

2649781remove status from ResourceTypes.ts. Contract interface

5.0.303.7391

7343607Add dependency MSBuild DLLs to Bundle

This change introduces some required DLLs for running Bundle.exe in certain stand-alone configurations (outside of an MSBuild pipeline) which were previously unaccounted for.
This change is not expected to be breaking.

5.0.303.4271

5468245Investigate .NET Core support for the build


This change adds .NET Core versions of some Portal SDK tools to the existing NuGet packages. (In folders "netcore30" and "netstandard20" etc.)

**PLEASE DO NOT USE THE .NET CORE BINARIES YET**

Support for .NET Core in the Portal SDK is not ready for broad consumption.
Existing binaries in existing packages are still .NET Framework versions, and are the only type supported.

If you are seeing C# build errors with the following error: "You must add a reference to assembly 'netstandard'...." then follow the answer in this StackOverflow question: https://stackoverflow.microsoft.com/questions/145700/145701#145701

5.0.303.3341

6449603Cleanup isLogo usage from code



**Expected Errors:**

- Usage of the `isLogo` SVG options will be flagged as compile error at build time.
- SVG attribute `data-islogo` is flagged at runtime as unsupported. This has no effect on rendering.

**Solution:**

- Remove `isLogo`. The option has not have effect since September 2019, and this is cleanup work on our API surface.

**Reason For Breaking Change**

- This deprecation and removal is a simplification of the SVG options to reduce confusion on how to preserve colors on the rendered SVG. Now the embedded colors are respected, and when none are provided, they are themed in their respective context.