mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-19 04:53:30 +01:00
fix(selectMenu): allow json to be used for select menu options (#8322)
This commit is contained in:
@@ -149,6 +149,17 @@ describe('Select Menu Components', () => {
|
|||||||
}).toThrowError();
|
}).toThrowError();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('GIVEN valid option types THEN does not throw', () => {
|
||||||
|
expect(() =>
|
||||||
|
selectMenu().addOptions({
|
||||||
|
label: 'test',
|
||||||
|
value: 'test',
|
||||||
|
}),
|
||||||
|
).not.toThrowError();
|
||||||
|
|
||||||
|
expect(() => selectMenu().addOptions(selectMenuOption().setLabel('test').setValue('test'))).not.toThrowError();
|
||||||
|
});
|
||||||
|
|
||||||
test('GIVEN valid JSON input THEN valid JSON history is correct', () => {
|
test('GIVEN valid JSON input THEN valid JSON history is correct', () => {
|
||||||
expect(
|
expect(
|
||||||
new SelectMenuBuilder(selectMenuDataWithoutOptions)
|
new SelectMenuBuilder(selectMenuDataWithoutOptions)
|
||||||
|
|||||||
@@ -35,19 +35,19 @@ export const labelValueDescriptionValidator = s.string
|
|||||||
.lengthGreaterThanOrEqual(1)
|
.lengthGreaterThanOrEqual(1)
|
||||||
.lengthLessThanOrEqual(100)
|
.lengthLessThanOrEqual(100)
|
||||||
.setValidationEnabled(isValidationEnabled);
|
.setValidationEnabled(isValidationEnabled);
|
||||||
export const optionValidator = s
|
|
||||||
.union(
|
export const jsonOptionValidator = s
|
||||||
s.object({
|
.object({
|
||||||
label: labelValueDescriptionValidator,
|
label: labelValueDescriptionValidator,
|
||||||
value: labelValueDescriptionValidator,
|
value: labelValueDescriptionValidator,
|
||||||
description: labelValueDescriptionValidator.optional,
|
description: labelValueDescriptionValidator.optional,
|
||||||
emoji: emojiValidator.optional,
|
emoji: emojiValidator.optional,
|
||||||
default: s.boolean.optional,
|
default: s.boolean.optional,
|
||||||
}),
|
})
|
||||||
s.instance(SelectMenuOptionBuilder),
|
|
||||||
)
|
|
||||||
.setValidationEnabled(isValidationEnabled);
|
.setValidationEnabled(isValidationEnabled);
|
||||||
|
|
||||||
|
export const optionValidator = s.instance(SelectMenuOptionBuilder).setValidationEnabled(isValidationEnabled);
|
||||||
|
|
||||||
export const optionsValidator = optionValidator.array
|
export const optionsValidator = optionValidator.array
|
||||||
.lengthGreaterThanOrEqual(0)
|
.lengthGreaterThanOrEqual(0)
|
||||||
.setValidationEnabled(isValidationEnabled);
|
.setValidationEnabled(isValidationEnabled);
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ import { normalizeArray, type RestOrArray } from '../../util/normalizeArray';
|
|||||||
import {
|
import {
|
||||||
customIdValidator,
|
customIdValidator,
|
||||||
disabledValidator,
|
disabledValidator,
|
||||||
|
jsonOptionValidator,
|
||||||
minMaxValidator,
|
minMaxValidator,
|
||||||
optionsLengthValidator,
|
optionsLengthValidator,
|
||||||
optionValidator,
|
|
||||||
placeholderValidator,
|
placeholderValidator,
|
||||||
validateRequiredSelectMenuParameters,
|
validateRequiredSelectMenuParameters,
|
||||||
} from '../Assertions';
|
} from '../Assertions';
|
||||||
@@ -90,7 +90,7 @@ export class SelectMenuBuilder extends ComponentBuilder<APISelectMenuComponent>
|
|||||||
...options.map((option) =>
|
...options.map((option) =>
|
||||||
option instanceof SelectMenuOptionBuilder
|
option instanceof SelectMenuOptionBuilder
|
||||||
? option
|
? option
|
||||||
: new SelectMenuOptionBuilder(optionValidator.parse<APISelectMenuOption>(option)),
|
: new SelectMenuOptionBuilder(jsonOptionValidator.parse(option)),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
return this;
|
return this;
|
||||||
@@ -110,7 +110,7 @@ export class SelectMenuBuilder extends ComponentBuilder<APISelectMenuComponent>
|
|||||||
...options.map((option) =>
|
...options.map((option) =>
|
||||||
option instanceof SelectMenuOptionBuilder
|
option instanceof SelectMenuOptionBuilder
|
||||||
? option
|
? option
|
||||||
: new SelectMenuOptionBuilder(optionValidator.parse<APISelectMenuOption>(option)),
|
: new SelectMenuOptionBuilder(jsonOptionValidator.parse(option)),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
return this;
|
return this;
|
||||||
|
|||||||
Reference in New Issue
Block a user