feat(string-prompt): Adds string prompt to menu item
This commit is contained in:
parent
1d73ee8a78
commit
5c7c9c9f87
6 changed files with 164 additions and 26 deletions
|
|
@ -13,7 +13,8 @@ import {
|
|||
inlineCode,
|
||||
italic,
|
||||
Snowflake,
|
||||
StringSelectMenuBuilder, StringSelectMenuOptionBuilder
|
||||
StringSelectMenuBuilder, StringSelectMenuOptionBuilder, TextInputBuilder,
|
||||
TextInputStyle
|
||||
} from "discord.js";
|
||||
import {ChannelId} from "../types/DiscordTypes";
|
||||
import {MessageActionRowComponentBuilder} from "@discordjs/builders";
|
||||
|
|
@ -80,7 +81,24 @@ export class ConfigurationMenuHandler {
|
|||
setValue: this.setValue.bind(this)
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
traversalKey: "calendar",
|
||||
label: "Calendar",
|
||||
description: "Provides settings for the metadata contained in the playdate exports.",
|
||||
type: MenuItemType.Collection,
|
||||
children: [
|
||||
{
|
||||
traversalKey: "title",
|
||||
label: "Title",
|
||||
description: "Defines how the calendar entry should be called.",
|
||||
type: MenuItemType.Prompt,
|
||||
getCurrentValue: this.getStringValue.bind(this),
|
||||
getActionRowBuilder: this.getStringBuilder.bind(this),
|
||||
setValue: this.setValue.bind(this)
|
||||
}
|
||||
]
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
|
|
@ -158,7 +176,29 @@ export class ConfigurationMenuHandler {
|
|||
)
|
||||
}
|
||||
|
||||
private setValue(value: FieldMenuItemSaveValue[], context: FieldMenuItemContext): void {
|
||||
this.configuration.saveConfiguration(context.path.join('.'), value.join('; '));
|
||||
private getStringValue(context: FieldMenuItemContext): string {
|
||||
const value = this.configuration.getConfigurationByPath(context.path.join('.'));
|
||||
if (!value) {
|
||||
return "";
|
||||
}
|
||||
|
||||
if (typeof value !== 'string') {
|
||||
throw new TypeError(`Value of type ${typeof value} can't be used for a string value!`)
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
private getStringBuilder(context: FieldMenuItemContext): TextInputBuilder {
|
||||
return new TextInputBuilder()
|
||||
.setStyle(TextInputStyle.Short)
|
||||
}
|
||||
|
||||
private setValue(value: FieldMenuItemSaveValue[]|string, context: FieldMenuItemContext): void {
|
||||
const savedValue = typeof value !== 'string' ?
|
||||
value.join('; ') :
|
||||
value;
|
||||
|
||||
this.configuration.saveConfiguration(context.path.join('.'), savedValue);
|
||||
}
|
||||
}
|
||||
|
|
@ -15,6 +15,9 @@ export class GroupConfigurationHandler {
|
|||
locale: new Intl.Locale('en-GB'),
|
||||
permissions: {
|
||||
allowMemberManagingPlaydates: false
|
||||
},
|
||||
calendar: {
|
||||
title: null
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ export enum TransformerType {
|
|||
Locale,
|
||||
Channel,
|
||||
PermissionBoolean,
|
||||
String
|
||||
}
|
||||
|
||||
type GroupConfigurationTransformer = {
|
||||
|
|
@ -15,7 +16,7 @@ type GroupConfigurationTransformer = {
|
|||
}
|
||||
|
||||
export type GroupConfigurationResult =
|
||||
ChannelId | Intl.Locale | boolean
|
||||
ChannelId | Intl.Locale | boolean | string
|
||||
|
||||
export class GroupConfigurationTransformers {
|
||||
static TRANSFORMERS: GroupConfigurationTransformer[] = [
|
||||
|
|
@ -34,6 +35,10 @@ export class GroupConfigurationTransformers {
|
|||
{
|
||||
path: ['permissions', 'allowMemberManagingPlaydates'],
|
||||
type: TransformerType.PermissionBoolean
|
||||
},
|
||||
{
|
||||
path: ['calendar', 'title'],
|
||||
type: TransformerType.String
|
||||
}
|
||||
];
|
||||
|
||||
|
|
@ -50,6 +55,8 @@ export class GroupConfigurationTransformers {
|
|||
return <ChannelId>configValue.value;
|
||||
case TransformerType.PermissionBoolean:
|
||||
return configValue.value === '1';
|
||||
case TransformerType.String:
|
||||
return configValue.value;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
7
source/Groups/RuntimeGroupConfiguration.d.ts
vendored
7
source/Groups/RuntimeGroupConfiguration.d.ts
vendored
|
|
@ -4,7 +4,8 @@ import {Nullable} from "../types/Nullable";
|
|||
export type RuntimeGroupConfiguration = {
|
||||
channels: Nullable<ChannelRuntimeGroupConfiguration>,
|
||||
locale: Intl.Locale,
|
||||
permissions: PermissionRuntimeGroupConfiguration
|
||||
permissions: PermissionRuntimeGroupConfiguration,
|
||||
calendar: CalendarRuntimeGroupConfiguration
|
||||
};
|
||||
|
||||
export type ChannelRuntimeGroupConfiguration = {
|
||||
|
|
@ -14,4 +15,8 @@ export type ChannelRuntimeGroupConfiguration = {
|
|||
|
||||
export type PermissionRuntimeGroupConfiguration = {
|
||||
allowMemberManagingPlaydates: boolean
|
||||
}
|
||||
|
||||
export type CalendarRuntimeGroupConfiguration = {
|
||||
title: null|string
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue