@terminus/ngx-tools
Version:
[![CircleCI][circle-badge]][circle-link] [![codecov][codecov-badge]][codecov-project] [![semantic-release][semantic-release-badge]][semantic-release] [![MIT License][license-image]][license-url] <br> [![NPM version][npm-version-image]][npm-url] [![Github
50 lines • 5.59 kB
JavaScript
import { FormGroup, } from '@angular/forms';
/**
* Determine if a form control has a required validator
*
* @param formItem - The control or form group to check
* @returns If a required control is found
*
* @example
* const ctrl = new FormControl(null, [Validators.required];
* const group = new FormGroup({myControl: [null, [Validators.required]]});
* hasRequiredControl(ctrl); // Returns: true
* hasRequiredControl(group); // Returns: true
*/
export function hasRequiredControl(formItem) {
if (!formItem) {
return false;
}
// Dealing with FormGroup
if (formItem instanceof FormGroup) {
let isRequired = false;
// Check each control within the group
// eslint-disable-next-line @typescript-eslint/prefer-for-of
for (let i = 0; i < Object.keys(formItem.controls).length; i += 1) {
const control = formItem.controls[Object.keys(formItem.controls)[i]];
isRequired = controlHasRequiredField(control);
// Break out of the loop when we find the first required control
if (isRequired) {
break;
}
}
return isRequired;
}
// Dealing with AbstractControl
return controlHasRequiredField(formItem);
}
/**
* Determine if a form control has a required validator
*
* @param control - The control to test
* @returns If the control is required
*
* @example
* const ctrl = new FormControl(null, [Validators.required];
* controlHasRequiredField(ctrl); // Returns: true
*/
function controlHasRequiredField(control) {
const validator = control.validator ? control.validator({}) : null;
return !!(validator && validator.required);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzLXJlcXVpcmVkLWNvbnRyb2wuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdGVybWludXMvbmd4LXRvb2xzL3V0aWxpdGllcy8iLCJzb3VyY2VzIjpbImhhcy1yZXF1aXJlZC1jb250cm9sL2hhcy1yZXF1aXJlZC1jb250cm9sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEdBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUd4Qjs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxRQUF5QjtJQUMxRCxJQUFJLENBQUMsUUFBUSxFQUFFO1FBQ2IsT0FBTyxLQUFLLENBQUM7S0FDZDtJQUVELHlCQUF5QjtJQUN6QixJQUFJLFFBQVEsWUFBWSxTQUFTLEVBQUU7UUFDakMsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBRXZCLHNDQUFzQztRQUN0Qyw0REFBNEQ7UUFDNUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2pFLE1BQU0sT0FBTyxHQUFvQixRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEYsVUFBVSxHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTlDLGdFQUFnRTtZQUNoRSxJQUFJLFVBQVUsRUFBRTtnQkFDZCxNQUFNO2FBQ1A7U0FDRjtRQUVELE9BQU8sVUFBVSxDQUFDO0tBQ25CO0lBQ0QsK0JBQStCO0lBQy9CLE9BQU8sdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUdEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsdUJBQXVCLENBQUMsT0FBd0I7SUFDdkQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN0RixPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUdyb3VwLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSBmb3JtIGNvbnRyb2wgaGFzIGEgcmVxdWlyZWQgdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIGZvcm1JdGVtIC0gVGhlIGNvbnRyb2wgb3IgZm9ybSBncm91cCB0byBjaGVja1xuICogQHJldHVybnMgSWYgYSByZXF1aXJlZCBjb250cm9sIGlzIGZvdW5kXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IGN0cmwgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdO1xuICogY29uc3QgZ3JvdXAgPSBuZXcgRm9ybUdyb3VwKHtteUNvbnRyb2w6IFtudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dfSk7XG4gKiBoYXNSZXF1aXJlZENvbnRyb2woY3RybCk7ICAvLyBSZXR1cm5zOiB0cnVlXG4gKiBoYXNSZXF1aXJlZENvbnRyb2woZ3JvdXApOyAvLyBSZXR1cm5zOiB0cnVlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXF1aXJlZENvbnRyb2woZm9ybUl0ZW06IEFic3RyYWN0Q29udHJvbCk6IGJvb2xlYW4ge1xuICBpZiAoIWZvcm1JdGVtKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRGVhbGluZyB3aXRoIEZvcm1Hcm91cFxuICBpZiAoZm9ybUl0ZW0gaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgICBsZXQgaXNSZXF1aXJlZCA9IGZhbHNlO1xuXG4gICAgLy8gQ2hlY2sgZWFjaCBjb250cm9sIHdpdGhpbiB0aGUgZ3JvdXBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2ZcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE9iamVjdC5rZXlzKGZvcm1JdGVtLmNvbnRyb2xzKS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3QgY29udHJvbDogQWJzdHJhY3RDb250cm9sID0gZm9ybUl0ZW0uY29udHJvbHNbT2JqZWN0LmtleXMoZm9ybUl0ZW0uY29udHJvbHMpW2ldXTtcbiAgICAgIGlzUmVxdWlyZWQgPSBjb250cm9sSGFzUmVxdWlyZWRGaWVsZChjb250cm9sKTtcblxuICAgICAgLy8gQnJlYWsgb3V0IG9mIHRoZSBsb29wIHdoZW4gd2UgZmluZCB0aGUgZmlyc3QgcmVxdWlyZWQgY29udHJvbFxuICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGlzUmVxdWlyZWQ7XG4gIH1cbiAgLy8gRGVhbGluZyB3aXRoIEFic3RyYWN0Q29udHJvbFxuICByZXR1cm4gY29udHJvbEhhc1JlcXVpcmVkRmllbGQoZm9ybUl0ZW0pO1xufVxuXG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgZm9ybSBjb250cm9sIGhhcyBhIHJlcXVpcmVkIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSBjb250cm9sIC0gVGhlIGNvbnRyb2wgdG8gdGVzdFxuICogQHJldHVybnMgSWYgdGhlIGNvbnRyb2wgaXMgcmVxdWlyZWRcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgY3RybCA9IG5ldyBGb3JtQ29udHJvbChudWxsLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF07XG4gKiBjb250cm9sSGFzUmVxdWlyZWRGaWVsZChjdHJsKTsgLy8gUmV0dXJuczogdHJ1ZVxuICovXG5mdW5jdGlvbiBjb250cm9sSGFzUmVxdWlyZWRGaWVsZChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcbiAgY29uc3QgdmFsaWRhdG9yID0gY29udHJvbC52YWxpZGF0b3IgPyBjb250cm9sLnZhbGlkYXRvcih7fSBhcyBBYnN0cmFjdENvbnRyb2wpIDogbnVsbDtcbiAgcmV0dXJuICEhKHZhbGlkYXRvciAmJiB2YWxpZGF0b3IucmVxdWlyZWQpO1xufVxuIl19