chore(ui): Clean up settings component for shared uses (#34090)

This commit is contained in:
Adam Gastineau 2024-12-19 12:14:58 -08:00 committed by GitHub
parent 613f6c5f95
commit 7d3a188530
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 41 additions and 30 deletions

View file

@ -16,24 +16,25 @@
.settings-view { .settings-view {
flex: none; flex: none;
margin-top: 4px; padding: 4px 0px;
row-gap: 8px;
user-select: none;
}
.settings-view .setting {
display: flex;
align-items: center;
} }
.settings-view .setting label { .settings-view .setting label {
display: flex; text-overflow: ellipsis;
flex-direction: row; white-space: nowrap;
align-items: center; overflow: hidden;
margin: 4px 2px;
}
.settings-view .setting:first-of-type label { cursor: pointer;
margin-top: 2px;
}
.settings-view .setting:last-of-type label {
margin-bottom: 2px;
} }
.settings-view .setting input { .settings-view .setting input {
margin-right: 5px; margin-right: 5px;
flex-shrink: 0;
} }

View file

@ -18,22 +18,32 @@ import * as React from 'react';
import './settingsView.css'; import './settingsView.css';
export type Setting<T> = { export type Setting<T> = {
value: T, value: T;
set: (value: T) => void, set: (value: T) => void;
title: string name: string;
title?: string;
}; };
export const SettingsView: React.FunctionComponent<{ export const SettingsView: React.FunctionComponent<{
settings: Setting<boolean>[], settings: Setting<boolean>[];
}> = ({ settings }) => { }> = ({ settings }) => {
return <div className='vbox settings-view'> return (
{settings.map(({ value, set, title }) => { <div className='vbox settings-view'>
return <div key={title} className='setting'> {settings.map(({ value, set, name, title }) => {
<label> const labelId = `setting-${name}`;
<input type='checkbox' checked={value} onChange={() => set(!value)}/>
{title} return (
</label> <div key={name} className='setting' title={title}>
</div>; <input
})} type='checkbox'
</div>; id={labelId}
checked={value}
onChange={() => set(!value)}
/>
<label htmlFor={labelId}>{name}</label>
</div>
);
})}
</div>
);
}; };

View file

@ -508,9 +508,9 @@ export const UIModeView: React.FC<{}> = ({
<div className='section-title'>Testing Options</div> <div className='section-title'>Testing Options</div>
</Toolbar> </Toolbar>
{testingOptionsVisible && <SettingsView settings={[ {testingOptionsVisible && <SettingsView settings={[
{ value: singleWorker, set: setSingleWorker, title: 'Single worker' }, { value: singleWorker, set: setSingleWorker, name: 'Single worker' },
{ value: showBrowser, set: setShowBrowser, title: 'Show browser' }, { value: showBrowser, set: setShowBrowser, name: 'Show browser' },
{ value: updateSnapshots, set: setUpdateSnapshots, title: 'Update snapshots' }, { value: updateSnapshots, set: setUpdateSnapshots, name: 'Update snapshots' },
]} />} ]} />}
</>} </>}
<Toolbar noShadow={true} noMinHeight={true} className='settings-toolbar' onClick={() => setSettingsVisible(!settingsVisible)}> <Toolbar noShadow={true} noMinHeight={true} className='settings-toolbar' onClick={() => setSettingsVisible(!settingsVisible)}>
@ -522,7 +522,7 @@ export const UIModeView: React.FC<{}> = ({
<div className='section-title'>Settings</div> <div className='section-title'>Settings</div>
</Toolbar> </Toolbar>
{settingsVisible && <SettingsView settings={[ {settingsVisible && <SettingsView settings={[
{ value: darkMode, set: setDarkMode, title: 'Dark mode' }, { value: darkMode, set: setDarkMode, name: 'Dark mode' },
]} />} ]} />}
</div> </div>
} }