Мне нужно написать общую функцию, которая будет включать/отключать кнопки на основе условий внутри JSON.
JSON:
{
PURCHASE_LIEN: {
LABEL: 'PURCHASE LIEN',
DISABLE: true,
CONDITION: [
{
ReviewPurchaseDecisionStatus: true,
PurchaseDecisionStatus: false
},
{
ReviewPurchaseDecisionStatus: true,
'ReviewPurchaseDecision.Status': 'NOT QUALIFIED'
}
]
},
NOT_QUALIFIED: {
LABEL: 'NOT QUALIFIED',
DISABLE: true,
CONDITION: [
{
ReviewPurchaseDecisionStatus: true,
PurchaseDecisionStatus: false
},
{
ReviewPurchaseDecisionStatus: true,
'ReviewPurchaseDecision.Status': 'PURCHASED'
}
]
}
}
В JSON у меня есть две кнопки «PURCHASE_LIEN» и «NOT_QUALIFIED». Обе функции имеют набор условий, основанных на условии, кнопка должна включаться/отключаться с помощью свойства "DISABLE".
ВАЛИДАЦИЯ.СЕРВИС.ТС
Приведенная ниже функция установит свойство DISABLE кнопки на основе условий для объекта (selectedRow).
public disableButton(buttonContainer: any, buttonID: string, selectedRow: any) {
let status = true;
for (let i = 0; i < buttonContainer[buttonID]['CONDITION'].length; i++) {
const condition = buttonContainer[buttonID]['CONDITION'][i];
for (const conditionName in condition) {
if (condition[conditionName] !== selectedRow[condition]) {
status = false;
}
}
if (status) {
buttonContainer[buttonID].DISABLE = false;
break;
} else {
buttonContainer[buttonID].DISABLE = true;
}
}
return buttonContainer;
}
app.component.html
<div class="col-12 col-sm-6 col-md-4 col-lg-2">
<button class="btn btn-primary btn-semi-circle" (click)="showModal('Purchase')"
[disabled]="disableButton(buttonGroup, 'PURCHASE_LIEN', selectedRowData)">Purchase
Lien</button>
<!-- [disabled]="PURCHASE_LIEN_DISABLE" -->
</div>
<div class="col-12 col-sm-6 col-md-4 col-lg-2">
<button class="btn btn-danger btn-semi-circle" (click)="showModal('Not Qualified')"
[disabled]="disableButton(buttonGroup, 'NOT_QUALIFIED', selectedRowData)">Not
Qualified</button>
<!-- [disabled]="NOT_QUALIFIED_DISABLE" -->
</div>
app.component.ts
export class ReviewPurchaseDecisionComponent implements OnInit {
public buttonGroup: any = {
PURCHASE_LIEN: {
LABEL: 'PURCHASE LIEN',
DISABLE: true,
CONDITION: [
{
ReviewPurchaseDecisionStatus: true,
PurchaseDecisionStatus: false
},
{
ReviewPurchaseDecisionStatus: true,
'ReviewPurchaseDecision.Status': 'NOT QUALIFIED'
}
]
},
NOT_QUALIFIED: {
LABEL: 'NOT QUALIFIED',
DISABLE: true,
CONDITION: [
{
ReviewPurchaseDecisionStatus: true,
PurchaseDecisionStatus: false
},
{
ReviewPurchaseDecisionStatus: true,
'ReviewPurchaseDecision.Status': 'PURCHASED'
}
]
}
};
constructor(
public router: Router,
public validation: ValidationService,
private fb: FormBuilder,
private http: HttpHelperService,
private myMonitoringService: MyMonitoringService,
private authentication: AuthenticationService,
private sessionService: SessionService,
public dialogService: DialogServiceService,
private caseService: CaseService,
private cookieService: CookieService
) {}
disableButton(buttonContainer: any, buttonID: string, selectedRow: any) {
this.buttonGroup = this.validation.disableButton(
buttonContainer,
buttonID,
selectedRow
);
return this.buttonGroup[buttonID].DISABLE;
}
}
Метод disableButton в службе проверки изменяет значение свойства DISABLE на true/false в зависимости от условий, но кнопка не активируется. Он не обнаруживает изменения
stackblitz
? - person Abhishek   schedule 11.01.2019return buttonContainer;
, чтобы увидеть логическое значение. - person Arcteezy   schedule 11.01.2019