Skip to content

Commit e5144e5

Browse files
committed
refactor(web-ts-results): improve adaptability
1 parent 72f2801 commit e5144e5

File tree

11 files changed

+157
-98
lines changed

11 files changed

+157
-98
lines changed

webdriver-ts-results/src/App.css

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,34 @@ select {
2929
background-color: #fafafa;
3030
border-top: 1px solid var(--border-color);
3131
border-bottom: 1px solid var(--border-color);
32+
padding: 20px 0;
33+
flex-direction: column;
34+
display: flex;
35+
gap: 10px;
36+
}
37+
.select-bar__dropdowns {
38+
display: flex;
39+
flex-direction: row;
40+
gap: 1rem;
41+
}
42+
43+
@media screen and (width>=640px) {
44+
.select-bar {
45+
flex-direction: unset;
46+
align-items: center;
47+
}
3248
}
49+
@media screen and (width>=768px) {
50+
.select-bar {
51+
align-items: center;
52+
}
53+
}
54+
3355
select {
3456
border: 1px solid var(--border-color);
3557
border-radius: 4px;
3658
height: 29px;
37-
background: #fff;
59+
background: white;
3860
}
3961

4062
input + label {
@@ -157,13 +179,6 @@ dd {
157179
border: 1px solid #888;
158180
}
159181

160-
.header-row {
161-
margin: 20px 0;
162-
display: flex;
163-
align-items: center;
164-
gap: 10px;
165-
}
166-
167182
.error {
168183
background-color: #f99;
169184
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
.copy-paste-panel {
2+
display: flex;
3+
align-items: center;
4+
gap: 0.75rem;
5+
}

webdriver-ts-results/src/components/selection/CopyPasteSelection.tsx

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { useEffect } from "react";
44
import { useRootStore } from "../../reducer";
55
import PasteIcon from "../../assets/icons/PasteIcon";
66
import CopyIcon from "../../assets/icons/CopyIcon";
7+
import "./CopyPasteSelection.css";
78

89
const CopyPasteSelection = () => {
910
console.log("CopyPasteSelection");
@@ -80,22 +81,24 @@ const CopyPasteSelection = () => {
8081

8182
return (
8283
<>
83-
<p>Copy/paste current selection</p>
84-
<div>
85-
<button
86-
className="button__icon"
87-
onClick={copy}
88-
aria-label="Copy selected frameworks and benchmarks"
89-
>
90-
<CopyIcon></CopyIcon>
91-
</button>
92-
<button
93-
className="button__icon"
94-
onClick={handlePasteFromClipboard}
95-
aria-label="Paste selected items (or use ctrl/cmd + v for firefox)"
96-
>
97-
<PasteIcon></PasteIcon>
98-
</button>
84+
<div className="copy-paste-panel">
85+
<p>Copy/paste current selection</p>
86+
<div>
87+
<button
88+
className="button__icon"
89+
onClick={copy}
90+
aria-label="Copy selected frameworks and benchmarks"
91+
>
92+
<CopyIcon></CopyIcon>
93+
</button>
94+
<button
95+
className="button__icon"
96+
onClick={handlePasteFromClipboard}
97+
aria-label="Paste selected items (or use ctrl/cmd + v for firefox)"
98+
>
99+
<PasteIcon></PasteIcon>
100+
</button>
101+
</div>
99102
</div>
100103
</>
101104
);
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import React from "react";
2+
import { DisplayMode } from "../../../Common";
3+
4+
interface Props {
5+
displayMode: DisplayMode;
6+
onChange: (value: DisplayMode) => void;
7+
}
8+
9+
const DisplayModeSelector = ({ displayMode, onChange }: Props) => {
10+
return (
11+
<>
12+
<div className="mode-selector">
13+
<label htmlFor="displayMode">Display mode:</label>
14+
<select
15+
id="displayMode"
16+
className="mode-selector__select"
17+
value={displayMode}
18+
aria-label="Select display mode"
19+
onChange={(evt) => onChange(Number(evt.target.value) as DisplayMode)}
20+
>
21+
<option value={DisplayMode.DisplayMean}>mean results</option>
22+
<option value={DisplayMode.DisplayMedian}>median results</option>
23+
<option value={DisplayMode.BoxPlot}>box plot</option>
24+
</select>
25+
</div>
26+
</>
27+
);
28+
};
29+
30+
export default DisplayModeSelector;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import React from "react";
2+
import { CpuDurationMode } from "../../../Common";
3+
4+
interface Props {
5+
cpuDurationMode: CpuDurationMode;
6+
onChange: (value: CpuDurationMode) => void;
7+
}
8+
9+
const DurationModeSelector = ({ cpuDurationMode, onChange }: Props) => {
10+
return (
11+
<>
12+
<div className="mode-selector">
13+
<label htmlFor="durationMode">
14+
(Experimental) Duration measurement mode:
15+
</label>
16+
<select
17+
id="durationMode"
18+
className="mode-selector__select"
19+
value={cpuDurationMode}
20+
aria-label="Select CPU duration mode"
21+
onChange={(evt) => onChange(evt.target.value as CpuDurationMode)}
22+
>
23+
<option value={CpuDurationMode.Total}>total duration</option>
24+
<option value={CpuDurationMode.Script}>only JS duration</option>
25+
</select>
26+
</div>
27+
</>
28+
);
29+
};
30+
31+
export default DurationModeSelector;
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
.mode-selector {
2+
display: flex;
3+
flex-direction: column;
4+
gap: 0.5rem;
5+
}
6+
.mode-selector__select {
7+
width: fit-content;
8+
}
9+
10+
@media screen and (width>=425px) {
11+
.mode-selector {
12+
flex-direction: row;
13+
align-items: center;
14+
}
15+
}
16+
@media screen and (width>=640px) {
17+
.mode-selector {
18+
align-items: unset;
19+
}
20+
}
21+
@media screen and (640px <= width <= 768px) {
22+
.mode-selector {
23+
flex-direction: column;
24+
}
25+
}
26+
@media screen and (width>= 768px) {
27+
.mode-selector {
28+
align-items: center;
29+
}
30+
}

webdriver-ts-results/src/components/selection/ModeSelector/index.tsx renamed to webdriver-ts-results/src/components/selection/ModeSelectionPanel/index.tsx

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ import React from "react";
22
import { useRootStore } from "../../../reducer";
33
import DisplayModeSelector from "./DisplayModeSelector";
44
import DurationModeSelector from "./DurationModeSelector";
5+
import "./ModeSelectionPanel.css";
56

67
interface Props {
78
showDurationSelection: boolean;
89
}
910

10-
const ModeSelector = ({ showDurationSelection }: Props) => {
11+
const ModeSelecionPanel = ({ showDurationSelection }: Props) => {
1112
console.log("ModeSelector");
1213

1314
const displayMode = useRootStore((state) => state.displayMode);
@@ -19,19 +20,21 @@ const ModeSelector = ({ showDurationSelection }: Props) => {
1920

2021
return (
2122
<>
22-
<DisplayModeSelector
23-
displayMode={displayMode}
24-
onChange={(value) => selectDisplayMode(value)}
25-
/>
26-
27-
{showDurationSelection && (
28-
<DurationModeSelector
29-
cpuDurationMode={cpuDurationMode}
30-
onChange={(value) => selectCpuDurationMode(value)}
23+
<div className="mode-selection-panel">
24+
<DisplayModeSelector
25+
displayMode={displayMode}
26+
onChange={(value) => selectDisplayMode(value)}
3127
/>
32-
)}
28+
29+
{showDurationSelection ? (
30+
<DurationModeSelector
31+
cpuDurationMode={cpuDurationMode}
32+
onChange={(value) => selectCpuDurationMode(value)}
33+
/>
34+
) : null}
35+
</div>
3336
</>
3437
);
3538
};
3639

37-
export default ModeSelector;
40+
export default ModeSelecionPanel;

webdriver-ts-results/src/components/selection/ModeSelector/DisplayModeSelector.tsx

Lines changed: 0 additions & 28 deletions
This file was deleted.

webdriver-ts-results/src/components/selection/ModeSelector/DurationModeSelector.tsx

Lines changed: 0 additions & 29 deletions
This file was deleted.
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React from "react";
22
import BenchmarkSelector from "./BenchmarkSelector";
33
import FrameworkSelector from "./FrameworkSelector";
4-
import ModeSelector from "./ModeSelector";
4+
import ModeSelecionPanel from "./ModeSelectionPanel";
55
import CopyPasteSelection from "./CopyPasteSelection";
66

77
interface Props {
@@ -13,12 +13,12 @@ export const SelectionBar = ({ showDurationSelection }: Props) => {
1313

1414
return (
1515
<div className="select-bar">
16-
<div className="header-row">
16+
<div className="select-bar__dropdowns">
1717
<FrameworkSelector />
1818
<BenchmarkSelector />
19-
<ModeSelector showDurationSelection={showDurationSelection} />
20-
<CopyPasteSelection />
2119
</div>
20+
<ModeSelecionPanel showDurationSelection={showDurationSelection} />
21+
<CopyPasteSelection />
2222
</div>
2323
);
2424
};

0 commit comments

Comments
 (0)