mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-05-12 17:04:57 +00:00
#985 'required' validation for dynamic table
This commit is contained in:
parent
d3f6824bde
commit
ce151f23e0
@ -37,7 +37,8 @@ export class RequiredFieldValidator implements FormFieldValidator {
|
||||
FormFieldTypes.FUNCTIONAL_GROUP,
|
||||
FormFieldTypes.RADIO_BUTTONS,
|
||||
FormFieldTypes.UPLOAD,
|
||||
FormFieldTypes.AMOUNT
|
||||
FormFieldTypes.AMOUNT,
|
||||
FormFieldTypes.DYNAMIC_TABLE
|
||||
];
|
||||
|
||||
isSupported(field: FormFieldModel): boolean {
|
||||
@ -66,6 +67,10 @@ export class RequiredFieldValidator implements FormFieldValidator {
|
||||
return field.value && field.value.length > 0;
|
||||
}
|
||||
|
||||
if (field.type === FormFieldTypes.DYNAMIC_TABLE) {
|
||||
return field.value && field.value instanceof Array && field.value.length > 0;
|
||||
}
|
||||
|
||||
if (field.value === null || field.value === undefined || field.value === '') {
|
||||
return false;
|
||||
}
|
||||
|
@ -7,27 +7,32 @@
|
||||
background-color: #eef !important;
|
||||
}
|
||||
|
||||
.dynamic-table-widget__table {
|
||||
.dynamic-table-widget__table-container {
|
||||
overflow-y: auto;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.dynamic-table-widget__table > table {
|
||||
.dynamic-table-widget__table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.dynamic-table-widget__invalid .mdl-textfield__input {
|
||||
border-color: #d50000;
|
||||
}
|
||||
|
||||
.dynamic-table-widget__invalid .mdl-textfield__label {
|
||||
.dynamic-table-widget__invalid .dynamic-table-widget__label {
|
||||
color: #d50000;
|
||||
}
|
||||
|
||||
.dynamic-table-widget__invalid .mdl-textfield__label:after {
|
||||
background-color: #d50000;
|
||||
.dynamic-table-widget__invalid .dynamic-table-widget__table-container {
|
||||
border: 1px solid #d50000;
|
||||
}
|
||||
|
||||
.dynamic-table-widget__invalid .mdl-textfield__error {
|
||||
.dynamic-table-widget__invalid .dynamic-table-widget__table {
|
||||
border: none;
|
||||
}
|
||||
|
||||
.dynamic-table-widget__summary {
|
||||
visibility: hidden;
|
||||
color: #d50000;
|
||||
}
|
||||
|
||||
.dynamic-table-widget__invalid .dynamic-table-widget__summary {
|
||||
visibility: visible !important;
|
||||
}
|
||||
|
@ -1,9 +1,10 @@
|
||||
<div class="dynamic-table-widget">
|
||||
<div>{{content.name}}</div>
|
||||
<div class="dynamic-table-widget"
|
||||
[class.dynamic-table-widget__invalid]="!isValid()">
|
||||
<div class="dynamic-table-widget__label">{{content.name}}</div>
|
||||
|
||||
<div *ngIf="!editMode">
|
||||
<div class="dynamic-table-widget__table">
|
||||
<table class="mdl-data-table mdl-js-data-table">
|
||||
<div class="dynamic-table-widget__table-container">
|
||||
<table class="mdl-data-table mdl-js-data-table dynamic-table-widget__table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th *ngFor="let column of content.visibleColumns"
|
||||
@ -61,4 +62,6 @@
|
||||
(cancel)="onCancelChanges()">
|
||||
</row-editor>
|
||||
|
||||
<div class="dynamic-table-widget__summary">{{content?.field.validationSummary}}</div>
|
||||
|
||||
</div>
|
||||
|
@ -16,7 +16,7 @@
|
||||
*/
|
||||
|
||||
import { DynamicTableWidget } from './dynamic-table.widget';
|
||||
import { DynamicTableModel, DynamicTableRow, DynamicTableColumn } from './../core/index';
|
||||
import { DynamicTableModel, DynamicTableRow, DynamicTableColumn, FormModel, FormFieldTypes } from './../core/index';
|
||||
|
||||
describe('DynamicTableWidget', () => {
|
||||
|
||||
@ -206,4 +206,46 @@ describe('DynamicTableWidget', () => {
|
||||
expect(widget.editRow).toBeNull();
|
||||
});
|
||||
|
||||
it('should be valid by default', () => {
|
||||
widget.content.field = null;
|
||||
expect(widget.isValid()).toBeTruthy();
|
||||
|
||||
widget.content = null;
|
||||
expect(widget.isValid()).toBeTruthy();
|
||||
});
|
||||
|
||||
it('should take validation state from underlying field', () => {
|
||||
let form = new FormModel();
|
||||
widget.content = new DynamicTableModel(form, {
|
||||
type: FormFieldTypes.DYNAMIC_TABLE,
|
||||
required: true,
|
||||
value: null
|
||||
});
|
||||
|
||||
expect(widget.content.field.validate()).toBeFalsy();
|
||||
expect(widget.isValid()).toBe(widget.content.field.isValid);
|
||||
expect(widget.content.field.isValid).toBeFalsy();
|
||||
|
||||
widget.content.field.value = [{}];
|
||||
|
||||
expect(widget.content.field.validate()).toBeTruthy();
|
||||
expect(widget.isValid()).toBe(widget.content.field.isValid);
|
||||
expect(widget.content.field.isValid).toBeTruthy();
|
||||
|
||||
});
|
||||
|
||||
it('should prepend default currency for amount columns', () => {
|
||||
let row = <DynamicTableRow> { value: { key: '100' } };
|
||||
let column = <DynamicTableColumn> { id: 'key', type: 'Amount' };
|
||||
let actual = widget.getCellValue(row, column);
|
||||
expect(actual).toBe('$ 100');
|
||||
});
|
||||
|
||||
it('should prepend custom currency for amount columns', () => {
|
||||
let row = <DynamicTableRow> { value: { key: '100' } };
|
||||
let column = <DynamicTableColumn> { id: 'key', type: 'Amount', amountCurrency: 'GBP' };
|
||||
let actual = widget.getCellValue(row, column);
|
||||
expect(actual).toBe('GBP 100');
|
||||
});
|
||||
|
||||
});
|
||||
|
@ -39,6 +39,16 @@ export class DynamicTableWidget extends WidgetComponent {
|
||||
super();
|
||||
}
|
||||
|
||||
isValid() {
|
||||
let result = true;
|
||||
|
||||
if (this.content && this.content.field) {
|
||||
result = this.content.field.isValid;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
onRowClicked(row: DynamicTableRow) {
|
||||
if (this.content) {
|
||||
this.content.selectedRow = row;
|
||||
|
Loading…
x
Reference in New Issue
Block a user