Made signature of types.stringLiteral() a bit more ergonomic

This commit is contained in:
Aria Minaei 2021-07-06 16:50:43 +02:00
parent deb1ad8793
commit 97ce94d52a
3 changed files with 24 additions and 23 deletions

View file

@ -61,17 +61,17 @@ export interface PropTypeConfig_StringLiteral<T extends string>
extends IBasePropType<T> {
type: 'stringLiteral'
default: T
options: ReadonlyArray<T>
options: Record<T, string>
}
export function stringLiteral<T extends string>(
defaultValue: T,
options: ReadonlyArray<T>,
): PropTypeConfig_StringLiteral<T> {
export function stringLiteral<Opts extends {[key in string]: string}>(
defaultValue: Extract<keyof Opts, string>,
options: Opts,
): PropTypeConfig_StringLiteral<Extract<keyof Opts, string>> {
return {
type: 'stringLiteral',
default: defaultValue,
options: [...options],
options: {...options},
[s]: 'TheatrePropType',
valueType: null as $IntentionalAny,
}

View file

@ -77,9 +77,9 @@ const StringLiteralPropEditor: React.FC<{
{stuff.controlIndicators}
<Body>
<select value={stuff.value} onChange={onChange}>
{propConfig.options.map((opt, i) => (
<option key={'option-' + i} value={opt}>
{opt}
{Object.keys(propConfig.options).map((key, i) => (
<option key={'option-' + i} value={key}>
{propConfig.options[key]}
</option>
))}
</select>