angular-dynamic-forms-lite
Version:
Efficient dynamic and customizable Angular 7+ forms.
63 lines • 8.61 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { DynamicFormType } from "../form-field/form-field-type";
import { SubType } from "./sub-type";
/** @type {?} */
export const ROOT_ID = "__ROOT__";
/**
* @param {?} rootSetting
* @param {?} settings
* @param {?} defaultFormComponents
* @return {?}
*/
export function createFormFieldSettings(rootSetting, settings, defaultFormComponents) {
if (settings.has(ROOT_ID)) {
/** @type {?} */
const illegalSetting = settings.get(ROOT_ID);
throw new Error(`Illegal form field id ${illegalSetting.name} detected for ${illegalSetting.name}`);
}
/** @type {?} */
const combinedSettings = new Map();
combinedSettings.set(ROOT_ID, {
name: ROOT_ID,
component: rootSetting.component,
type: DynamicFormType.GROUP,
metadata: rootSetting.metadata
});
settings.forEach((/**
* @param {?} setting
* @param {?} id
* @return {?}
*/
(setting, id) => combinedSettings.set(id, Object.assign({}, setting, { type: setting.type ? setting.type : ((/** @type {?} */ (DynamicFormType.SINGLE))) }))));
// add missing components from default form components
for (let [, setting] of combinedSettings) {
setting.type = SubType.toSubType(setting.type);
if (setting.component || setting.type.type === DynamicFormType.HIDDEN)
continue;
setting.component = ensureDefaultFormComponents(defaultFormComponents, setting.name, setting.type);
}
return combinedSettings;
}
/**
* @param {?} defaultFormComponents
* @param {?} name
* @param {?} _type
* @return {?}
*/
export function ensureDefaultFormComponents(defaultFormComponents, name, _type) {
if (!defaultFormComponents) {
throw new Error(`No default form components available, but you used a DynamicFormType as an component identifier for ${name}. Did you add the module using DynamicFormsLiteModule.withDefaultComponents()?`);
}
/** @type {?} */
const subType = SubType.toSubType(_type);
/** @type {?} */
const component = defaultFormComponents.get(subType.type)[subType.subType];
if (!component) {
throw new Error(`No default form component for type ${subType.subType} (${subType.type}) available.`);
}
return component;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC1zZXR0aW5ncy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItZHluYW1pYy1mb3Jtcy1saXRlLyIsInNvdXJjZXMiOlsibGliL2Zvcm0tc2V0dGluZ3MvZm9ybS1maWVsZC1zZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsT0FBTyxFQUFFLGVBQWUsRUFBd0IsTUFBTSwrQkFBK0IsQ0FBQztBQUt0RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDOztBQVdyQyxNQUFNLE9BQU8sT0FBTyxHQUFHLFVBQVU7Ozs7Ozs7QUFFakMsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxXQUF3QixFQUN4QixRQUEyQixFQUMzQixxQkFBMkM7SUFFM0MsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFOztjQUNuQixjQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsY0FBYyxDQUFDLElBQUksaUJBQWlCLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ3JHOztVQUVLLGdCQUFnQixHQUFzQixJQUFJLEdBQUcsRUFBRTtJQUNyRCxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFO1FBQzVCLElBQUksRUFBRSxPQUFPO1FBQ2IsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO1FBQ2hDLElBQUksRUFBRSxlQUFlLENBQUMsS0FBSztRQUMzQixRQUFRLEVBQUUsV0FBVyxDQUFDLFFBQVE7S0FDL0IsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLE9BQU87Ozs7O0lBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FDL0IsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsb0JBQ2xCLE9BQU8sSUFDVixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBQSxlQUFlLENBQUMsTUFBTSxFQUFPLENBQUMsSUFDbkUsRUFDSCxDQUFDO0lBRUYsc0RBQXNEO0lBQ3RELEtBQUssSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksZ0JBQWdCLEVBQUU7UUFDeEMsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxJQUFJLE9BQU8sQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLE1BQU07WUFBRSxTQUFTO1FBQ2hGLE9BQU8sQ0FBQyxTQUFTLEdBQUcsMkJBQTJCLENBQUMscUJBQXFCLEVBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDcEc7SUFFRCxPQUFPLGdCQUFnQixDQUFDO0FBQzFCLENBQUM7Ozs7Ozs7QUFFRCxNQUFNLFVBQVUsMkJBQTJCLENBQ3pDLHFCQUEyQyxFQUMzQyxJQUFZLEVBQ1osS0FBMkI7SUFFM0IsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1FBQzFCLE1BQU0sSUFBSSxLQUFLLENBQ2IsdUdBQXVHLElBQUksZ0ZBQWdGLENBQzVMLENBQUM7S0FDSDs7VUFFSyxPQUFPLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7O1VBQ2xDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFFMUUsSUFBSSxDQUFDLFNBQVMsRUFBRTtRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLE9BQU8sQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLElBQUksY0FBYyxDQUFDLENBQUM7S0FDdkc7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm9vdFNldHRpbmcsIEZvcm1GaWVsZFNldHRpbmdUeXBlIH0gZnJvbSBcIi4vZm9ybS1maWVsZC1zZXR0aW5nXCI7XG5pbXBvcnQgeyBEeW5hbWljRm9ybVR5cGUsIEZvcm1Db21wb25lbnRzQnlUeXBlIH0gZnJvbSBcIi4uL2Zvcm0tZmllbGQvZm9ybS1maWVsZC10eXBlXCI7XG5pbXBvcnQgeyBTaW5nbGVGb3JtRmllbGRTZXR0aW5nIH0gZnJvbSBcIi4uL2Zvcm0tZmllbGQvc2luZ2xlL3NpbmdsZS1mb3JtLWZpZWxkLXNldHRpbmdcIjtcbmltcG9ydCB7IEdyb3VwRm9ybUZpZWxkU2V0dGluZyB9IGZyb20gXCIuLi9mb3JtLWZpZWxkL2dyb3VwL2dyb3VwLWZvcm0tZmllbGQtc2V0dGluZ1wiO1xuaW1wb3J0IHsgQXJyYXlGb3JtRmllbGRTZXR0aW5nIH0gZnJvbSBcIi4uL2Zvcm0tZmllbGQvYXJyYXkvYXJyYXktZm9ybS1maWVsZC1zZXR0aW5nXCI7XG5pbXBvcnQgeyBGb3JtRmllbGRDb21wb25lbnRUeXBlIH0gZnJvbSBcIi4uL2Zvcm0tZmllbGQvZm9ybS1maWVsZC1jb21wb25lbnRcIjtcbmltcG9ydCB7IFN1YlR5cGUgfSBmcm9tIFwiLi9zdWItdHlwZVwiO1xuaW1wb3J0IHsgSGlkZGVuRm9ybUZpZWxkU2V0dGluZyB9IGZyb20gXCIuLi9mb3JtLWZpZWxkL2hpZGRlbi9oaWRkZW4tZm9ybS1maWVsZC1zZXR0aW5nXCI7XG5cbmV4cG9ydCB0eXBlIENvbWJpbmVkRm9ybUZpZWxkU2V0dGluZyA9XG4gIHwgU2luZ2xlRm9ybUZpZWxkU2V0dGluZ1xuICB8IEdyb3VwRm9ybUZpZWxkU2V0dGluZ1xuICB8IEFycmF5Rm9ybUZpZWxkU2V0dGluZ1xuICB8IEhpZGRlbkZvcm1GaWVsZFNldHRpbmc7XG5cbmV4cG9ydCB0eXBlIEZvcm1GaWVsZFNldHRpbmdzID0gTWFwPHN0cmluZywgQ29tYmluZWRGb3JtRmllbGRTZXR0aW5nPjtcblxuZXhwb3J0IGNvbnN0IFJPT1RfSUQgPSBcIl9fUk9PVF9fXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGb3JtRmllbGRTZXR0aW5ncyhcbiAgcm9vdFNldHRpbmc6IFJvb3RTZXR0aW5nLFxuICBzZXR0aW5nczogRm9ybUZpZWxkU2V0dGluZ3MsXG4gIGRlZmF1bHRGb3JtQ29tcG9uZW50czogRm9ybUNvbXBvbmVudHNCeVR5cGVcbik6IEZvcm1GaWVsZFNldHRpbmdzIHtcbiAgaWYgKHNldHRpbmdzLmhhcyhST09UX0lEKSkge1xuICAgIGNvbnN0IGlsbGVnYWxTZXR0aW5nID0gc2V0dGluZ3MuZ2V0KFJPT1RfSUQpO1xuICAgIHRocm93IG5ldyBFcnJvcihgSWxsZWdhbCBmb3JtIGZpZWxkIGlkICR7aWxsZWdhbFNldHRpbmcubmFtZX0gZGV0ZWN0ZWQgZm9yICR7aWxsZWdhbFNldHRpbmcubmFtZX1gKTtcbiAgfVxuXG4gIGNvbnN0IGNvbWJpbmVkU2V0dGluZ3M6IEZvcm1GaWVsZFNldHRpbmdzID0gbmV3IE1hcCgpO1xuICBjb21iaW5lZFNldHRpbmdzLnNldChST09UX0lELCB7XG4gICAgbmFtZTogUk9PVF9JRCxcbiAgICBjb21wb25lbnQ6IHJvb3RTZXR0aW5nLmNvbXBvbmVudCxcbiAgICB0eXBlOiBEeW5hbWljRm9ybVR5cGUuR1JPVVAsXG4gICAgbWV0YWRhdGE6IHJvb3RTZXR0aW5nLm1ldGFkYXRhXG4gIH0pO1xuXG4gIHNldHRpbmdzLmZvckVhY2goKHNldHRpbmcsIGlkKSA9PlxuICAgIGNvbWJpbmVkU2V0dGluZ3Muc2V0KGlkLCB7XG4gICAgICAuLi5zZXR0aW5nLFxuICAgICAgdHlwZTogc2V0dGluZy50eXBlID8gc2V0dGluZy50eXBlIDogKER5bmFtaWNGb3JtVHlwZS5TSU5HTEUgYXMgYW55KVxuICAgIH0pXG4gICk7XG5cbiAgLy8gYWRkIG1pc3NpbmcgY29tcG9uZW50cyBmcm9tIGRlZmF1bHQgZm9ybSBjb21wb25lbnRzXG4gIGZvciAobGV0IFssIHNldHRpbmddIG9mIGNvbWJpbmVkU2V0dGluZ3MpIHtcbiAgICBzZXR0aW5nLnR5cGUgPSBTdWJUeXBlLnRvU3ViVHlwZShzZXR0aW5nLnR5cGUpO1xuICAgIGlmIChzZXR0aW5nLmNvbXBvbmVudCB8fCBzZXR0aW5nLnR5cGUudHlwZSA9PT0gRHluYW1pY0Zvcm1UeXBlLkhJRERFTikgY29udGludWU7XG4gICAgc2V0dGluZy5jb21wb25lbnQgPSBlbnN1cmVEZWZhdWx0Rm9ybUNvbXBvbmVudHMoZGVmYXVsdEZvcm1Db21wb25lbnRzLCBzZXR0aW5nLm5hbWUsIHNldHRpbmcudHlwZSk7XG4gIH1cblxuICByZXR1cm4gY29tYmluZWRTZXR0aW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZURlZmF1bHRGb3JtQ29tcG9uZW50cyhcbiAgZGVmYXVsdEZvcm1Db21wb25lbnRzOiBGb3JtQ29tcG9uZW50c0J5VHlwZSxcbiAgbmFtZTogc3RyaW5nLFxuICBfdHlwZTogRm9ybUZpZWxkU2V0dGluZ1R5cGVcbik6IEZvcm1GaWVsZENvbXBvbmVudFR5cGUge1xuICBpZiAoIWRlZmF1bHRGb3JtQ29tcG9uZW50cykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBObyBkZWZhdWx0IGZvcm0gY29tcG9uZW50cyBhdmFpbGFibGUsIGJ1dCB5b3UgdXNlZCBhIER5bmFtaWNGb3JtVHlwZSBhcyBhbiBjb21wb25lbnQgaWRlbnRpZmllciBmb3IgJHtuYW1lfS4gRGlkIHlvdSBhZGQgdGhlIG1vZHVsZSB1c2luZyBEeW5hbWljRm9ybXNMaXRlTW9kdWxlLndpdGhEZWZhdWx0Q29tcG9uZW50cygpP2BcbiAgICApO1xuICB9XG5cbiAgY29uc3Qgc3ViVHlwZSA9IFN1YlR5cGUudG9TdWJUeXBlKF90eXBlKTtcbiAgY29uc3QgY29tcG9uZW50ID0gZGVmYXVsdEZvcm1Db21wb25lbnRzLmdldChzdWJUeXBlLnR5cGUpW3N1YlR5cGUuc3ViVHlwZV07XG5cbiAgaWYgKCFjb21wb25lbnQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIGRlZmF1bHQgZm9ybSBjb21wb25lbnQgZm9yIHR5cGUgJHtzdWJUeXBlLnN1YlR5cGV9ICgke3N1YlR5cGUudHlwZX0pIGF2YWlsYWJsZS5gKTtcbiAgfVxuXG4gIHJldHVybiBjb21wb25lbnQ7XG59XG4iXX0=