diff --git a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabDetails.tsx b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabDetails.tsx index 2a683dc7..0d45d55d 100644 --- a/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabDetails.tsx +++ b/ui/src/views/admin/listForm/edit/form-fields/FormFieldTabDetails.tsx @@ -8,21 +8,31 @@ import { FaSlidersH } from 'react-icons/fa' import { bool, number, object, string } from 'yup' import { dbSourceTypeOptions, listFormAlignmentOptions } from '../options' import EditorOptionsBuilderDialog from '../json-row-operations/EditorOptionsBuilderDialog' +import { isValidJsonText } from '../json-row-operations/editor-options/jsonUtils' import { FormFieldEditProps } from './FormFields' import { tooltipFormatListOptions } from '@/proxy/admin/list-form/options' const schema = object().shape({ fieldName: string().required().max(100), - captionName: string(), - placeHolder: string(), - bandName: string(), - isActive: bool().required(), - visible: bool().required(), - allowSearch: bool().required(), + captionName: string().nullable(), + placeHolder: string().nullable(), + bandName: string().nullable(), + // Bu alanlar veritabanında null olabiliyor; `required()` bırakıldığında form + // sessizce submit edilmiyor ve "kaydettim ama değişmedi" durumu oluşuyordu. + isActive: bool().nullable(), + visible: bool().nullable(), + allowSearch: bool().nullable(), sourceDbType: number().required(), - alignment: string(), - format: string(), - editorOptions: string(), + // Format listesindeki "None" seçeneği null döndürüyor. + alignment: string().nullable(), + format: string().nullable(), + editorOptions: string() + .nullable() + .test( + 'is-json-object', + 'editorOptions geçerli bir JSON nesnesi olmalıdır.', + (value) => !value?.trim() || isValidJsonText(value), + ), }) function FormFieldTabDetails({ @@ -103,13 +113,18 @@ function FormFieldTabDetails({ - + + {/* Temizlenirse zorunlu alan doğrulaması formu sessizce bloke ediyordu. */} {({ field, form }: FieldProps) => (