Skip to content

Commit da558d7

Browse files
authored
Merge branch 'master' into embedded-changes
2 parents e4e7707 + 853ff16 commit da558d7

File tree

71 files changed

+1427
-815
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+1427
-815
lines changed

eslint.config.mjs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ export default defineConfig([
8989
'prettier/prettier': 'off',
9090

9191
// Disable rules from shared configs we're not ready for yet.
92-
'sonarjs/cognitive-complexity': ['warn', 20],
92+
'sonarjs/cognitive-complexity': ['error', 20],
9393
'sonarjs/no-duplicate-string': 'off',
9494

9595
//
@@ -152,8 +152,7 @@ export default defineConfig([
152152
'import/no-relative-packages': 'off',
153153
'react/jsx-fragments': 'off',
154154
'react/react-in-jsx-scope': 'off',
155-
'react-hooks/exhaustive-deps': 'off',
156-
'sonarjs/cognitive-complexity': ['warn', 45]
155+
'react-hooks/exhaustive-deps': 'off'
157156
}
158157
},
159158
{

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
"build:dev": "run-p -l lint build-angularsdk",
1818
"build:dev:ci": "npm run clean && npm install && npm run build:dev",
1919
"lint": "run-p -cl lint:*",
20-
"lint:es": "eslint --color --cache --cache-location node_modules/.cache/eslint/ \"projects/angular-test-app/src/**\" \"packages/angular-sdk-components/src/**\"",
20+
"lint:es": "eslint --color --cache --cache-location node_modules/.cache/eslint/ \"projects/angular-test-app/src/**\" \"packages/angular-sdk-components/src/**\" --max-warnings=0",
2121
"lint:format": "prettier --log-level warn -c .",
2222
"fix": "run-s -cl fix:*",
23-
"fix:es": "eslint --color --fix --cache --cache-location node_modules/.cache/eslint/ \"projects/angular-test-app/src/**\" \"packages/angular-sdk-components/src/**\"",
23+
"fix:es": "eslint --color --fix --cache --cache-location node_modules/.cache/eslint/ \"projects/angular-test-app/src/**\" \"packages/angular-sdk-components/src/**\" --max-warnings=0",
2424
"fix:format": "prettier --log-level warn -w .",
2525
"start-dev": "ng serve --port 3500",
2626
"start-dev-https": "ng serve --port 3500 --ssl --ssl-key ./keys/sdk-a.key --ssl-cert ./keys/sdk-a.crt",

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ import { CaseViewComponent } from '../../_components/template/case-view/case-vie
5757
import { ConfirmationComponent } from '../../_components/template/confirmation/confirmation.component';
5858
import { DataReferenceComponent } from '../../_components/template/data-reference/data-reference.component';
5959
import { DefaultFormComponent } from '../../_components/template/default-form/default-form.component';
60+
import { DefaultPageComponent } from '../../_components/template/default-page/default-page.component';
6061
import { DetailsComponent } from '../../_components/template/details/details.component';
6162
import { DetailsNarrowWideComponent } from '../../_components/template/details-narrow-wide/details-narrow-wide.component';
6263
import { DetailsOneColumnComponent } from '../../_components/template/details-one-column/details-one-column.component';
@@ -82,6 +83,7 @@ import { OneColumnTabComponent } from '../../_components/template/one-column-tab
8283
import { PageComponent } from '../../_components/template/page/page.component';
8384
import { PromotedFiltersComponent } from '../../_components/template/promoted-filters/promoted-filters.component';
8485
import { SearchGroupsComponent } from '../../_components/template/advanced-search/search-groups/search-groups.component';
86+
import { SelfServiceCaseViewComponent } from '../../_components/template/self-service-case-view/self-service-case-view.component';
8587
import { SimpleTableComponent } from '../../_components/template/simple-table/simple-table.component';
8688
import { SimpleTableManualComponent } from '../../_components/template/simple-table-manual/simple-table-manual.component';
8789
import { SimpleTableSelectComponent } from '../../_components/template/simple-table-select/simple-table-select.component';
@@ -162,6 +164,7 @@ const pegaSdkComponentMap = {
162164
DateTime: DateTimeComponent,
163165
Decimal: DecimalComponent,
164166
DefaultForm: DefaultFormComponent,
167+
DefaultPage: DefaultPageComponent,
165168
DeferLoad: DeferLoadComponent,
166169
Details: DetailsComponent,
167170
DetailsFields: MaterialDetailsFieldsComponent,
@@ -224,6 +227,7 @@ const pegaSdkComponentMap = {
224227
SearchForm: SearchFormComponent,
225228
SearchGroups: SearchGroupsComponent,
226229
SelectableCard: SelectableCardComponent,
230+
SelfServiceCaseView: SelfServiceCaseViewComponent,
227231
SemanticLink: SemanticLinkComponent,
228232
SimpleTable: SimpleTableComponent,
229233
SimpleTableManual: SimpleTableManualComponent,

packages/angular-sdk-components/src/lib/_components/designSystemExtension/banner/banner.component.scss

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,20 @@
66
align-items: start;
77
}
88

9+
.psdk-grid-filter-2 {
10+
display: grid;
11+
grid-template-columns: repeat(3, minmax(0, 1fr));
12+
column-gap: calc(2 * 0.5rem);
13+
row-gap: calc(2 * 0.5rem);
14+
align-items: start;
15+
}
16+
917
.psdk-grid-filter-wide-narrow {
1018
display: grid;
1119
grid-template-columns: 7fr 3fr;
1220
column-gap: calc(2 * 0.5rem);
1321
row-gap: calc(2 * 0.5rem);
1422
align-items: start;
15-
padding: 1rem;
1623
}
1724

1825
.psdk-grid-filter-narrow-wide {

packages/angular-sdk-components/src/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.html

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,10 @@
3535
else hasSecondaryValue
3636
"
3737
>
38-
<component-mapper name="Operator" [props]="{ pConn$: field?.kid, displayLabel: field?.displayLabel }"></component-mapper>
38+
<component-mapper
39+
name="Operator"
40+
[props]="{ pConn$: field?.kid, displayLabel: field?.displayLabel || field?.config.displayLabel }"
41+
></component-mapper>
3942
</div>
4043
<ng-template #hasSecondaryValue>
4144
<div class="psdk-csf-secondary-field">

packages/angular-sdk-components/src/lib/_components/designSystemExtension/wss-quick-create/wss-quick-create.component.scss

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
1+
.wss-quick-create-header {
2+
background-color: var(--mat-sys-surface-container);
3+
}
4+
15
.quick-link-ul-list {
26
list-style: none;
37
padding: 0;
4-
grid-template-columns: repeat(auto-fill, minmax(min(40ch, 100%), 1fr));
8+
grid-template-columns: repeat(auto-fill, minmax(min(20ch, 100%), 1fr));
59
display: grid;
610
gap: calc(1rem);
711
}
812

913
.quick-link-list {
10-
border-radius: 8px;
14+
background-color: var(--mat-sys-surface-container);
15+
border-radius: 16px;
16+
border: 1px solid var(--mat-sys-primary);
1117
}
1218

1319
.quick-link-button {
@@ -16,22 +22,22 @@
1622
color: var(--app-form-color) !important;
1723
cursor: pointer;
1824
padding: calc(0.5rem * 2) !important;
19-
height: 6rem;
25+
height: 10rem;
2026
width: 100%;
2127
justify-content: start !important;
2228
background-color: transparent;
2329
border: 0;
2430
}
2531

2632
.quick-link-icon {
27-
width: 1em;
28-
height: 1em;
33+
width: 3em;
34+
height: 3em;
2935
flex-shrink: 0;
30-
filter: invert(100%);
3136
}
3237

3338
.quick-link-button-span {
3439
display: flex;
40+
flex-direction: column;
3541
align-items: center;
3642
gap: 0.5rem;
3743
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ interface AutoCompleteProps extends PConnFieldProps {
4242
MatAutocompleteModule,
4343
MatOptionModule,
4444
forwardRef(() => ComponentMapperComponent)
45-
]
45+
],
46+
providers: [DatapageService]
4647
})
4748
export class AutoCompleteComponent extends FieldBase implements OnInit {
4849
protected dataPageService = inject(DatapageService);

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import { FieldBase } from '../field.base';
1111
import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component';
1212
import { getDateFormatInfo } from '../../../_helpers/date-format-utils';
1313
import { handleEvent } from '../../../_helpers/event-util';
14-
import { format } from '../../../_helpers/formatters';
1514
import { DateFormatters } from '../../../_helpers/formatters/date';
1615
import { PConnFieldProps } from '../../../_types/PConnProps.interface';
1716

@@ -81,12 +80,16 @@ export class DateTimeComponent extends FieldBase implements OnInit, OnDestroy {
8180
this.fieldControl.setValue(dateTimeValue);
8281

8382
if (['DISPLAY_ONLY', 'STACKED_LARGE_VAL'].includes(this.displayMode$)) {
84-
this.formattedValue$ = format(this.value$, 'datetime', {
85-
format: `${this.theDateFormat.dateFormatString} hh:mm A`
86-
});
83+
this.formattedValue$ = this.generateDateTime(this.value$);
8784
}
8885
}
8986

87+
generateDateTime(sVal): string {
88+
if (!sVal) return '';
89+
if (sVal.length === 10) return this.utils.generateDate(sVal, 'Date-Long-Custom-YYYY');
90+
return this.utils.generateDateTime(sVal, 'DateTime-Long-YYYY-Custom');
91+
}
92+
9093
fieldOnDateChange(event: any) {
9194
// this comes from the date pop up
9295
if (typeof event.value === 'object') {

packages/angular-sdk-components/src/lib/_components/field/multiselect/utils.ts

Lines changed: 55 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,31 @@ function prepareSearchResults(listObjData, displayFieldMeta) {
8585
return searchResults;
8686
}
8787

88+
function handleGroupedDataSearch(dataApiObj, searchText, clickedGroup, initialCaseClass, itemsTree) {
89+
const localDataApiObj = cloneDeep(dataApiObj);
90+
localDataApiObj.fetchedNQData = false;
91+
localDataApiObj.cache = {};
92+
93+
if (!searchText && !clickedGroup) {
94+
return { shouldReturn: true, value: itemsTree };
95+
}
96+
97+
localDataApiObj.parameters[Object.keys(localDataApiObj.parameters)[1]] = searchText;
98+
localDataApiObj.parameters[Object.keys(localDataApiObj.parameters)[0]] = initialCaseClass;
99+
100+
if (clickedGroup) {
101+
if (!searchText) {
102+
const containsData = itemsTree.find(item => item.id === clickedGroup);
103+
if (containsData?.items?.length) {
104+
return { shouldReturn: true, value: itemsTree };
105+
}
106+
}
107+
localDataApiObj.parameters[Object.keys(localDataApiObj.parameters)[0]] = JSON.stringify([clickedGroup]);
108+
}
109+
110+
return { shouldReturn: false, value: localDataApiObj };
111+
}
112+
88113
async function doSearch(
89114
searchText,
90115
clickedGroup,
@@ -96,61 +121,44 @@ async function doSearch(
96121
showSecondaryInSearchOnly,
97122
selected
98123
) {
99-
let searchTextForUngroupedData = '';
100-
if (dataApiObj) {
101-
// creating dataApiObject in grouped data cases
102-
if (isGroupData) {
103-
dataApiObj = cloneDeep(dataApiObj);
104-
dataApiObj.fetchedNQData = false;
105-
dataApiObj.cache = {};
106-
107-
// if we have no search text and no group selected, return the original tree
108-
if (searchText === '' && clickedGroup === '') {
109-
return itemsTree;
110-
}
124+
if (!dataApiObj) {
125+
return itemsTree;
126+
}
111127

112-
// setting the inital search text & search classes in ApiObject
113-
dataApiObj.parameters[Object.keys(dataApiObj.parameters)[1]] = searchText;
114-
dataApiObj.parameters[Object.keys(dataApiObj.parameters)[0]] = initialCaseClass;
115-
116-
// if we have a selected group
117-
if (clickedGroup) {
118-
// check if the data for this group is already present and no search text
119-
if (searchText === '') {
120-
const containsData = itemsTree.find(item => item.id === clickedGroup);
121-
// do not make API call when items of respective group are already fetched
122-
if (containsData?.items?.length) return itemsTree;
123-
}
128+
let searchTextForApi = '';
129+
let localDataApiObj = dataApiObj;
124130

125-
dataApiObj.parameters[Object.keys(dataApiObj.parameters)[0]] = JSON.stringify([clickedGroup]);
126-
}
127-
} else {
128-
searchTextForUngroupedData = searchText;
131+
if (isGroupData) {
132+
const groupResult = handleGroupedDataSearch(dataApiObj, searchText, clickedGroup, initialCaseClass, itemsTree);
133+
if (groupResult.shouldReturn) {
134+
return groupResult.value;
129135
}
136+
localDataApiObj = groupResult.value;
137+
} else {
138+
searchTextForApi = searchText;
139+
}
130140

131-
// search API call
132-
const response = await dataApiObj.fetchData(searchTextForUngroupedData).catch(() => {
133-
return itemsTree;
134-
});
141+
const response = await localDataApiObj.fetchData(searchTextForApi).catch(() => ({ data: undefined }));
135142

136-
let listObjData = response.data;
137-
let newItemsTree = [];
138-
if (isGroupData) {
139-
if (searchText) {
140-
listObjData = prepareSearchResults(listObjData, displayFieldMeta);
141-
} else {
142-
newItemsTree = putItemsDataInItemsTree(listObjData, displayFieldMeta, itemsTree, showSecondaryInSearchOnly, selected);
143-
return newItemsTree;
144-
}
145-
}
146-
const showSecondaryData = showSecondaryInSearchOnly ? !!searchText : true;
147-
if (listObjData !== undefined && listObjData.length > 0) {
148-
newItemsTree = listObjData.map(entry => createSingleTreeObejct(entry, displayFieldMeta, showSecondaryData, selected));
143+
let listObjData = response.data;
144+
if (!listObjData) {
145+
return itemsTree;
146+
}
147+
148+
if (isGroupData) {
149+
if (searchText) {
150+
listObjData = prepareSearchResults(listObjData, displayFieldMeta);
151+
} else {
152+
return putItemsDataInItemsTree(listObjData, displayFieldMeta, itemsTree, showSecondaryInSearchOnly, selected);
149153
}
150-
return newItemsTree;
151154
}
152155

153-
return itemsTree;
156+
if (listObjData.length === 0) {
157+
return [];
158+
}
159+
160+
const showSecondaryData = showSecondaryInSearchOnly ? !!searchText : true;
161+
return listObjData.map(entry => createSingleTreeObejct(entry, displayFieldMeta, showSecondaryData, selected));
154162
}
155163

156164
function setValuesToPropertyList(searchText, assocProp, items, columns, actions, updatePropertyInRedux = true) {

0 commit comments

Comments
 (0)