mirror of
https://github.com/n8n-io/n8n.git
synced 2025-03-05 20:50:17 -08:00
67 lines
1.5 KiB
Vue
67 lines
1.5 KiB
Vue
<script setup lang="ts">
|
|
import { useI18n } from '@/composables/useI18n';
|
|
|
|
export type CredentialOption = {
|
|
id: string;
|
|
name: string;
|
|
typeDisplayName: string | undefined;
|
|
};
|
|
|
|
const props = defineProps<{
|
|
credentialOptions: CredentialOption[];
|
|
selectedCredentialId: string | null;
|
|
}>();
|
|
|
|
const emit = defineEmits<{
|
|
credentialSelected: [credentialId: string];
|
|
newCredential: [];
|
|
}>();
|
|
|
|
const i18n = useI18n();
|
|
|
|
const NEW_CREDENTIALS_TEXT = `- ${i18n.baseText('nodeCredentials.createNew')} -`;
|
|
|
|
const onCredentialSelected = (credentialId: string) => {
|
|
if (credentialId === NEW_CREDENTIALS_TEXT) {
|
|
emit('newCredential');
|
|
} else {
|
|
emit('credentialSelected', credentialId);
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<template>
|
|
<n8n-select
|
|
size="small"
|
|
:model-value="props.selectedCredentialId"
|
|
@update:model-value="onCredentialSelected"
|
|
>
|
|
<n8n-option
|
|
v-for="item in props.credentialOptions"
|
|
:key="item.id"
|
|
:data-test-id="`node-credentials-select-item-${item.id}`"
|
|
:label="item.name"
|
|
:value="item.id"
|
|
>
|
|
<div :class="[$style.credentialOption, 'mt-2xs mb-2xs']">
|
|
<n8n-text bold>{{ item.name }}</n8n-text>
|
|
<n8n-text size="small">{{ item.typeDisplayName }}</n8n-text>
|
|
</div>
|
|
</n8n-option>
|
|
<n8n-option
|
|
:key="NEW_CREDENTIALS_TEXT"
|
|
data-test-id="node-credentials-select-item-new"
|
|
:value="NEW_CREDENTIALS_TEXT"
|
|
:label="NEW_CREDENTIALS_TEXT"
|
|
>
|
|
</n8n-option>
|
|
</n8n-select>
|
|
</template>
|
|
|
|
<style lang="scss" module>
|
|
.credentialOption {
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
</style>
|