chore(ui): Clean up settings component for shared uses (#34090)
This commit is contained in:
parent
613f6c5f95
commit
7d3a188530
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue