fix(editor): Fix parameter reset on credential change in Discord node (#9137)
This commit is contained in:
@@ -3,6 +3,8 @@ import { getVisibleSelect } from '../utils';
|
||||
import { MANUAL_TRIGGER_NODE_DISPLAY_NAME } from '../constants';
|
||||
import { NDV, WorkflowPage } from '../pages';
|
||||
import { NodeCreator } from '../pages/features/node-creator';
|
||||
import { clickCreateNewCredential } from '../composables/ndv';
|
||||
import { setCredentialValues } from '../composables/modals/credential-modal';
|
||||
|
||||
const workflowPage = new WorkflowPage();
|
||||
const ndv = new NDV();
|
||||
@@ -633,7 +635,7 @@ describe('NDV', () => {
|
||||
ndv.getters.nodeRunErrorIndicator().should('exist');
|
||||
});
|
||||
|
||||
it('Should handle mismatched option attributes', () => {
|
||||
it('Should clear mismatched collection parameters', () => {
|
||||
workflowPage.actions.addInitialNodeToCanvas('LDAP', {
|
||||
keepNdvOpen: true,
|
||||
action: 'Create a new entry',
|
||||
@@ -656,6 +658,21 @@ describe('NDV', () => {
|
||||
ndv.getters.resourceLocatorInput('documentId').find('input').should('have.value', TEST_DOC_ID);
|
||||
});
|
||||
|
||||
it('Should not clear resource/operation after credential change', () => {
|
||||
workflowPage.actions.addInitialNodeToCanvas('Discord', {
|
||||
keepNdvOpen: true,
|
||||
action: 'Delete a message',
|
||||
});
|
||||
|
||||
clickCreateNewCredential();
|
||||
setCredentialValues({
|
||||
botToken: 'sk_test_123',
|
||||
});
|
||||
|
||||
ndv.getters.parameterInput('resource').find('input').should('have.value', 'Message');
|
||||
ndv.getters.parameterInput('operation').find('input').should('have.value', 'Delete');
|
||||
});
|
||||
|
||||
it('Should open appropriate node creator after clicking on connection hint link', () => {
|
||||
const nodeCreator = new NodeCreator();
|
||||
const hintMapper = {
|
||||
|
||||
@@ -187,7 +187,15 @@ import type {
|
||||
NodeParameterValue,
|
||||
ConnectionTypes,
|
||||
} from 'n8n-workflow';
|
||||
import { NodeHelpers, NodeConnectionType, deepCopy } from 'n8n-workflow';
|
||||
import {
|
||||
NodeHelpers,
|
||||
NodeConnectionType,
|
||||
deepCopy,
|
||||
isINodePropertyCollectionList,
|
||||
isINodePropertiesList,
|
||||
isINodePropertyOptionsList,
|
||||
displayParameter,
|
||||
} from 'n8n-workflow';
|
||||
import type {
|
||||
INodeUi,
|
||||
INodeUpdatePropertiesInformation,
|
||||
@@ -990,21 +998,27 @@ export default defineComponent({
|
||||
if (!nodeParameterValues?.hasOwnProperty(prop.name) || !displayOptions || !prop.options) {
|
||||
return;
|
||||
}
|
||||
// Only process the parameters that should be hidden
|
||||
// Only process the parameters that depend on the updated parameter
|
||||
const showCondition = displayOptions.show?.[updatedParameter.name];
|
||||
const hideCondition = displayOptions.hide?.[updatedParameter.name];
|
||||
if (showCondition === undefined && hideCondition === undefined) {
|
||||
return;
|
||||
}
|
||||
|
||||
let hasValidOptions = true;
|
||||
|
||||
// Every value should be a possible option
|
||||
const hasValidOptions = Object.keys(nodeParameterValues).every(
|
||||
(key) => (prop.options ?? []).find((option) => option.name === key) !== undefined,
|
||||
);
|
||||
if (
|
||||
!hasValidOptions ||
|
||||
showCondition !== updatedParameter.value ||
|
||||
hideCondition === updatedParameter.value
|
||||
) {
|
||||
if (isINodePropertyCollectionList(prop.options) || isINodePropertiesList(prop.options)) {
|
||||
hasValidOptions = Object.keys(nodeParameterValues).every(
|
||||
(key) => (prop.options ?? []).find((option) => option.name === key) !== undefined,
|
||||
);
|
||||
} else if (isINodePropertyOptionsList(prop.options)) {
|
||||
hasValidOptions = !!prop.options.find(
|
||||
(option) => option.value === nodeParameterValues[prop.name],
|
||||
);
|
||||
}
|
||||
|
||||
if (!hasValidOptions && displayParameter(nodeParameterValues, prop, this.node)) {
|
||||
unset(nodeParameterValues as object, prop.name);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user