n8n/packages/editor-ui/src/views/SettingsUsersView.vue
Iván Ovejero 18dee373d5
Add autocompletion for i18n keys in script sections of Vue files (#3133)
* 📘 Type `baseText()` to i18n keys

* 📘 Adjust `baseText()` signature

* 👕 Except JSON files from Vue ESLint

* 🐛 Fix errors surfaced by `baseText()` typing

*  Pluralize keys

* 📘 Add typing for category names

*  Mark internal keys

* ✏️ Update docs references

* 🎨 Prettify syntax

* 🐛 Fix leftover internal key references
2022-04-15 08:22:58 +02:00

133 lines
3.5 KiB
Vue

<template>
<SettingsView>
<div :class="$style.container">
<div>
<n8n-heading size="2xlarge">{{ $locale.baseText('settings.users') }}</n8n-heading>
<div :class="$style.buttonContainer" v-if="!showUMSetupWarning">
<n8n-tooltip :disabled="isSmtpSetup" placement="bottom">
<div slot="content" v-html="$locale.baseText('settings.users.setupSMTPToInviteUsers')"></div>
<div>
<n8n-button :label="$locale.baseText('settings.users.invite')" @click="onInvite" size="large" :disabled="!isSmtpSetup" />
</div>
</n8n-tooltip>
</div>
</div>
<div v-if="showUMSetupWarning" :class="$style.setupInfoContainer">
<n8n-action-box
:heading="$locale.baseText('settings.users.setupToInviteUsers')"
:buttonText="$locale.baseText('settings.users.setupMyAccount')"
:description="$locale.baseText('settings.users.setupToInviteUsersInfo')"
@click="redirectToSetup"
/>
</div>
<div :class="$style.usersContainer" v-else>
<PageAlert
v-if="!isSmtpSetup"
:message="$locale.baseText('settings.users.smtpToAddUsersWarning')"
:popupClass="$style.alert"
/>
<n8n-users-list :users="allUsers" :currentUserId="currentUserId" @delete="onDelete" @reinvite="onReinvite" />
</div>
</div>
</SettingsView>
</template>
<script lang="ts">
import { INVITE_USER_MODAL_KEY, VIEWS } from '@/constants';
import { mapGetters } from 'vuex';
import SettingsView from './SettingsView.vue';
import PageAlert from '../components/PageAlert.vue';
import { N8nUsersList } from 'n8n-design-system';
import { IUser } from '@/Interface';
import mixins from 'vue-typed-mixins';
import { showMessage } from '@/components/mixins/showMessage';
export default mixins(showMessage).extend({
name: 'SettingsUsersView',
components: {
SettingsView,
'n8n-users-list': N8nUsersList,
PageAlert,
},
async mounted() {
if (!this.showUMSetupWarning) {
await this.$store.dispatch('users/fetchUsers');
}
},
computed: {
...mapGetters('users', ['allUsers', 'currentUserId', 'showUMSetupWarning']),
...mapGetters('settings', ['isSmtpSetup']),
},
methods: {
redirectToSetup() {
this.$router.push({name: VIEWS.SETUP});
},
onInvite() {
this.$store.dispatch('ui/openModal', INVITE_USER_MODAL_KEY);
},
async onDelete(userId: string) {
const getUserById = this.$store.getters['users/getUserById'];
const user = getUserById(userId) as IUser | null;
if (user) {
this.$store.dispatch('ui/openDeleteUserModal', { id: userId });
}
},
async onReinvite(userId: string) {
const getUserById = this.$store.getters['users/getUserById'];
const user = getUserById(userId) as IUser | null;
if (user) {
try {
await this.$store.dispatch('users/reinviteUser', { id: user.id });
this.$showToast({
type: 'success',
title: this.$locale.baseText('settings.users.inviteResent'),
message: this.$locale.baseText(
'settings.users.emailSentTo',
{ interpolate: { email: user.email || '' } },
),
});
} catch (e) {
this.$showError(e, this.$locale.baseText('settings.users.userReinviteError'));
}
}
},
},
});
</script>
<style lang="scss" module>
.container {
height: 100%;
padding-right: var(--spacing-2xs);
> * {
margin-bottom: var(--spacing-2xl);
}
}
.usersContainer {
padding-bottom: 100px;
> * {
margin-bottom: var(--spacing-2xs);
}
}
.buttonContainer {
display: inline-block;
float: right;
margin-bottom: var(--spacing-l);
}
.setupInfoContainer {
max-width: 728px;
}
.alert {
left: calc(50% + 100px);
}
</style>