Skip to content

Commit

Permalink
add readmode rows
Browse files Browse the repository at this point in the history
Signed-off-by: Greta Doci <gretadoci@gmail.com>
  • Loading branch information
GretaD committed Nov 28, 2019
1 parent 97623ca commit 18f777c
Show file tree
Hide file tree
Showing 3 changed files with 224 additions and 33 deletions.
5 changes: 3 additions & 2 deletions apps/settings/css/settings.scss
Original file line number Diff line number Diff line change
Expand Up @@ -1343,7 +1343,7 @@ doesnotexist:-o-prefocus, .strengthify-wrapper {
/* USERS LIST -------------------------------------------------------------- */
#body-settings {
$grid-row-height: 60px;
$grid-col-min-width: 210px;
$grid-col-min-width: 150px;
#app-content.user-list-grid {
display: grid;
grid-auto-columns: 1fr;
Expand Down Expand Up @@ -1463,7 +1463,7 @@ doesnotexist:-o-prefocus, .strengthify-wrapper {
> div,
> form {
grid-row: 1;
display: block;
display: inline-flex;
align-items: center;
color: var(--color-text-lighter);
position: relative;
Expand Down Expand Up @@ -1538,6 +1538,7 @@ doesnotexist:-o-prefocus, .strengthify-wrapper {
}
.toggleUserActions {
position: relative;
display: flex;
.icon-more {
width: 44px;
height: 44px;
Expand Down
88 changes: 57 additions & 31 deletions apps/settings/src/components/UserList/UserRow.vue
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,26 @@
</div>

<!-- User full data -->
<UserRowSimple
v-else-if="!editing"
:generate-avatar="generateAvatar"
:loading="loading"
:show-config="showConfig"
:user="user"
:user-groups="userGroups"
:user-sub-admins-groups="userSubAdminsGroups"
:used-quota="usedQuota"
:user-language="userLanguage"
:user-backend="userBackend"
:user-last-login="userLastLogin"
:user-actions="userActions"
:opened-menu="openedMenu"
:feedback-message="feedbackMessage"
:sub-admins-groups="subAdminsGroups"
:settings="settings"
@hideMenu="hideMenu"
@toggleMenu="toggleMenu"
@edit="editing = true" />
<div v-else
class="row"
:class="{'disabled': loading.delete || loading.disable}"
Expand All @@ -55,33 +75,29 @@
:srcset="generateAvatar(user.id, 64)+' 2x, '+generateAvatar(user.id, 128)+' 4x'">
</div>
<!-- dirty hack to ellipsis on two lines -->
<div class="name">
{{ user.id }}
<div class="displayName">
<form v-if="false"
class="displayName"
:class="{'icon-loading-small': loading.displayName}"
@submit.prevent="updateDisplayName">
<template v-if="user.backendCapabilities.setDisplayName">
<input
:id="'displayName'+user.id+rand"
ref="displayName"
type="text"
:disabled="loading.displayName||loading.all"
:value="user.displayname"
autocomplete="new-password"
autocorrect="off"
autocapitalize="off"
spellcheck="false">
<input
type="submit"
class="icon-confirm"
value="">
</template>
<div v-else v-tooltip.auto="t('settings', 'The backend does not support changing the display name')" class="name" />
</form>
{{ user.displayname }}
</div>
<div class="displayName">
<form
class="displayName"
:class="{'icon-loading-small': loading.displayName}"
@submit.prevent="updateDisplayName">
<template v-if="user.backendCapabilities.setDisplayName">
<input v-if="user.backendCapabilities.setDisplayName"
:id="'displayName'+user.id+rand"
ref="displayName"
type="text"
:disabled="loading.displayName||loading.all"
:value="user.displayname"
autocomplete="new-password"
autocorrect="off"
autocapitalize="off"
spellcheck="false">
<input v-if="user.backendCapabilities.setDisplayName"
type="submit"
class="icon-confirm"
value="">
</template>
<div v-else v-tooltip.auto="t('settings', 'The backend does not support changing the display name')" class="name" />
</form>
</div>
<form v-if="settings.canChangePassword && user.backendCapabilities.setPassword"
class="password"
Expand Down Expand Up @@ -197,6 +213,11 @@
</div>
<div class="userActions">
<div v-if="OC.currentUser !== user.id && user.id !== 'admin' && !loading.all" class="toggleUserActions">
<Actions>
<ActionButton icon="icon-checkmark" @click="editing = false">
{{ t('settings', 'Done') }}
</ActionButton>
</Actions>
<div v-click-outside="hideMenu" class="icon-more" @click="toggleMenu" />
<div class="popovermenu" :class="{ 'open': openedMenu }">
<PopoverMenu :menu="userActions" />
Expand All @@ -214,14 +235,18 @@
import ClickOutside from 'vue-click-outside'
import Vue from 'vue'
import VTooltip from 'v-tooltip'
import { PopoverMenu, Multiselect } from 'nextcloud-vue'
import { PopoverMenu, Multiselect, Actions, ActionButton } from 'nextcloud-vue'
import UserRowSimple from './UserRowSimple'
Vue.use(VTooltip)
export default {
name: 'UserRow',
components: {
UserRowSimple,
PopoverMenu,
Actions,
ActionButton,
Multiselect
},
directives: {
Expand Down Expand Up @@ -266,6 +291,7 @@ export default {
rand: parseInt(Math.random() * 1000),
openedMenu: false,
feedbackMessage: '',
editing: false,
loading: {
all: false,
displayName: false,
Expand Down Expand Up @@ -552,9 +578,9 @@ export default {
},
/**
* Create a new group and add user to it
*
* @param {string} gid Group id
* Create a new group and add user to it
*
* @param {string} gid Group id
*/
async createGroup(gid) {
this.loading = { groups: true, subadmins: true }
Expand Down
164 changes: 164 additions & 0 deletions apps/settings/src/components/UserList/UserRowSimple.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
<template>
<div
class="row"
:class="{'disabled': loading.delete || loading.disable}"
:data-id="user.id">
<div class="avatar" :class="{'icon-loading-small': loading.delete || loading.disable || loading.wipe}">
<img v-if="!loading.delete && !loading.disable && !loading.wipe"
alt=""
width="32"
height="32"
:src="generateAvatar(user.id, 32)"
:srcset="generateAvatar(user.id, 64)+' 2x, '+generateAvatar(user.id, 128)+' 4x'">
</div>
<!-- dirty hack to ellipsis on two lines -->
<div class="name">
{{ user.id }}
<div class="displayName">
{{ user.displayname }}
</div>
</div>
<div />
<div class="mailAddress">
{{ user.email }}
</div>
<div class="groups">
{{ userGroupsLabels }}
</div>
<div v-if="subAdminsGroups.length>0 && settings.isAdmin" class="subAdminsGroups">
{{ userSubAdminsGroupsLabels }}
</div>
<div class="quota">
<progress class="quota-user-progress"
:class="{'warn':usedQuota>80}"
:value="usedQuota"
max="100" />
</div>
<div v-if="showConfig.showLanguages" class="languages">
{{ userLanguage.name }}
</div>
<div v-if="showConfig.showStoragePath" class="storageLocation">
{{ user.storageLocation }}
</div>
<div v-if="showConfig.showUserBackend" class="userBackend">
{{ user.backend }}
</div>
<div v-if="showConfig.showLastLogin" class="userLastLogin">
{{ user.lastLogin>0 ? OC.Util.relativeModifiedDate(user.lastLogin) : t('settings','Never') }}
</div>
<div class="userActions">
<div v-if="OC.currentUser !== user.id && user.id !== 'admin' && !loading.all" class="toggleUserActions">
<Actions>
<ActionButton icon="icon-rename" @click="$emit('edit')">
{{ t('settings', 'Edit User') }}
</ActionButton>
</Actions>
<div v-click-outside="hideMenu" class="icon-more" @click="$emit('toggleMenu')" />
<div class="popovermenu" :class="{ 'open': openedMenu }">
<PopoverMenu :menu="userActions" />
</div>
</div>
<div class="feedback" :style="{opacity: feedbackMessage !== '' ? 1 : 0}">
<div class="icon-checkmark" />
{{ feedbackMessage }}
</div>
</div>
</div>
</template>

<script>
import { PopoverMenu, Actions, ActionButton } from 'nextcloud-vue'
import ClickOutside from 'vue-click-outside'
export default {
name: 'UserRowSimple',
components: {
PopoverMenu,
ActionButton,
Actions
},
directives: {
ClickOutside
},
props: {
user: {
type: Object,
required: true
},
loading: {
type: Object,
required: true
},
generateAvatar: {
type: Function,
required: true
},
showConfig: {
type: Object,
required: true
},
userGroups: {
type: Array,
required: true
},
userSubAdminsGroups: {
type: Array,
required: true
},
userLanguage: {
type: Object,
required: true
},
usedQuota: {
type: Number,
required: true
},
userLastLogin: {
type: Object,
required: true
},
userActions: {
type: Array,
required: true
},
openedMenu: {
type: Boolean,
required: true
},
feedbackMessage: {
type: String,
required: true
},
subAdminsGroups: {
type: Array,
required: true
},
settings: {
type: Object,
required: true
}
},
computed: {
userGroupsLabels() {
return this.userGroups
.map((groupObject) => groupObject.name)
.join(', ')
},
userSubAdminsGroupsLabels() {
return this.userSubAdminsGroups
.map((groupObject) => groupObject.name)
.join(', ')
}
},
methods: {
hideMenu() {
this.$emit('hideMenu')
}
}
}
</script>

<style scoped>
</style>

0 comments on commit 18f777c

Please sign in to comment.