Skip to content

Latest commit

 

History

History
31 lines (21 loc) · 69.6 KB

breaking-changes.md

File metadata and controls

31 lines (21 loc) · 69.6 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

9.49.0.5

12804917Remove SVGo nupkg from within Tools nupkg


The SVGo NUPKG was included inside the Microsoft.Portal.Tools NUPKG, as well as the unpacked version.

As of this change, only the unpacked (loose) version of SVGo is included in the Microsoft.Portal.Tools NUPKG. The targets files used by the SDK do not use the packed version of SVGo (only the loose version).

9.31.0.5

12375340[Notifications] Update Modal Template to Align with Fluent UI


**Expected Errors**
No error expected. This is an addition of a new field to an existing API.

9.2.0.5

8495610Add IBrowserElement to enable side-by-side Playwright support for @microsoft/azureportal-test


Added IBrowserAutomation and IBrowserElement abstractions to @microsoft/azureportal-test. Api's have been updated to return these abstractions i.e. api's now return and take IBrowserElement instances instead of webdriver.WebElement.

The actual instance of webdriver.WebElement can be accessed using the 'element' property on the IBrowserElement instance.

**Expected Error**

error TS2352: Conversion of type 'IBrowserElement' to type 'WebElement' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.
  Type 'IBrowserElement' is missing the following properties from type 'WebElement': getDriver, getId, getCssValue, submit, and 2 more.

             await driver.actions().doubleClick(<WebElement>rowWebElement).perform();

**Solution:**

Reference the WebElement using the 'element' property on IBrowserElement.

             (await resourceRow.getWebElement()).element;

**Reason For Breaking Change**

