Magento – Disabling a UI component field while add new product in Magento 2

magento2uicomponentxml

I have a UI component defining field, I want to display this field while edit existing product, and hide this field when add new product.

Namespace\Modulename\view\adminhtml\ui_component\product_form

<fieldset name="vendorproduct">  
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="label" xsi:type="string" translate="true">Seller Sell This Product</item>
            <item name="collapsible" xsi:type="boolean">true</item>
            <item name="sortOrder" xsi:type="number">65</item>
        </item>
    </argument>
    <container name="vendor_data" >
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="sortOrder" xsi:type="number">10</item>
            </item>
        </argument>
        <htmlContent name="html_content">
            <argument name="block" xsi:type="object">Namespace\Modulename\Block\Adminhtml\Catalog\Product\Edit\Tab\Seller</argument>
        </htmlContent>
    </container>
</fieldset>

Using <item name="disabled" xsi:type="boolean">true</item> I can disable fields but I want to disable them while adding new product only. how can I achieve this.

Any help is appreciated. Thanks.

Best Answer

 <virtualType name="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\Pool">
    <arguments>
        <argument name="modifiers" xsi:type="array">
            <item name="name" xsi:type="array">
                <item name="class" xsi:type="string">Namespace\ModuleNam\Ui\DataProvider\Product\Form\Modifier\Attributes</item>
                <item name="sortOrder" xsi:type="number">1000</item>
            </item>

        </argument>
    </arguments> 
</virtualType>


public function modifyMeta(array $meta)
{
    // check to disable attributes on product new
    if ($this->lumaData->getGeneralConfig('lockattributes') == 1) {
        // attributes need to be disabled
        $attributes = array();
    } else {

    $attributes = array();
    }
    if ($this->httpRequest->getActionName() == 'new' ) {                       
        // code to make the attribute disable
        foreach($attributes as $attribute){

            $path = $this->arrayManager->findPath($attribute, $meta, null, 'children');
            if ($path) {
                $meta = $this->arrayManager->set(
                 "{$path}/arguments/data/config/disabled",
                 $meta,
                 true
                );   
            }
        }
    }
    return $meta;
}
If you use this you will get solution