Repository: open-metadata/OpenMetadata
Pull request #21038: Fix: Input Validation for minimum values for Search Index and Data insights
Author: login: shrushti2000
Labels: name: UI
description: UI specific issues
name: safe to test
description: Add this label to run secure Github workflows on PRs
Created: 2025-04-29T14:37:10Z | Merged: 2025-05-13T04:45:37Z

This PR adds minimum value input field validation for Search Index and Data insights


https://github.com/user-attachments/assets/a71dce5a-02f7-401e-9b1f-353ce0740813

https://github.com/user-attachments/assets/a42a33ab-7ba1-42c3-b321-6bc16c13feaf






<!-- For frontend related change, please add screenshots and/or videos of your changes preview! -->

#
### Type of change:
<!-- You should choose 1 option and delete options that aren't relevant -->
- [ ] Bug fix
- [ ] Improvement
- [ ] New feature
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Documentation

#
### Checklist:
<!-- add an x in [] if done, don't mark items that you didn't do !-->
- [x] I have read the [**CONTRIBUTING**](https://docs.open-metadata.org/developers/contribute) document.
- [ ] My PR title is `Fixes <issue-number>: <short explanation>`
- [ ] I have commented on my code, particularly in hard-to-understand areas. 
- [ ] For JSON Schema changes: I updated the migration scripts or explained why it is not needed.

<!-- Based on the type(s) of your change, uncomment the required checklist 👇 -->

<!-- Bug fix
- [ ] I have added a test that covers the exact scenario we are fixing. For complex issues, comment the issue number in the test for future reference.
-->

<!-- Improvement
- [ ] I have added tests around the new logic.
- [ ] For connector/ingestion changes: I updated the documentation.
-->

<!-- New feature
- [ ] The issue properly describes why the new feature is needed, what's the goal, and how we are building it. Any discussion
    or decision-making process is reflected in the issue.
- [ ] I have updated the documentation.
- [ ] I have added tests around the new logic.
-->

<!-- Breaking change
- [ ] I have added the tag `Backward-Incompatible-Change`.
-->



Diff:
diff --git a/openmetadata-ui/src/main/resources/ui/src/components/NavBar/nav-bar.less b/openmetadata-ui/src/main/resources/ui/src/components/NavBar/nav-bar.less
index 7fffc4a77308..e0df5cf04a60 100644
--- a/openmetadata-ui/src/main/resources/ui/src/components/NavBar/nav-bar.less
+++ b/openmetadata-ui/src/main/resources/ui/src/components/NavBar/nav-bar.less
@@ -119,4 +119,4 @@
      color: @white;
    }
  }
- 
\ No newline at end of file
+ 
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json
index 6b38619bafa4..b47651873434 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/de-de.json
@@ -2148,6 +2148,7 @@
     "user-verified-successfully": "Benutzer erfolgreich verifiziert",
     "valid-url-endpoint": "Endpunkte sollten gültige URLs sein",
     "validation-error-assets": "Bitte überprüfen Sie alle Assets, die hinzugefügt werden.",
+    "value-must-be-greater-than": "{{field}} muss größer als {{minimum}} sein",
     "value-should-equal-to-value": "Der Wert sollte gleich {{value}} sein.",
     "value-should-not-equal-to-value": "Der Wert sollte nicht gleich {{value}} sein.",
     "version-released-try-now": "{{version}} Veröffentlicht <0>Sehen Sie, was es Neues gibt!</0>",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json
index fa9fdbea4399..9c471f5faa1f 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/en-us.json
@@ -2148,6 +2148,7 @@
     "user-verified-successfully": "User Verified Successfully",
     "valid-url-endpoint": "Endpoints should be valid URL",
     "validation-error-assets": "Please examine all your assets that are being added",
