UNPKG

@ngneat/reactive-forms

Version:

(Angular Reactive) Forms with Benefits

59 lines 10.7 kB
import { defer, merge, of } from 'rxjs'; import { distinctUntilChanged, map } from 'rxjs/operators'; export function selectControlValue$(control, mapFn) { return control.value$.pipe(map(mapFn), distinctUntilChanged()); } export function controlValueChanges$(control) { return merge(defer(() => of(control.getRawValue())), control.valueChanges.pipe(map(() => control.getRawValue()))); } export function controlStatus$(control, type) { return merge(defer(() => of(control[type])), control.statusChanges.pipe(map(() => control[type]), distinctUntilChanged())); } export function enableControl(control, enabled, opts) { if (enabled) { control.enable(opts); } else { control.disable(opts); } } export function disableControl(control, disabled, opts) { enableControl(control, !disabled, opts); } export function controlDisabledWhile(control, observable, opts) { return observable.subscribe((isDisabled) => disableControl(control, isDisabled, opts)); } export function controlEnabledWhile(control, observable, opts) { return observable.subscribe((isEnabled) => enableControl(control, isEnabled, opts)); } export function mergeErrors(existing, toAdd) { if (!existing && !toAdd) { return null; } return { ...existing, ...toAdd, }; } export function removeError(errors, key) { if (!errors) { return null; } const updatedErrors = { ...errors, }; delete updatedErrors[key]; return Object.keys(updatedErrors).length > 0 ? updatedErrors : null; } export function hasErrorAnd(and, control, error, path) { const hasError = control.hasError(error, !path || path.length === 0 ? undefined : path); return hasError && control[and]; } export function controlErrorChanges$(control, errors$) { return merge(defer(() => of(control.errors)), errors$, control.valueChanges.pipe(map(() => control.errors), distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)))); } export function markAllDirty(control) { control.markAsDirty({ onlySelf: true }); control._forEachChild((control) => control.markAllAsDirty?.() || control.markAsDirty({ onlySelf: true })); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvcmVhY3RpdmUtZm9ybXMvc3JjL2xpYi9jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNELE1BQU0sVUFBVSxtQkFBbUIsQ0FDakMsT0FBWSxFQUNaLEtBQXNCO0lBRXRCLE9BQVEsT0FBTyxDQUFDLE1BQTBCLENBQUMsSUFBSSxDQUM3QyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQ1Ysb0JBQW9CLEVBQUUsQ0FDdkIsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLE9BQW1EO0lBRW5ELE9BQU8sS0FBSyxDQUNWLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFDdEMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQzNDLENBQUM7QUFDckIsQ0FBQztBQUlELE1BQU0sVUFBVSxjQUFjLENBRzVCLE9BQXdCLEVBQ3hCLElBQU87SUFFUCxPQUFPLEtBQUssQ0FDVixLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQzlCLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUN4QixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQ3hCLG9CQUFvQixFQUFFLENBQ3ZCLENBQ2lCLENBQUM7QUFDdkIsQ0FBQztBQUVELE1BQU0s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USxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFdkMsT0FBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGRlZmVyLCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdENvbnRyb2xWYWx1ZSQ8VCwgUj4oXG4gIGNvbnRyb2w6IGFueSxcbiAgbWFwRm46IChzdGF0ZTogVCkgPT4gUlxuKTogT2JzZXJ2YWJsZTxSPiB7XG4gIHJldHVybiAoY29udHJvbC52YWx1ZSQgYXMgT2JzZXJ2YWJsZTxhbnk+KS5waXBlKFxuICAgIG1hcChtYXBGbiksXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udHJvbFZhbHVlQ2hhbmdlcyQ8VD4oXG4gIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCAmIHsgZ2V0UmF3VmFsdWU6ICgpID0+IFQgfVxuKTogT2JzZXJ2YWJsZTxUPiB7XG4gIHJldHVybiBtZXJnZShcbiAgICBkZWZlcigoKSA9PiBvZihjb250cm9sLmdldFJhd1ZhbHVlKCkpKSxcbiAgICBjb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKG1hcCgoKSA9PiBjb250cm9sLmdldFJhd1ZhbHVlKCkpKVxuICApIGFzIE9ic2VydmFibGU8VD47XG59XG5cbmV4cG9ydCB0eXBlIENvbnRyb2xTdGF0ZSA9ICdWQUxJRCcgfCAnSU5WQUxJRCcgfCAnUEVORElORycgfCAnRElTQUJMRUQnO1xuXG5leHBvcnQgZnVuY3Rpb24gY29udHJvbFN0YXR1cyQ8XG4gIEsgZXh0ZW5kcyAnZGlzYWJsZWQnIHwgJ2VuYWJsZWQnIHwgJ2ludmFsaWQnIHwgJ3ZhbGlkJyB8ICdzdGF0dXMnXG4+KFxuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4gIHR5cGU6IEtcbik6IE9ic2VydmFibGU8SyBleHRlbmRzICdzdGF0dXMnID8gQ29udHJvbFN0YXRlIDogYm9vbGVhbj4ge1xuICByZXR1cm4gbWVyZ2UoXG4gICAgZGVmZXIoKCkgPT4gb2YoY29udHJvbFt0eXBlXSkpLFxuICAgIGNvbnRyb2wuc3RhdHVzQ2hhbmdlcy5waXBlKFxuICAgICAgbWFwKCgpID0+IGNvbnRyb2xbdHlwZV0pLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgIClcbiAgKSBhcyBPYnNlcnZhYmxlPGFueT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmFibGVDb250cm9sKFxuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4gIGVuYWJsZWQ6IGJvb2xlYW4sXG4gIG9wdHM/OiBhbnlcbikge1xuICBpZiAoZW5hYmxlZCkge1xuICAgIGNvbnRyb2wuZW5hYmxlKG9wdHMpO1xuICB9IGVsc2Uge1xuICAgIGNvbnRyb2wuZGlzYWJsZShvcHRzKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZUNvbnRyb2woXG4gIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcbiAgZGlzYWJsZWQ6IGJvb2xlYW4sXG4gIG9wdHM/OiBhbnlcbikge1xuICBlbmFibGVDb250cm9sKGNvbnRyb2wsICFkaXNhYmxlZCwgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250cm9sRGlzYWJsZWRXaGlsZShcbiAgY29udHJvbDogQWJzdHJhY3RDb250cm9sLFxuICBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPGJvb2xlYW4+LFxuICBvcHRzPzogYW55XG4pOiBTdWJzY3JpcHRpb24ge1xuICByZXR1cm4gb2JzZXJ2YWJsZS5zdWJzY3JpYmUoKGlzRGlzYWJsZWQpID0+XG4gICAgZGlzYWJsZUNvbnRyb2woY29udHJvbCwgaXNEaXNhYmxlZCwgb3B0cylcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRyb2xFbmFibGVkV2hpbGUoXG4gIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcbiAgb2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxib29sZWFuPixcbiAgb3B0cz86IGFueVxuKTogU3Vic2NyaXB0aW9uIHtcbiAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKChpc0VuYWJsZWQpID0+XG4gICAgZW5hYmxlQ29udHJvbChjb250cm9sLCBpc0VuYWJsZWQsIG9wdHMpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVycm9ycyhcbiAgZXhpc3Rpbmc6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsLFxuICB0b0FkZDogVmFsaWRhdGlvbkVycm9ycyB8IG51bGxcbikge1xuICBpZiAoIWV4aXN0aW5nICYmICF0b0FkZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5leGlzdGluZyxcbiAgICAuLi50b0FkZCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUVycm9yKGVycm9yczogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwsIGtleTogc3RyaW5nKSB7XG4gIGlmICghZXJyb3JzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB1cGRhdGVkRXJyb3JzID0ge1xuICAgIC4uLmVycm9ycyxcbiAgfTtcblxuICBkZWxldGUgdXBkYXRlZEVycm9yc1trZXldO1xuXG4gIHJldHVybiBPYmplY3Qua2V5cyh1cGRhdGVkRXJyb3JzKS5sZW5ndGggPiAwID8gdXBkYXRlZEVycm9ycyA6IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNFcnJvckFuZChcbiAgYW5kOiAndG91Y2hlZCcgfCAnZGlydHknLFxuICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXG4gIGVycm9yOiBzdHJpbmcsXG4gIHBhdGg/OiBQYXJhbWV0ZXJzPEFic3RyYWN0Q29udHJvbFsnaGFzRXJyb3InXT5bMV1cbik6IGJvb2xlYW4ge1xuICBjb25zdCBoYXNFcnJvciA9IGNvbnRyb2wuaGFzRXJyb3IoXG4gICAgZXJyb3IsXG4gICAgIXBhdGggfHwgcGF0aC5sZW5ndGggPT09IDAgPyB1bmRlZmluZWQgOiBwYXRoXG4gICk7XG4gIHJldHVybiBoYXNFcnJvciAmJiBjb250cm9sW2FuZF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250cm9sRXJyb3JDaGFuZ2VzJChcbiAgY29udHJvbDogQWJzdHJhY3RDb250cm9sLFxuICBlcnJvcnMkOiBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPlxuKTogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4ge1xuICByZXR1cm4gbWVyZ2UoXG4gICAgZGVmZXIoKCkgPT4gb2YoY29udHJvbC5lcnJvcnMpKSxcbiAgICBlcnJvcnMkLFxuICAgIGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICBtYXAoKCkgPT4gY29udHJvbC5lcnJvcnMpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IEpTT04uc3RyaW5naWZ5KGEpID09PSBKU09OLnN0cmluZ2lmeShiKSlcbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrQWxsRGlydHkoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogdm9pZCB7XG4gIGNvbnRyb2wubWFya0FzRGlydHkoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcblxuICAoY29udHJvbCBhcyBhbnkpLl9mb3JFYWNoQ2hpbGQoKGNvbnRyb2w6IGFueSkgPT4gY29udHJvbC5tYXJrQWxsQXNEaXJ0eT8uKCkgfHwgY29udHJvbC5tYXJrQXNEaXJ0eSh7IG9ubHlTZWxmOiB0cnVlIH0pKTtcbn1cbiJdfQ==