mirror of
https://github.com/vale981/Vulcan
synced 2025-03-06 01:51:40 -05:00
Little explanation at the start + some code re-order
Explained the order of the schema for future users and re-ordered some of the code.
This commit is contained in:
parent
4948648c86
commit
53bea15d29
1 changed files with 57 additions and 44 deletions
|
@ -2,9 +2,24 @@ import SimpleSchema from 'simpl-schema';
|
|||
import Users from './collection.js';
|
||||
import { Utils } from 'meteor/vulcan:lib'; // import from vulcan:lib because vulcan:core isn't loaded yet
|
||||
|
||||
///////////////////////////////////////
|
||||
// Order for the Schema is as follows. Change as you see fit:
|
||||
// 00.
|
||||
// 10. Display Name
|
||||
// 20. Email
|
||||
// 30. Bio
|
||||
// 40. Slug
|
||||
// 50. Website
|
||||
// 60. Twitter username
|
||||
// 70.
|
||||
// 80.
|
||||
// 90.
|
||||
// 100.
|
||||
// Anything else..
|
||||
///////////////////////////////////////
|
||||
|
||||
const adminGroup = {
|
||||
name: "admin",
|
||||
order: 10
|
||||
};
|
||||
|
||||
const ownsOrIsAdmin = (user, document) => {
|
||||
|
@ -90,18 +105,6 @@ const schema = {
|
|||
optional: true,
|
||||
blackbox: true,
|
||||
},
|
||||
/**
|
||||
Bio (Markdown version)
|
||||
*/
|
||||
bio: {
|
||||
type: String,
|
||||
optional: true,
|
||||
control: "textarea",
|
||||
insertableBy: ['members'],
|
||||
editableBy: ['members'],
|
||||
viewableBy: ['guests'],
|
||||
order: 3,
|
||||
},
|
||||
/**
|
||||
The name displayed throughout the app. Can contain spaces and special characters, doesn't need to be unique
|
||||
*/
|
||||
|
@ -112,19 +115,29 @@ const schema = {
|
|||
insertableBy: ['members'],
|
||||
editableBy: ['members'],
|
||||
viewableBy: ['guests'],
|
||||
order: 1,
|
||||
order: 10,
|
||||
onInsert: (user, options) => {
|
||||
const profileName = Utils.getNestedProperty(user, 'profile.name');
|
||||
const twitterName = Utils.getNestedProperty(user, 'services.twitter.screenName');
|
||||
const linkedinFirstName = Utils.getNestedProperty(user, 'services.linkedin.firstName');
|
||||
|
||||
if (profileName) return profileName;
|
||||
if (twitterName) return twitterName;
|
||||
if (linkedinFirstName) return `${linkedinFirstName} ${Utils.getNestedProperty(user, 'services.linkedin.lastName')}`;
|
||||
if (user.username) return user.username;
|
||||
return undefined;
|
||||
|
||||
}
|
||||
},
|
||||
/**
|
||||
Bio (Markdown version)
|
||||
*/
|
||||
bio: {
|
||||
type: String,
|
||||
optional: true,
|
||||
control: "textarea",
|
||||
insertableBy: ['members'],
|
||||
editableBy: ['members'],
|
||||
viewableBy: ['guests'],
|
||||
order: 30,
|
||||
}
|
||||
},
|
||||
/**
|
||||
The user's email. Modifiable.
|
||||
|
@ -138,7 +151,7 @@ const schema = {
|
|||
insertableBy: ['guests'],
|
||||
editableBy: ['members'],
|
||||
viewableBy: ownsOrIsAdmin,
|
||||
order: 2,
|
||||
order: 20,
|
||||
onInsert: (user) => {
|
||||
// look in a few places for the user email
|
||||
const meteorEmails = Utils.getNestedProperty(user, 'services.meteor-developer.emails');
|
||||
|
@ -221,37 +234,13 @@ const schema = {
|
|||
type: String,
|
||||
optional: true,
|
||||
viewableBy: ['guests'],
|
||||
order: 4,
|
||||
order: 40,
|
||||
onInsert: user => {
|
||||
// create a basic slug from display name and then modify it if this slugs already exists;
|
||||
const basicSlug = Utils.slugify(user.displayName);
|
||||
return Utils.getUnusedSlug(Users, basicSlug);
|
||||
}
|
||||
},
|
||||
/**
|
||||
The user's Twitter username
|
||||
*/
|
||||
twitterUsername: {
|
||||
type: String,
|
||||
optional: true,
|
||||
control: "text",
|
||||
insertableBy: ['members'],
|
||||
editableBy: ['members'],
|
||||
viewableBy: ['guests'],
|
||||
order: 6,
|
||||
resolveAs: {
|
||||
fieldName: 'twitterUsername',
|
||||
type: 'String',
|
||||
resolver: (user, args, context) => {
|
||||
return context.Users.getTwitterName(context.Users.findOne(user._id));
|
||||
},
|
||||
},
|
||||
onInsert: user => {
|
||||
if (user.services && user.services.twitter && user.services.twitter.screenName) {
|
||||
return user.services.twitter.screenName;
|
||||
}
|
||||
}
|
||||
},
|
||||
/**
|
||||
A link to the user's homepage
|
||||
*/
|
||||
|
@ -263,7 +252,31 @@ const schema = {
|
|||
insertableBy: ['members'],
|
||||
editableBy: ['members'],
|
||||
viewableBy: ['guests'],
|
||||
order: 5,
|
||||
order: 50,
|
||||
},
|
||||
/**
|
||||
The user's Twitter username
|
||||
*/
|
||||
twitterUsername: {
|
||||
type: String,
|
||||
optional: true,
|
||||
control: "text",
|
||||
insertableBy: ['members'],
|
||||
editableBy: ['members'],
|
||||
viewableBy: ['guests'],
|
||||
order: 60,
|
||||
resolveAs: {
|
||||
fieldName: 'twitterUsername',
|
||||
type: 'String',
|
||||
resolver: (user, args, context) => {
|
||||
return context.Users.getTwitterName(context.Users.findOne(user._id));
|
||||
},
|
||||
},
|
||||
onInsert: user => {
|
||||
if (user.services && user.services.twitter && user.services.twitter.screenName) {
|
||||
return user.services.twitter.screenName;
|
||||
}
|
||||
}
|
||||
},
|
||||
/**
|
||||
Groups
|
||||
|
|
Loading…
Add table
Reference in a new issue