+    "value-must-be-greater-than": "{{field}} must be greater than {{minimum}}",
     "value-should-equal-to-value": "The value should be equal to {{value}}.",
     "value-should-not-equal-to-value": "The value should not be equal to {{value}}.",
     "version-released-try-now": "{{version}} Released <0>See What's New!</0>",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/es-es.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/es-es.json
index 1ce4a17e7b5d..b6bd1033df94 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/es-es.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/es-es.json
@@ -2148,6 +2148,7 @@
     "user-verified-successfully": "Usuario verificado con éxito",
     "valid-url-endpoint": "Los terminales deben ser URL válidas",
     "validation-error-assets": "Por favor, examine todos sus activos que se están agregando",
+    "value-must-be-greater-than": "{{field}} debe ser mayor que {{minimum}}",
     "value-should-equal-to-value": "The value should be equal to {{value}}.",
     "value-should-not-equal-to-value": "The value should not be equal to {{value}}.",
     "version-released-try-now": "{{version}} Lanzado <0>¡Mira qué hay de nuevo!</0>",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/fr-fr.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/fr-fr.json
index 094fd6bba4c5..bcd6a728b656 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/fr-fr.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/fr-fr.json
@@ -2148,6 +2148,7 @@
     "user-verified-successfully": "L'utilisateur a été vérifié avec succès",
     "valid-url-endpoint": "Les points de terminaison doivent être une URL valide",
     "validation-error-assets": "Veuillez exmanier tous les actifs qui sont ajoutés",
+    "value-must-be-greater-than": "{{field}} doit être supérieur à {{minimum}}",
     "value-should-equal-to-value": "La valeur devrait être égale à {{value}}.",
     "value-should-not-equal-to-value": "La valeur ne devrait pas être égale à {{value}}.",
     "version-released-try-now": "{{version}} publié essayez maintenant !",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/gl-es.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/gl-es.json
index d329c5a5518b..cf3b5002c9ad 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/gl-es.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/gl-es.json
@@ -2148,6 +2148,7 @@
     "user-verified-successfully": "Usuario verificado correctamente",
     "valid-url-endpoint": "Os endpoints deben ser unha URL válida",
     "validation-error-assets": "Examina todos os teus activos que están sendo engadidos",
+    "value-must-be-greater-than": "{{field}} debe ser maior que {{minimum}}",
     "value-should-equal-to-value": "O valor debe ser igual a {{value}}.",
     "value-should-not-equal-to-value": "O valor non debe ser igual a {{value}}.",
     "version-released-try-now": "{{version}} Lançada <0>Vexa as Novidades!</0>",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json
index 40f64b085cc6..d1be0640dfb1 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/he-he.json
@@ -2148,6 +2148,7 @@
     "user-verified-successfully": "משתמש אומת בהצלחה",
     "valid-url-endpoint": "נקודות קצה צריכות להיות URL תקף",
     "validation-error-assets": "Please examine all your assets that are being added",
+    "value-must-be-greater-than": "{{field}} חייב להיות גדול מ-{{minimum}}",
     "value-should-equal-to-value": "The value should be equal to {{value}}.",
     "value-should-not-equal-to-value": "The value should not be equal to {{value}}.",
     "version-released-try-now": "{{version}} שוחרר <0>ראה מה חדש!</0>",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ja-jp.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ja-jp.json
index 6b9a16e28f8c..ef6417e8401f 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ja-jp.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ja-jp.json
@@ -2148,6 +2148,7 @@
     "user-verified-successfully": "ユーザ認証に成功しました",
     "valid-url-endpoint": "エンドポイントは有効なURLでなければなりません",
     "validation-error-assets": "Please examine all your assets that are being added",
+    "value-must-be-greater-than": "{{field}} は {{minimum}} より大きくなければなりません",
     "value-should-equal-to-value": "The value should be equal to {{value}}.",
     "value-should-not-equal-to-value": "The value should not be equal to {{value}}.",
     "version-released-try-now": "{{version}} Released <0>See What's New!</0>",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ko-kr.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ko-kr.json
