Hi @Vivek Singh
By default there are no option for this. You can create custom component and template for this. Try following way:
<field name="monday_status">
<argument name="data" xsi:type="array">
<item name="options" xsi:type="object">NameSpace\ModuleName\Model\Timetable\Source\IsSpecial</item>
<item name="config" xsi:type="array">
<item name="component" xsi:type="string">NameSpace_ModuleName/js/form/element/is-special</item>
<item name="elementTmpl" xsi:type="string">NameSpace_ModuleName/form/element/is-special</item>
<item name="label" xsi:type="string" translate="true">Monday Status</item>
<item name="visible" xsi:type="boolean">true</item>
<item name="dataType" xsi:type="string">number</item>
<item name="formElement" xsi:type="string">select</item>
<item name="source" xsi:type="string">item</item>
<item name="dataScope" xsi:type="string">monday_status</item>
<item name="sortOrder" xsi:type="number">19</item>
<item name="validation" xsi:type="array">
<item name="required-entry" xsi:type="boolean">true</item>
</item>
</item>
</argument>
</field>NameSpace/ModuleName/view/adminhtml/web/js/form/element/is-special.js
define([
'jquery',
'Magento_Ui/js/form/element/select'
], function ($, Select) {
'use strict';
return Select.extend({
defaults: {
customName: '${ $.parentName }.${ $.index }_input'
},
/**
* Change currently selected option
*
* @param {String} id
*/
selectOption: function(id){
if(($("#"+id).val() == 0)||($("#"+id).val() == undefined)) {
$('div[data-index="monday_open_time"]').hide();
$('div[data-index="monday_close_time"]').hide();
$('div[data-index="monday_break_time"]').hide();
$('div[data-index="monday_offbreak_time"]').hide();
} else if($("#"+id).val() == 1) {
$('div[data-index="monday_open_time"]').show();
$('div[data-index="monday_close_time"]').show();
$('div[data-index="monday_break_time"]').show();
$('div[data-index="monday_offbreak_time"]').show();
}
},
});
});
NameSpace/ModuleName/view/adminhtml/web/template/form/element/is-special.html
<select class="admin__control-select" data-bind="
event:{ change: selectOption(uid)},
attr: {
name: inputName,
id: uid,
disabled: disabled,
'aria-describedby': noticeId
},
hasFocus: focused,
optgroup: options,
value: value,
optionsCaption: caption,
optionsValue: 'value',
optionsText: 'label'"
/>
Reference from Stack-overflow.
https://magento.stackexchange.com/questions/157575/magento-2-1-ui-component-hide-and-show-field-base...
I have already implemented the same.
I hope it will help you!
Hello @Vimal Kumar thanks for your help but my question is different form your answer actually i want to create options in ui component form. I am sharing screenshot to you that will clearly to understand. Please tell me how to achieve this in my custom ui component form as i am new in magento2 so i don't have idea about this.
Add this code in your custom ui component from inside
<container name="emi_options"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="component" xsi:type="string">Magento_Ui/js/dynamic-rows/dynamic-rows</item> <item name="template" xsi:type="string">ui/dynamic-rows/templates/default</item> <item name="componentType" xsi:type="string">dynamicRows</item> <item name="recordTemplate" xsi:type="string">record</item> <item name="addButtonLabel" xsi:type="string">Add Row</item> <item name="deleteProperty" xsi:type="boolean">false</item> </item> </argument> <container name="record"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="label" xsi:type="string" translate="true">Dynamic Rows</item> <item name="component" xsi:type="string" translate="true">Magento_Ui/js/dynamic-rows/record </item> <item name="isTemplate" xsi:type="boolean">true</item> <item name="is_collection" xsi:type="boolean">true</item> <item name="showFallbackReset" xsi:type="boolean">false</item> </item> </argument> <field name="emi_tenure"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="dataType" xsi:type="string">text</item> <item name="label" xsi:type="string" translate="true">EMI Tenure(Month)</item> <item name="formElement" xsi:type="string">input</item> <item name="dataScope" xsi:type="string">emi_tenure</item> <item name="showFallbackReset" xsi:type="boolean">false</item> <item name="validation" xsi:type="array"> <item name="required-entry" xsi:type="boolean">true</item> </item> <item name="sortOrder" xsi:type="string">10</item> </item> </argument> </field> <field name="interest_rate"> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="dataType" xsi:type="string">text</item> <item name="formElement" xsi:type="string">input</item> <item name="label" xsi:type="string" translate="true">Interest Rate(%)</item> <item name="dataScope" xsi:type="string">interest_rate</item> <item name="disabled" xsi:type="boolean">false</item> <item name="validation" xsi:type="array"> <item name="required-entry" xsi:type="boolean">true</item> </item> <item name="sortOrder" xsi:type="string">30</item> </item> </argument> </field> <actionDelete> <argument name="data" xsi:type="array"> <item name="config" xsi:type="array"> <item name="componentType" xsi:type="string">actionDelete</item> <item name="dataType" xsi:type="string">text</item> <item name="fit" xsi:type="boolean">false</item> <item name="label" xsi:type="string">Actions</item> <item name="additionalClasses" xsi:type="string">data-grid-actions-cell</item> <item name="template" xsi:type="string">Magento_Backend/dynamic-rows/cells/action-delete </item> </item> </argument> </actionDelete> </container> </container>
Another way to get data using UI component.
If you want get dafault value from another module using UI component.
Add this field in your
custom_form.xml file
<field name="your_field_id">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="disabled" xsi:type="boolean">true</item>
<item name="class" xsi:type="string">{Vendorname}\{Modulename}\Ui\Component\Form\Element\Input</item>
<item name="dataType" xsi:type="string">text</item>
<item name="label" translate="true" xsi:type="string">Name label</item>
<item name="formElement" xsi:type="string">input</item>
<item name="source" xsi:type="string">[source_here]</item>
<item name="required" xsi:type="boolean">true</item>
<item name="dataScope" xsi:type="string">your_field_id</item>
</item>
</argument>
</field>Create file In
File DataProvider.php
<?php
namespace {Vendorname}\{Modulename}\Ui\Component\Form\Element;
class DataProvider extends \Magento\Ui\Component\Form\Element\Input
{
/**
* Prepare component configuration
*
* @return void
*/
public function prepare()
{
parent::prepare();
$customValue = {Get Custom value};
$config = $this->getData('config');
if(isset($config['dataScope']) && $config['dataScope']=='your_field_id'){
$config['default']= $customValue;
$this->setData('config', (array)$config);
}
}
}
@Rishi Ranjan How can I fetch saved value into the fields?
Hello, I tried your solution and it's working well. Can you tell me how I can the result of it (possibly in JSON) to save it in database please?
Lastest code your find at https://devdocs.magento.com/guides/v2.4/ui_comp_guide/components/ui-dynamicrows.html