| 
					
				 | 
			
			
				@@ -14,7 +14,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             v-icon mdi-arrow-left 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           v-dialog(v-model='deleteUserDialog', max-width='500', v-if='user.id !== currentUserId && !user.isSystem') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             template(v-slot:activator='{ on }') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              v-btn.ml-3.animated.fadeInDown.wait-p1s(color='red', large, outlined, v-on='on') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              v-btn.ml-3.animated.fadeInDown.wait-p1s(color='red', large, outlined, v-on='on', disabled) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 v-icon(color='red') mdi-trash-can-outline 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             v-card 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               .dialog-header.is-red Delete User? 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -113,15 +113,35 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   v-list-item-title Password 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   v-list-item-subtitle •••••••• 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 v-list-item-action 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  v-tooltip(top) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    template(v-slot:activator='{ on }') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      v-btn(icon, color='grey', x-small, v-on='on') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        v-icon mdi-cached 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    span Change Password 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  v-menu( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    v-model='editPop.newPassword' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    :close-on-content-click='false' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    min-width='350' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    left 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    template(v-slot:activator='{ on: menu }') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      v-tooltip(top) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        template(v-slot:activator='{ on: tooltip }') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                          v-btn(icon, color='grey', x-small, v-on='{ ...menu, ...tooltip }', @click='focusField(`iptNewPassword`)') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            v-icon mdi-cached 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        span Change Password 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    v-card 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      v-text-field( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        ref='iptNewPassword' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        v-model='newPassword' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        label='New Password' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        solo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        hide-details 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        append-icon='mdi-check' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        type='password' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        @click:append='editPop.newPassword = false' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        @keydown.enter='editPop.newPassword = false' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        @keydown.esc='editPop.newPassword = false' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 v-list-item-action 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   v-tooltip(top) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     template(v-slot:activator='{ on }') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                      v-btn(icon, color='grey', x-small, v-on='on') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                      v-btn(icon, color='grey', x-small, v-on='on', disabled) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         v-icon mdi-email 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     span Send Password Reset Email 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               v-divider 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -151,22 +171,37 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             span User Groups 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           v-list(dense) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             template(v-for='(group, idx) in user.groups') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              v-list-item 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              v-list-item(:key='`group-` + group.id') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 v-list-item-avatar(size='32') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   v-icon mdi-account-group-outline 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 v-list-item-content 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                   v-list-item-title {{group.name}} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 v-list-item-action(v-if='!user.isSystem') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                  v-btn(icon, color='red', x-small) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                  v-btn(icon, color='red', x-small, @click='unassignGroup(group.id)') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     v-icon mdi-close 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				               v-divider(v-if='idx < user.groups.length - 1') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           v-alert.mx-3(v-if='user.groups.length < 1', outlined, color='grey darken-1', icon='mdi-alert') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             .caption This user is not assigned to any group yet. You must assign at least 1 group to a user. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           v-card-chin(v-if='!user.isSystem') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             v-spacer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            v-btn(color='primary', text) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              v-icon(left) mdi-clipboard-account 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-              span Assign to group 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            v-select( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              ref='iptAssignGroup' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              :items='groups' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              v-model='newGroup' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              label='Select Group...' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              item-value='id' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              item-text='name' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              item-disabled='isSystem' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              solo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              flat 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              dense 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              hide-details 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              @keydown.esc='editPop.assignGroup = false' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              style='max-width: 300px;' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            v-btn.ml-2.px-4(depressed, color='primary', height='48', @click='assignGroup', :disabled='newGroup === 0') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              v-icon(left) mdi-clipboard-account-outline 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+              span Assign 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       v-flex(xs6) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         v-card.animated.fadeInUp.wait-p2s 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           v-toolbar(color='primary', dense, dark, flat) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -274,6 +309,8 @@ import _ from 'lodash' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import { get } from 'vuex-pathify' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import userQuery from 'gql/admin/users/users-query-single.gql' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import groupsQuery from 'gql/admin/users/users-query-groups.gql' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import updateUserMutation from 'gql/admin/users/users-mutation-update.gql' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   data() { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -285,10 +322,18 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         pwd: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         location: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         jobTitle: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        timezone: false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        timezone: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        newPassword: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        assignGroup: false 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      newGroup: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      newPassword: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       user: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        email: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         name: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        location: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        jobTitle: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        timezone: '', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         groups: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       timezones: [ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -550,13 +595,58 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   methods: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     deleteUser() {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    updateUser() {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    async updateUser() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.$store.commit(`loadingStart`, 'admin-users-update') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      const resp = await this.$apollo.mutate({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        mutation: updateUserMutation, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        variables: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          id: this.user.id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          email: this.user.email, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          name: this.user.name, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          newPassword: this.newPassword, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          groups: _.map(this.user.groups, 'id'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          location: this.user.location, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          jobTitle: this.user.jobTitle, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          timezone: this.user.timezone 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (_.get(resp, 'data.users.update.responseResult.succeeded', false)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.$store.commit('showNotification', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          style: 'success', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          message: 'User updated successfully.', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          icon: 'check' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.$router.push('/users') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.$store.commit('showNotification', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          style: 'red', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          message: _.get(resp, 'data.users.update.responseResult.message', 'An unexpected error occured.'), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          icon: 'warning' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.$store.commit(`loadingStop`, 'admin-users-update') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     focusField (ipt) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       this.$nextTick(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         _.delay(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				           this.$refs[ipt].focus() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }, 200) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    assignGroup() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      if (_.some(this.user.groups, ['id', this.newGroup])) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.$store.commit('showNotification', { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          message: 'User is already assigned to this group!', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          style: 'error', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          icon: 'alert' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.user.groups.push(_.find(this.groups, ['id', this.newGroup])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.newGroup = 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    unassignGroup(gid) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      this.user.groups = _.reject(this.user.groups, ['id', gid]) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   apollo: { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -572,6 +662,14 @@ export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       watchLoading (isLoading) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'admin-users-refresh') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    groups: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      query: groupsQuery, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      fetchPolicy: 'network-only', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      update: (data) => data.groups.list, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      watchLoading (isLoading) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.$store.commit(`loading${isLoading ? 'Start' : 'Stop'}`, 'admin-groups-refresh') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |