Skip to content

Commit 9ec0f16

Browse files
authored
fix: User Referece readOnly is not working as expected (#294)
1 parent 5de061d commit 9ec0f16

File tree

5 files changed

+82
-14
lines changed

5 files changed

+82
-14
lines changed

packages/angular-sdk-components/src/lib/_components/designSystemExtension/operator/operator.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<div class="psdk-operator psdk-double">
1+
<div class="psdk-operator psdk-double" [ngClass]="{ 'flex-row': displayLabel }">
22
<div class="psdk-label">
33
{{ label$ }}
44
</div>

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,18 @@
11
.psdk-operator {
22
display: flex;
3-
flex-direction: row;
3+
flex-direction: column;
44
font-size: 0.8rem;
55
color: var(--app-neutral-color);
6+
padding-left: 0.625rem;
7+
margin: 16px 0 8px 0;
8+
}
9+
10+
.psdk-operator.flex-row {
11+
flex-direction: row;
612
align-items: center;
13+
text-align: center;
14+
padding-left: 0;
15+
margin: 0;
716
}
817

918
.psdk-operator-popover {
@@ -35,7 +44,6 @@
3544

3645
.psdk-double {
3746
column-gap: 1rem;
38-
text-align: center;
3947
}
4048

4149
.psdk-top-pad {

packages/angular-sdk-components/src/lib/_components/designSystemExtension/operator/operator.component.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@ import { Utils } from '../../../_helpers/utils';
1313
export class OperatorComponent implements OnInit, OnChanges, OnDestroy {
1414
@Input() pConn$: typeof PConnect;
1515
@Input() displayLabel;
16+
@Input() name$?: string;
17+
1618
fields$: any[] = [];
1719
bShowPopover$: boolean;
1820
date$: string;
19-
name$: string;
2021
label$: string;
2122
id$: string;
2223
constructor(
@@ -40,7 +41,7 @@ export class OperatorComponent implements OnInit, OnChanges, OnDestroy {
4041

4142
ngOnChanges(changes: SimpleChanges): void {
4243
const { pConn$ } = changes;
43-
if (pConn$.previousValue !== pConn$.currentValue) {
44+
if (pConn$ && pConn$.previousValue !== pConn$.currentValue) {
4445
this.updateSelf();
4546
}
4647
}
@@ -69,7 +70,7 @@ export class OperatorComponent implements OnInit, OnChanges, OnDestroy {
6970
this.id$ = configProps$.resolveOperator.userId;
7071
this.label$ = configProps$.resolveLabel;
7172
} else {
72-
this.name$ = configProps$?.value.userName;
73+
this.name$ = this.name$ || configProps$?.value.userName;
7374
this.id$ = configProps$?.value.userId;
7475
this.label$ = configProps$.label;
7576
}

packages/angular-sdk-components/src/lib/_components/field/user-reference/user-reference.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
</div>
55
<ng-template #noDisplayMode>
66
<div class="psdk-user-reference">
7-
<div *ngIf="type === 'operator'">
8-
<component-mapper name="Operator" [props]="{ pConn$ }"></component-mapper>
7+
<div *ngIf="this.userID$ && type === 'operator'">
8+
<component-mapper name="Operator" [props]="{ pConn$, name$: userName$ }"></component-mapper>
99
</div>
1010
<div [formGroup]="formGroup$" *ngIf="type === 'dropdown'">
1111
<mat-form-field class="psdk-full-width" subscriptSizing="dynamic" [hintLabel]="helperText">

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

Lines changed: 65 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -184,12 +184,8 @@ export class UserReferenceComponent implements OnInit, OnDestroy {
184184
} else {
185185
// if same user ref field is referred in view as editable & readonly formatted text
186186
// referenced users won't be available, so get user details from dx api
187-
const { getOperatorDetails } = PCore.getUserApi();
188-
getOperatorDetails(this.userID$).then((resp: any) => {
189-
if (resp.data && resp.data.pyOperatorInfo && resp.data.pyOperatorInfo.pyUserName) {
190-
this.userName$ = resp.data.pyOperatorInfo.pyUserName;
191-
}
192-
});
187+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
188+
this.userName$ = await getUserName(this.pConn$, this.userID$);
193189
}
194190
} else if (displayAs === DROPDOWN_LIST || displayAs === SEARCH_BOX) {
195191
const queryPayload = {
@@ -257,3 +253,66 @@ export class UserReferenceComponent implements OnInit, OnDestroy {
257253
return errMessage;
258254
}
259255
}
256+
257+
const buildColumnForDisplayValue = dataObj => {
258+
if (dataObj.columns) {
259+
dataObj.columns = dataObj.columns.map(column => {
260+
const tempColObj = { ...column };
261+
if (tempColObj.key === 'true') {
262+
tempColObj.useForSearch = true;
263+
} else {
264+
tempColObj.useForSearch = false;
265+
}
266+
return tempColObj;
267+
});
268+
}
269+
};
270+
271+
function getUserName(pConn, userId = ''): Promise<string> {
272+
return new Promise(resolve => {
273+
const { parameters = {}, referenceList } = pConn.getConfigProps();
274+
const contextName = pConn.getContextName();
275+
276+
// eslint-disable-next-line @typescript-eslint/no-shadow
277+
const OPERATORS_DP = referenceList || PCore.getEnvironmentInfo().getDefaultOperatorDP() || '';
278+
279+
const columns = [
280+
{
281+
value: 'pyUserName',
282+
display: 'true',
283+
useForSearch: true,
284+
primary: 'true'
285+
},
286+
{
287+
value: 'pyUserIdentifier',
288+
setProperty: 'Associated property',
289+
key: 'true',
290+
display: 'true',
291+
secondary: 'true',
292+
useForSearch: true
293+
}
294+
];
295+
296+
const dataConfig: any = {
297+
dataSource: OPERATORS_DP,
298+
parameters,
299+
matchPosition: 'equals',
300+
listType: 'datapage',
301+
columns,
302+
cacheLifeSpan: 'form',
303+
deferDatasource: false,
304+
maxResultsDisplay: '1',
305+
ignoreCase: true
306+
};
307+
308+
PCore.getDataApi()
309+
.init(dataConfig, contextName)
310+
.then(dataApiObj => {
311+
buildColumnForDisplayValue(dataApiObj);
312+
dataApiObj.registerForBufferedCall({ waitTime: 50 });
313+
dataApiObj.fetchData(userId).then((response: any) => {
314+
resolve(response.data?.[0]?.pyUserName || userId);
315+
});
316+
});
317+
});
318+
}

0 commit comments

Comments
 (0)