forked from hazza/dspace-angular
123 lines
3.5 KiB
TypeScript
123 lines
3.5 KiB
TypeScript
import {Inject} from '@angular/core';
|
|
import { FormFieldModel } from '../models/form-field.model';
|
|
import { FormFieldMetadataValueObject } from '../models/form-field-metadata-value.model';
|
|
import {
|
|
DynamicFormControlLayout,
|
|
DynamicInputModel,
|
|
DynamicInputModelConfig
|
|
} from '@ng-dynamic-forms/core';
|
|
import {
|
|
CONCAT_FIRST_INPUT_SUFFIX,
|
|
CONCAT_GROUP_SUFFIX,
|
|
CONCAT_SECOND_INPUT_SUFFIX,
|
|
DynamicConcatModel,
|
|
DynamicConcatModelConfig
|
|
} from '../ds-dynamic-form-ui/models/ds-dynamic-concat.model';
|
|
import { hasNoValue, hasValue, isNotEmpty } from '../../../empty.util';
|
|
import { ParserOptions } from './parser-options';
|
|
import {
|
|
CONFIG_DATA,
|
|
FieldParser,
|
|
INIT_FORM_VALUES,
|
|
PARSER_OPTIONS,
|
|
SUBMISSION_ID
|
|
} from './field-parser';
|
|
|
|
export class ConcatFieldParser extends FieldParser {
|
|
|
|
constructor(
|
|
@Inject(SUBMISSION_ID) submissionId: string,
|
|
@Inject(CONFIG_DATA) configData: FormFieldModel,
|
|
@Inject(INIT_FORM_VALUES) initFormValues,
|
|
@Inject(PARSER_OPTIONS) parserOptions: ParserOptions,
|
|
protected separator: string,
|
|
protected firstPlaceholder: string = null,
|
|
protected secondPlaceholder: string = null) {
|
|
super(submissionId, configData, initFormValues, parserOptions);
|
|
|
|
this.separator = separator;
|
|
this.firstPlaceholder = firstPlaceholder;
|
|
this.secondPlaceholder = secondPlaceholder;
|
|
}
|
|
|
|
public modelFactory(fieldValue?: FormFieldMetadataValueObject | any, label?: boolean): any {
|
|
|
|
let clsGroup: DynamicFormControlLayout;
|
|
let clsInput: DynamicFormControlLayout;
|
|
const id: string = this.configData.selectableMetadata[0].metadata;
|
|
|
|
clsInput = {
|
|
grid: {
|
|
host: 'col-sm-6'
|
|
}
|
|
};
|
|
|
|
const groupId = id.replace(/\./g, '_') + CONCAT_GROUP_SUFFIX;
|
|
const concatGroup: DynamicConcatModelConfig = this.initModel(groupId, label, false, true);
|
|
|
|
concatGroup.group = [];
|
|
concatGroup.separator = this.separator;
|
|
|
|
const input1ModelConfig: DynamicInputModelConfig = this.initModel(
|
|
id + CONCAT_FIRST_INPUT_SUFFIX,
|
|
false,
|
|
true,
|
|
true,
|
|
false
|
|
);
|
|
const input2ModelConfig: DynamicInputModelConfig = this.initModel(
|
|
id + CONCAT_SECOND_INPUT_SUFFIX,
|
|
false,
|
|
true,
|
|
true,
|
|
false
|
|
);
|
|
|
|
if (hasNoValue(concatGroup.hint) && hasValue(input1ModelConfig.hint) && hasNoValue(input2ModelConfig.hint)) {
|
|
concatGroup.hint = input1ModelConfig.hint;
|
|
input1ModelConfig.hint = undefined;
|
|
}
|
|
|
|
if (this.configData.mandatory) {
|
|
concatGroup.required = true;
|
|
input1ModelConfig.required = true;
|
|
}
|
|
|
|
if (isNotEmpty(this.firstPlaceholder)) {
|
|
input1ModelConfig.placeholder = this.firstPlaceholder;
|
|
}
|
|
|
|
if (isNotEmpty(this.secondPlaceholder)) {
|
|
input2ModelConfig.placeholder = this.secondPlaceholder;
|
|
}
|
|
|
|
// Split placeholder if is like 'placeholder1/placeholder2'
|
|
const placeholder = this.configData.label.split('/');
|
|
if (placeholder.length === 2) {
|
|
input1ModelConfig.placeholder = placeholder[0];
|
|
input2ModelConfig.placeholder = placeholder[1];
|
|
}
|
|
|
|
const model1 = new DynamicInputModel(input1ModelConfig, clsInput);
|
|
const model2 = new DynamicInputModel(input2ModelConfig, clsInput);
|
|
concatGroup.group.push(model1);
|
|
concatGroup.group.push(model2);
|
|
|
|
clsGroup = {
|
|
element: {
|
|
control: 'form-row',
|
|
}
|
|
};
|
|
const concatModel = new DynamicConcatModel(concatGroup, clsGroup);
|
|
concatModel.name = this.getFieldId();
|
|
|
|
// Init values
|
|
if (isNotEmpty(fieldValue)) {
|
|
concatModel.value = fieldValue;
|
|
}
|
|
|
|
return concatModel;
|
|
}
|
|
|
|
}
|