mirror of
https://github.com/n8n-io/n8n.git
synced 2024-11-15 17:14:05 -08:00
bae3098e4e
* ✨ Added pinia support. Migrated community nodes module. * ✨ Added ui pinia store, moved some data from root store to it, updated modals to work with pinia stores * ✨ Added ui pinia store and migrated a part of the root store * ✨ Migrated `settings` store to pinia * ✨ Removing vuex store refs from router * ✨ Migrated `users` module to pinia store * ⚡ Fixing errors after sync with master * ⚡ One more error after merge * ⚡ Created `workflows` pinia store. Moved large part of root store to it. Started updating references. * ✨ Finished migrating workflows store to pinia * ⚡ Renaming some getters and actions to make more sense * ✨ Finished migrating the root store to pinia * ✨ Migrated ndv store to pinia * ⚡ Renaming main panel dimensions getter so it doesn't clash with data prop name * ✔️ Fixing lint errors * ✨ Migrated `templates` store to pinia * ✨ Migrated the `nodeTypes`store * ⚡ Removed unused pieces of code and oold vuex modules * ✨ Adding vuex calls to pinia store, fixing wrong references * 💄 Removing leftover $store refs * ⚡ Added legacy getters and mutations to store to support webhooks * ⚡ Added missing front-end hooks, updated vuex state subscriptions to pinia * ✔️ Fixing linting errors * ⚡ Removing vue composition api plugin * ⚡ Fixing main sidebar state when loading node view * 🐛 Fixing an error when activating workflows * 🐛 Fixing isses with workflow settings and executions auto-refresh * 🐛 Removing duplicate listeners which cause import error * 🐛 Fixing route authentication * ⚡ Updating freshly pulled $store refs * ⚡ Adding deleted const * ⚡ Updating store references in ee features. Reseting NodeView credentials update flag when resetting workspace * ⚡ Adding return type to email submission modal * ⚡ Making NodeView only react to paste event when active * 🐛 Fixing signup view errors * ✨ Started migrating the `credentials` module to pinia * 👌 Addressing PR review comments * ✨ Migrated permissions module to pinia * ✨ Migrated `nodeCreator`, `tags` and `versions` modules to pinia * ✨ Implemented webhooks pinia store * ⚡ Removing all leftover vuex files and references * ✨ Removing final vuex refs * ⚡ Updating expected credentialId type * ⚡ Removing node credentials subscription code, reducing node click debounce timeout * 🐛 Fixing pushing nodes downstream when inserting new node * ✔️ Fixing a lint error in new type guard * ⚡ Updating helper reference * ✔️ Removing unnecessary awaits * ⚡ fix(editor): remove unnecessary imports from NDV * ⚡ Merging mapStores blocks in NodeView * ⚡ fix(editor): make sure JS Plumb not loaded earlier than needed * ⚡ Updating type guard nad credentials subscriptions * ⚡ Updating type guard so it doesn't use `any` type Co-authored-by: Csaba Tuncsik <csaba@n8n.io>
100 lines
2.3 KiB
Vue
100 lines
2.3 KiB
Vue
<template>
|
|
<div>
|
|
<img v-if="filePath" :class="$style.credIcon" :src="filePath" />
|
|
<NodeIcon v-else-if="relevantNode" :nodeType="relevantNode" :size="28" />
|
|
<span :class="$style.fallback" v-else></span>
|
|
</div>
|
|
</template>
|
|
|
|
<script lang="ts">
|
|
import { useCredentialsStore } from '@/stores/credentials';
|
|
import { useRootStore } from '@/stores/n8nRootStore';
|
|
import { useNodeTypesStore } from '@/stores/nodeTypes';
|
|
import { ICredentialType, INodeTypeDescription } from 'n8n-workflow';
|
|
import { mapStores } from 'pinia';
|
|
import Vue from 'vue';
|
|
|
|
export default Vue.extend({
|
|
props: {
|
|
credentialTypeName: {
|
|
type: String,
|
|
},
|
|
},
|
|
computed: {
|
|
...mapStores(
|
|
useCredentialsStore,
|
|
useNodeTypesStore,
|
|
useRootStore,
|
|
),
|
|
credentialWithIcon(): ICredentialType | null {
|
|
return this.credentialTypeName ? this.getCredentialWithIcon(this.credentialTypeName) : null;
|
|
},
|
|
|
|
filePath(): string | null {
|
|
if (!this.credentialWithIcon || !this.credentialWithIcon.icon || !this.credentialWithIcon.icon.startsWith('file:')) {
|
|
return null;
|
|
}
|
|
|
|
const restUrl = this.rootStore.getRestUrl;
|
|
|
|
return `${restUrl}/credential-icon/${this.credentialWithIcon.name}`;
|
|
},
|
|
relevantNode(): INodeTypeDescription | null {
|
|
if (this.credentialWithIcon && this.credentialWithIcon.icon && this.credentialWithIcon.icon.startsWith('node:')) {
|
|
const nodeType = this.credentialWithIcon.icon.replace('node:', '');
|
|
return this.nodeTypesStore.getNodeType(nodeType);
|
|
}
|
|
const nodesWithAccess = this.credentialsStore.getNodesWithAccess(this.credentialTypeName);
|
|
|
|
if (nodesWithAccess.length) {
|
|
return nodesWithAccess[0];
|
|
}
|
|
|
|
return null;
|
|
},
|
|
},
|
|
methods: {
|
|
getCredentialWithIcon(name: string | null): ICredentialType | null {
|
|
if (!name) {
|
|
return null;
|
|
}
|
|
|
|
const type = this.credentialsStore.getCredentialTypeByName(name);
|
|
|
|
if (!type) {
|
|
return null;
|
|
}
|
|
|
|
if (type.icon) {
|
|
return type;
|
|
}
|
|
|
|
if (type.extends) {
|
|
let parentCred = null;
|
|
type.extends.forEach(name => {
|
|
parentCred = this.getCredentialWithIcon(name);
|
|
if (parentCred !== null) return;
|
|
});
|
|
return parentCred;
|
|
}
|
|
|
|
return null;
|
|
},
|
|
},
|
|
});
|
|
</script>
|
|
|
|
<style lang="scss" module>
|
|
.credIcon {
|
|
height: 26px;
|
|
}
|
|
|
|
.fallback {
|
|
height: 28px;
|
|
width: 28px;
|
|
display: flex;
|
|
border-radius: 50%;
|
|
background-color: var(--color-foreground-base);
|
|
}
|
|
</style>
|