Skip to content

Commit fffc8fa

Browse files
authored
Add type badges to ConfigField component (#52)
* Add type badges to ConfigField component for better field type visibility * Add configuration option counts for each database type in DatabaseConfigApp * Update type badges in ConfigField component for improved visibility * Update ConfigField interface to include 'integer' type and adjust related descriptions in MySQL configuration * Update config forms to handle 'integer' type in value processing * Update Kafka configuration fields to use 'integer' type for numeric values * Update MongoDB configuration fields to use 'integer' type for numeric values * Update OpenSearch configuration fields to use 'integer' type for numeric values * Update configuration fields to use 'integer' type for numeric values across all services * Update Redis configuration fields to use 'integer' type for numeric values
1 parent 5c79e58 commit fffc8fa

14 files changed

+252
-191
lines changed

src/components/ConfigField.tsx

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,33 @@ const ConfigField = ({ name, field, onChange, value }: ConfigFieldProps) => {
3030
return (
3131
<div className="p-4 bg-white rounded-lg border border-gray-200">
3232
<div className="space-y-2">
33-
<label className="block font-medium text-lg text-black" htmlFor={name}>
34-
{name.replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase())}
35-
</label>
33+
<div className="flex items-center space-x-2">
34+
<label className="block font-medium text-lg text-black" htmlFor={name}>
35+
{name.replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase())}
36+
</label>
37+
38+
{/* Type badge */}
39+
<div className="inline-flex items-center">
40+
{field.type === 'boolean' && (
41+
<span className="px-2 py-1 text-xs rounded bg-purple-100 text-purple-800 font-medium">boolean</span>
42+
)}
43+
{field.type === 'integer' && (
44+
<span className="px-2 py-1 text-xs rounded bg-green-100 text-green-800 font-medium">integer</span>
45+
)}
46+
{field.type === 'number' && (
47+
<span className="px-2 py-1 text-xs rounded bg-blue-100 text-blue-800 font-medium">number</span>
48+
)}
49+
{(field.type === 'string' || field.type === 'text') && (
50+
<span className="px-2 py-1 text-xs rounded bg-yellow-100 text-yellow-800 font-medium">string</span>
51+
)}
52+
{field.type === 'select' && (
53+
<span className="px-2 py-1 text-xs rounded bg-yellow-100 text-yellow-800 font-medium">string</span>
54+
)}
55+
{field.type === 'checkbox' && (
56+
<span className="px-2 py-1 text-xs rounded bg-purple-100 text-purple-800 font-medium">boolean</span>
57+
)}
58+
</div>
59+
</div>
3660

3761
{field.type === 'select' ? (
3862
<select

src/components/DatabaseConfigApp.tsx

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,25 @@ import RedisConfigForm from './forms/RedisConfigForm';
55
import MongoConfigForm from './forms/MongoConfigForm';
66
import KafkaConfigForm from './forms/KafkaConfigForm';
77
import OpenSearchConfigForm from './forms/OpenSearchConfigForm';
8+
import {
9+
mysqlConfigFields,
10+
postgresConfigFields,
11+
redisConfigFields,
12+
mongoConfigFields,
13+
kafkaConfigFields,
14+
openSearchConfigFields
15+
} from '../config';
16+
17+
// Calculate configuration option counts for each database type
18+
const configCounts = {
19+
mysql: Object.keys(mysqlConfigFields).length,
20+
postgres: Object.values(postgresConfigFields).reduce((count, section) =>
21+
count + Object.keys(section.fields).length, 0),
22+
redis: Object.keys(redisConfigFields).length,
23+
mongodb: Object.keys(mongoConfigFields).length,
24+
kafka: Object.keys(kafkaConfigFields).length,
25+
opensearch: Object.keys(openSearchConfigFields).length
26+
};
827

928
const DatabaseConfigApp = () => {
1029
const [activeTab, setActiveTab] = useState('mysql');
@@ -19,6 +38,11 @@ const DatabaseConfigApp = () => {
1938
{ id: 'opensearch', name: 'OpenSearch' }
2039
];
2140

41+
const getFormattedDatabaseName = () => {
42+
const tab = tabs.find(tab => tab.id === activeTab);
43+
return tab ? tab.name : activeTab.charAt(0).toUpperCase() + activeTab.slice(1);
44+
};
45+
2246
return (
2347
<div className="min-h-screen bg-gray-50 text-black p-6">
2448
<div className="max-w-7xl mx-auto space-y-6">
@@ -71,6 +95,18 @@ const DatabaseConfigApp = () => {
7195
</div>
7296

7397
<div className="p-6">
98+
{/* Configuration options heading with count */}
99+
<div className="mb-8">
100+
<div className="flex items-center mb-6">
101+
<h2 className="text-xl font-semibold text-gray-800">
102+
{getFormattedDatabaseName()} Configuration Options
103+
</h2>
104+
<div className="ml-4 px-3 py-1 bg-blue-100 text-blue-800 text-xs font-medium rounded-full">
105+
{configCounts[activeTab]} options
106+
</div>
107+
</div>
108+
</div>
109+
74110
{activeTab === 'mysql' && (
75111
<MySQLConfigForm
76112
databaseId={databaseId}

src/components/forms/KafkaConfigForm.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const KafkaConfigForm = ({ databaseId, onDatabaseIdChange }: KafkaConfigFormProp
2020
setConfig(newConfig);
2121
} else {
2222
const field = kafkaConfigFields[name as keyof typeof kafkaConfigFields];
23-
const processedValue = field.type === 'number' ? Number(value) : value;
23+
const processedValue = (field.type === 'number' || field.type === 'integer') ? Number(value) : value;
2424
setConfig((prev: KafkaConfig) => ({
2525
...prev,
2626
[name]: processedValue

src/components/forms/MongoConfigForm.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const MongoConfigForm = ({ databaseId, onDatabaseIdChange }: MongoConfigFormProp
2020
setConfig(newConfig);
2121
} else {
2222
const field = mongoConfigFields[name as keyof typeof mongoConfigFields];
23-
const processedValue = field.type === 'number' ? Number(value) : value;
23+
const processedValue = (field.type === 'number' || field.type === 'integer') ? Number(value) : value;
2424
setConfig((prev: MongoConfig) => ({
2525
...prev,
2626
[name]: processedValue

src/components/forms/MySQLConfigForm.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const MySQLConfigForm = ({ databaseId, onDatabaseIdChange }: MySQLConfigFormProp
2020
} else {
2121
// Convert string values to numbers for numeric fields
2222
const field = mysqlConfigFields[name as keyof typeof mysqlConfigFields];
23-
const processedValue = field.type === 'number' ? Number(value) : value;
23+
const processedValue = (field.type === 'number' || field.type === 'integer') ? Number(value) : value;
2424
setConfig(prev => ({
2525
...prev,
2626
[name]: processedValue

src/components/forms/OpenSearchConfigForm.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const OpenSearchConfigForm = ({ databaseId, onDatabaseIdChange }: OpenSearchConf
2020
setConfig(newConfig);
2121
} else {
2222
const field = openSearchConfigFields[name as keyof typeof openSearchConfigFields];
23-
const processedValue = field.type === 'number' ? Number(value) : value;
23+
const processedValue = (field.type === 'number' || field.type === 'integer') ? Number(value) : value;
2424
setConfig((prev: OpenSearchConfig) => ({
2525
...prev,
2626
[name]: processedValue

src/components/forms/PostgreSQLConfigForm.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const PostgreSQLConfigForm = ({ databaseId, onDatabaseIdChange }: PostgreSQLConf
2424
)?.[1];
2525

2626
const field = section?.fields?.[name];
27-
const processedValue = field?.type === 'number' ? Number(value) : value;
27+
const processedValue = (field?.type === 'number' || field?.type === 'integer') ? Number(value) : value;
2828
setConfig(prev => ({
2929
...prev,
3030
[name]: processedValue

src/components/forms/RedisConfigForm.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ const RedisConfigForm = ({ databaseId, onDatabaseIdChange }: RedisConfigFormProp
1919
setConfig(newConfig);
2020
} else {
2121
const field = redisConfigFields[name as keyof typeof redisConfigFields];
22-
const processedValue = field.type === 'number' ? Number(value) : value;
22+
const processedValue = (field.type === 'number' || field.type === 'integer') ? Number(value) : value;
2323
setConfig((prev: RedisConfig) => ({
2424
...prev,
2525
[name]: processedValue

0 commit comments

Comments
 (0)