This has allowed adding support for additional browser automation framework like Playwright (https://playwright.dev/).

12541722[Breaking] deprecate policyValidationFactory and createPolicyValidationFactory



**Expected Errors:** Usage of the `policyValidationFactory` on create blade context, and `import { createPolicyValidationFactory } from "Fx/ResourceManagement/Policies"' are now deprecated

**Solution:** Do not implement custom policy validators and remove usage from creates.

**Reason For Breaking Change:** A more comprehensive policy API covering creates as well as management scenarios is being created and is projected to be available in early 2022

12540997[Deprecate] Deprecate MsPortalFx.ViewModels.Toolbars



**Expected Errors:**
You will hit eslint errors regarding deprecated APIs when using view model or types from MsPortalFx.ViewModels.Toolbars namespace.

**Solution:**
If you have any reference to MsPortalFx.ViewModels.Toolbars types, please migrate to equivalent types in Fx/Controls/Toolbar.

Eg. How to migrate MsPortalFx.ViewModels.Toolbars.OpenBladeButton to Fx/Controls/Toolbar,

import * as Toolbar from "Fx/Controls/Toolbar";

const openBladeButton = Toolbar.ToolbarItems.createBasicButton(container, {
    label: ClientResources.Toolbar.openBlade,
    icon: MsPortalFx.Base.Images.Commit(),
    onClick: { bladeReference: BladeReferences.forBlade("OpenedFromToolbarBlade").createReference() },
    telemetryName: "OpeneBladeCommand",
});

**Reason For Breaking Change**
FX APIs nested in the MsPortalFx.* namespace aren't located in AMD modules. AMD modules can be selectively loaded and this results in better perf. For this reason, all modern FX APIs for controls are located in 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.

12531781Deprecate MsPortalFx.Base.Promise and MsPortalFx.Base.PromiseV

To improve performance the Portal framework is standardizing on native Promises.  All Portal APIs that previously used MsPortalFx.Base.Promise or MsPortalFx.Base.PromiseV<T> have been updated to use the TypeScript native Promise<T> type.

To make extension conversion easier the MsPortalFx.Base.Promise and MsPortalFx.Base.PromiseV<T> types have been re-defined to be compatible with Promise<T>.  They have also been deprecated.  Extensions can search and replace with the Promise<T> type or ignore the deprecation warnings and change them when convenient.

MsPortalFx.Base.Promise is not generic but is equivalent to MsPortalFx.Base.PromiseV<any>.  For search and replace it should be replaced with Promise<any> for the best compatibility with current code.

You will get compile errors if you are using a promise type not compatible with an API requiring Promise<T>.  To fix you can wrap with Q() or use a native Promise<T>.  Any code that is already using Q or native Promise will be compatible and not require a change.  This works for Q because the Portal implementation of Q.Promise extends the native Promise. 

12530398[Breaking change] Update JQuery definition to reflect update to the 3.x release



The runtime JQuery library is being migrated to 3.x release. While this is mostly no-op at runtime, there are a few changes in the API that are needing attention to help migrate to the 4.x branch in the future if used in your code. This is already in flight and has received very few reports of problems. Continue reading to detect if a runtime issue could be related to the update.

**Expected Errors:**

At build time:
There may be type that are missing or marked as deprecated if you use some older JQuery methods.
This type definition update should flag where to pay attention for removed or updated behaviors.

At runtime:
The JQuery 3.x update is currently flighted in MPAC and fully deployed in RC and is no-op for most folks since the API internally remained working,
There has been very minimal problems reported, though some have noticed changes in promise timings. If you notice some problems related to promises mixing between JQuery and other libraries, please reach out to the framework team.


**Solution:**

  • For event handling that are using bind or delegate
    • Migrate to the on/off pattern.
  • For load/unload/error event shortcut methods
    • Migrate to the on/off pattern.
  • If using `parseJSON()`
    • Migrate to browser implementation `JSON.parse()` 

**Reason For Breaking Change:**

Maintaining security of the JQuery 2.x release is becoming impractical.
The 3.x release helps stay more current with that, and minimize the custom changes made in the release.
In addition, the 3.x release has better Promise support that are more compatible with all other promise libraries and native promises.

12529778[Breaking] Make Obsolete MsPortalFx.Azure.ResourceManager.Pickers.Specs.Infobox



**Expected Errors:** Usage of the MsPortalFx.Azure.ResourceManager.Pickers.Specs.Infobox is now Obsolete

**Solution:** Please switch to using "Fx/Specs/Dropdown" for spec selection purposes.

**Reason For Breaking Change:** Pickers are an obsolete concept in the portal.

12496927Obsolete some MsPortalFx promise types

Several Promise related API have been changed and will cause compilation errors.

MsPortalFx.Base.Internal.ThenableV
The internal type ThenableV is obsolete.
This type is internal and should not be in use by extensions.
Please use PromiseLike<T> instead.

MsPortalFx.Base.Internal.PromiseBase
This internal type PromiseBase is obsolete.
This type is internal and should not be in use by extensions.
Please use Promise<T> instead.

MsPortalFx.NativePromise
This type NativePromise is obsolete.
This type was an alias for Promise<T>.
Please use Promise<T> instead.

MsPortalFx.Base.PromiseVN
The type PromiseVN is obsolete.
Please use Promise<T> or Q.Promise<T> instead.
Q.Promise is the only portal promise that supports progress notifications.

MsPortalFx.Base.PromiseN
The type PromiseN is obsolete.
Please use Promise<T> or Q.Promise<T> instead.
Q.Promise is the only portal promise that supports progress notifications.

MsPortalFx.Base.PromiseV and MsPortalFx.Base.Promise catch
The definition of catch was changed to match the native Promise<T> definition.
This may identify some bugs in catch usage or could require some type conversion.
When possible please use the native Promise<T> or Q.Promise<T> instead of MsPortalFx.Base.Promise or MsPortalFx.Base.PromiseV.

12492575[Deprecate] Deprecate MsPortalFx.ViewModels.FileDownload



**Expected Errors:**
You will hit eslint errors regarding deprecated APIs when using view model or types from MsPortalFx.ViewModels.FileDownload namespace.


**Solution:**
MsPortalFx FileDownload control was obsoleted in Nov2020 and the current deprecation is for common FileDownload types. If you have any reference to MsPortalFx.ViewModels.FileDownload types, please migrate to equivalent types in Fx/Controls/FileDownload for file download scenarios and Fx/Controls/Toolbar for file download usage in toolbar.  


**Reason For Breaking Change**
FX APIs nested in the MsPortalFx.* namespace aren't located in AMD modules. AMD modules can be selectively loaded and this results in better perf. For this reason, all modern FX APIs for controls are located in 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.

12492433[Deprecate] Deprecate MsPortalFx.ViewModels.FileUpload and FxImpl.FileUpload



**Expected Errors:**
You will hit eslint errors when using any types in the below namespaces as they are getting deprecated,
    MsPortalFx.ViewModels.FileUpload,
    FxImpl.FileUpload

**Solution:**
MsPortalFx FileUpload control was obsoleted in Nov 2020 and the current deprecated namespaces is for common FileUpload types. If you have any references to the types in those namespaces, please migrate to equivalent types in Fx/Controls/FileUpload for file upload scenarios and Fx/Controls/Toolbar for file upload usage in toolbar.


**Reason For Breaking Change**
FX APIs nested in the MsPortalFx.* namespace aren't located in AMD modulesAMD modules can be selectively loaded and this results in better perf. For this reason, all modern FX APIs for controls are located in 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.

12475924Use native Promise for control APIs

To improve performance the Portal framework is standardizing on native Promises.  All control APIs have been updated to use the native Promise type instead of Q.Promise, MsPortalFx.Base.Promise, or MsPortalFx.Base.PromiseV.  In most cases this will compile without error.  However, in some case you may need to convert to a native Promise or a Q.Promise (which extends native Promise in the portal.)

When the Portal was created it used JQuery Promises and then later adapted to Q Promises.  We now have native Promises or pollyfills in all browsers. TypeScript includes definitions for Promise and support for async/await using them.  The native Promises are faster and standard so the Portal is in the process of transitioning APIs to use them.

To help aid in this process the Q.Promise implementation in the Portal framework is now type and run-time compatible with native Promises. This means that you can continue to pass Q.Promise to APIs that are now typed Promise without error. For APIs that used to return Q.Promise and now return Promise you can wrap the return value with Q() as required.  In both cases you now have the option of removing Q.Promise and using native Promises.

Below is a list of the affected public APIs:

"Fx/Controls/Accordion" SectionOptions content
"Fx/Controls/AreaChart" Contract setSeriesSelections
"Fx/Controls/BarChart" Contract setSeriesSelections
"Fx/Controls/BaseResourceDropDown" Subscription.Options customFetch
"Fx/Controls/BaseResourceDropDown" Location.Options customFetch
"Fx/Controls/BaseResourceDropDown" ResourceGroup.Options customFetch
"Fx/Controls/ComboBox" Options onFilter
"Fx/Controls/DiffEditor" Contract refresh
"Fx/Controls/DiffEditor" Contract save
"Fx/Controls/DropDown" Options customFilter
"Fx/Controls/DropDown" Options selectAllOverride
"Fx/Controls/Editor" Contract refresh
"Fx/Controls/Editor" Contract save
"Fx/Controls/FileDownload" DownloadContextCallback
"Fx/Controls/FileDownload" OAuthDownloadOptions downloadContext
"Fx/Controls/FileDownload" SasLikeDownloadOptions downloadContext
"Fx/Controls/FileDownload" BlobUriDownloadOptions downloadContext
"Fx/Controls/FileDownload" DataUriDownloadOptions downloadContext
"Fx/Controls/FileUpload" AuthorizationContext fetchAuthorization
"Fx/Controls/FileUpload" AsyncUploadTaskContract resume
"Fx/Controls/FileUpload" AsyncUploadTaskContract pause
"Fx/Controls/FileUpload" AsyncUploadTaskContract cancel
"Fx/Controls/FileUpload" AsyncUploadTaskContract complete
"Fx/Controls/FileUpload" AsyncUploadTaskContract abort
"Fx/Controls/FileUpload" AsyncUploadTaskContract dispose
"Fx/Controls/FileUpload" AsyncUploadTaskContract getNextChunk
"Fx/Controls/FileUpload" Contract addUploadTasks
"Fx/Controls/FileUpload" Contract resetUploadTasks
"Fx/Controls/FileUpload" EventHandlerContracts.fileUploadSasUri renew
"Fx/Controls/FileUpload" EventHandlerContracts.fileUploadAuthorization renew
"Fx/Controls/FileUploadManagement" getUploadInfos
"Fx/Controls/FileUploadManagement" getResumableUploadInfos
"Fx/Controls/FileUploadManagement" getAsyncUploadTasks
"Fx/Controls/FileUploadManagement" invokeUploadAction
"Fx/Controls/FileUploadManagement" getNextChunk
"Fx/Controls/FileUploadManagement" registerRenewSasUriCallback
"Fx/Controls/FileUploadManagement" registerRenewAuthorizationCallback
"Fx/Controls/FormBase" Contract triggerValidation
"Fx/Controls/FormBase" Contract clearValidation
"Fx/Controls/Graph" Contract zoomToFit
"Fx/Controls/Graph" Contract zoomIn
"Fx/Controls/Graph" Contract zoomOut
"Fx/Controls/Graph" Contract zoomTo100Percent
"Fx/Controls/Graph" Contract cocusOnNode
"Fx/Controls/Graph" Contract focusOnEdge
"Fx/Controls/Graph" Contract bringRectIntoView
"Fx/Controls/Graph" Contract addEdge
"Fx/Controls/Graph" Contract duplicateSelectedEntities
"Fx/Controls/Graph" Contract deleteEntities
"Fx/Controls/Graph" Contract getLayoutNoOverlaps
"Fx/Controls/Graph" Contract setNodeRects
"Fx/Controls/Graph" Contract getNodeRects
"Fx/Controls/Graph" ViewModel getLayoutNoOverlaps
"Fx/Controls/Graph" ViewModel setNodeRects
"Fx/Controls/Graph" ViewModel getNodeRects
"Fx/Controls/Graph" ViewModel zoomToFit
"Fx/Controls/Graph" ViewModel zoomIn
"Fx/Controls/Graph" ViewModel zoomOut
"Fx/Controls/Graph" ViewModel zoomTo100Percent
"Fx/Controls/Graph" ViewModel focusOnNode
"Fx/Controls/Graph" ViewModel focusOnEdge
"Fx/Controls/Graph" ViewModel bringRectIntoView
"Fx/Controls/Graph" ViewModel addEdge
"Fx/Controls/Graph" ViewModel duplicateSelectedEntities
"Fx/Controls/Graph" ViewModel deleteEntities
"Fx/Controls/LineChart" Contract setSeriesSelections
"Fx/Controls/ListView" ContextMenuOptions supplyMenuCommands
"Fx/Controls/ListView" ContextMenuOptions supplyMenuBulkCommands
"Fx/Controls/Menu" ViewModel initialize
"Fx/Controls/MonitorChartV2" Contract metricsDataProvider
"Fx/Controls/MonitorChartV2" MetricsDataProvider getFilterAttributes
"Fx/Controls/MonitorChartV2" MetricsDataProvider getFilterValues
"Fx/Controls/Pill" InlineEditor onEditModeExited
"Fx/Controls/Pill" DialogEditor onEditModeExited
"Fx/Controls/Pill" Options createEditor
"Fx/Controls/ScatterChart" Contract setSeriesSelections
"Fx/Controls/SearchBox" Options update
"Fx/Controls/SearchBox" Options submit
"Fx/Controls/SearchBox" Contract reset
"Fx/Controls/Section" Contract triggerValidation
"Fx/Controls/Section" Contract clearValidation
"Fx/Controls/Splitter2" PaneOptions content
"Fx/Controls/Storage/BlobContainerDropDown" generateSasUri
"Fx/Controls/TabControl" Contract triggerValidation
"Fx/Controls/TagsByResource" Contract triggerValidation
"Fx/Controls/TagsByResource" Command execute
"Fx/Controls/Toolbar" FileUploadButtonContract resetUploadTasks
FxImpl.Azure.BaseResourceDropDown BaseResourceDropDown clearValidation
FxImpl.Azure.BaseResourceDropDown BaseResourceDropDown triggerValidation
MsPortalFx.ViewModels.Controls.Lists.Grid ViewModel reset
MsPortalFx.ViewModels.Controls.Lists.Grid ViewModel resetCallback
MsPortalFx.ViewModels.Controls.Lists.Grid GridResetCallback
MsPortalFx.ViewModels.Controls.Lists.Grid GridCallback
MsPortalFx.ViewModels.Controls.Lists.Grid Contract reset
MsPortalFx.ViewModels.Controls.Lists.Grid Contract resetCallback
MsPortalFx.ViewModels.Controls.Lists.Grid GroupDropDownFormFieldInfo customFilter
MsPortalFx.ViewModels.Controls.Lists.Grid GroupDropDownFormFieldInfo selectAllOverride
FxImpl.ViewModels.Controls.Lists.Grid Actions sort
MsPortalFx.ViewModels Field clearValidation
MsPortalFx.ViewModels Field triggerValidation
MsPortalFx.ViewModels FormElement clearValidation
MsPortalFx.ViewModels FormElement triggerValidation
MsPortalFx.ViewModels CustomValidationOptionsV validate
MsPortalFx.ViewModels CustomFormValidationV validate
MsPortalFx.ViewModels CustomValidationV validate
MsPortalFx.ViewModels CustomValidationV constructor
MsPortalFx.ViewModels.FileUpload UploadActionCallback
MsPortalFx.ViewModels.FileUpload GetNextChunkCallback
MsPortalFx.ViewModels.FileUpload AsyncUploadTaskContract resume
MsPortalFx.ViewModels.FileUpload AsyncUploadTaskContract pause
MsPortalFx.ViewModels.FileUpload AsyncUploadTaskContract cancel
MsPortalFx.ViewModels.FileUpload AsyncUploadTaskContract complete
MsPortalFx.ViewModels.FileUpload AsyncUploadTaskContract abort
MsPortalFx.ViewModels.FileUpload AsyncUploadTaskContract dispose
MsPortalFx.ViewModels.FileUpload AsyncUploadTaskContract getNextChunk
MsPortalFx.ViewModels.FileUpload AuthorizationContext fetchAuthorization
MsPortalFx.ViewModels.FileUpload getUploadInfos
MsPortalFx.ViewModels.FileUpload getResumableUploadInfos
MsPortalFx.ViewModels.FileUpload getAsyncUploadTasks
MsPortalFx.ViewModels.FileUpload invokeUploadAction
MsPortalFx.ViewModels.FileUpload getNextChunk
MsPortalFx.ViewModels.FileUpload registerRenewSasUriCallback
MsPortalFx.ViewModels.FileUpload registerRenewAuthorizationCallback
MsPortalFx.ViewModels.FileUpload AsyncUploadTask resume
MsPortalFx.ViewModels.FileUpload AsyncUploadTask pause
MsPortalFx.ViewModels.FileUpload AsyncUploadTask cancel
MsPortalFx.ViewModels.FileUpload AsyncUploadTask complete
MsPortalFx.ViewModels.FileUpload AsyncUploadTask abort
MsPortalFx.ViewModels.FileUpload AsyncUploadTask dispose
MsPortalFx.ViewModels.FileUpload AsyncUploadTask getNextChunk
MsPortalFx.ViewModels.Forms.AsyncFileUpload execUpload
MsPortalFx.ViewModels.Forms.Base.Input ViewModel clearValidation
MsPortalFx.ViewModels.Forms.Base.Input ViewModel triggerValidation
MsPortalFx.ViewModels.Forms.Base Section clearValidation
MsPortalFx.ViewModels.Forms.Base Section triggerValidation
MsPortalFx.ViewModels FormProperties triggerValidation

12467877Promise and Promise rejection handling changes

Several Promise related API have been changed and will cause compilation errors.
  • Q.Promise.fin
    The fin method is obsolete.
    The fin method is equivalent to the standard finally method.
    Please use finally instead.

  • Q.Promise.fail
    The fail method is obsolete.
    The fail method is equivalent to the standard catch method.
    Please use catch instead.

  • Q.onerror
    The onerror callback is obsolete.
    This portal now uses a global error handler and this callback is not used.
    Please remove any usage.

  • Q.longStackSupport.
    The longStackSupport flag is obsolete.
    The portal uses native browser stacks for rejections and this no longer has an effect.
    Please remove any usage.

  • Q.getUnhandledReasons
    The getUnhandledReasons method is obsolete.
    The portal uses a global rejection handler and this method no longer returns anything.
    Please remove any usage.

  • Q.getUnhandledRejections
    The getUnhandledRejections method is obsolete.
    The portal uses a global rejection handler and this method no longer returns anything.
    Please remove any usage.

  • MsPortalFx.Base.Diagnostics.setPromiseErrorCapturePeriod and "FxInternal/ErrorHandling" setPromiseErrorCapturePeriod
    The setPromiseErrorCapturePeriod method is obsolete.
    The portal now relies upon the global rejection handler.
    Please remove any usage.

  • MsPortalFx.Base.Diagnostics.clearPromiseErrorCaptureTimeout and "FxInternal/ErrorHandling" clearPromiseErrorCaptureTimeout
    The clearPromiseErrorCaptureTimeout method is obsolete.
    The portal now relies upon the global rejection handler.
    Please remove any usage.

  • MsPortalFx.NativePromise
    The NativePromise type is obsolete.
    This NativePromise type is a type alias for Promise and is unnecessary.
    Use the Promise type instead.

  • MsPortalFx.Base.Promises wrapWithCancelablePromise
    The wrapWithCancelablePromise method is deprecated.
    This method has some undesirable side effects.
    Please use 
    makeCancelable or cancelOnDispose instead.

12453439[Breaking change] "Update" API of Searchbox as required



**Expected Errors:** Usage of the `update` option of `Fx/Controls/SearchBox` is now required and its absence will be flagged as a compile-time error at build time:

**Solution:** Please set the `update` callback in all Fx/Controls/SearchBox `create` calls.

**Reason For Breaking Change:** The `update` callback is needed to return the number of results (as set in extension code) for screen-readers to announce it.

12451947Obsolete MsPortalFx.ViewModels.Controls.Lists.TreeView

MsPortalFx.ViewModels.Controls.Lists.TreeView is now obsolete.  This will cause compile errors for extensions that have not removed usage of the previously deprecated control.

Instances of this control can be replaced with the "Fx/Controls/TreeView" control.  The AMD control works similarly to the old control but with slightly enhanced contracts and options.  The full details of the new API are in intellisense supplied by the Fx.d.ts file from your SDK.  However, you can also see the API here:


The following short descriptions of the changes should help converting to the new control:.
  • Control is now imported as an AMD module from "Fx/Controls/TreeView".
  • The control is created with a "create" function instead of constructor.
  • Instead of a ViewModel the control has a Contract.
  • "ExtensionsOptions" interface was renamed to "Options".
  • "Extensions" enum and bit flags were removed. Instead setting an option enables it.
  • The "extensions" and "extensionsOptions" properties were removed from the contract.
  • The "items" constructor param was changed to an option.
  • The following internal options/properties were removed from public view "loadingPath", "syncToken", "toggleNodeCallback".
  • New options were added tor "htmlTemplates" and "pathSeparator" and the corresponding contract properties were removed.
  • All promises were changed to native "Promise" type (You can still use Q if you want because it now extends native Promise in the framework).
  • The "supplyCommands" option was moved from "selection" to "contextMenu".
  • Toolbar types where changed to "Fx/Controls/Toolbar" types.
  • The "commandGroup" property was removed from the item contract.
  • The "TSelection" generic type was removed along with the "createSelection" callback. Instead we have a fixed "SelectedItem" type that includes the item and path.
  • The "selectableData" property and types were removed. Instead we have two properties on the contract "selectedPaths" which gets or sets the current selection and "selectedItems" that returns the current selection. These work for both single and multiple selection.
  • The "initialPath" option was removed. It was a strange option that only worked in single select. Setting the "selectedPaths" before the widget is created is equivalent.
  • Added readonly to properties where applicable.  Initial values should be set through options now.
  • readonly was added to Item and Metadata properties.  This may require you to construct the properties all at once.
  • rightClick renamed to contextMenu
  • onDemandLoadable renamed to deferredLoading
  • loadByContinuationToken renamed sequentialLoading
  • loadMoreNode renamed loadMoreChildItems
  • added canLoadMoreRootItems option
The UI rendering for the TreeView has not been modified.  All existing test harnesses that manipulate the UI should continue to work without change.

12435914Update Portal SDK to TypeScript 4.4



The tooling was updated to use TypeScript 4.4 (update from TypeScript 4.2).
There were no Portal-specific changes required by this upgrade, but the tooling update itself might cause some breaks in extension code.
See breaking changes and changelog in the official TypeScript site: https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes

In addition, the npm dependencies for `@microsoft/eslint-plugin-azureportal` and others were updated to support the new syntax in TypeScript 4.4 (in particular, we updated all the packages in the `@typescript-eslint` scope, which require version 5.*). Please also be sure to update any npm dependencies in your own package.json files or global environment to use `typescript` 4.4.4 and the newer `@typescript-eslint` packages.

Additionally, the newer `@typescript-eslint` packages do depend on newer versions of node than the previous versions, so if you see warnings like the following, make sure to update your version of node in your environment to the latest minor version according to the version you are using (note that it doesn't require updating major versions, there is still support for node v12, v14 and v16).
```
error @typescript-eslint/[email protected]: The engine "node" is incompatible with this module. Expected version "^12.22.0 || ^14.17.0 || >=16.0.0". Got "XX.XX.XX"
error Found incompatible module.
```

12424986Form controls breaking changes Nov 2021



**Expected Errors:** Usages of the following APIs will be flagged as a compile-time linting errors at build time:

MsPortalFx.ViewModels.Controls.PartPinner (MsPortalFx.ViewModels.Controls.PartPinner.Options and MsPortalFx.ViewModels.Controls.PartPinner.ViewModel)
MsPortalFx.ViewModels.Forms.OptionsGroup (MsPortalFx.ViewModels.Forms.OptionsGroup.Options and MsPortalFx.ViewModels.Forms.OptionsGroup.ViewModel)

Usages of the following APIs will be flagged as a compile-time errors at build time:

Fx/Specs/DropDown
FxImpl.Azure.BaseResourceDropDown
MsPortalFx.ViewModels.ClickableLink
MsPortalFx.ViewModels.Controls.InfoBox
MsPortalFx.ViewModels.Controls.Unsupported.AzureMediaPlayer


**Solution:** Please use the following controls instead respectively:

- `import * as FxPinner from "Fx/Pinner"`;
Fx/Controls/OptionsGroup but please keep in mind that OptionsGroup as a whole would be phased out at some point during alignment with Fluent UI APIs as the latter framework does not offer it. Instead, please consider redesigning your blade to use RadioButtons (Fx/Controls/RadioButtons). 
Fx/Controls/DropDown
- Fx/Controls/BaseResourceDropDown
- `import { ClickableLink } from "Fx/Composition";`
Fx/Controls/InfoBox
- Fx/Controls/Video

**Reason For Breaking Change:** Newer controls have better accessibility support.

10981484Add telemetry for CopyableLabel's onClick event

8.248.0.5

10981484Add telemetry for CopyableLabel's onClick event

No description available for this breaking change.

8.218.0.5

10955536Include the Microsoft.IdentityModel.S2S as one of the external packages shipped with the Microsoft.Portal.Security.AadCore nuget package.

** Expected Errors: ** 

- You may see `Unable to find version '3.14.0' of package 'Microsoft.IdentityModel.S2S.Tokens'.` errors during the nuget package installation process. 

** Solution: **

- For those using the newer PackageReference format, simply update the version of the Microsoft.Portal.Security.AadCore package to the newest version in your package reference. The build will generate the bin folder with all the dependencies automatically.
- For those using the old packages.config format, update the version of the Microsoft.Portal.Security.AadCore package in the package.json file, and add the explicit reference to the assembly as follows to the CSPROJ:
```
<Reference include="Microsoft.IdentityModel.S2S">
    <HintPath>$(PkgMicrosoft_Portal_Security_AadCore)\lib\net45\Microsoft.IdentityModel.S2S.dll</HintPath>
</Reference>
```

** Reason for breaking change: **

The Microsoft.Portal.AadCore assembly had a new dependency on the Microsoft.IdentityModel.S2S library as part of the work item below where this package inclusion was missed.
Product Backlog Item 9702120: Adopt the SAL library for token validation

8.154.0.5

9218700Add FileUpload React Control to Samples

10591766Remove building Cloud Service package from Portal repo

Support for cloud services has been removed, as usage of cloud services for Azure first-party services has been deprecated for some time.
If an extension is still using the Portal SDK for C# code, and is building it as a web project (has a web.config) there might be a runtime break when the website loads into IIS.

** Expected Error **
Could not load type 'Microsoft.Portal.Framework.CloudSettingsReader' from assembly 'Microsoft.Portal.Azure'

** Solution **
Find the setting "MsPortalFx:SettingsReader" in the web.config, and remove the Microsoft.Portal.Framework.CloudSettingsReader class from that list.
Example:
BEFORE: 
<add key="MsPortalFx:SettingsReader" value="[ 'Microsoft.Portal.Framework.CloudSettingsReader, Microsoft.Portal.Azure', 'Microsoft.Portal.Framework.ConfigurationFileReader, Microsoft.Portal.Core']"/>

AFTER:
<add key="MsPortalFx:SettingsReader" value="['Microsoft.Portal.Framework.ConfigurationFileReader, Microsoft.Portal.Core']"/>

8.152.0.5

10608752Make Fx Section and MsPortalFx SectionBase compatible

"MsPortalFx.ViewModels.Forms.Base.Section" has been modified to make it compatible with "Fx/Controls/Section". To do this the extension from "MsPortalFx.ViewModels.FormElement" was removed along with the "_msPortalFxClearValidation" and "validate" properties.  "_msPortalFxClearValidation" is internal to the portal and should not be breaking.  However, "validate" is an older form of "triggerValidation".  It should be uncommon to use "validate" and it can be replaced with "triggerValidation".

This change is being make to allow "Fx/Controls/Section" to be used in older forms where the "sections" property requires the section to be compatible with "MsPortalFx.ViewModels.Forms.Base.Section".

8.141.0.5

10539518Make actionmodifer a string

No description available for this breaking change.

10172907Make a smaller button for ClipboardButton

8.18.0.5

9856493OBSOLETE: MsPortalFx.ViewModels.Controls.Documents.DiscussionThread

 

**Expected Errors:*
You will receive a warning at build time stating that MsPortalFx.ViewModels.Controls.Documents.DiscussionThread and its associated types are obsolete.
The following types are obsolete:
  • MsPortalFx.ViewModels.Controls.Documents.DiscussionThread.DiscussionSaveResult
  • MsPortalFx.ViewModels.Controls.Documents.DiscussionThread.DiscussionCommentSaveResult
  • MsPortalFx.ViewModels.Controls.Documents.DiscussionThread.DiscussionThreadSaveResult
  • MsPortalFx.ViewModels.Controls.Documents.DiscussionThread.DiscussionAuthor
  • MsPortalFx.ViewModels.Controls.Documents.DiscussionThread.DiscussionItem
  • MsPortalFx.ViewModels.Controls.Documents.DiscussionThread.DiscussionComment
  • MsPortalFx.ViewModels.Controls.Documents.DiscussionThread.DiscussionCommentViewModel
  •  MsPortalFx.ViewModels.Controls.Documents.DiscussionThread.DiscussionThread
  • MsPortalFx.ViewModels.Controls.Documents.DiscussionThread.DiscussionThreadViewModel
**Solution** 

Please use Fx/Controls/CustomHTML instead.

**Reason for Breaking Change**
MsPortalFx.ViewModels.Controls.Documents.DiscussionThread is no longer supported. The viewModel and its associated types have been obsoleted in the May2021 breaking SDK release. Please use Fx/Controls/CustomHTML which uses AMD imports that improves Portal performance.

9856310OBSOLETE: MsPortalFx.ViewModels.Controls.Lists.ListView

The MsPortalFx.ViewModels.Controls.Lists.ListView is obsolete.  Please use "Fx/Controls/ListView" instead.

If you are using the ListView you will run into compilation errors with the following types:

MsPortalFx.ViewModels.Controls.Lists.ListView.Extensions
MsPortalFx.ViewModels.Controls.Lists.ListView.GroupOrder
MsPortalFx.ViewModels.Controls.Lists.ListView.SelectionMode
MsPortalFx.ViewModels.Controls.Lists.ListView.ItemMetadata
MsPortalFx.ViewModels.Controls.Lists.ListView.ListViewItem
MsPortalFx.ViewModels.Controls.Lists.ListView.Item
MsPortalFx.ViewModels.Controls.Lists.ListView.SelectableEventObject
MsPortalFx.ViewModels.Controls.Lists.ListView.GroupableOptions
MsPortalFx.ViewModels.Controls.Lists.ListView.SelectableOptions
MsPortalFx.ViewModels.Controls.Lists.ListView.FilterableOptions
MsPortalFx.ViewModels.Controls.Lists.ListView.ExtensionOptions
MsPortalFx.ViewModels.Controls.Lists.ListView.Group
MsPortalFx.ViewModels.Controls.Lists.ListView.Contract
MsPortalFx.ViewModels.Controls.Lists.ListView.ViewModel

9849043[AzurePortal-Test] Require extension name in msportalfx-test config and pass that in the Url



Expected Errors:

- When running azureportal-tests (formerly msportalfx-test), the PortalConfigurationManager class will throw a runtime error `No partner team name has been provided! The name can be specified as '--partnerTeam' argument, 'partnerTeam' environment variable or 'partnerTeam' field in config.json. For details see https://aka.ms/portalfx/e2e-testing#partner-team-name`

Solution:

- If you receive this error, follow instructions in the error message or see an example at https://aka.ms/portalfx/e2e-testing#partner-team-name

Reason For Breaking Change

- Having an ability to see a footprint of which team runs an extension test.

10044366Deprecate JQuery Promise and Deferred helpers

JQuery Promise and Deferred helpers are being deprecated in the Portal framework.  Please switch to native promises.

MsPortalFx.Helpers.Deferred --  Use defer() from the "Fx" module.
MsPortalFx.Helpers.resolve -- Use Promise.resove().
MsPortalFx.Helpers.reject -- Use Promise.reject().

The JQuery helpers are being deprecated and eventually removed.  JQuery promises are non-standard.  For consistent behavior and better performance extensions should use native promises.