@pega/dx-component-builder-sdk
Version:
Utility for building custom UI components
71 lines (60 loc) • 2.36 kB
text/typescript
import { Component, OnInit, Input, forwardRef, OnDestroy } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormGroup } from '@angular/forms';
import { AngularPConnectData, AngularPConnectService } from '@pega/angular-sdk-components';
import { ComponentMapperComponent } from '@pega/angular-sdk-components';
import { Utils } from '@pega/angular-sdk-components';
import { PConnFieldProps } from '@pega/angular-sdk-components';
interface SemanticLinkProps extends PConnFieldProps {
// If any, enter additional props that only exist on SemanticLink here
text: string;
}
export class SemanticLinkComponent implements OnInit, OnDestroy {
pConn$: typeof PConnect;
formGroup$: FormGroup;
angularPConnectData: AngularPConnectData = {};
configProps$: SemanticLinkProps;
label$ = '';
value$ = '';
displayMode$?: string = '';
bVisible$ = true;
constructor(
private angularPConnect: AngularPConnectService,
private utils: Utils
) {}
ngOnInit(): void {
// First thing in initialization is registering and subscribing to the AngularPConnect service
this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
this.updateSelf();
}
ngOnDestroy(): void {
if (this.angularPConnectData.unsubscribeFn) {
this.angularPConnectData.unsubscribeFn();
}
}
onStateChange() {
// Should always check the bridge to see if the component should
// update itself (re-render)
const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
// ONLY call updateSelf when the component should update
if (bUpdateSelf) {
this.updateSelf();
}
}
updateSelf() {
this.configProps$ = this.pConn$.resolveConfigProps(this.pConn$.getConfigProps()) as SemanticLinkProps;
this.value$ = this.configProps$.text || '---';
this.displayMode$ = this.configProps$.displayMode;
this.label$ = this.configProps$.label;
if (this.configProps$.visibility) {
this.bVisible$ = this.utils.getBooleanValue(this.configProps$.visibility);
}
}
}