Skip to content

Commit 437f3df

Browse files
mohas22samhere06
authored andcommitted
Selectable card support in angular
1 parent 0b29c93 commit 437f3df

File tree

9 files changed

+425
-12
lines changed

9 files changed

+425
-12
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
@@ -42,6 +42,7 @@ import { TimeComponent } from '../../_components/field/time/time.component';
4242
import { UrlComponent } from '../../_components/field/url/url.component';
4343
import { UserReferenceComponent } from '../../_components/field/user-reference/user-reference.component';
4444
import { ScalarListComponent } from '../../_components/field/scalar-list/scalar-list.component';
45+
import { SelectableCardComponent } from '../../_components/field/selectable-card/selectable-card.component';
4546
import { RichTextComponent } from '../../_components/field/rich-text/rich-text.component';
4647

4748
// Template components
@@ -210,6 +211,7 @@ const pegaSdkComponentMap = {
210211
RichTextEditor: RichTextEditorComponent,
211212
RootContainer: RootContainerComponent,
212213
ScalarList: ScalarListComponent,
214+
SelectableCard: SelectableCardComponent,
213215
SemanticLink: SemanticLinkComponent,
214216
SimpleTable: SimpleTableComponent,
215217
SimpleTableManual: SimpleTableManualComponent,

packages/angular-sdk-components/src/lib/_components/field/check-box/check-box.component.html

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
<div *ngIf="displayMode$; else noDisplayMode">
2-
<component-mapper
3-
*ngIf="bVisible$ !== false"
4-
name="FieldValueList"
5-
[props]="{ label$: caption$, value$: value$ ? trueLabel$ : falseLabel$, displayMode$ }"
6-
></component-mapper>
1+
<div *ngIf="variant !== 'card'; else cardMode">
2+
<div *ngIf="displayMode$; else noDisplayMode">
3+
<component-mapper
4+
*ngIf="bVisible$ !== false"
5+
name="FieldValueList"
6+
[props]="{ label$: caption$, value$: value$ ? trueLabel$ : falseLabel$, displayMode$ }"
7+
></component-mapper>
8+
</div>
79
</div>
810
<ng-template #noDisplayMode>
911
<div *ngIf="bHasForm$; else noEdit">
@@ -48,3 +50,9 @@
4850
<ng-template #noEdit>
4951
<component-mapper *ngIf="bVisible$ !== false" name="Text" [props]="{ pConn$, formatAs$: 'text' }"></component-mapper>
5052
</ng-template>
53+
<ng-template #cardMode>
54+
<h4>{{ label$ }}</h4>
55+
<div>
56+
<component-mapper name="SelectableCard" [props]="{ pConn$: pConn$, type: 'checkbox' }" [parent]="this"></component-mapper>
57+
</div>
58+
</ng-template>

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ interface CheckboxProps extends Omit<PConnFieldProps, 'value'> {
2626
primaryField: string;
2727
readonlyContextList: any;
2828
referenceList: string;
29+
variant?: string;
2930
}
3031

3132
@Component({
@@ -70,6 +71,7 @@ export class CheckBoxComponent implements OnInit, OnDestroy {
7071
listOfCheckboxes: any[] = [];
7172
actionsApi: Object;
7273
propName: string;
74+
variant?: string;
7375

7476
fieldControl = new FormControl('', null);
7577

@@ -146,6 +148,7 @@ export class CheckBoxComponent implements OnInit, OnDestroy {
146148

147149
this.actionsApi = this.pConn$.getActionsApi();
148150
this.propName = this.pConn$.getStateProps().value;
151+
this.variant = this.configProps$.variant;
149152

150153
// multi case
151154
this.selectionMode = this.configProps$.selectionMode;

packages/angular-sdk-components/src/lib/_components/field/radio-buttons/radio-buttons.component.html

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
<div *ngIf="displayMode$; else noDisplayMode">
2-
<component-mapper
3-
*ngIf="bVisible$ !== false"
4-
name="FieldValueList"
5-
[props]="{ label$, value$: this.localizedValue, displayMode$ }"
6-
></component-mapper>
1+
<div *ngIf="variant !== 'card'; else cardMode">
2+
<div *ngIf="displayMode$; else noDisplayMode">
3+
<component-mapper
4+
*ngIf="bVisible$ !== false"
5+
name="FieldValueList"
6+
[props]="{ label$, value$: this.localizedValue, displayMode$ }"
7+
></component-mapper>
8+
</div>
79
</div>
810
<ng-template #noDisplayMode>
911
<div [formGroup]="formGroup$" *ngIf="bVisible$">
@@ -32,3 +34,9 @@
3234
</mat-form-field>
3335
</div>
3436
</ng-template>
37+
<ng-template #cardMode>
38+
<h4>{{ label$ }}</h4>
39+
<div>
40+
<component-mapper name="SelectableCard" [props]="{ pConn$: pConn$, type: 'radio' }" [parent]="this"></component-mapper>
41+
</div>
42+
</ng-template>

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ interface RadioButtonsProps extends PConnFieldProps {
2020
// If any, enter additional props that only exist on RadioButtons here
2121
inline: boolean;
2222
fieldMetadata?: any;
23+
variant?: string;
2324
}
2425

2526
@Component({
@@ -62,6 +63,7 @@ export class RadioButtonsComponent implements OnInit, OnDestroy {
6263
localizedValue = '';
6364
actionsApi: Object;
6465
propName: string;
66+
variant?: string;
6567

6668
constructor(
6769
private angularPConnect: AngularPConnectService,
@@ -132,6 +134,8 @@ export class RadioButtonsComponent implements OnInit, OnDestroy {
132134
this.helperText = this.configProps$.helperText;
133135
this.placeholder = this.configProps$.placeholder || '';
134136

137+
this.variant = this.configProps$.variant;
138+
135139
// timeout and detectChanges to avoid ExpressionChangedAfterItHasBeenCheckedError
136140
setTimeout(() => {
137141
if (this.configProps$.required != null) {
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 40ch), 1fr)); grid-auto-rows: 1fr; gap: 0.5rem">
2+
<div *ngFor="let cardContent of contentList">
3+
<mat-card [ngStyle]="cardStyle" appearance="outlined" (click)="cardSelect($event, cardContent.commonCardProps)">
4+
<img
5+
*ngIf="cardContent.cardImage"
6+
mat-card-image
7+
src="{{ cardContent.cardImage.src }}"
8+
alt="{{ cardContent.cardImage.alt }}"
9+
[ngStyle]="cardContent.cardImage.style"
10+
/>
11+
<mat-card-content>
12+
<div *ngIf="type === 'radio'">
13+
<mat-radio-button
14+
[checked]="radioBtnValue === cardContent?.commonCardProps?.key"
15+
[disabled]="disabled"
16+
[value]="cardContent.commonCardProps.key"
17+
(change)="fieldOnChange(cardContent.commonCardProps.key)"
18+
>
19+
{{ cardContent.commonCardProps.label }}
20+
</mat-radio-button>
21+
</div>
22+
<div *ngIf="type === 'checkbox'">
23+
<mat-checkbox
24+
[labelPosition]="'after'"
25+
[checked]="cardContent.commonCardProps.selected"
26+
[disabled]="disabled || readOnly"
27+
[attr.data-test-id]="testId + ':' + cardContent.commonCardProps.label"
28+
(change)="handleChangeMultiMode($event, cardContent.commonCardProps)"
29+
(blur)="fieldOnBlur()"
30+
>{{ cardContent.commonCardProps.label }}</mat-checkbox
31+
>
32+
</div>
33+
<div *ngFor="let field of cardContent.commonCardProps.fields" [ngStyle]="field.type !== 'TextArea' ? defaultStyle : specialStyle">
34+
<div style="color: rgba(0, 0, 0, 0.6)">{{ field.name }}</div>
35+
<div>{{ field?.value?.getPConnect().getConfigProps().value ?? '--' }}</div>
36+
</div>
37+
</mat-card-content>
38+
</mat-card>
39+
</div>
40+
</div>

packages/angular-sdk-components/src/lib/_components/field/selectable-card/selectable-card.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 { SelectableCardComponent } from './selectable-card.component';
4+
5+
describe('SelectableCardComponent', () => {
6+
let component: SelectableCardComponent;
7+
let fixture: ComponentFixture<SelectableCardComponent>;
8+
9+
beforeEach(async () => {
10+
await TestBed.configureTestingModule({
11+
imports: [SelectableCardComponent]
12+
}).compileComponents();
13+
14+
fixture = TestBed.createComponent(SelectableCardComponent);
15+
component = fixture.componentInstance;
16+
fixture.detectChanges();
17+
});
18+
19+
it('should create', () => {
20+
expect(component).toBeTruthy();
21+
});
22+
});

0 commit comments

Comments
 (0)