in web/frontend/src/app/pages/streams/components/modals/modal-send-message/modal-send-message.component.ts [490:547]
private fieldValidator(field: FieldModel) {
if (field.type === 'json') {
return (control) => (!field.required || control.value ? null : {required: true});
}
if (field.type === 'dropdown') {
return [
field.required ? Validators.required : null,
(control) => {
return field.values.includes(control.value) ? null : {wrongValue: true};
},
].filter(Boolean);
}
if (field.type === 'binary') {
return [
field.required ? Validators.required : null,
(control) => {
if (!control.value) {
return;
}
const isString = typeof control.value === 'string';
const string = isString ? control.value : control.value.join(',');
let array = isString ? control.value.split(',') : control.value;
array = array.map((v) => Number(v)).filter((v) => !isNaN(v));
return array.join(',') === string ? null : {wrongValue: true};
},
].filter(Boolean);
}
if (field.type === 'btn-timepicker') {
return [
field.required ? Validators.required : null,
(control) => {
if (!control.value) {
return null;
}
if (typeof control.value === 'string') {
return /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/.test(
control.value,
)
? null
: {notFormat: true};
}
if (control.value?.getTime && control.value?.getTime() !== undefined) {
return null;
}
return {notDate: true};
},
].filter(Boolean);
}
return field.required ? Validators.required : null;
}