index c57c13e8cbfa..d291ff8dde39 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ko-kr.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ko-kr.json
@@ -2148,6 +2148,7 @@
     "user-verified-successfully": "사용자가 성공적으로 확인되었습니다",
     "valid-url-endpoint": "엔드포인트는 유효한 URL이어야 합니다",
     "validation-error-assets": "추가 중인 모든 자산을 검토하세요",
+    "value-must-be-greater-than": "{{field}}는 {{minimum}}보다 커야 합니다",
     "value-should-equal-to-value": "값은 {{value}}와(과) 같아야 합니다.",
     "value-should-not-equal-to-value": "값은 {{value}}와(과) 같지 않아야 합니다.",
     "version-released-try-now": "{{version}} 출시됨 <0>새로운 기능 확인하기!</0>",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json
index 54ba44197f30..b54312c773c1 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/mr-in.json
@@ -2148,6 +2148,7 @@
     "user-verified-successfully": "वापरकर्ता यशस्वीरित्या सत्यापित केला",
     "valid-url-endpoint": "एंडपॉईंट्स वैध URL असावेत",
     "validation-error-assets": "कृपया तुम्ही जोडत असलेल्या सर्व ॲसेट्सची तपासणी करा",
+    "value-must-be-greater-than": "{{field}} {{minimum}} पेक्षा मोठा असावा",
     "value-should-equal-to-value": "मूल्य {{value}} च्या बरोबरीचे असावे.",
     "value-should-not-equal-to-value": "मूल्य {{value}} च्या बरोबरीचे नसावे.",
     "version-released-try-now": "{{version}} रिलीझ झाले <0>नवीन काय आहे ते पहा!</0>",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/nl-nl.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/nl-nl.json
index c5de8efac643..3bc446e357f2 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/nl-nl.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/nl-nl.json
@@ -2148,6 +2148,7 @@
     "user-verified-successfully": "Gebruiker succesvol geverifieerd",
     "valid-url-endpoint": "Eindpunten moeten geldige URL's zijn",
     "validation-error-assets": "Onderzoek al je assets die worden toegevoegd",
+    "value-must-be-greater-than": "{{field}} moet groter zijn dan {{minimum}}",
     "value-should-equal-to-value": "The value should be equal to {{value}}.",
     "value-should-not-equal-to-value": "The value should not be equal to {{value}}.",
     "version-released-try-now": "{{version}} vrijgegeven <0>Zie wat er veranderd is!</0>",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json
index 3530c35db9e6..77c2c5ca5096 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pr-pr.json
@@ -2148,6 +2148,7 @@
     "user-verified-successfully": "کاربر با موفقیت تأیید شد.",
     "valid-url-endpoint": "نقاط پایانی باید URL معتبر باشند.",
     "validation-error-assets": "لطفاً تمام دارایی‌هایی که در حال اضافه کردن آن‌ها هستید را بررسی کنید.",
+    "value-must-be-greater-than": "{{field}} {{minimum}} से अधिक होना चाहिए",
     "value-should-equal-to-value": "مقدار باید برابر با {{value}} باشد.",
     "value-should-not-equal-to-value": "مقدار نباید برابر با {{value}} باشد.",
     "version-released-try-now": "{{version}} منتشر شد <0>مشاهده کنید چه خبر است!</0>",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-br.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-br.json
index 579d348154c9..17c21ed07ef3 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-br.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-br.json
@@ -2148,6 +2148,7 @@
     "user-verified-successfully": "Usuário verificado com sucesso",
     "valid-url-endpoint": "Os endpoints devem ser URLs válidas",
     "validation-error-assets": "Por favor, verifique todos os seus ativos que estão sendo adicionados",
+    "value-must-be-greater-than": "{{field}} deve ser maior que {{minimum}}",
     "value-should-equal-to-value": "O valor deve ser igual a {{value}}.",
     "value-should-not-equal-to-value": "O valor não deve ser igual a {{value}}.",
     "version-released-try-now": "{{version}} Lançada <0>Veja o que há de novo!</0>",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-pt.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-pt.json
