SuiteCRM-Core/core/app/fields/field.component.ts
Clemente Raposo 61de0618ea Restructure front end filters setup
- Use FieldManager
- Change ValidationManager to support save and filter validation
- Use reactive forms formControl in varchar filter
- Add null checks to datetime formatter
- Add field type to criteria
- Set form control value on field init
- display messages for edit or filter modes
- Validate filter input
- Display warning messages when not valid
- Adjust karma / jasmine tests
2021-03-30 19:22:35 +01:00

87 lines
2.5 KiB
TypeScript

import {Component, Input} from '@angular/core';
import {viewFieldsMap} from './field.manifest';
import {ModuleNavigation} from '@services/navigation/module-navigation/module-navigation.service';
import {Record} from '@app-common/record/record.model';
import {Field} from '@app-common/record/field.model';
import {ModuleNameMapper} from '@services/navigation/module-name-mapper/module-name-mapper.service';
import {StringMap} from '@app-common/types/StringMap';
@Component({
selector: 'scrm-field',
templateUrl: './field.component.html',
styleUrls: []
})
export class FieldComponent {
@Input('mode') mode: string;
@Input('type') type: string;
@Input('field') field: Field;
@Input('record') record: Record = null;
@Input('klass') klass: { [key: string]: any } = null;
map = viewFieldsMap;
constructor(protected navigation: ModuleNavigation, private moduleNameMapper: ModuleNameMapper) {
}
get componentType(): any {
const key = this.type + '.' + this.mode;
if (this.map[key]) {
return this.map[key];
}
const defaultKey = 'varchar' + '.' + this.mode;
return this.map[defaultKey];
}
isLink(): boolean {
if (this.mode !== 'detail' && this.mode !== 'list') {
return false;
}
if (!this.field || !this.record) {
return false;
}
if (this.type === 'relate') {
return true;
}
return !!(this.field.metadata && this.field.metadata.link);
}
isEdit(): boolean {
return this.mode === 'edit' || this.mode === 'filter';
}
getLink(): string {
if (this.type === 'relate') {
return this.getRelateLink;
}
return this.navigation.getRecordRouterLink(this.record.module, this.record.id);
}
get getRelateLink(): string {
if (this.field.definition.id_name && this.field.definition.module) {
const moduleName = this.moduleNameMapper.toFrontend(this.field.definition.module);
return this.navigation.getRecordRouterLink(
moduleName,
this.record.attributes[this.field.definition.id_name]
);
}
return '';
}
getMessageContext(item: any, record: Record): StringMap {
const context = item && item.message && item.message.context || {};
context.module = (record && record.module) || '';
return context;
}
getMessageLabelKey(item: any): string {
return (item && item.message && item.message.labelKey) || '';
}
}