Skip to content

Commit f8e4354

Browse files
mohas22samhere06
authored andcommitted
onject reference, semantic link support
1 parent b4f9937 commit f8e4354

File tree

17 files changed

+818
-21
lines changed

17 files changed

+818
-21
lines changed

packages/angular-sdk-components/src/lib/_bridge/helpers/sdk-pega-component-map.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import { GroupComponent } from '../../_components/field/group/group.component';
3131
import { IntegerComponent } from '../../_components/field/integer/integer.component';
3232
import { ListViewActionButtonsComponent } from '../../_components/field/list-view-action-buttons/list-view-action-buttons.component';
3333
import { LocationComponent } from '../../_components/field/location/location.component';
34+
import { ObjectReferenceComponent } from '../../_components/field/object-reference/object-reference.component';
3435
import { PercentageComponent } from '../../_components/field/percentage/percentage.component';
3536
import { PhoneComponent } from '../../_components/field/phone/phone.component';
3637
import { RadioButtonsComponent } from '../../_components/field/radio-buttons/radio-buttons.component';
@@ -200,6 +201,7 @@ const pegaSdkComponentMap = {
200201
NarrowWideForm: NarrowWideFormComponent,
201202
// 'NarrowWidePage': NarrowWidePage,
202203
NavBar: NavbarComponent,
204+
ObjectReference: ObjectReferenceComponent,
203205
OneColumn: OneColumnComponent,
204206
OneColumnPage: OneColumnPageComponent,
205207
OneColumnTab: OneColumnTabComponent,

packages/angular-sdk-components/src/lib/_components/field/auto-complete/auto-complete.component.ts

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { MatInputModule } from '@angular/material/input';
77
import { MatFormFieldModule } from '@angular/material/form-field';
88
import { interval, Observable } from 'rxjs';
99
import { map, startWith } from 'rxjs/operators';
10+
import { ComponentMetadataConfig } from '@pega/pcore-pconnect-typedefs/interpreter/types';
1011
import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect';
1112
import { Utils } from '../../../_helpers/utils';
1213
import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component';
@@ -47,6 +48,13 @@ interface AutoCompleteProps extends PConnFieldProps {
4748
export class AutoCompleteComponent implements OnInit, OnDestroy {
4849
@Input() pConn$: typeof PConnect;
4950
@Input() formGroup$: FormGroup;
51+
@Input() parentProps?: {
52+
parentPconn: typeof PConnect;
53+
rawViewMetadata: ComponentMetadataConfig;
54+
canBeChangedInReviewMode: boolean;
55+
isDisplayModeEnabled: boolean;
56+
mode: string;
57+
};
5058

5159
// Used with AngularPConnect
5260
angularPConnectData: AngularPConnectData = {};
@@ -334,8 +342,75 @@ export class AutoCompleteComponent implements OnInit, OnDestroy {
334342
if (this.configProps$?.onRecordChange) {
335343
this.configProps$.onRecordChange(event);
336344
}
345+
346+
if (this.parentProps?.parentPconn.getComponentName() === 'ObjectReference') {
347+
this.onRecordChange(event);
348+
}
337349
}
338350

351+
onRecordChange = event => {
352+
const caseKey = this.parentProps?.parentPconn.getCaseInfo().getKey() ?? '';
353+
const refreshOptions = { autoDetectRefresh: true, propertyName: '' };
354+
refreshOptions.propertyName = this.parentProps?.rawViewMetadata.config?.value;
355+
356+
if (!this.parentProps?.canBeChangedInReviewMode || !this.parentProps?.parentPconn.getValue('__currentPageTabViewName')) {
357+
const pgRef = this.parentProps?.parentPconn.getPageReference().replace('caseInfo.content', '') ?? '';
358+
const viewName = this.parentProps?.rawViewMetadata.name;
359+
if (viewName && viewName.length > 0) {
360+
getPConnect().getActionsApi().refreshCaseView(caseKey, viewName, pgRef, refreshOptions);
361+
}
362+
}
363+
364+
const propValue = event?.value || event?.target?.value;
365+
const propName =
366+
this.parentProps?.rawViewMetadata.type === 'SimpleTableSelect' && this.parentProps.mode === 'multi'
367+
? PCore.getAnnotationUtils().getPropertyName(this.parentProps?.rawViewMetadata.config?.selectionList)
368+
: PCore.getAnnotationUtils().getPropertyName(this.parentProps?.rawViewMetadata.config?.value);
369+
370+
if (propValue && this.parentProps?.canBeChangedInReviewMode && this.parentProps.isDisplayModeEnabled) {
371+
PCore.getCaseUtils()
372+
.getCaseEditLock(caseKey, '')
373+
.then(caseResponse => {
374+
const pageTokens = this.parentProps?.parentPconn.getPageReference().replace('caseInfo.content', '').split('.');
375+
let curr = {};
376+
const commitData = curr;
377+
378+
pageTokens?.forEach(el => {
379+
if (el !== '') {
380+
curr[el] = {};
381+
curr = curr[el];
382+
}
383+
});
384+
385+
// expecting format like {Customer: {pyID:"C-100"}}
386+
const propArr = propName.split('.');
387+
propArr.forEach((element, idx) => {
388+
if (idx + 1 === propArr.length) {
389+
curr[element] = propValue;
390+
} else {
391+
curr[element] = {};
392+
curr = curr[element];
393+
}
394+
});
395+
396+
PCore.getCaseUtils()
397+
.updateCaseEditFieldsData(
398+
caseKey,
399+
{ [caseKey]: commitData },
400+
caseResponse.headers.etag,
401+
this.parentProps?.parentPconn?.getContextName() ?? ''
402+
)
403+
.then(response => {
404+
PCore.getContainerUtils().updateParentLastUpdateTime(
405+
this.parentProps?.parentPconn.getContextName() ?? '',
406+
response.data.data.caseInfo.lastUpdateTime
407+
);
408+
PCore.getContainerUtils().updateRelatedContextEtag(this.parentProps?.parentPconn.getContextName() ?? '', response.headers.etag);
409+
});
410+
});
411+
}
412+
};
413+
339414
getErrorMessage() {
340415
let errMessage = '';
341416

packages/angular-sdk-components/src/lib/_components/field/dropdown/dropdown.component.ts

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { MatSelectModule } from '@angular/material/select';
66
import { MatFormFieldModule } from '@angular/material/form-field';
77
import { interval } from 'rxjs';
88
import isEqual from 'fast-deep-equal';
9+
import { ComponentMetadataConfig } from '@pega/pcore-pconnect-typedefs/interpreter/types';
910
import { AngularPConnectData, AngularPConnectService } from '../../../_bridge/angular-pconnect';
1011
import { DatapageService } from '../../../_services/datapage.service';
1112
import { Utils } from '../../../_helpers/utils';
@@ -73,6 +74,13 @@ interface DropdownProps extends PConnFieldProps {
7374
export class DropdownComponent implements OnInit, OnDestroy {
7475
@Input() pConn$: typeof PConnect;
7576
@Input() formGroup$: FormGroup;
77+
@Input() parentProps?: {
78+
parentPconn: typeof PConnect;
79+
rawViewMetadata: ComponentMetadataConfig;
80+
canBeChangedInReviewMode: boolean;
81+
isDisplayModeEnabled: boolean;
82+
mode: string;
83+
};
7684

7785
// Used with AngularPConnect
7886
angularPConnectData: AngularPConnectData = {};
@@ -342,8 +350,74 @@ export class DropdownComponent implements OnInit, OnDestroy {
342350
this.pConn$.clearErrorMessages({
343351
property: this.propName
344352
});
353+
if (this.parentProps?.parentPconn.getComponentName() === 'ObjectReference') {
354+
this.onRecordChange(event);
355+
}
345356
}
346357

358+
onRecordChange = event => {
359+
const caseKey = this.parentProps?.parentPconn.getCaseInfo().getKey() ?? '';
360+
const refreshOptions = { autoDetectRefresh: true, propertyName: '' };
361+
refreshOptions.propertyName = this.parentProps?.rawViewMetadata.config?.value;
362+
363+
if (!this.parentProps?.canBeChangedInReviewMode || !this.parentProps?.parentPconn.getValue('__currentPageTabViewName')) {
364+
const pgRef = this.parentProps?.parentPconn.getPageReference().replace('caseInfo.content', '') ?? '';
365+
const viewName = this.parentProps?.rawViewMetadata.name;
366+
if (viewName && viewName.length > 0) {
367+
getPConnect().getActionsApi().refreshCaseView(caseKey, viewName, pgRef, refreshOptions);
368+
}
369+
}
370+
371+
const propValue = event?.value || event?.target?.value;
372+
const propName =
373+
this.parentProps?.rawViewMetadata.type === 'SimpleTableSelect' && this.parentProps.mode === 'multi'
374+
? PCore.getAnnotationUtils().getPropertyName(this.parentProps?.rawViewMetadata.config?.selectionList)
375+
: PCore.getAnnotationUtils().getPropertyName(this.parentProps?.rawViewMetadata.config?.value);
376+
377+
if (propValue && this.parentProps?.canBeChangedInReviewMode && this.parentProps.isDisplayModeEnabled) {
378+
PCore.getCaseUtils()
379+
.getCaseEditLock(caseKey, '')
380+
.then(caseResponse => {
381+
const pageTokens = this.parentProps?.parentPconn.getPageReference().replace('caseInfo.content', '').split('.');
382+
let curr = {};
383+
const commitData = curr;
384+
385+
pageTokens?.forEach(el => {
386+
if (el !== '') {
387+
curr[el] = {};
388+
curr = curr[el];
389+
}
390+
});
391+
392+
// expecting format like {Customer: {pyID:"C-100"}}
393+
const propArr = propName.split('.');
394+
propArr.forEach((element, idx) => {
395+
if (idx + 1 === propArr.length) {
396+
curr[element] = propValue;
397+
} else {
398+
curr[element] = {};
399+
curr = curr[element];
400+
}
401+
});
402+
403+
PCore.getCaseUtils()
404+
.updateCaseEditFieldsData(
405+
caseKey,
406+
{ [caseKey]: commitData },
407+
caseResponse.headers.etag,
408+
this.parentProps?.parentPconn?.getContextName() ?? ''
409+
)
410+
.then(response => {
411+
PCore.getContainerUtils().updateParentLastUpdateTime(
412+
this.parentProps?.parentPconn.getContextName() ?? '',
413+
response.data.data.caseInfo.lastUpdateTime
414+
);
415+
PCore.getContainerUtils().updateRelatedContextEtag(this.parentProps?.parentPconn.getContextName() ?? '', response.headers.etag);
416+
});
417+
});
418+
}
419+
};
420+
347421
getLocalizedOptionValue(opt: IOption) {
348422
return this.pConn$.getLocalizedValue(
349423
opt.value,
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<div *ngIf="isDisplayModeEnabled && !canBeChangedInReviewMode; else semanticLinkCheck">
2+
<component-mapper name="SingleReferenceReadOnly" [props]="{ pConn$ }"></component-mapper>
3+
</div>
4+
<ng-template #semanticLinkCheck>
5+
<div *ngIf="type === 'SemanticLink' && !canBeChangedInReviewMode; else loadDynamicComp">
6+
<component-mapper name="SemanticLink" [props]="{ pConn$: newPconn }"></component-mapper>
7+
</div>
8+
</ng-template>
9+
<ng-template #loadDynamicComp>
10+
<component-mapper *ngIf="newComponentName" [name]="newComponentName" [props]="{ pConn$: newPconn, formGroup$, parentProps }"></component-mapper>
11+
</ng-template>

packages/angular-sdk-components/src/lib/_components/field/object-reference/object-reference.component.scss

Whitespace-only changes.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import { ComponentFixture, TestBed } from '@angular/core/testing';
2+
3+
import { ObjectReferenceComponent } from './object-reference.component';
4+
5+
describe('ObjectReferenceComponent', () => {
6+
let component: ObjectReferenceComponent;
7+
let fixture: ComponentFixture<ObjectReferenceComponent>;
8+
9+
beforeEach(async () => {
10+
await TestBed.configureTestingModule({
11+
imports: [ObjectReferenceComponent]
12+
}).compileComponents();
13+
14+
fixture = TestBed.createComponent(ObjectReferenceComponent);
15+
component = fixture.componentInstance;
16+
fixture.detectChanges();
17+
});
18+
19+
it('should create', () => {
20+
expect(component).toBeTruthy();
21+
});
22+
});

0 commit comments

Comments
 (0)