signup.js 2.47 KB
/* eslint-disable no-undef */

import { browserHistory }                 from 'react-router';
import { Accounts }                       from 'meteor/accounts-base';
import { Bert }                           from 'meteor/themeteorchef:bert';
import { Loading }                        from '/imports/client/components/Loading';
import                                         '/imports/client/components/validation';
import { Orgs }                           from '/imports/collections/orgs/index';

let component;

const getUserData = () => ({
  email: document.querySelector('[name="emailAddress"]').value,
  password: document.querySelector('[name="password"]').value,
  orgSlug: document.querySelector('[name="orgSlug"]').value,
  orgName: document.querySelector('[name="orgName"]').value,
  profile: {
    name: {
      first: document.querySelector('[name="firstName"]').value,
      last: document.querySelector('[name="lastName"]').value,
    },
  },
});

const signup = () => {
  const user = getUserData();

  Accounts.createUser(user, (error) => {
    if (error) {
      Bert.alert(error.reason, 'danger');
    } else {
      browserHistory.push('/');
      Bert.alert('Welcome!', 'success');
    }
  });
};
$.validator.addMethod(
    "uniqueSlug",
    function(value, element) {
      slug = Orgs.find({slug:value}).fetch();
      if(slug.length>0){
        return false;
      }else{
        return true
      }
    },
    "Name is Already Taken"
);
const validate = () => {
  $(component.signupForm).validate({
    rules: {
      orgSlug: {
        required: true,
        uniqueSlug: true
      },
      firstName: {
        required: true,
      },
      lastName: {
        required: true,
      },
      emailAddress: {
        required: true,
        email: true,
      },
      password: {
        required: true,
        minlength: 6,
      },
    },
    messages: {
      orgSlug: {
        required: 'Choose your school url',
        uniqueSlug: 'This has already been taken!'
      },
      firstName: {
        required: 'First name?',
      },
      lastName: {
        required: 'Last name?',
      },
      emailAddress: {
        required: 'Need an email address here.',
        email: 'Is this email address legit?',
      },
      password: {
        required: 'Need a password here.',
        minlength: 'Use at least six characters, please.',
      },
    },
    submitHandler() { signup(); },
  });
};

export default function handleSignup(options) {
  component = options.component;
  validate();
}