feat(05-01): enrich BACKEND_REGISTRY and update all consumers

- Change BACKEND_REGISTRY shape from Record<BackendType, FieldDef[]> to
  Record<BackendType, { displayName, description, fields: FieldDef[] }>
- Add displayName and description to azureblob, s3, s3-compatible entries
- Update schemas/index.ts buildZodSchema to use .fields access
- Update RemoteConfigStep.tsx two .fields accesses (azureblob.find + map)
This commit is contained in:
2026-03-30 09:37:16 +02:00
parent 7ec45896e5
commit d495552b60
3 changed files with 112 additions and 96 deletions
+2 -2
View File
@@ -55,7 +55,7 @@ export function RemoteConfigStep() {
<>
{/* Account field via FieldRenderer */}
<FieldRenderer
field={BACKEND_REGISTRY.azureblob.find(f => f.key === 'account')!}
field={BACKEND_REGISTRY.azureblob.fields.find(f => f.key === 'account')!}
register={register}
error={errors.account as FieldError | undefined}
/>
@@ -70,7 +70,7 @@ export function RemoteConfigStep() {
</>
) : (
/* S3 and S3-compatible: full registry loop — FieldRenderer handles provider hiding */
BACKEND_REGISTRY[backendType].map(field => (
BACKEND_REGISTRY[backendType].fields.map(field => (
<FieldRenderer
key={field.key}
field={field}
+1 -1
View File
@@ -7,7 +7,7 @@ import { z } from 'zod';
import { BACKEND_REGISTRY, BackendType } from './registry';
function buildZodSchema(backendType: BackendType): z.ZodObject<Record<string, z.ZodTypeAny>> {
const fields = BACKEND_REGISTRY[backendType];
const fields = BACKEND_REGISTRY[backendType].fields;
const shape: Record<string, z.ZodTypeAny> = {};
for (const field of fields) {
shape[field.key] = field.required
+20 -4
View File
@@ -16,8 +16,15 @@ export interface FieldDef {
options?: { value: string; label: string }[]; // for inputType: 'select'
}
export const BACKEND_REGISTRY: Record<BackendType, FieldDef[]> = {
azureblob: [
export const BACKEND_REGISTRY: Record<BackendType, {
displayName: string;
description: string;
fields: FieldDef[];
}> = {
azureblob: {
displayName: 'Azure Blob Storage',
description: 'Microsoft Azure cloud storage',
fields: [
{
key: 'account',
label: 'Storage Account Name',
@@ -42,7 +49,11 @@ export const BACKEND_REGISTRY: Record<BackendType, FieldDef[]> = {
helpText: 'Full SAS URL including account and container. Provide either this or an access key, not both.',
},
],
s3: [
},
s3: {
displayName: 'Amazon S3',
description: 'AWS Simple Storage Service',
fields: [
{
key: 'provider',
label: 'Provider',
@@ -71,7 +82,11 @@ export const BACKEND_REGISTRY: Record<BackendType, FieldDef[]> = {
placeholder: 'us-east-1',
},
],
's3-compatible': [
},
's3-compatible': {
displayName: 'S3-Compatible',
description: 'Wasabi, MinIO, Cloudflare R2, and others',
fields: [
{
key: 'provider',
label: 'Provider',
@@ -109,4 +124,5 @@ export const BACKEND_REGISTRY: Record<BackendType, FieldDef[]> = {
helpText: 'Optional for most S3-compatible providers',
},
],
},
};