json-schema-form/json-schema-form-generator-es6

View on GitHub
src/form-definitions-generator.js

Summary

Maintainability
D
1 day
Test Coverage
var _ = require('lodash');

const formDefinitionsGenerator = {
  generateField(field, definitions){
    "use strict";
    let morpher = _.camelCase('_generate_' + field.type.replace('-', '_') + '_field');

    definitions = this.generateStandardFormAttributes(field, definitions);
    definitions = this.generateStandardSchemaAttributes(field, definitions);

    if (_.isFunction(this[morpher])) {
      definitions = this[morpher](field, definitions);
    }

    return definitions;
  },
  generateStandardFormAttributes(field, definitions)  {

    let form, formIndex, formProps = [
      'key',
      'condition',
      'onChange',
      'notitle',
      'showAdvanced',
      'validationMessage',
      'onChange',
      'ngModelOptions',
      'condition',
      'fieldAddonLeft',
      'fieldAddonRight',
      'showAdvanced',
      'validationMessage',
      'onChange',
      'feedback',
      'disableSuccessState',
      'disableErrorState',
      'placeholder',
      'ngModelOptions',
      'readonly',
      'htmlClass',
      'destroyStrategy',
      'copyValueTo',
      'fieldHtmlClass',
      'labelHtmlClass',
      'items'
    ];
    form = _.pick(field, formProps);
    formIndex = _.findIndex(definitions, {key: field.key});
    if (!form.key) {
      form.type = field.type;
      form.title = field.title;
      formIndex = _.findIndex(definitions, {key: undefined, type: field.type, title: field.title});
    }
    if (formIndex > -1) {
      definitions.form[formIndex] = form;
    } else {
      definitions.form.push(form);
    }
    return definitions;
  },
  generateStandardSchemaAttributes(field, definitions)  {

    let schemaProps = [
      'type',
      'format',
      'description',
      'title',
      'minLength',
      'maxLength'
    ];
    if (field.key) {
      definitions.schema.properties[field.key] = _.pick(field, schemaProps);
    }
    return definitions;
  },
  updateForm(definitions, key, attr, value) {
    let index = _.findKey(definitions.form, 'key', key);
    definitions.form[index][attr] = value;
    return definitions;
  },
  generateTextField(field, definitions){
    definitions.schema.properties[field.key]['type'] = 'string';
    return definitions;
  },
  generateTextareaField(field, definitions){
    definitions.schema.properties[field.key]['type'] = 'string';
    definitions = this.updateForm(definitions, field.key, 'type', 'textarea');
    return definitions;
  },
  generateEmailField(field, definitions){
    definitions.schema.properties[field.key]['type'] = 'string';
    definitions.schema.properties[field.key]['format'] = 'email';
    return definitions;
  },
  generateSelectField(field, definitions){
    definitions.schema.properties[field.key]['type'] = 'string';
    definitions.schema.properties[field.key]['enum'] = field.enum;
    return definitions;
  },
  generateCheckboxField(field, definitions){
    definitions.schema.properties[field.key]['type'] = 'string';
    definitions.schema.properties[field.key]['enum'] = field.enum;
    return definitions;
  },
  generateDateField(field, definitions){
    definitions.schema.properties[field.key]['type'] = 'string';
    definitions.schema.properties[field.key]['format'] = 'date';
    return definitions;
  },
  generateTimeField(field, definitions){
    definitions.schema.properties[field.key]['type'] = 'string';
    definitions.schema.properties[field.key]['format'] = 'time';
    return definitions;
  },
  generateDateTimeField(field, definitions){
    definitions.schema.properties[field.key]['type'] = 'string';
    definitions.schema.properties[field.key]['format'] = 'date-time';
    return definitions;
  },
  generateFieldsetField(field, definitions){
    if (field.key) {
      delete  definitions.schema.properties[field.key]
    }
    return definitions;
  },
  generateSectionField(field, definitions){
    return definitions;
  },
  generateActionsField(field, definitions){
    return definitions;
  },
  generateNumberField(field, definitions){
    return definitions;
  },
  generatePasswordField(field, definitions){
    return definitions;
  },
  generateCheckboxField(field, definitions){
    return definitions;
  },
  generateCheckboxesField(field, definitions){
    return definitions;
  },
  generateSubmitField(field, definitions){
    return definitions;
  },
  generateButtonField(field, definitions){
    return definitions;
  },
  generateRadiosField(field, definitions){
    return definitions;
  },
  generateRadiosInlineField(field, definitions){
    return definitions;
  },
  generateRadioButtonsField(field, definitions){
    return definitions;
  },
  generateHelpField(field, definitions){
    return definitions;
  },
  generateTemplateField(field, definitions){
    return definitions;
  },
  generateTabField(field, definitions){
    return definitions;
  },
  generateArrayField(field, definitions){
    return definitions;
  },
  generateTabArrayField(field, definitions){
    return definitions;
  },
}

export default formDefinitionsGenerator;