Skip to content

Commit b793de7

Browse files
author
Dylan Huang
committed
Refactor page size selection in EvaluationTable component
- Replaced the native select element with a custom Select component for improved styling and consistency. - Updated the page size selection logic to maintain functionality while enhancing the user interface.
1 parent d522d3e commit b793de7

2 files changed

Lines changed: 38 additions & 3 deletions

File tree

vite-app/src/components/EvaluationTable.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { useState, useEffect } from "react";
33
import { state } from "../App";
44
import { EvaluationRow } from "./EvaluationRow";
55
import Button from "./Button";
6+
import Select from "./Select";
67

78
const TableBody = observer(
89
({ currentPage, pageSize }: { currentPage: number; pageSize: number }) => {
@@ -58,16 +59,16 @@ export const EvaluationTable = observer(() => {
5859
</div>
5960
<div className="flex items-center gap-2">
6061
<label className="text-xs text-gray-600">Page size:</label>
61-
<select
62+
<Select
6263
value={pageSize}
6364
onChange={(e) => handlePageSizeChange(Number(e.target.value))}
64-
className="text-xs border border-gray-300 rounded px-2 py-1 bg-white"
65+
size="sm"
6566
>
6667
<option value={25}>25</option>
6768
<option value={50}>50</option>
6869
<option value={100}>100</option>
6970
<option value={200}>200</option>
70-
</select>
71+
</Select>
7172
</div>
7273
</div>
7374
<div className="flex items-center gap-2">

vite-app/src/components/Select.tsx

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import React from "react";
2+
3+
interface SelectProps
4+
extends Omit<React.SelectHTMLAttributes<HTMLSelectElement>, "size"> {
5+
size?: "sm" | "md";
6+
className?: string;
7+
}
8+
9+
const Select = React.forwardRef<HTMLSelectElement, SelectProps>(
10+
({ className = "", size = "sm", children, ...props }, ref) => {
11+
const baseClasses =
12+
"border text-xs font-medium focus:outline-none bg-white text-gray-700 border-gray-300 hover:border-gray-400 focus:border-gray-500";
13+
14+
const sizeClasses = {
15+
sm: "px-2 py-0.5",
16+
md: "px-3 py-1",
17+
};
18+
19+
return (
20+
<select
21+
ref={ref}
22+
className={`${baseClasses} ${sizeClasses[size]} ${className}`}
23+
style={{ boxShadow: "none" }}
24+
{...props}
25+
>
26+
{children}
27+
</select>
28+
);
29+
}
30+
);
31+
32+
Select.displayName = "Select";
33+
34+
export default Select;

0 commit comments

Comments
 (0)