diff --git a/app/imports/api/users/Users.js b/app/imports/api/users/Users.js
index 35b6b585..99c26525 100644
--- a/app/imports/api/users/Users.js
+++ b/app/imports/api/users/Users.js
@@ -127,6 +127,30 @@ Meteor.users.isAdmin = function(userId){
return user && user.roles.includes('admin');
}
+Meteor.users.canPickUsername = new ValidatedMethod({
+ name: 'Users.methods.canPickUsername',
+ validate: userSchema.pick('username').validator(),
+ run({username}){
+ if (Meteor.isClient) return;
+ let user = Accounts.findUserByUsername(username);
+ // You can pick your own username
+ if (user && user._id === this.userId){
+ return false;
+ }
+ return !!user;
+ }
+});
+
+Meteor.users.setUsername = new ValidatedMethod({
+ name: 'Users.methods.setUsername',
+ validate: userSchema.pick('username').validator(),
+ run({username}){
+ if (!this.userId) throw 'Can only set your username if logged in';
+ if (Meteor.isClient) return;
+ return Accounts.setUsername(this.userId, username)
+ }
+});
+
Meteor.users.findUserByUsernameOrEmail = new ValidatedMethod({
name: 'Users.methods.findUserByUsernameOrEmail',
validate: new SimpleSchema({
diff --git a/app/imports/ui/dialogStack/DialogComponentIndex.js b/app/imports/ui/dialogStack/DialogComponentIndex.js
index 1ae8cd41..66b13b9d 100644
--- a/app/imports/ui/dialogStack/DialogComponentIndex.js
+++ b/app/imports/ui/dialogStack/DialogComponentIndex.js
@@ -8,6 +8,7 @@ import LibraryEditDialog from '/imports/ui/library/LibraryEditDialog.vue';
import LibraryNodeCreationDialog from '/imports/ui/library/LibraryNodeCreationDialog.vue';
import LibraryNodeEditDialog from '/imports/ui/library/LibraryNodeEditDialog.vue';
import ShareDialog from '/imports/ui/sharing/ShareDialog.vue';
+import UsernameDialog from '/imports/ui/user/UsernameDialog.vue';
export default {
CreatureFormDialog,
@@ -20,4 +21,5 @@ export default {
LibraryNodeCreationDialog,
LibraryNodeEditDialog,
ShareDialog,
+ UsernameDialog,
};
diff --git a/app/imports/ui/pages/Account.vue b/app/imports/ui/pages/Account.vue
index 307762b3..581ee6d4 100644
--- a/app/imports/ui/pages/Account.vue
+++ b/app/imports/ui/pages/Account.vue
@@ -16,7 +16,7 @@
Username
-
+
Change Username
@@ -24,6 +24,7 @@
slot="activator"
icon
flat
+ @click="changeUsername"
>
create
@@ -53,11 +54,13 @@
Pledged amount: ${{ entitledCents/100 }}
+
@@ -127,6 +130,12 @@
},
},
methods: {
+ changeUsername(){
+ this.$store.commit('pushDialogStack', {
+ component: 'username-dialog',
+ elementId: 'username',
+ });
+ },
signOut(){
Meteor.logout();
router.push('/');
diff --git a/app/imports/ui/user/UsernameDialog.vue b/app/imports/ui/user/UsernameDialog.vue
new file mode 100644
index 00000000..9555cce1
--- /dev/null
+++ b/app/imports/ui/user/UsernameDialog.vue
@@ -0,0 +1,81 @@
+
+
+
+
+ {{ error }}
+
+
+
+ Update
+
+
+
+
+
+
+