rsercano/mongoclient

View on GitHub
client/imports/ui/collection/validation_rules.js

Summary

Maintainability
B
5 hrs
Test Coverage
import { Notification, ErrorHandler, UIComponents, SessionManager, ExtendedJSON } from '/client/imports/modules';
import { Communicator, ReactivityProvider } from '/client/imports/facades';
import Helper from '/client/imports/helpers/helper';
import CollectionHelper from './helper';

const CollectionValidationRules = function () {};

CollectionValidationRules.prototype = {
  resetForm() {
    const divValidator = $('#divValidator');
    const comboBoxes = $('#cmbValidationAction, #cmbValidationLevel');

    UIComponents.Editor.initializeCodeMirror({ divSelector: divValidator, txtAreaId: 'txtValidator' });
    UIComponents.Editor.setCodeMirrorValue(divValidator, '', $('#txtValidator'));
    $('#spanCollectionNameValidationRules').html(`${Helper.translate({ key: 'mongodb_version_warning', options: { version: '3.2' } })}<br/>${$('#validationRulesModal').data('collection')}`);
    UIComponents.Combobox.init({ selector: comboBoxes, options: {}, empty: false });
    UIComponents.Combobox.deselectAll(comboBoxes);
    this.initRules();
  },

  initRules() {
    const selectedCollection = $('#validationRulesModal').data('collection');
    if (!selectedCollection) return;

    const connection = ReactivityProvider.findOne(ReactivityProvider.types.Connections, { _id: SessionManager.get(SessionManager.strSessionConnection)._id });
    if (!connection) return;

    Notification.start('#btnSaveValidationRules');

    const cmbValidationAction = $('#cmbValidationAction');
    const cmbValidationLevel = $('#cmbValidationLevel');

    Communicator.call({
      methodName: 'listCollectionNames',
      args: { dbName: connection.databaseName },
      callback: (err, result) => {
        if (err || result.error) ErrorHandler.showMeteorFuncError(err, result);
        else if (result.result) {
          result.result.forEach((collection) => {
            if (collection.name === selectedCollection) {
              if (collection.options && collection.options.validationAction) cmbValidationAction.val(collection.options.validationAction).trigger('chosen:updated');
              if (collection.options && collection.options.validationLevel) cmbValidationLevel.val(collection.options.validationLevel).trigger('chosen:updated');

              if (collection.options.validator) UIComponents.Editor.setCodeMirrorValue($('#divValidator'), JSON.stringify(collection.options.validator, null, 1));
              else UIComponents.Editor.setCodeMirrorValue($('#divValidator'), '');
            }
          });
        }

        Notification.stop();
      }
    });
  },

  save() {
    Notification.start('#btnSaveValidationRules');

    let validator = UIComponents.Editor.getCodeMirrorValue($('#divValidator'));
    validator = ExtendedJSON.convertAndCheckJSON(validator);
    if (validator.ERROR) {
      Notification.error('syntax-error-validator', null, { error: validator.ERROR });
      return;
    }

    const validationAction = $('#cmbValidationAction').val();
    const validationLevel = $('#cmbValidationLevel').val();
    const selectedCollection = $('#validationRulesModal').data('collection');

    const command = {};
    command.collMod = selectedCollection;
    command.validator = validator;
    command.validationLevel = validationLevel;
    command.validationAction = validationAction;

    CollectionHelper.executeCommand(command, 'validationRulesModal');
  }
};

export default new CollectionValidationRules();