I have a fieldset in my UI component. Depending on certain conditions, I show/hide fields within it. All fields are initially marked as required in the UI component. However, I want to remove the 'required' validation when the fields are hidden.
if (response.success == true) {
 $('[name="customer_image"]').closest('.admin__field').hide();
 $('[name="kyc_type"]').closest('.admin__field').hide();
 $('[name="kyc_proof"]').closest('.admin__field').hide();
 $('[name="proof_number"]').closest('.admin__field').hide();
}
My ui component fields is like
<fieldset name="proofdetails" sortOrder="20">
 <settings>
 <collapsible>true</collapsible>
 <opened>true</opened>
 <visible>true</visible>
 <label translate="true">Proof Details</label>
 <componentType>fieldset</componentType>
 <additionalClasses>
 <class name="purchase-form-proof-details">true</class>
 </additionalClasses>
 </settings> 
 <field name="customer_image">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="dataType" xsi:type="string">string</item>
 <item name="label" xsi:type="string" translate="true">Photo</item>
 <item name="visible" xsi:type="boolean">true</item>
 <item name="allowedExtensions" xsi:type="string">jpg jpeg png</item>
 <item name="maxFileSize" xsi:type="number">8388608</item>
 <item name="formElement" xsi:type="string">imageUploader</item>
 <item name="previewTmpl" xsi:type="string">Magento_Catalog/image-preview</item>
 <item name="elementTmpl" xsi:type="string">ui/form/element/uploader/uploader</item>
 <item name="dataScope" xsi:type="string">customer_image</item>
 <item name="uploaderConfig" xsi:type="array">
 <item name="url" xsi:type="url" path="goldscheme/purchase/uploadfile">
 <param name="target_element_id">customer_image</param>
 <param name="type">image</param>
 </item>
 </item>
 <item name="validation" xsi:type="array">
 <item name="required-entry" xsi:type="boolean">true</item>
 </item>
 </item>
 </argument>
 </field>
 <field name="kyc_type">
 <argument name="data" xsi:type="array">
 <item name="options" xsi:type="object">Ceymox\GoldScheme\Model\Config\Source\ProofType</item>
 <item name="config" xsi:type="array">
 <item name="dataType" xsi:type="string">text</item>
 <item name="label" translate="true" xsi:type="string">Proof Type</item>
 <item name="formElement" xsi:type="string">select</item>
 <item name="source" xsi:type="string">kyc_type</item>
 <item name="sortOrder" xsi:type="number">40</item>
 <item name="dataScope" xsi:type="string">kyc_type</item>
 <item name="validation" xsi:type="array">
 <item name="required-entry" xsi:type="boolean">true</item>
 </item>
 </item>
 </argument>
 </field>
 <field name="kyc_proof">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="dataType" xsi:type="string">string</item>
 <item name="label" xsi:type="string" translate="true">Proof</item>
 <item name="visible" xsi:type="boolean">true</item>
 <item name="allowedExtensions" xsi:type="string">jpg jpeg gif png pdf</item>
 <item name="maxFileSize" xsi:type="number">16777216</item>
 <item name="formElement" xsi:type="string">fileUploader</item>
 <item name="previewTmpl" xsi:type="string">Magento_Catalog/image-preview</item>
 <item name="elementTmpl" xsi:type="string">ui/form/element/uploader/uploader</item>
 <item name="dataScope" xsi:type="string">kyc_proof</item>
 <item name="uploaderConfig" xsi:type="array">
 <item name="url" xsi:type="url" path="goldscheme/purchase/uploadfile"/>
 </item>
 <item name="validation" xsi:type="array">
 <item name="required-entry" xsi:type="boolean">true</item>
 </item>
 </item>
 </argument>
 </field>
 <field name="proof_number">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="dataType" xsi:type="string">input</item>
 <item name="label" translate="true" xsi:type="string">Proof Number</item>
 <item name="formElement" xsi:type="string">input</item>
 <item name="source" xsi:type="string">proof_number</item>
 <item name="sortOrder" xsi:type="number">50</item>
 <item name="dataScope" xsi:type="string">proof_number</item>
 <item name="validation" xsi:type="array">
 <item name="alphanumeric" xsi:type="boolean">true</item>
 <item name="min_text_length" xsi:type="number">10</item>
 <item name="max_text_length" xsi:type="number">12</item>
 <item name="required-entry" xsi:type="boolean">true</item>
 </item>
 </item>
 </argument>
 </field>
 <field name="pancard">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="dataType" xsi:type="string">string</item>
 <item name="label" xsi:type="string" translate="true">Pan Card</item>
 <item name="visible" xsi:type="boolean">true</item>
 <item name="allowedExtensions" xsi:type="string">jpg jpeg gif png pdf</item>
 <item name="maxFileSize" xsi:type="number">16777216</item>
 <item name="formElement" xsi:type="string">fileUploader</item>
 <item name="previewTmpl" xsi:type="string">Magento_Catalog/image-preview</item>
 <item name="elementTmpl" xsi:type="string">ui/form/element/uploader/uploader</item>
 <item name="dataScope" xsi:type="string">pancard</item>
 <item name="uploaderConfig" xsi:type="array">
 <item name="url" xsi:type="url" path="goldscheme/purchase/uploadfile"/>
 </item>
 <item name="validation" xsi:type="array">
 <item name="required-entry" xsi:type="boolean">true</item>
 </item>
 </item>
 </argument>
 </field>
 <field name="pancard_number">
 <argument name="data" xsi:type="array">
 <item name="config" xsi:type="array">
 <item name="dataType" xsi:type="string">input</item>
 <item name="label" translate="true" xsi:type="string">Pan Number</item>
 <item name="formElement" xsi:type="string">input</item>
 <item name="source" xsi:type="string">pancard_number</item>
 <item name="sortOrder" xsi:type="number">70</item>
 <item name="dataScope" xsi:type="string">pancard_number</item>
 <item name="validation" xsi:type="array">
 <item name="alphanumeric" xsi:type="boolean">true</item>
 <item name="min_text_length" xsi:type="number">10</item>
 <item name="max_text_length" xsi:type="number">12</item>
 <item name="required-entry" xsi:type="boolean">true</item>
 </item>
 </item>
 </argument>
 </field>
