@ngqp/core
Version:
46 lines • 6.25 kB
JavaScript
import { DefaultControlValueAccessorDirective } from './default-control-value-accessor.directive';
import { NGQP_BUILT_IN_ACCESSORS } from './ngqp-accessors';
/**
* This resembles the selectControlValueAccessor function from
* https://github.com/angular/angular/blob/7.1.2/packages/forms/src/directives/shared.ts#L186
* We can't use it directly since it isn't exported in the public API, but let's hope choosing
* any accessor is good enough for our purposes.
*
* @internal
*/
export function selectValueAccessor(valueAccessors) {
if (!valueAccessors || !Array.isArray(valueAccessors)) {
throw new Error(`No matching ControlValueAccessor has been found for this form control`);
}
let defaultAccessor = null;
let builtInAccessor = null;
let customAccessor = null;
valueAccessors.forEach(valueAccessor => {
if (valueAccessor.constructor === DefaultControlValueAccessorDirective) {
defaultAccessor = valueAccessor;
}
else if (NGQP_BUILT_IN_ACCESSORS.some(current => valueAccessor.constructor === current)) {
if (builtInAccessor !== null) {
throw new Error(`More than one built-in ControlValueAccessor matches`);
}
builtInAccessor = valueAccessor;
}
else {
if (customAccessor !== null) {
throw new Error(`More than one custom ControlValueAccessor has been found on the form control`);
}
customAccessor = valueAccessor;
}
});
if (customAccessor !== null) {
return customAccessor;
}
if (builtInAccessor !== null) {
return builtInAccessor;
}
if (defaultAccessor !== null) {
return defaultAccessor;
}
throw new Error(`No matching ControlValueAccessor has been found for this form control`);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3FwL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL2FjY2Vzc29ycy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xHLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsY0FBc0M7SUFDdEUsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEVBQUU7UUFDbkQsTUFBTSxJQUFJLEtBQUssQ0FBQyx1RUFBdUUsQ0FBQyxDQUFDO0tBQzVGO0lBRUQsSUFBSSxlQUFlLEdBQWdDLElBQUksQ0FBQztJQUN4RCxJQUFJLGVBQWUsR0FBZ0MsSUFBSSxDQUFDO0lBQ3hELElBQUksY0FBYyxHQUFnQyxJQUFJLENBQUM7SUFFdkQsY0FBYyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUNuQyxJQUFJLGFBQWEsQ0FBQyxXQUFXLEtBQUssb0NBQW9DLEVBQUU7WUFDcEUsZUFBZSxHQUFHLGFBQWEsQ0FBQztTQUNuQzthQUFNLElBQUksdUJBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFdBQVcsS0FBSyxPQUFPLENBQUMsRUFBRTtZQUN2RixJQUFJLGVBQWUsS0FBSyxJQUFJLEVBQUU7Z0JBQzFCLE1BQU0sSUFBSSxLQUFLLENBQUMscURBQXFELENBQUMsQ0FBQzthQUMxRTtZQUVELGVBQWUsR0FBRyxhQUFhLENBQUM7U0FDbkM7YUFBTTtZQUNILElBQUksY0FBYyxLQUFLLElBQUksRUFBRTtnQkFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO2FBQ25HO1lBRUQsY0FBYyxHQUFHLGFBQWEsQ0FBQztTQUNsQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxjQUFjLEtBQUssSUFBSSxFQUFFO1FBQ3pCLE9BQU8sY0FBYyxDQUFDO0tBQ3pCO0lBRUQsSUFBSSxlQUFlLEtBQUssSUFBSSxFQUFFO1FBQzFCLE9BQU8sZUFBZSxDQUFDO0tBQzFCO0lBRUQsSUFBSSxlQUFlLEtBQUssSUFBSSxFQUFFO1FBQzFCLE9BQU8sZUFBZSxDQUFDO0tBQzFCO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx1RUFBdUUsQ0FBQyxDQUFDO0FBQzdGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERlZmF1bHRDb250cm9sVmFsdWVBY2Nlc3NvckRpcmVjdGl2ZSB9IGZyb20gJy4vZGVmYXVsdC1jb250cm9sLXZhbHVlLWFjY2Vzc29yLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBOR1FQX0JVSUxUX0lOX0FDQ0VTU09SUyB9IGZyb20gJy4vbmdxcC1hY2Nlc3NvcnMnO1xuXG4vKipcbiAqIFRoaXMgcmVzZW1ibGVzIHRoZSBzZWxlY3RDb250cm9sVmFsdWVBY2Nlc3NvciBmdW5jdGlvbiBmcm9tXG4gKiAgIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi83LjEuMi9wYWNrYWdlcy9mb3Jtcy9zcmMvZGlyZWN0aXZlcy9zaGFyZWQudHMjTDE4NlxuICogV2UgY2FuJ3QgdXNlIGl0IGRpcmVjdGx5IHNpbmNlIGl0IGlzbid0IGV4cG9ydGVkIGluIHRoZSBwdWJsaWMgQVBJLCBidXQgbGV0J3MgaG9wZSBjaG9vc2luZ1xuICogYW55IGFjY2Vzc29yIGlzIGdvb2QgZW5vdWdoIGZvciBvdXIgcHVycG9zZXMuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3RWYWx1ZUFjY2Vzc29yKHZhbHVlQWNjZXNzb3JzOiBDb250cm9sVmFsdWVBY2Nlc3NvcltdKTogQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIGlmICghdmFsdWVBY2Nlc3NvcnMgfHwgIUFycmF5LmlzQXJyYXkodmFsdWVBY2Nlc3NvcnMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gbWF0Y2hpbmcgQ29udHJvbFZhbHVlQWNjZXNzb3IgaGFzIGJlZW4gZm91bmQgZm9yIHRoaXMgZm9ybSBjb250cm9sYCk7XG4gICAgfVxuXG4gICAgbGV0IGRlZmF1bHRBY2Nlc3NvcjogQ29udHJvbFZhbHVlQWNjZXNzb3IgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgYnVpbHRJbkFjY2Vzc29yOiBDb250cm9sVmFsdWVBY2Nlc3NvciB8IG51bGwgPSBudWxsO1xuICAgIGxldCBjdXN0b21BY2Nlc3NvcjogQ29udHJvbFZhbHVlQWNjZXNzb3IgfCBudWxsID0gbnVsbDtcblxuICAgIHZhbHVlQWNjZXNzb3JzLmZvckVhY2godmFsdWVBY2Nlc3NvciA9PiB7XG4gICAgICAgIGlmICh2YWx1ZUFjY2Vzc29yLmNvbnN0cnVjdG9yID09PSBEZWZhdWx0Q29udHJvbFZhbHVlQWNjZXNzb3JEaXJlY3RpdmUpIHtcbiAgICAgICAgICAgIGRlZmF1bHRBY2Nlc3NvciA9IHZhbHVlQWNjZXNzb3I7XG4gICAgICAgIH0gZWxzZSBpZiAoTkdRUF9CVUlMVF9JTl9BQ0NFU1NPUlMuc29tZShjdXJyZW50ID0+IHZhbHVlQWNjZXNzb3IuY29uc3RydWN0b3IgPT09IGN1cnJlbnQpKSB7XG4gICAgICAgICAgICBpZiAoYnVpbHRJbkFjY2Vzc29yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNb3JlIHRoYW4gb25lIGJ1aWx0LWluIENvbnRyb2xWYWx1ZUFjY2Vzc29yIG1hdGNoZXNgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnVpbHRJbkFjY2Vzc29yID0gdmFsdWVBY2Nlc3NvcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjdXN0b21BY2Nlc3NvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTW9yZSB0aGFuIG9uZSBjdXN0b20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaGFzIGJlZW4gZm91bmQgb24gdGhlIGZvcm0gY29udHJvbGApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXN0b21BY2Nlc3NvciA9IHZhbHVlQWNjZXNzb3I7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChjdXN0b21BY2Nlc3NvciAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gY3VzdG9tQWNjZXNzb3I7XG4gICAgfVxuXG4gICAgaWYgKGJ1aWx0SW5BY2Nlc3NvciAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gYnVpbHRJbkFjY2Vzc29yO1xuICAgIH1cblxuICAgIGlmIChkZWZhdWx0QWNjZXNzb3IgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRBY2Nlc3NvcjtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIG1hdGNoaW5nIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGhhcyBiZWVuIGZvdW5kIGZvciB0aGlzIGZvcm0gY29udHJvbGApO1xufSJdfQ==