web/settings: allow editing string fields

This commit is contained in:
Tulir Asokan 2024-12-02 16:44:48 +02:00
parent 68385fef5d
commit 09a586df3e
2 changed files with 41 additions and 2 deletions

View file

@ -14,8 +14,23 @@ div.settings-view {
table { table {
text-align: left; text-align: left;
tr {
height: 2.5rem;
}
div.preference { div.preference {
display: flex; display: flex;
&.select-preference > select {
padding: .25rem;
}
&.string-preference > input {
border: 1px solid var(--border-color);
padding: .25rem;
/* TODO make this less hacky */
width: 8rem;
}
} }
} }

View file

@ -54,6 +54,16 @@ const BooleanPreferenceCell = ({ context, name, setPref, value, inheritedValue }
</div> </div>
} }
const TextPreferenceCell = ({ context, name, setPref, value, inheritedValue }: PreferenceCellProps<string>) => {
const onChange = useCallback((evt: React.ChangeEvent<HTMLInputElement>) => {
setPref(context, name, evt.target.value)
}, [setPref, context, name])
return <div className="preference string-preference">
<input value={value ?? inheritedValue} onChange={onChange}/>
{useRemover(context, setPref, name, value)}
</div>
}
const SelectPreferenceCell = ({ context, name, pref, setPref, value, inheritedValue }: PreferenceCellProps<string>) => { const SelectPreferenceCell = ({ context, name, pref, setPref, value, inheritedValue }: PreferenceCellProps<string>) => {
const onChange = useCallback((evt: React.ChangeEvent<HTMLSelectElement>) => { const onChange = useCallback((evt: React.ChangeEvent<HTMLSelectElement>) => {
setPref(context, name, evt.target.value) setPref(context, name, evt.target.value)
@ -83,11 +93,16 @@ interface PreferenceRowProps {
roomLocal?: PreferenceValueType roomLocal?: PreferenceValueType
} }
const customUIPrefs = new Set([
"custom_css",
"custom_notification_sound",
] as (keyof Preferences)[])
const PreferenceRow = ({ const PreferenceRow = ({
name, pref, setPref, globalServer, globalLocal, roomServer, roomLocal, name, pref, setPref, globalServer, globalLocal, roomServer, roomLocal,
}: PreferenceRowProps) => { }: PreferenceRowProps) => {
const prefType = typeof pref.defaultValue const prefType = typeof pref.defaultValue
if (prefType !== "boolean" && !pref.allowedValues) { if (customUIPrefs.has(name)) {
return null return null
} }
const makeContentCell = ( const makeContentCell = (
@ -104,7 +119,7 @@ const PreferenceRow = ({
value={val as boolean | undefined} value={val as boolean | undefined}
inheritedValue={inheritedVal as boolean} inheritedValue={inheritedVal as boolean}
/> />
} else if (typeof prefType === "string" && pref.allowedValues) { } else if (pref.allowedValues) {
return <SelectPreferenceCell return <SelectPreferenceCell
name={name} name={name}
setPref={setPref} setPref={setPref}
@ -113,6 +128,15 @@ const PreferenceRow = ({
value={val as string | undefined} value={val as string | undefined}
inheritedValue={inheritedVal as string} inheritedValue={inheritedVal as string}
/> />
} else if (prefType === "string") {
return <TextPreferenceCell
name={name}
setPref={setPref}
context={context}
pref={pref as Preference<string>}
value={val as string | undefined}
inheritedValue={inheritedVal as string}
/>
} else { } else {
return null return null
} }