mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 10:02:05 +00:00
refactor(editor): Apply Prettier (no-changelog) (#4920)
* ⚡ Adjust `format` script * 🔥 Remove exemption for `editor-ui` * 🎨 Prettify * 👕 Fix lint
This commit is contained in:
@@ -1,7 +1,11 @@
|
||||
<template>
|
||||
<Modal
|
||||
width="460px"
|
||||
:title="$locale.baseText(dynamicTranslations.workflows.shareModal.title, { interpolate: { name: workflow.name } })"
|
||||
:title="
|
||||
$locale.baseText(dynamicTranslations.workflows.shareModal.title, {
|
||||
interpolate: { name: workflow.name },
|
||||
})
|
||||
"
|
||||
:eventBus="modalBus"
|
||||
:name="WORKFLOW_SHARE_MODAL_KEY"
|
||||
:center="true"
|
||||
@@ -14,8 +18,12 @@
|
||||
</n8n-text>
|
||||
</div>
|
||||
<div v-else :class="$style.container">
|
||||
<n8n-info-tip v-if="!workflowPermissions.isOwner" :bold="false" class="mb-s" >
|
||||
{{ $locale.baseText('workflows.shareModal.info.sharee', { interpolate: { workflowOwnerName } }) }}
|
||||
<n8n-info-tip v-if="!workflowPermissions.isOwner" :bold="false" class="mb-s">
|
||||
{{
|
||||
$locale.baseText('workflows.shareModal.info.sharee', {
|
||||
interpolate: { workflowOwnerName },
|
||||
})
|
||||
}}
|
||||
</n8n-info-tip>
|
||||
<enterprise-edition :features="[EnterpriseEditionFeature.WorkflowSharing]">
|
||||
<n8n-user-select
|
||||
@@ -46,21 +54,21 @@
|
||||
size="small"
|
||||
@change="onRoleAction(user, $event)"
|
||||
>
|
||||
<n8n-option
|
||||
:label="$locale.baseText('workflows.roles.editor')"
|
||||
value="editor" />
|
||||
<n8n-option
|
||||
:class="$style.roleSelectRemoveOption"
|
||||
value="remove"
|
||||
>
|
||||
<n8n-text color="danger">{{ $locale.baseText('workflows.shareModal.list.delete') }}</n8n-text>
|
||||
<n8n-option :label="$locale.baseText('workflows.roles.editor')" value="editor" />
|
||||
<n8n-option :class="$style.roleSelectRemoveOption" value="remove">
|
||||
<n8n-text color="danger">{{
|
||||
$locale.baseText('workflows.shareModal.list.delete')
|
||||
}}</n8n-text>
|
||||
</n8n-option>
|
||||
</n8n-select>
|
||||
</template>
|
||||
</n8n-users-list>
|
||||
<template #fallback>
|
||||
<n8n-text>
|
||||
<i18n :path="dynamicTranslations.workflows.sharing.unavailable.description" tag="span">
|
||||
<i18n
|
||||
:path="dynamicTranslations.workflows.sharing.unavailable.description"
|
||||
tag="span"
|
||||
>
|
||||
<template #action />
|
||||
</i18n>
|
||||
</n8n-text>
|
||||
@@ -75,13 +83,12 @@
|
||||
{{ $locale.baseText('workflows.shareModal.isDefaultUser.button') }}
|
||||
</n8n-button>
|
||||
</div>
|
||||
<enterprise-edition v-else :features="[EnterpriseEditionFeature.WorkflowSharing]" :class="$style.actionButtons">
|
||||
<n8n-text
|
||||
v-show="isDirty"
|
||||
color="text-light"
|
||||
size="small"
|
||||
class="mr-xs"
|
||||
>
|
||||
<enterprise-edition
|
||||
v-else
|
||||
:features="[EnterpriseEditionFeature.WorkflowSharing]"
|
||||
:class="$style.actionButtons"
|
||||
>
|
||||
<n8n-text v-show="isDirty" color="text-light" size="small" class="mr-xs">
|
||||
{{ $locale.baseText('workflows.shareModal.changesHint') }}
|
||||
</n8n-text>
|
||||
<n8n-button
|
||||
@@ -96,10 +103,7 @@
|
||||
|
||||
<template #fallback>
|
||||
<n8n-link :to="dynamicTranslations.workflows.sharing.unavailable.linkURL">
|
||||
<n8n-button
|
||||
:loading="loading"
|
||||
size="medium"
|
||||
>
|
||||
<n8n-button :loading="loading" size="medium">
|
||||
{{ $locale.baseText(dynamicTranslations.workflows.sharing.unavailable.button) }}
|
||||
</n8n-button>
|
||||
</n8n-link>
|
||||
@@ -118,21 +122,19 @@ import {
|
||||
VIEWS,
|
||||
WORKFLOW_SHARE_MODAL_KEY,
|
||||
} from '../constants';
|
||||
import {IUser, IWorkflowDb, NestedRecord} from "@/Interface";
|
||||
import { getWorkflowPermissions, IPermissions } from "@/permissions";
|
||||
import mixins from "vue-typed-mixins";
|
||||
import {showMessage} from "@/mixins/showMessage";
|
||||
import {nodeViewEventBus} from "@/event-bus/node-view-event-bus";
|
||||
import {mapStores} from "pinia";
|
||||
import {useSettingsStore} from "@/stores/settings";
|
||||
import {useUIStore} from "@/stores/ui";
|
||||
import {useUsersStore} from "@/stores/users";
|
||||
import {useWorkflowsStore} from "@/stores/workflows";
|
||||
import useWorkflowsEEStore from "@/stores/workflows.ee";
|
||||
import { IUser, IWorkflowDb, NestedRecord } from '@/Interface';
|
||||
import { getWorkflowPermissions, IPermissions } from '@/permissions';
|
||||
import mixins from 'vue-typed-mixins';
|
||||
import { showMessage } from '@/mixins/showMessage';
|
||||
import { nodeViewEventBus } from '@/event-bus/node-view-event-bus';
|
||||
import { mapStores } from 'pinia';
|
||||
import { useSettingsStore } from '@/stores/settings';
|
||||
import { useUIStore } from '@/stores/ui';
|
||||
import { useUsersStore } from '@/stores/users';
|
||||
import { useWorkflowsStore } from '@/stores/workflows';
|
||||
import useWorkflowsEEStore from '@/stores/workflows.ee';
|
||||
|
||||
export default mixins(
|
||||
showMessage,
|
||||
).extend({
|
||||
export default mixins(showMessage).extend({
|
||||
name: 'workflow-share-modal',
|
||||
components: {
|
||||
Modal,
|
||||
@@ -145,9 +147,10 @@ export default mixins(
|
||||
},
|
||||
data() {
|
||||
const workflowsStore = useWorkflowsStore();
|
||||
const workflow = this.data.id === PLACEHOLDER_EMPTY_WORKFLOW_ID
|
||||
? workflowsStore.workflow
|
||||
: workflowsStore.workflowsById[this.data.id];
|
||||
const workflow =
|
||||
this.data.id === PLACEHOLDER_EMPTY_WORKFLOW_ID
|
||||
? workflowsStore.workflow
|
||||
: workflowsStore.workflowsById[this.data.id];
|
||||
|
||||
return {
|
||||
WORKFLOW_SHARE_MODAL_KEY,
|
||||
@@ -158,25 +161,37 @@ export default mixins(
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapStores(useSettingsStore, useUIStore, useUsersStore, useWorkflowsStore, useWorkflowsEEStore),
|
||||
...mapStores(
|
||||
useSettingsStore,
|
||||
useUIStore,
|
||||
useUsersStore,
|
||||
useWorkflowsStore,
|
||||
useWorkflowsEEStore,
|
||||
),
|
||||
isDefaultUser(): boolean {
|
||||
return this.usersStore.isDefaultUser;
|
||||
},
|
||||
usersList(): IUser[] {
|
||||
return this.usersStore.allUsers.filter((user: IUser) => {
|
||||
const isCurrentUser = user.id === this.usersStore.currentUser?.id;
|
||||
const isAlreadySharedWithUser = (this.sharedWith || []).find((sharee) => sharee.id === user.id);
|
||||
const isAlreadySharedWithUser = (this.sharedWith || []).find(
|
||||
(sharee) => sharee.id === user.id,
|
||||
);
|
||||
|
||||
return !isCurrentUser && !isAlreadySharedWithUser;
|
||||
});
|
||||
},
|
||||
sharedWithList(): Array<Partial<IUser>> {
|
||||
return ([
|
||||
{
|
||||
...(this.workflow && this.workflow.ownedBy ? this.workflow.ownedBy : this.usersStore.currentUser),
|
||||
isOwner: true,
|
||||
},
|
||||
] as Array<Partial<IUser>>).concat(this.sharedWith || []);
|
||||
return (
|
||||
[
|
||||
{
|
||||
...(this.workflow && this.workflow.ownedBy
|
||||
? this.workflow.ownedBy
|
||||
: this.usersStore.currentUser),
|
||||
isOwner: true,
|
||||
},
|
||||
] as Array<Partial<IUser>>
|
||||
).concat(this.sharedWith || []);
|
||||
},
|
||||
workflow(): IWorkflowDb {
|
||||
return this.data.id === PLACEHOLDER_EMPTY_WORKFLOW_ID
|
||||
@@ -193,7 +208,10 @@ export default mixins(
|
||||
return this.workflowsEEStore.getWorkflowOwnerName(`${this.workflow.id}`);
|
||||
},
|
||||
isSharingAvailable(): boolean {
|
||||
return this.settingsStore.isEnterpriseFeatureEnabled(EnterpriseEditionFeature.WorkflowSharing) === true;
|
||||
return (
|
||||
this.settingsStore.isEnterpriseFeatureEnabled(EnterpriseEditionFeature.WorkflowSharing) ===
|
||||
true
|
||||
);
|
||||
},
|
||||
dynamicTranslations(): NestedRecord<string> {
|
||||
return this.uiStore.dynamicTranslations;
|
||||
@@ -201,10 +219,12 @@ export default mixins(
|
||||
isDirty(): boolean {
|
||||
const previousSharedWith = this.workflow.sharedWith || [];
|
||||
|
||||
return this.sharedWith.length !== previousSharedWith.length ||
|
||||
return (
|
||||
this.sharedWith.length !== previousSharedWith.length ||
|
||||
this.sharedWith.some(
|
||||
(sharee) => !previousSharedWith.find((previousSharee) => sharee.id === previousSharee.id),
|
||||
);
|
||||
)
|
||||
);
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
@@ -229,7 +249,10 @@ export default mixins(
|
||||
|
||||
try {
|
||||
const workflowId = await saveWorkflowPromise();
|
||||
await this.workflowsEEStore.saveWorkflowSharedWith({ workflowId, sharedWith: this.sharedWith });
|
||||
await this.workflowsEEStore.saveWorkflowSharedWith({
|
||||
workflowId,
|
||||
sharedWith: this.sharedWith,
|
||||
});
|
||||
|
||||
this.$showMessage({
|
||||
title: this.$locale.baseText('workflows.shareModal.onSave.success.title'),
|
||||
@@ -252,48 +275,69 @@ export default mixins(
|
||||
const user = this.usersStore.getUserById(userId)!;
|
||||
const isNewSharee = !(this.workflow.sharedWith || []).find((sharee) => sharee.id === userId);
|
||||
|
||||
const isLastUserWithAccessToCredentialsById = (this.workflow.usedCredentials || [])
|
||||
.reduce<Record<string, boolean>>((acc, credential) => {
|
||||
if (!credential.id || !credential.ownedBy || !credential.sharedWith || !this.workflow.sharedWith) {
|
||||
return acc;
|
||||
}
|
||||
|
||||
// if is credential owner, and no credential sharees have access to workflow => NOT OK
|
||||
// if is credential owner, and credential sharees have access to workflow => OK
|
||||
|
||||
// if is credential sharee, and no credential sharees have access to workflow or owner does not have access to workflow => NOT OK
|
||||
// if is credential sharee, and credential owner has access to workflow => OK
|
||||
// if is credential sharee, and other credential sharees have access to workflow => OK
|
||||
|
||||
let isLastUserWithAccess = false;
|
||||
|
||||
const isCredentialOwner = credential.ownedBy.id === user.id;
|
||||
const isCredentialSharee = !!credential.sharedWith.find((sharee) => sharee.id === user.id);
|
||||
|
||||
if (isCredentialOwner) {
|
||||
isLastUserWithAccess = !credential.sharedWith.some((sharee) => {
|
||||
return this.workflow.sharedWith!.find((workflowSharee) => workflowSharee.id === sharee.id);
|
||||
});
|
||||
} else if (isCredentialSharee) {
|
||||
isLastUserWithAccess = !credential.sharedWith.some((sharee) => {
|
||||
return this.workflow.sharedWith!.find((workflowSharee) => workflowSharee.id === sharee.id);
|
||||
}) && !this.workflow.sharedWith!.find((workflowSharee) => workflowSharee.id === credential.ownedBy!.id);
|
||||
}
|
||||
|
||||
acc[credential.id] = isLastUserWithAccess;
|
||||
|
||||
const isLastUserWithAccessToCredentialsById = (this.workflow.usedCredentials || []).reduce<
|
||||
Record<string, boolean>
|
||||
>((acc, credential) => {
|
||||
if (
|
||||
!credential.id ||
|
||||
!credential.ownedBy ||
|
||||
!credential.sharedWith ||
|
||||
!this.workflow.sharedWith
|
||||
) {
|
||||
return acc;
|
||||
}, {});
|
||||
}
|
||||
|
||||
const isLastUserWithAccessToCredentials = Object.values(isLastUserWithAccessToCredentialsById).some((value) => value);
|
||||
// if is credential owner, and no credential sharees have access to workflow => NOT OK
|
||||
// if is credential owner, and credential sharees have access to workflow => OK
|
||||
|
||||
// if is credential sharee, and no credential sharees have access to workflow or owner does not have access to workflow => NOT OK
|
||||
// if is credential sharee, and credential owner has access to workflow => OK
|
||||
// if is credential sharee, and other credential sharees have access to workflow => OK
|
||||
|
||||
let isLastUserWithAccess = false;
|
||||
|
||||
const isCredentialOwner = credential.ownedBy.id === user.id;
|
||||
const isCredentialSharee = !!credential.sharedWith.find((sharee) => sharee.id === user.id);
|
||||
|
||||
if (isCredentialOwner) {
|
||||
isLastUserWithAccess = !credential.sharedWith.some((sharee) => {
|
||||
return this.workflow.sharedWith!.find(
|
||||
(workflowSharee) => workflowSharee.id === sharee.id,
|
||||
);
|
||||
});
|
||||
} else if (isCredentialSharee) {
|
||||
isLastUserWithAccess =
|
||||
!credential.sharedWith.some((sharee) => {
|
||||
return this.workflow.sharedWith!.find(
|
||||
(workflowSharee) => workflowSharee.id === sharee.id,
|
||||
);
|
||||
}) &&
|
||||
!this.workflow.sharedWith!.find(
|
||||
(workflowSharee) => workflowSharee.id === credential.ownedBy!.id,
|
||||
);
|
||||
}
|
||||
|
||||
acc[credential.id] = isLastUserWithAccess;
|
||||
|
||||
return acc;
|
||||
}, {});
|
||||
|
||||
const isLastUserWithAccessToCredentials = Object.values(
|
||||
isLastUserWithAccessToCredentialsById,
|
||||
).some((value) => value);
|
||||
|
||||
let confirm = true;
|
||||
if (!isNewSharee && isLastUserWithAccessToCredentials) {
|
||||
confirm = await this.confirmMessage(
|
||||
this.$locale.baseText(`workflows.shareModal.list.delete.confirm.lastUserWithAccessToCredentials.message`, {
|
||||
interpolate: { name: user.fullName as string, workflow: this.workflow.name },
|
||||
this.$locale.baseText(
|
||||
`workflows.shareModal.list.delete.confirm.lastUserWithAccessToCredentials.message`,
|
||||
{
|
||||
interpolate: { name: user.fullName as string, workflow: this.workflow.name },
|
||||
},
|
||||
),
|
||||
this.$locale.baseText('workflows.shareModal.list.delete.confirm.title', {
|
||||
interpolate: { name: user.fullName },
|
||||
}),
|
||||
this.$locale.baseText('workflows.shareModal.list.delete.confirm.title', { interpolate: { name: user.fullName } }),
|
||||
null,
|
||||
this.$locale.baseText('workflows.shareModal.list.delete.confirm.confirmButtonText'),
|
||||
this.$locale.baseText('workflows.shareModal.list.delete.confirm.cancelButtonText'),
|
||||
@@ -314,9 +358,7 @@ export default mixins(
|
||||
async onCloseModal() {
|
||||
if (this.isDirty) {
|
||||
const shouldSave = await this.confirmMessage(
|
||||
this.$locale.baseText(
|
||||
'workflows.shareModal.saveBeforeClose.message',
|
||||
),
|
||||
this.$locale.baseText('workflows.shareModal.saveBeforeClose.message'),
|
||||
this.$locale.baseText('workflows.shareModal.saveBeforeClose.title'),
|
||||
'warning',
|
||||
this.$locale.baseText('workflows.shareModal.saveBeforeClose.confirmButtonText'),
|
||||
|
||||
Reference in New Issue
Block a user