|
|
|
|
@ -21,7 +21,11 @@
|
|
|
|
|
-->
|
|
|
|
|
|
|
|
|
|
<template>
|
|
|
|
|
<div id="app-content" class="user-list-grid" @scroll.passive="onScroll">
|
|
|
|
|
<table id="app-content"
|
|
|
|
|
role="grid"
|
|
|
|
|
:aria-label="t('settings', 'User\'s table')"
|
|
|
|
|
class="user-list-grid"
|
|
|
|
|
@scroll.passive="onScroll">
|
|
|
|
|
<NcModal v-if="showConfig.showNewUserForm" size="small" @close="closeModal">
|
|
|
|
|
<form id="new-user"
|
|
|
|
|
:disabled="loading.all"
|
|
|
|
|
@ -152,85 +156,92 @@
|
|
|
|
|
</div>
|
|
|
|
|
</form>
|
|
|
|
|
</NcModal>
|
|
|
|
|
<div id="grid-header"
|
|
|
|
|
:class="{'sticky': scrolled && !showConfig.showNewUserForm}"
|
|
|
|
|
class="row">
|
|
|
|
|
<div id="headerAvatar" class="avatar" />
|
|
|
|
|
<div id="headerName" class="name">
|
|
|
|
|
<div class="subtitle">
|
|
|
|
|
<strong>
|
|
|
|
|
{{ t('settings', 'Display name') }}
|
|
|
|
|
</strong>
|
|
|
|
|
</div>
|
|
|
|
|
{{ t('settings', 'Username') }}
|
|
|
|
|
</div>
|
|
|
|
|
<div id="headerPassword" class="password">
|
|
|
|
|
{{ t('settings', 'Password') }}
|
|
|
|
|
</div>
|
|
|
|
|
<div id="headerAddress" class="mailAddress">
|
|
|
|
|
{{ t('settings', 'Email') }}
|
|
|
|
|
</div>
|
|
|
|
|
<div id="headerGroups" class="groups">
|
|
|
|
|
{{ t('settings', 'Groups') }}
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="subAdminsGroups.length>0 && settings.isAdmin"
|
|
|
|
|
id="headerSubAdmins"
|
|
|
|
|
class="subadmins">
|
|
|
|
|
{{ t('settings', 'Group admin for') }}
|
|
|
|
|
</div>
|
|
|
|
|
<div id="headerQuota" class="quota">
|
|
|
|
|
{{ t('settings', 'Quota') }}
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="showConfig.showLanguages"
|
|
|
|
|
id="headerLanguages"
|
|
|
|
|
class="languages">
|
|
|
|
|
{{ t('settings', 'Language') }}
|
|
|
|
|
</div>
|
|
|
|
|
<tbody>
|
|
|
|
|
<tr id="grid-header"
|
|
|
|
|
:class="{'sticky': scrolled && !showConfig.showNewUserForm}"
|
|
|
|
|
class="row">
|
|
|
|
|
<th id="headerAvatar" class="avatar">
|
|
|
|
|
<span class="hidden-visually"> {{ t('settings', 'Avatar') }} </span>
|
|
|
|
|
</th>
|
|
|
|
|
<th id="headerName" class="name">
|
|
|
|
|
<div class="subtitle">
|
|
|
|
|
<strong>
|
|
|
|
|
{{ t('settings', 'Display name') }}
|
|
|
|
|
</strong>
|
|
|
|
|
</div>
|
|
|
|
|
{{ t('settings', 'Username') }}
|
|
|
|
|
</th>
|
|
|
|
|
<th id="headerPassword" class="password">
|
|
|
|
|
{{ t('settings', 'Password') }}
|
|
|
|
|
</th>
|
|
|
|
|
<th id="headerAddress" class="mailAddress">
|
|
|
|
|
{{ t('settings', 'Email') }}
|
|
|
|
|
</th>
|
|
|
|
|
<th id="headerGroups" class="groups">
|
|
|
|
|
{{ t('settings', 'Groups') }}
|
|
|
|
|
</th>
|
|
|
|
|
<th v-if="subAdminsGroups.length>0 && settings.isAdmin"
|
|
|
|
|
id="headerSubAdmins"
|
|
|
|
|
class="subadmins">
|
|
|
|
|
{{ t('settings', 'Group admin for') }}
|
|
|
|
|
</th>
|
|
|
|
|
<th id="headerQuota" class="quota">
|
|
|
|
|
{{ t('settings', 'Quota') }}
|
|
|
|
|
</th>
|
|
|
|
|
<th v-if="showConfig.showLanguages"
|
|
|
|
|
id="headerLanguages"
|
|
|
|
|
class="languages">
|
|
|
|
|
{{ t('settings', 'Language') }}
|
|
|
|
|
</th>
|
|
|
|
|
|
|
|
|
|
<div v-if="showConfig.showUserBackend || showConfig.showStoragePath"
|
|
|
|
|
class="headerUserBackend userBackend">
|
|
|
|
|
<div v-if="showConfig.showUserBackend" class="userBackend">
|
|
|
|
|
{{ t('settings', 'User backend') }}
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="showConfig.showStoragePath"
|
|
|
|
|
class="subtitle storageLocation">
|
|
|
|
|
{{ t('settings', 'Storage location') }}
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="showConfig.showLastLogin"
|
|
|
|
|
class="headerLastLogin lastLogin">
|
|
|
|
|
{{ t('settings', 'Last login') }}
|
|
|
|
|
</div>
|
|
|
|
|
<th v-if="showConfig.showUserBackend || showConfig.showStoragePath"
|
|
|
|
|
class="headerUserBackend userBackend">
|
|
|
|
|
<div v-if="showConfig.showUserBackend" class="userBackend">
|
|
|
|
|
{{ t('settings', 'User backend') }}
|
|
|
|
|
</div>
|
|
|
|
|
<div v-if="showConfig.showStoragePath"
|
|
|
|
|
class="subtitle storageLocation">
|
|
|
|
|
{{ t('settings', 'Storage location') }}
|
|
|
|
|
</div>
|
|
|
|
|
</th>
|
|
|
|
|
<th v-if="showConfig.showLastLogin"
|
|
|
|
|
class="headerLastLogin lastLogin">
|
|
|
|
|
{{ t('settings', 'Last login') }}
|
|
|
|
|
</th>
|
|
|
|
|
|
|
|
|
|
<div class="userActions" />
|
|
|
|
|
</div>
|
|
|
|
|
<th class="userActions hidden-visually">
|
|
|
|
|
{{ t('settings', 'User actions') }}
|
|
|
|
|
</th>
|
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
|
|
<user-row v-for="user in filteredUsers"
|
|
|
|
|
:key="user.id"
|
|
|
|
|
:external-actions="externalActions"
|
|
|
|
|
:groups="groups"
|
|
|
|
|
:languages="languages"
|
|
|
|
|
:quota-options="quotaOptions"
|
|
|
|
|
:settings="settings"
|
|
|
|
|
:show-config="showConfig"
|
|
|
|
|
:sub-admins-groups="subAdminsGroups"
|
|
|
|
|
:user="user"
|
|
|
|
|
:is-dark-theme="isDarkTheme" />
|
|
|
|
|
<InfiniteLoading ref="infiniteLoading" @infinite="infiniteHandler">
|
|
|
|
|
<div slot="spinner">
|
|
|
|
|
<div class="users-icon-loading icon-loading" />
|
|
|
|
|
</div>
|
|
|
|
|
<div slot="no-more">
|
|
|
|
|
<div class="users-list-end" />
|
|
|
|
|
</div>
|
|
|
|
|
<div slot="no-results">
|
|
|
|
|
<div id="emptycontent">
|
|
|
|
|
<div class="icon-contacts-dark" />
|
|
|
|
|
<h2>{{ t('settings', 'No users in here') }}</h2>
|
|
|
|
|
<user-row v-for="user in filteredUsers"
|
|
|
|
|
:key="user.id"
|
|
|
|
|
:external-actions="externalActions"
|
|
|
|
|
:groups="groups"
|
|
|
|
|
:languages="languages"
|
|
|
|
|
:quota-options="quotaOptions"
|
|
|
|
|
:settings="settings"
|
|
|
|
|
:show-config="showConfig"
|
|
|
|
|
:sub-admins-groups="subAdminsGroups"
|
|
|
|
|
:user="user"
|
|
|
|
|
:is-dark-theme="isDarkTheme" />
|
|
|
|
|
|
|
|
|
|
<InfiniteLoading ref="infiniteLoading" @infinite="infiniteHandler">
|
|
|
|
|
<div slot="spinner">
|
|
|
|
|
<div class="users-icon-loading icon-loading" />
|
|
|
|
|
</div>
|
|
|
|
|
<div slot="no-more">
|
|
|
|
|
<div class="users-list-end" />
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</InfiniteLoading>
|
|
|
|
|
</div>
|
|
|
|
|
<div slot="no-results">
|
|
|
|
|
<div id="emptycontent">
|
|
|
|
|
<div class="icon-contacts-dark" />
|
|
|
|
|
<h2>{{ t('settings', 'No users in here') }}</h2>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</InfiniteLoading>
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script>
|
|
|
|
|
@ -642,4 +653,12 @@ export default {
|
|
|
|
|
* prevent it). */
|
|
|
|
|
width: 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#app-content tbody tr {
|
|
|
|
|
&:hover,
|
|
|
|
|
&:focus,
|
|
|
|
|
&:active {
|
|
|
|
|
background-color: var(--color-main-background);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|
|