Files
Automata/packages/editor-ui/src/components/DeleteUserModal.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

186 lines
4.8 KiB
Vue

<template>
<Modal
:name="modalName"
@enter="onSubmit"
:title="title"
:center="true"
width="460px"
:eventBus="modalBus"
>
<template slot="content">
<div>
<div v-if="isPending">
<n8n-text color="text-base">{{ $locale.baseText('settings.users.confirmUserDeletion') }}</n8n-text>
</div>
<div :class="$style.content" v-else>
<div><n8n-text color="text-base">{{ $locale.baseText('settings.users.confirmDataHandlingAfterDeletion') }}</n8n-text></div>
<el-radio :value="operation" label="transfer" @change="() => setOperation('transfer')">
<n8n-text color="text-dark">{{ $locale.baseText('settings.users.transferWorkflowsAndCredentials') }}</n8n-text>
</el-radio>
<div :class="$style.optionInput" v-if="operation === 'transfer'">
<n8n-input-label :label="$locale.baseText('settings.users.userToTransferTo')">
<n8n-user-select
:users="allUsers"
:value="transferId"
:ignoreIds="ignoreIds"
:currentUserId="currentUserId"
@input="setTransferId"
/>
</n8n-input-label>
</div>
<el-radio :value="operation" label="delete" @change="() => setOperation('delete')">
<n8n-text color="text-dark">{{ $locale.baseText('settings.users.deleteWorkflowsAndCredentials') }}</n8n-text>
</el-radio>
<div :class="$style.optionInput" v-if="operation === 'delete'">
<n8n-input-label :label="$locale.baseText('settings.users.deleteConfirmationMessage')">
<n8n-input :value="deleteConfirmText" :placeholder="$locale.baseText('settings.users.deleteConfirmationText')" @input="setConfirmText" />
</n8n-input-label>
</div>
</div>
</div>
</template>
<template slot="footer">
<n8n-button :loading="loading" :disabled="!enabled" :label="$locale.baseText('settings.users.delete')" @click="onSubmit" float="right" />
</template>
</Modal>
</template>
<script lang="ts">
import mixins from "vue-typed-mixins";
import { showMessage } from "@/components/mixins/showMessage";
import Modal from "./Modal.vue";
import Vue from "vue";
import { IUser } from "../Interface";
import { mapGetters } from "vuex";
import { N8nUserSelect } from 'n8n-design-system';
export default mixins(showMessage).extend({
components: {
Modal,
N8nUserSelect,
},
name: "DeleteUserModal",
props: {
modalName: {
type: String,
},
activeId: {
type: String,
},
},
data() {
return {
modalBus: new Vue(),
loading: false,
operation: '',
deleteConfirmText: '',
transferId: '',
ignoreIds: [this.activeId],
};
},
computed: {
...mapGetters('users', ['allUsers', 'currentUserId']),
userToDelete(): IUser {
const getUserById = this.$store.getters['users/getUserById'];
return getUserById(this.activeId);
},
isPending(): boolean {
return this.userToDelete && !this.userToDelete.firstName;
},
title(): string {
const user = this.userToDelete && (this.userToDelete.fullName || this.userToDelete.email) || '';
return this.$locale.baseText(
'settings.users.deleteUser',
{ interpolate: { user }},
);
},
enabled(): boolean {
if (this.isPending) {
return true;
}
if (this.operation === 'delete' && this.deleteConfirmText === this.$locale.baseText('settings.users.deleteConfirmationText')) {
return true;
}
if (this.operation === 'transfer' && this.transferId) {
return true;
}
return false;
},
},
methods: {
setOperation(operation: string) {
this.operation = operation;
this.transferId = '';
},
setConfirmText(text: string) {
this.deleteConfirmText = text;
},
setTransferId(id: string) {
this.transferId = id;
},
async onSubmit() {
try {
if (!this.enabled) {
return;
}
this.loading = true;
const params = {id: this.activeId} as {id: string, transferId?: string};
if (this.operation === 'transfer') {
params.transferId = this.transferId;
}
await this.$store.dispatch('users/deleteUser', params);
let message = '';
if (this.transferId) {
const getUserById = this.$store.getters['users/getUserById'];
const transferUser: IUser = getUserById(this.transferId);
message = this.$locale.baseText(
'settings.users.transferredToUser',
{ interpolate: { user: transferUser.fullName || '' }},
);
}
this.$showMessage({
type: 'success',
title: this.$locale.baseText('settings.users.userDeleted'),
message,
});
this.modalBus.$emit('close');
} catch (error) {
this.$showError(error, this.$locale.baseText('settings.users.userDeletedError'));
}
this.loading = false;
},
},
});
</script>
<style lang="scss" module>
.content {
padding-bottom: var(--spacing-2xs);
> * {
margin-bottom: var(--spacing-s);
}
}
.innerContent {
> * {
margin-bottom: var(--spacing-2xs);
}
}
.optionInput {
padding-left: var(--spacing-l);
}
</style>