</fieldset>
How i remove validation when the field is not visible
2 Answers 2
I think this may help you
Step 1: Create a Custom JavaScript Component First, you'll need to create a custom JavaScript component that listens for changes in your conditions (e.g., response from an API) and updates the required validation rule of your fields accordingly.
Create a JavaScript file in your module's web directory. For example, view/adminhtml/web/js/custom-validation.js.
define([
 'jquery',
 'uiRegistry'
], function (,ドル registry) {
 'use strict';
 return function () {
 // Example function to toggle required validation
 function toggleRequiredValidation(fields, state) {
 fields.forEach(function (fieldName) {
 var fieldComponent = registry.get('index = ' + fieldName);
 if (fieldComponent) {
 fieldComponent.validation['required-entry'] = state;
 fieldComponent.required(state);
 fieldComponent.validate();
 }
 });
 }
 // Example usage based on a condition
 // Replace 'response.success' with your actual condition
 if (response.success == true) {
 // Fields you want to toggle validation for
 var fieldsToToggle = [
 'customer_image',
 'kyc_type',
 'kyc_proof',
 'proof_number'
 ];
 // Hide fields and remove required validation
 toggleRequiredValidation(fieldsToToggle, false);
 }
 };
});
Step 2: Include Your JavaScript Component in Your UI Component Modify your UI component's XML layout to include the custom JavaScript component. You can do this by adding a node to your fieldset or form component.
For example, if you're customizing a form in the admin panel, you might have a layout file like view/adminhtml/ui_component/your_form.xml. You can add the script like so:
<form ...>
 ...
 <settings>
 ...
 <deps>
 <dep>Test_ApiData/js/custom-validation</dep>
 </deps>
 </settings>
 ...
</form>
Or, if you need to directly include it in a specific template, you might need to adjust the template to load your JS component.
- 
 I got solution for my issue. My answer is posted here. Than you @RanaZainChippy Ani– Chippy Ani2024年02月21日 11:17:13 +00:00Commented Feb 21, 2024 at 11:17
In my JavaScript file, I wrote a function to remove validation based on the below answer.
toggleRequiredValidation: function (fields, state) {
 fields.forEach(function (fieldName) {
 var fieldComponent = uiRegistry.get('index = ' + fieldName);
 console.log('fieldComponent: ' + fieldComponent);
 if (fieldComponent) {
 console.log('Field found: ' + fieldName);
 fieldComponent.validation['required-entry'] = state;
 fieldComponent.validate();
 fieldComponent.error(false);
 } else {
 console.log('Field not found: ' + fieldName);
 }
 });
 },
Explore related questions
See similar questions with these tags.