Bin
2025-12-16 9e0b2ba2c317b1a86212f24cbae3195ad1f3dbfa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import { z } from "zod";
import type { FieldDefinition } from "./types/common";
import { getProviderConfig } from "./providers";
import { assembleSchema } from "./types/provider";
 
// Step validation schemas
export const step1Schema = z.object({
  provider: z.string().min(1, "Please select a storage provider"),
});
 
// Helper function to get provider-specific schema
export const getProviderSchema = (provider: string, isEditMode = false, target?: "import" | "export") => {
  const providerConfig = getProviderConfig(provider);
  if (!providerConfig) {
    return z.object({}); // Empty schema for unknown providers
  }
 
  // Combine provider-specific fields with common fields like title
  const commonFields: FieldDefinition[] = [
    {
      name: "title",
      type: "text",
      label: "Storage Title",
      required: true,
      schema: z.string().min(1, "Storage title is required"),
    },
  ];
 
  // Add export-specific common fields
  const exportFields: FieldDefinition[] =
    target === "export"
      ? [
          {
            name: "can_delete_objects",
            type: "toggle",
            label: "Can delete objects from storage",
            description: "If unchecked, annotations will not be deleted from storage",
            schema: z.boolean().default(false),
          },
        ]
      : [];
 
  // Filter out message fields and combine with common fields
  const providerFields = providerConfig.fields.filter(
    (field): field is FieldDefinition => "type" in field && field.type !== "message",
  );
 
  // Filter fields based on target if specified
  const filteredProviderFields = target
    ? providerFields.filter((field) => !field.target || field.target === target)
    : providerFields;
 
  const allFields = [...commonFields, ...exportFields, ...filteredProviderFields];
  return assembleSchema(allFields, isEditMode);
};
 
// Helper function to format validation errors in human-friendly format
export const formatValidationErrors = (zodError: z.ZodError): Record<string, string> => {
  const errors: Record<string, string> = {};
 
  zodError.issues.forEach((issue) => {
    const fieldName = issue.path.join(".");
    if (fieldName) {
      errors[fieldName] = issue.message;
    }
  });
 
  return errors;
};