index c860e2228073..ae7eff77f981 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-pt.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/pt-pt.json
@@ -2148,6 +2148,7 @@
     "user-verified-successfully": "Utilizador verificado com sucesso",
     "valid-url-endpoint": "Os endpoints devem ser URLs válidas",
     "validation-error-assets": "Por favor, verifique todos os seus ativos que estão sendo adicionados",
+    "value-must-be-greater-than": "{{field}} deve ser superior a {{minimum}}",
     "value-should-equal-to-value": "The value should be equal to {{value}}.",
     "value-should-not-equal-to-value": "The value should not be equal to {{value}}.",
     "version-released-try-now": "{{version}} Lançada <0>Veja o que há de novo!</0>",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json
index 5250084d7717..98076776c459 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/ru-ru.json
@@ -2148,6 +2148,7 @@
     "user-verified-successfully": "Пользователь успешно проверен",
     "valid-url-endpoint": "Конечные точки должны быть действительным URL",
     "validation-error-assets": "Please examine all your assets that are being added",
+    "value-must-be-greater-than": "{{field}} должно быть больше чем {{minimum}}",
     "value-should-equal-to-value": "The value should be equal to {{value}}.",
     "value-should-not-equal-to-value": "The value should not be equal to {{value}}.",
     "version-released-try-now": "Выпущена {{версия}} <0>Посмотрите, что нового!</0>",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/th-th.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/th-th.json
index 7e30bec523c5..d01b359498d9 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/th-th.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/th-th.json
@@ -2148,6 +2148,7 @@
     "user-verified-successfully": "ผู้ใช้ได้รับการตรวจสอบแล้วสำเร็จ",
     "valid-url-endpoint": "จุดสิ้นสุดต้องเป็น URL ที่ถูกต้อง",
     "validation-error-assets": "โปรดตรวจสอบสินทรัพย์ทั้งหมดที่กำลังถูกเพิ่ม",
+    "value-must-be-greater-than": "{{field}} ต้องมากกว่า {{minimum}}",
     "value-should-equal-to-value": "ค่าต้องเท่ากับ {{value}}",
     "value-should-not-equal-to-value": "ค่าต้องไม่เท่ากับ {{value}}",
     "version-released-try-now": "{{version}} ได้ออกแล้ว <0>ดูสิ่งใหม่!</0>",
diff --git a/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-cn.json b/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-cn.json
index 0d02646d98a7..64f68b37a963 100644
--- a/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-cn.json
+++ b/openmetadata-ui/src/main/resources/ui/src/locale/languages/zh-cn.json
@@ -2148,6 +2148,7 @@
     "user-verified-successfully": "用户验证成功",
     "valid-url-endpoint": "端点应该是有效的 URL",
     "validation-error-assets": "请检查您正在添加的全部资产",
+    "value-must-be-greater-than": "{{field}} 必须大于 {{minimum}}",
     "value-should-equal-to-value": "该值应等于{{value}}.",
     "value-should-not-equal-to-value": "该值不应等于{{value}}.",
     "version-released-try-now": "查看新版本 {{version}} 的新特性！",
diff --git a/openmetadata-ui/src/main/resources/ui/src/styles/components/rjsf.less b/openmetadata-ui/src/main/resources/ui/src/styles/components/rjsf.less
index f32369a72011..70dc7516ec80 100644
--- a/openmetadata-ui/src/main/resources/ui/src/styles/components/rjsf.less
+++ b/openmetadata-ui/src/main/resources/ui/src/styles/components/rjsf.less
@@ -137,3 +137,7 @@
   cursor: pointer;
   accent-color: @primary-color;
 }
