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 {
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 {
display: flex;
flex-direction: row;
align-items: center;
margin: 4px 2px;
}
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
.settings-view .setting:first-of-type label {
margin-top: 2px;
}
.settings-view .setting:last-of-type label {
margin-bottom: 2px;
cursor: pointer;
}
.settings-view .setting input {
margin-right: 5px;
flex-shrink: 0;
}

View file

@ -18,22 +18,32 @@ import * as React from 'react';
import './settingsView.css';
export type Setting<T> = {
value: T,
set: (value: T) => void,
title: string
value: T;
set: (value: T) => void;
name: string;
title?: string;
};
export const SettingsView: React.FunctionComponent<{
settings: Setting<boolean>[],
settings: Setting<boolean>[];
}> = ({ settings }) => {
return <div className='vbox settings-view'>
{settings.map(({ value, set, title }) => {
return <div key={title} className='setting'>
<label>
<input type='checkbox' checked={value} onChange={() => set(!value)}/>
{title}
</label>
</div>;
})}
</div>;
return (
<div className='vbox settings-view'>
{settings.map(({ value, set, name, title }) => {
const labelId = `setting-${name}`;
return (
<div key={name} className='setting' title={title}>
<input
type='checkbox'
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>
</Toolbar>
{testingOptionsVisible && <SettingsView settings={[
{ value: singleWorker, set: setSingleWorker, title: 'Single worker' },
{ value: showBrowser, set: setShowBrowser, title: 'Show browser' },
{ value: updateSnapshots, set: setUpdateSnapshots, title: 'Update snapshots' },
{ value: singleWorker, set: setSingleWorker, name: 'Single worker' },
{ value: showBrowser, set: setShowBrowser, name: 'Show browser' },
{ value: updateSnapshots, set: setUpdateSnapshots, name: 'Update snapshots' },
]} />}
</>}
<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>
</Toolbar>
{settingsVisible && <SettingsView settings={[
{ value: darkMode, set: setDarkMode, title: 'Dark mode' },
{ value: darkMode, set: setDarkMode, name: 'Dark mode' },
]} />}
</div>
}