diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..90ed8272 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,239 @@ +# [26.1.10](https://github.com/pegasystems/angular-sdk/tree/release/26.1.10) - Released: 24/06/2026 + +### **Bug fixes** +* **Fixed the issue where views are not rendering in Details Template.** + * Github: [PR-533](https://github.com/pegasystems/angular-sdk-components/pull/533) + +# [25.1.13](https://github.com/pegasystems/angular-sdk/tree/release/25.1.13) - Released: 12/06/2026 + +## Breaking changes + +* None. + +## Non Breaking changes + +### **Bug fixes** +* **Fixed the issue where when you configured any action in the EmbeddedData field, and add a record, the configured fields do not appear.** + * Github: [PR-479](https://github.com/pegasystems/angular-sdk-components/pull/479) +* **Repeating Dynamic Layout list is reset when screen is refreshed** + * Github: [PR-473](https://github.com/pegasystems/angular-sdk-components/pull/473) +* **EmbeddedData field is not displayed when visibility condition is configured based on an existing field value** + * Github: [PR-473](https://github.com/pegasystems/angular-sdk-components/pull/473) +* **Unwanted refresh triggers on field value changes** + * Github: [PR-473](https://github.com/pegasystems/angular-sdk-components/pull/473) +* **Fixed the checkbox required validation issue** + * Github: [PR-473](https://github.com/pegasystems/angular-sdk-components/pull/473) +* **Console errors triggered when uploading attachment** + * Github: [PR-482](https://github.com/pegasystems/angular-sdk-components/pull/482) +--- + +### **Dependencies & Infrastructure** + +The following table lists the packages whose versions have been updated: + +| Package | Updated version | +| :--- | :--- | +| **@pega/angular-sdk-components** | 25.1.13 | +| **@pega/angular-sdk-overrides** | 25.1.13 | +| **@pega/dx-component-builder-sdk** | 25.1.15 | +| **@pega/constellationjs** | 25.1.3 | + + +# [25.1.12](https://github.com/pegasystems/angular-sdk/tree/release/25.1.12) - Released: 27/03/2026 + +## Breaking changes + +* Upgraded the `Angular` version to 21 and the `Angular Material` version to 21. + + +## Non Breaking changes + +### **Bug fixes** + +* **When condition not working for Add & Delete actions in FieldGroupTemplate** + * Github: [PR-444](https://github.com/pegasystems/angular-sdk-components/pull/444) +* **Confirmation view not getting rendered issue** + * Github: [PR-452](https://github.com/pegasystems/angular-sdk-components/pull/452) +--- + +### **Dependencies & Infrastructure** + +* The following table lists the packages whose versions have been updated: + +| Package | Updated version | +| :--- | :--- | +| **@angular/animations** | 21.2.4 | +| **@angular/cdk** | 21.2.2 | +| **@angular/cli** | 21.2.2 | +| **@angular/common** | 21.2.4 | +| **@angular/compiler** | 21.2.4 | +| **@angular/compiler-cli** | 21.2.4 | +| **@angular/core** | 21.2.4 | +| **@angular/forms** | 21.2.4 | +| **@angular/language-service** | 21.2.4 | +| **@angular/material** | 21.2.2 | +| **@angular/platform-browser** | 21.2.4 | +| **@angular/platform-browser-dynamic** | 21.2.4 | +| **@angular/router** | 21.2.4 | +| **@angular-builders/custom-webpack** | 21.0.3 | +| **@angular-devkit/build-angular** | 21.2.2 | +| **@angular-devkit/core** | 21.2.2 | +| **@angular-eslint/eslint-plugin** | 21.3.1 | +| **@angular-eslint/eslint-plugin-template** | 21.3.1 | +| **@angular-eslint/template-parser** | 21.3.1 | +| **eslint** | 9.36.0 | +| **jest** | 30.2.0 | +| **jest-environment-jsdom** | 30.2.0 | +| **typescript** | 5.9.3 | +| **typescript-eslint** | 8.48.1 | +| **zone.js** | 0.16.1 | + + +# [25.1.11](https://github.com/pegasystems/angular-sdk/tree/release/25.1.11) - Released: 15/01/2026 + +## Non Breaking changes + +### **Bug fixes** + +* **Location field appeared editable even in a read-only state issue fixed** + * Github: [PR-418](https://github.com/pegasystems/angular-sdk-components/pull/418) +* **Checkbox required validation handled correctly** + * Github: [PR-419](https://github.com/pegasystems/angular-sdk-components/pull/419) + +| Package | Updated version | +| :--- | :--- | +| **@angular/animations** | 20.3.15 | +| **@angular/cdk** | 20.2.14 | +| **@angular/cli** | 20.3.13 | +| **@angular/common** | 20.3.15 | +| **@angular/compiler** | 20.3.15 | +| **@angular/compiler-cli** | 20.3.15 | +| **@angular/core** | 20.3.15 | +| **@angular/forms** | 20.3.15 | +| **@angular/language-service** | 20.3.15 | +| **@angular/material** | 20.2.14 | +| **@angular/material-experimental** | 20.2.14 | +| **@angular/material-moment-adapter** | 20.2.14 | +| **@angular/platform-browser** | 20.3.15 | +| **@angular/platform-browser-dynamic** | 20.3.15 | +| **@angular/router** | 20.3.15 | +| **@angular-builders/custom-webpack** | 20.0.0 | +| **@angular-devkit/build-angular** | 20.3.13 | +| **@angular-devkit/core** | 20.3.13 | +| **@danielmoncada/angular-datetime-picker**| 20.0.1 | +| **@pega/auth** | 0.2.34 | +| **ng-packagr** | 20.3.0 | + + +# [25.1.10](https://github.com/pegasystems/angular-sdk/tree/release/25.1.10) - Released: 26/12/2025 + + +## Breaking changes + +* The `Attachment` component now passes data in the `pageInstructions` object instead of the `content` object. + * Github: [PR-370](https://github.com/pegasystems/angular-sdk-components/pull/370) + +## Non Breaking changes + +### **Features** + +* A new self-service portal called **MediaCoSelfService** has been introduced for the MediaCo sample application. + + * Github: [PR-355](https://github.com/pegasystems/angular-sdk-components/pull/355) + + **NOTE:** Please refer [What's New](https://pega-dev.zoominsoftware.io/bundle/constellation-sdk/page/constellation-sdks/sdks/angular-sdk-updates.html) for more details. + + +* Support for `light`, `dark`, and `MediaCo` themes has been introduced through the `theme` attribute in the **sdk-config.json** file. The `light` theme is applied by default. For more information, see [theme](https://pega-dev.zoominsoftware.io/bundle/constellation-sdk/page/constellation-sdks/sdks/configuring-sdk-config-json.html#configuring-the-sdk-config-json-con__theme). + + * Github: [PR-321](https://github.com/pegasystems/angular-sdk-components/pull/321) + +* The advanced search feature is now supported in the `Data Reference` field type. For more information, see [Advanced search](https://docs.pega.com/bundle/common-data-model/page/common-data-model/implementation/advanced-search-intro.html). + + * Github: [PR-326](https://github.com/pegasystems/angular-sdk-components/pull/326) + +* `ListView` now supports `Select all` + * Github: [PR-374](https://github.com/pegasystems/angular-sdk-components/pull/374) +* `DefaultPage` component has been added. + * Github: [PR-351](https://github.com/pegasystems/angular-sdk-components/pull/351) +* `Location` component has been added. + * Github: [PR-325](https://github.com/pegasystems/angular-sdk-components/pull/325) +* `ObjectReference` component has been added. + * Github: [PR-329](https://github.com/pegasystems/angular-sdk-components/pull/329) +* `SelectableCards` component has been added. + * Github: [PR-322](https://github.com/pegasystems/angular-sdk-components/pull/322) +* `SelfServiceCaseView` component has been added. + * Github: [PR-355](https://github.com/pegasystems/angular-sdk-components/pull/355) +--- + +### **Bug fixes** + +* **Playwright tests have been fixed** + * Github: [PR-330](https://github.com/pegasystems/angular-sdk-components/pull/330), [PR-347](https://github.com/pegasystems/angular-sdk-components/pull/347) +* **Semantic link component did not display links as expected** + * Github: [PR-329](https://github.com/pegasystems/angular-sdk-components/pull/329) +* **Improved the handling of phone number value changes** + * Github: [PR-360](https://github.com/pegasystems/angular-sdk-components/pull/360) +* **Localization fixes have been made** + * Github: [PR-356](https://github.com/pegasystems/angular-sdk-components/pull/356) + +--- + +### Refactoring + +* **FieldBase** component has been added for the field components to inherit + * Github: [PR-322](https://github.com/pegasystems/angular-sdk-components/pull/332) + +--- + +### **Dependencies & Infrastructure** + +* Upgraded the `Angular` version to 19 and the `Angular Material` version to 19. + * Github: [PR-319](https://github.com/pegasystems/angular-sdk-components/pull/319) +* The `ESLint` library has been updated to version 9. + * Github: [PR-339](https://github.com/pegasystems/angular-sdk-components/pull/339) + +* The **@pega/pcore-pconnect-typedefs** package has been updated to v4.1.0 + * Github: [PR-336](https://github.com/pegasystems/angular-sdk-components/pull/336) + +* The `npm` vulerabilities have been reduced. + * Github: [PR-363](https://github.com/pegasystems/angular-sdk-components/pull/363) +* The **@angular/google-maps** package has been added to support the Location component. + * Github: [PR-328](https://github.com/pegasystems/angular-sdk-components/pull/328) +* The **mat-tel-input** package has been added to support the Phone component for Angular 19. + * Github: [PR-326](https://github.com/pegasystems/angular-sdk-components/pull/326) +* The **ngx-mat-intl-tel-input** package has been removed. + * Github: [PR-319](https://github.com/pegasystems/angular-sdk-components/pull/319) +* The following table lists the packages whose versions have been updated: + +| Package | Updated version | +| :--- | :--- | +| **@angular/animations** | 19.2.14 | +| **@angular/cdk** | 19.2.19 | +| **@angular/cli** | 19.2.15 | +| **@angular/common** | 19.2.14 | +| **@angular/compiler** | 19.2.14 | +| **@angular/compiler-cli** | 19.2.14 | +| **@angular/core** | 19.2.14 | +| **@angular/forms** | 19.2.14 | +| **@angular/language-service** | 19.2.14 | +| **@angular/material** | 19.2.19 | +| **@angular/material-experimental** | 19.2.19 | +| **@angular/material-moment-adapter** | 19.2.19 | +| **@angular/platform-browser** | 19.2.14 | +| **@angular/platform-browser-dynamic** | 19.2.14 | +| **@angular/router** | 19.2.14 | +| **@angular-builders/custom-webpack** | 19.0.1 | +| **@angular-devkit/build-angular** | 19.2.15 | +| **@angular-devkit/core** | 19.2.15 | +| **@danielmoncada/angular-datetime-picker**| 19.0.0 | +| **@pega/auth** | 0.2.31 | +| **@pega/configs** | 0.16.3 | +| **@playwright/test** | 1.54.2 | +| **copy-webpack-plugin** | 13.0.1 | +| **eslint-plugin-import** | 2.32.0 | +| **ng-packagr** | 19.2.2 | +| **ngx-currency** | 19.0.0 | +| **shx** | 0.4.0 | +| **typescript** | 5.5.4 | +| **webpack** | 5.101.2 | diff --git a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.html b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.html index 46505528..3f3adb9c 100644 --- a/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.html +++ b/packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.html @@ -22,6 +22,7 @@ {{ _formatDate(field.config.value, field.type) }} {{ _formatDecimal(field) }} {{ _formatCurrency(field) }} + {{ _formatDecimal(field) }} {{ _formatCurrency(field) }} diff --git a/packages/angular-sdk-components/src/lib/_components/infra/view/view.component.ts b/packages/angular-sdk-components/src/lib/_components/infra/view/view.component.ts index dd43df18..73f44d17 100644 --- a/packages/angular-sdk-components/src/lib/_components/infra/view/view.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/infra/view/view.component.ts @@ -146,7 +146,6 @@ export class ViewComponent implements OnInit, OnDestroy, OnChanges { this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as ViewProps; this.inheritedProps$ = this.pConn$.getInheritedProps(); - // NOTE: this.configProps$.visibility'] is used in view.component.ts such that // the View will only be rendered when this.configProps$.visibility'] is false. // It WILL render if true or undefined. @@ -155,7 +154,10 @@ export class ViewComponent implements OnInit, OnDestroy, OnChanges { this.title$ = this.configProps$.title || ''; // label & showLabel within inheritedProps takes precedence over configProps this.label$ = this.inheritedProps$.label || this.configProps$.label || ''; - this.showLabel$ = this.inheritedProps$.showLabel || this.configProps$.showLabel || isDetailsTemplate(this.templateName$); + this.showLabel$ = + this.inheritedProps$.showLabel !== undefined + ? this.inheritedProps$.showLabel + : this.configProps$.showLabel || isDetailsTemplate(this.templateName$); this.arChildren$ = this.pConn$.getChildren(); this.visibility$ = this.configProps$.visibility ?? this.visibility$; diff --git a/packages/angular-sdk-components/src/lib/_components/template/base/details-template-base.ts b/packages/angular-sdk-components/src/lib/_components/template/base/details-template-base.ts index a10fb8b0..9601d5e4 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/base/details-template-base.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/base/details-template-base.ts @@ -66,4 +66,47 @@ export class DetailsTemplateBase implements OnInit, OnDestroy { return pConnect.resolveConfigProps(pConnect.getRawMetadata()); }); } + + processDetailFields(kid: any): any[] { + const pKid = kid.getPConnect(); + const fields = pKid.getChildren(); + const processedFields: any[] = []; + + fields?.forEach(field => { + const thePConn = field.getPConnect(); + const theCompType = thePConn.getComponentName().toLowerCase(); + if (theCompType === 'reference' || theCompType === 'group') { + const configProps = thePConn.getConfigProps(); + configProps.readOnly = true; + configProps.displayMode = 'DISPLAY_ONLY'; + const propToUse = { ...thePConn.getInheritedProps() }; + configProps.label = propToUse?.label; + const options = { + context: thePConn.getContextName(), + pageReference: thePConn.getPageReference(), + referenceList: thePConn.getReferenceList() + }; + const viewContConfig = { + meta: { + ...thePConn.getMetadata(), + type: theCompType, + config: configProps + }, + options + }; + const theViewCont = PCore.createPConnect(viewContConfig); + processedFields.push({ + type: theCompType, + pConn: theViewCont?.getPConnect() + }); + } else { + processedFields.push({ + type: theCompType, + config: thePConn.getConfigProps() + }); + } + }); + + return processedFields; + } } diff --git a/packages/angular-sdk-components/src/lib/_components/template/details-narrow-wide/details-narrow-wide.component.ts b/packages/angular-sdk-components/src/lib/_components/template/details-narrow-wide/details-narrow-wide.component.ts index e1dd3298..a655f31e 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/details-narrow-wide/details-narrow-wide.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/details-narrow-wide/details-narrow-wide.component.ts @@ -36,12 +36,10 @@ export class DetailsNarrowWideComponent extends DetailsTemplateBase { const kids = this.pConn$.getChildren() as any[]; for (const kid of kids) { - const pKid = kid.getPConnect(); - const pKidData = pKid.resolveConfigProps(pKid.getRawMetadata()); if (kids.indexOf(kid) == 0) { - this.arFields$ = pKidData.children; + this.arFields$ = this.processDetailFields(kid); } else { - this.arFields2$ = pKidData.children; + this.arFields2$ = this.processDetailFields(kid); } } } diff --git a/packages/angular-sdk-components/src/lib/_components/template/details-one-column/details-one-column.component.ts b/packages/angular-sdk-components/src/lib/_components/template/details-one-column/details-one-column.component.ts index 623413c5..d93e8002 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/details-one-column/details-one-column.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/details-one-column/details-one-column.component.ts @@ -39,10 +39,8 @@ export class DetailsOneColumnComponent extends DetailsTemplateBase { const kids = this.pConn$.getChildren() as any[]; for (const kid of kids) { - const pKid = kid.getPConnect(); - const pKidData = pKid.resolveConfigProps(pKid.getRawMetadata()); if (kids.indexOf(kid) == 0) { - this.arFields$ = pKidData.children; + this.arFields$ = this.processDetailFields(kid); } } } diff --git a/packages/angular-sdk-components/src/lib/_components/template/details-three-column/details-three-column.component.ts b/packages/angular-sdk-components/src/lib/_components/template/details-three-column/details-three-column.component.ts index 443993cf..26f99410 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/details-three-column/details-three-column.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/details-three-column/details-three-column.component.ts @@ -43,14 +43,12 @@ export class DetailsThreeColumnComponent extends DetailsTemplateBase { const kids = this.pConn$.getChildren() as any[]; for (const kid of kids) { - const pKid = kid.getPConnect(); - const pKidData = pKid.resolveConfigProps(pKid.getRawMetadata()); if (kids.indexOf(kid) == 0) { - this.arFields$ = pKidData.children; + this.arFields$ = this.processDetailFields(kid); } else if (kids.indexOf(kid) == 1) { - this.arFields2$ = pKidData.children; + this.arFields2$ = this.processDetailFields(kid); } else { - this.arFields3$ = pKidData.children; + this.arFields3$ = this.processDetailFields(kid); } } } diff --git a/packages/angular-sdk-components/src/lib/_components/template/details-two-column/details-two-column.component.ts b/packages/angular-sdk-components/src/lib/_components/template/details-two-column/details-two-column.component.ts index 4a5887aa..cbe1e698 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/details-two-column/details-two-column.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/details-two-column/details-two-column.component.ts @@ -43,12 +43,10 @@ export class DetailsTwoColumnComponent extends DetailsTemplateBase { const kids = this.pConn$.getChildren() as any[]; for (const kid of kids) { - const pKid = kid.getPConnect(); - const pKidData = pKid.resolveConfigProps(pKid.getRawMetadata()); if (kids.indexOf(kid) == 0) { - this.arFields$ = pKidData.children; + this.arFields$ = this.processDetailFields(kid); } else { - this.arFields2$ = pKidData.children; + this.arFields2$ = this.processDetailFields(kid); } } } diff --git a/packages/angular-sdk-components/src/lib/_components/template/details-wide-narrow/details-wide-narrow.component.ts b/packages/angular-sdk-components/src/lib/_components/template/details-wide-narrow/details-wide-narrow.component.ts index 3d20a667..d422443a 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/details-wide-narrow/details-wide-narrow.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/details-wide-narrow/details-wide-narrow.component.ts @@ -40,12 +40,10 @@ export class DetailsWideNarrowComponent extends DetailsTemplateBase { const kids = this.pConn$.getChildren() as any[]; for (const kid of kids) { - const pKid = kid.getPConnect(); - const pKidData = pKid.resolveConfigProps(pKid.getRawMetadata()); if (kids.indexOf(kid) == 0) { - this.arFields$ = pKidData.children; + this.arFields$ = this.processDetailFields(kid); } else { - this.arFields2$ = pKidData.children; + this.arFields2$ = this.processDetailFields(kid); } } } diff --git a/packages/angular-sdk-components/src/lib/_components/template/details/details.component.ts b/packages/angular-sdk-components/src/lib/_components/template/details/details.component.ts index 76eb53cb..d6c260c9 100644 --- a/packages/angular-sdk-components/src/lib/_components/template/details/details.component.ts +++ b/packages/angular-sdk-components/src/lib/_components/template/details/details.component.ts @@ -35,45 +35,7 @@ export class DetailsComponent extends DetailsTemplateBase { const kids = this.pConn$.getChildren() as any[]; for (const kid of kids) { - this.arFields$ = []; - const pKid = kid.getPConnect(); - const fields = pKid.getChildren(); - fields?.forEach(field => { - const thePConn = field.getPConnect(); - const theCompType = thePConn.getComponentName().toLowerCase(); - if (theCompType === 'reference' || theCompType === 'group') { - const configProps = thePConn.getConfigProps(); - configProps.readOnly = true; - configProps.displayMode = 'DISPLAY_ONLY'; - const propToUse = { ...thePConn.getInheritedProps() }; - configProps.label = propToUse?.label; - const options = { - context: thePConn.getContextName(), - pageReference: thePConn.getPageReference(), - referenceList: thePConn.getReferenceList() - }; - const viewContConfig = { - meta: { - ...thePConn.getMetadata(), - type: theCompType, - config: configProps - }, - options - }; - const theViewCont = PCore.createPConnect(viewContConfig); - const data = { - type: theCompType, - pConn: theViewCont?.getPConnect() - }; - this.arFields$.push(data); - } else { - const data = { - type: theCompType, - config: thePConn.getConfigProps() - }; - this.arFields$.push(data); - } - }); + this.arFields$ = this.processDetailFields(kid); } } }