+
+.rjsf .has-error input {
+  border-color: @error-color !important;
+}
diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/ApplicationSchemas/DataInsightsApplication.json b/openmetadata-ui/src/main/resources/ui/src/utils/ApplicationSchemas/DataInsightsApplication.json
index 9d64a7cf7c21..55fa25a3c910 100644
--- a/openmetadata-ui/src/main/resources/ui/src/utils/ApplicationSchemas/DataInsightsApplication.json
+++ b/openmetadata-ui/src/main/resources/ui/src/utils/ApplicationSchemas/DataInsightsApplication.json
@@ -75,7 +75,8 @@
           "title": "Data Retention (Days)",
           "description": "Defines the number of days the Data Assets Insights information will be kept. After it they will be deleted.",
           "type": "integer",
-          "default": 7
+          "default": 7,
+          "minimum": 0
         },
         "serviceFilter": {
           "type": "object",
@@ -173,7 +174,8 @@
     "batchSize": {
       "description": "Maximum number of events processed at a time (Default 100).",
       "type": "integer",
-      "default": 100
+      "default": 100,
+      "minimum": 0
     },
     "recreateDataAssetsIndex": {
       "title": "Recreate DataInsights DataAssets Index",
diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/ApplicationSchemas/SearchIndexingApplication.json b/openmetadata-ui/src/main/resources/ui/src/utils/ApplicationSchemas/SearchIndexingApplication.json
index 6366cee420b1..bab29ada7aa4 100644
--- a/openmetadata-ui/src/main/resources/ui/src/utils/ApplicationSchemas/SearchIndexingApplication.json
+++ b/openmetadata-ui/src/main/resources/ui/src/utils/ApplicationSchemas/SearchIndexingApplication.json
@@ -8,55 +8,64 @@
       "title": "Batch Size",
       "description": "Maximum number of events entities in a batch (Default 100).",
       "type": "integer",
-      "default": 100
+      "default": 100,
+      "minimum": 1
     },
     "payLoadSize": {
       "title": "Payload Size",
       "description": "Maximum number of events entities in a batch (Default 100).",
       "type": "integer",
-      "default": 104857600
+      "default": 104857600,
+      "minimum": 1
     },
     "producerThreads": {
       "title": "Number of Producer Threads",
       "description": "Number of threads to use for reindexing",
       "type": "integer",
-      "default": 5
+      "default": 5,
+      "minimum": 1
     },
     "consumerThreads": {
       "title": "Number of Consumer Threads",
       "description": "Number of threads to use for reindexing",
       "type": "integer",
-      "default": 1
+      "default": 1,
+      "minimum": 1
     },
     "queueSize": {
       "title": "Queue Size to use.",
       "description": "Queue Size to use internally for reindexing.",
       "type": "integer",
-      "default": 100
+      "default": 100,
+      "minimum": 1
     },
     "maxConcurrentRequests": {
       "title": "Max Concurrent Requests",
       "description": "Maximum number of concurrent requests to the search index",
       "type": "integer",
-      "default": 100
+      "default": 100,
+      "minimum": 1
     },
     "maxRetries": {
       "title": "Max Retries",
       "description": "Maximum number of retries for a failed request",
       "type": "integer",
-      "default": 5
+      "default": 5,
+      "minimum": 0
     },
     "initialBackoff": {
       "title": "Initial Backoff Millis",
       "description": "Initial backoff time in milliseconds",
       "type": "integer",
-      "default": 1000
+      "default": 1000,
+      "minimum": 0
     },
     "maxBackoff": {
       "title": "Max Backoff Millis",
       "description": "Maximum backoff time in milliseconds",
       "type": "integer",
-      "default": 10000
+      "default": 10000,
+      "minimum": 0
     },
     "entities": {
       "title": "Entities",
diff --git a/openmetadata-ui/src/main/resources/ui/src/utils/formUtils.tsx b/openmetadata-ui/src/main/resources/ui/src/utils/formUtils.tsx
index 110d3c31f22e..e951ff534373 100644
--- a/openmetadata-ui/src/main/resources/ui/src/utils/formUtils.tsx
+++ b/openmetadata-ui/src/main/resources/ui/src/utils/formUtils.tsx
@@ -278,7 +278,7 @@ export const generateFormFields = (fields: FieldProp[]) => {
 
 export const transformErrors: ErrorTransformer = (errors) => {
   const errorRet = errors.map((error) => {
-    const { property } = error;
+    const { property, params, name } = error;
 
     /**
      * For nested fields we have to check if it's property start with "."
@@ -290,12 +290,25 @@ export const transformErrors: ErrorTransformer = (errors) => {
 
     // If element is not present in DOM, ignore error
     if (document.getElementById(id)) {
-      const fieldName = error.params?.missingProperty;
-      if (fieldName) {
-        const customMessage = i18n.t('message.field-text-is-required', {
-          fieldText: startCase(fieldName),
-        });
-        error.message = customMessage;
+      const fieldName = startCase(property?.split('/').pop() ?? '');
+
+      const errorMessages = {
+        required: () => ({
+          message: i18n.t('message.field-text-is-required', {
+            fieldText: startCase(params?.missingProperty),
+          }),
+        }),
+        minimum: () => ({
+          message: i18n.t('message.value-must-be-greater-than', {
+            field: fieldName,
+            minimum: params?.limit,
+          }),
+        }),
+      };
+
+      const errorHandler = errorMessages[name as keyof typeof errorMessages];
+      if (errorHandler && params) {
+        error.message = errorHandler().message;
 
         return error;
       }


Reviews:
user: login: Ashish8689
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T11:04:18Z
user: login: shrushti2000
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-12T11:09:00Z
user: login: chirag-madlani
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-05-12T15:42:31Z

Review comments:
diff_hunk: @@ -8,55 +8,64 @@
       "title": "Batch Size",
       "description": "Maximum number of events entities in a batch (Default 100).",
       "type": "integer",
-      "default": 100
+      "default": 100,
+      "minimum": 1
     },
     "payLoadSize": {
       "title": "Payload Size",
       "description": "Maximum number of events entities in a batch (Default 100).",
       "type": "integer",
-      "default": 104857600
+      "default": 104857600,
+      "minimum": 1
     },
     "producerThreads": {
       "title": "Number of Producer Threads",
       "description": "Number of threads to use for reindexing",
       "type": "integer",
-      "default": 5
+      "default": 5,
+      "minimum": 1
     },
     "consumerThreads": {
       "title": "Number of Consumer Threads",
       "description": "Number of threads to use for reindexing",
       "type": "integer",
-      "default": 1
+      "default": 1,
+      "minimum": 1
     },
     "queueSize": {
       "title": "Queue Size to use.",
       "description": "Queue Size to use internally for reindexing.",
       "type": "integer",
-      "default": 100
+      "default": 100,
+      "minimum": 1
path: openmetadata-ui/src/main/resources/ui/src/utils/ApplicationSchemas/SearchIndexingApplication.json
user: login: Ashish8689
body: We have set minimum number for some with `0 and some for 1` is it intentional ?
created_at: 2025-05-12T10:58:24Z
author_association: CONTRIBUTOR
diff_hunk: @@ -152,7 +154,136 @@ const FormBuilder: FunctionComponent<Props> = forwardRef(
         onChange={handleFormChange}
         onFocus={onFocus}
         onSubmit={onSubmit}
-        {...props}>
+        {...props}
+        validator={{
+          ...props?.validator,
+          validateFormData: (formData: ConfigData) => {
+            const validationErrors: Record<string, { __errors: string[] }> = {};
+
+            const resolveRef = (ref: string, schemaObj: any) => {
+              if (!ref) {
+                return null;
+              }
+              const refPath = ref.split('/').slice(1);
+
+              return refPath.reduce((obj, path) => obj?.[path], schemaObj);
+            };
+
+            const validateProperty = (
+              property: any,
+              value: any,
+              key: string,
+              path: string
+            ): { __errors: string[] } | null => {
+              // Handle schema references
+              if (property.$ref) {
+                const refSchema = resolveRef(property.$ref, schema);
+                if (!refSchema) {
+                  return null;
+                }
+
+                return validateProperty(refSchema, value, key, path);
+              }
+
+              if (
+                typeof property === 'object' &&
+                property !== null &&
path: openmetadata-ui/src/main/resources/ui/src/components/common/FormBuilder/FormBuilder.tsx
user: login: Ashish8689
body: where ever we are checking the type, we can use lodash function there for better readability!
created_at: 2025-05-12T11:02:27Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1236,7 +1236,7 @@ export interface Pipeline {
     /**
      * Application configuration
      */
-    appConfig?: any[] | boolean | CollateAIAppConfig | number | null | string;
+    appConfig?: any[] | boolean | number | null | CollateAIAppConfig | string;
     /**
path: openmetadata-ui/src/main/resources/ui/src/generated/entity/services/ingestionPipelines/ingestionPipeline.ts
user: login: Ashish8689
body: Do we need this file changes? 
created_at: 2025-05-12T11:04:09Z
author_association: CONTRIBUTOR
diff_hunk: @@ -8,55 +8,64 @@
       "title": "Batch Size",
       "description": "Maximum number of events entities in a batch (Default 100).",
       "type": "integer",
-      "default": 100
+      "default": 100,
+      "minimum": 1
     },
     "payLoadSize": {
       "title": "Payload Size",
       "description": "Maximum number of events entities in a batch (Default 100).",
       "type": "integer",
-      "default": 104857600
+      "default": 104857600,
+      "minimum": 1
     },
     "producerThreads": {
       "title": "Number of Producer Threads",
       "description": "Number of threads to use for reindexing",
       "type": "integer",
-      "default": 5
+      "default": 5,
+      "minimum": 1
     },
     "consumerThreads": {
       "title": "Number of Consumer Threads",
       "description": "Number of threads to use for reindexing",
       "type": "integer",
-      "default": 1
+      "default": 1,
+      "minimum": 1
     },
     "queueSize": {
       "title": "Queue Size to use.",
       "description": "Queue Size to use internally for reindexing.",
       "type": "integer",
-      "default": 100
+      "default": 100,
+      "minimum": 1
path: openmetadata-ui/src/main/resources/ui/src/utils/ApplicationSchemas/SearchIndexingApplication.json
user: login: shrushti2000
body: Have referred the  minimum values from [ Fixes #20920: validation for Search Index app and data insights app configuration #21009](https://github.com/open-metadata/OpenMetadata/pull/21009/files)
created_at: 2025-05-12T11:09:00Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-04-29T15:07:42Z
body: <!-- Jest Coverage Comment: ui-coverage-tests -->
# Jest test Coverage

## UI tests summary

| Lines | Statements | Branches | Functions |
| --- | --- | --- | --- |
| <a href="https://github.com/open-metadata/OpenMetadata/blob//README.md"><img alt="Coverage: 63%" src="https://img.shields.io/badge/Coverage-63%25-yellow.svg" /></a><br/> | 63.47% (44798/70586) | 38.44% (17945/46687) | 43% (5328/12391) |

author_association: CONTRIBUTOR
user: login: sonarqubecloud[bot]
created_at: 2025-05-12T15:01:13Z
body: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=open-metadata-ui&pullRequest=21038) **Quality Gate passed for 'open-metadata-ui'**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=open-metadata-ui&pullRequest=21038&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=open-metadata-ui&pullRequest=21038&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=open-metadata-ui&pullRequest=21038&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=open-metadata-ui&pullRequest=21038&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=open-metadata-ui&pullRequest=21038&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=open-metadata-ui&pullRequest=21038)


author_association: NONE