ankithg03
9/23/2019 - 5:44 AM

UI COMPONENTS

Ui

 Component

  AddVendor

    DataProvider.php

  Listing

    Column

       BlockActions.php

  Vendor

      DataProvider.php

view

   adminhtml

     layout

       vendor_add_index.xml

       vendor_index_index.xml

     ui_component

      vendor_form.xml

      vendor_listing.xml

<?xml version="1.0"?>
<!--
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Backend:etc/menu.xsd">
    <menu>
        <add id="Codilar_ProductVendor::vendor" title="Vendor" translate="title" module="Codilar_ProductVendor" sortOrder="50"
             resource="Codilar_ProductVendor::vendor"/>
        <add id="Codilar_ProductVendor::uic_employee"
             resource="Codilar_ProductVendor::uic_employee"
             title="Employee"
             translate="title"
             module="Codilar_ProductVendor"
             sortOrder="0"
             parent="Codilar_ProductVendor::vendor"/>
        <add id="Codilar_ProductVendor::vendor_showvendor"
             resource="Codilar_ProductVendor::vendor_showvendor"
             title="Show Vendors"
             translate="title"
             module="Codilar_ProductVendor"
             sortOrder="50"
             action="vendor/index"
             parent="Codilar_ProductVendor::vendor"/>
        <add id="Codilar_ProductVendor::vendor_addvendor"
             resource="Codilar_ProductVendor::vendor_addvendor"
             title="Add Employee"
             translate="title"
             module="Codilar_ProductVendor"
             sortOrder="51"
             action="vendor/add/"
             parent="Codilar_ProductVendor::vendor"/>
    </menu>
</config>
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <argument name="data" xsi:type="array">
        <item name="js_config" xsi:type="array">
            <item name="provider" xsi:type="string">vendor_form.block_form_data_source</item>
        </item>
        <item name="label" xsi:type="string" translate="true">New employee</item>
        <item name="template" xsi:type="string">templates/form/collapsible</item>
    </argument>
    <settings>
        <buttons>
            <!--<button name="save_and_continue" class="Codilar\VirtualStoreWiseTimeslot\Block\Adminhtml\Timeslot\Edit\SaveAndContinueButton"/>-->
            <button name="save" class="Codilar\ProductVendor\Block\Adminhtml\Vendor\Add\SaveButton"/>
<!--            &lt;!&ndash;<button name="reset" class="Codilar\VirtualStoreWiseTimeslot\Block\Adminhtml\Timeslot\Edit\ResetButton"/>&ndash;&gt;-->
<!--            &lt;!&ndash;<button name="delete" class="Codilar\VirtualStoreWiseTimeslot\Block\Adminhtml\Timeslot\Edit\DeleteButton"/>&ndash;&gt;-->
            <button name="back" class="Codilar\ProductVendor\Block\Adminhtml\Vendor\Add\BackButton"/>
        </buttons>
        <namespace>vendor_form</namespace>
        <dataScope>data</dataScope>
        <deps>
            <dep>vendor_form.block_form_data_source</dep>
        </deps>
    </settings>
    <dataSource name="block_form_data_source">
        <argument name="data" xsi:type="array">
            <item name="js_config" xsi:type="array">
                <item name="component" xsi:type="string">Magento_Ui/js/form/provider</item>
            </item>
        </argument>
        <settings>
            <submitUrl path="vendor/add/save"/>
        </settings>
        <dataProvider class="Codilar\ProductVendor\Ui\Component\AddVendor\DataProvider" name="block_form_data_source">
            <settings>
                <requestFieldName>vendor_id</requestFieldName>
                <primaryFieldName>vendor_id</primaryFieldName>
            </settings>
        </dataProvider>
    </dataSource>
    <fieldset name="general">
        <settings>
            <label/>
        </settings>
        <field name="vendor_id" formElement="input">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="source" xsi:type="string">block</item>
                </item>
            </argument>
            <settings>
                <dataType>text</dataType>
                <visible>false</visible>
                <dataScope>vendor_id</dataScope>
            </settings>
        </field>


        <field name="vendor_name" sortOrder="40" formElement="input">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="source" xsi:type="string">vendor</item>
                </item>
            </argument>
            <settings>
                <validation>
                    <rule name="required-entry" xsi:type="boolean">true</rule>
                </validation>
                <dataType>text</dataType>
                <label translate="true">Vendor Name</label>
                <dataScope>vendor_name</dataScope>
            </settings>
        </field>
        <field name="vendor_address" sortOrder="50" formElement="input">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="source" xsi:type="string">vendor</item>
                </item>
            </argument>
            <settings>
                <validation>
                    <rule name="required-entry" xsi:type="boolean">true</rule>
                </validation>
                <dataType>text</dataType>
                <label translate="true">Vendor Address</label>
                <dataScope>vendor_address</dataScope>
            </settings>
        </field>
        <field name="vendor_email" sortOrder="60" formElement="input">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="source" xsi:type="string">vendor</item>
                </item>
            </argument>
            <settings>
                <validation>
                    <rule name="required-entry" xsi:type="boolean">true</rule>
                </validation>
                <dataType>text</dataType>
                <label translate="true">Vendor Email</label>
                <dataScope>vendor_email</dataScope>
            </settings>
        </field>
        <field name="vendor_phone_number" sortOrder="62" formElement="input">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="source" xsi:type="string">vendor</item>
                </item>
            </argument>
            <settings>
                <validation>
                    <rule name="required-entry" xsi:type="boolean">true</rule>
                </validation>
                <dataType>text</dataType>
                <label translate="true">Phone Number</label>
                <dataScope>vendor_phone_number</dataScope>
            </settings>
        </field>
    </fieldset>
</form>
<?xml version="1.0" encoding="UTF-8"?>
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <argument name="data" xsi:type="array">
        <item name="js_config" xsi:type="array">
            <item name="provider" xsi:type="string">vendor_listing.vendor_listing_data_source</item>
        </item>
    </argument>
    <settings>
        <buttons>
            <button name="add">
                <url path="*/add"/>
                <class>primary</class>
                <label translate="true">Add New Vendor</label>
            </button>
        </buttons>
        <spinner>vendor_listing_columns</spinner>
        <deps>
            <dep>vendor_listing.vendor_listing_data_source</dep>
        </deps>
    </settings>
    <dataSource name="vendor_listing_data_source" component="Magento_Ui/js/grid/provider">
        <settings>
            <storageConfig>
                <param name="indexField" xsi:type="string">vendor_id</param>
            </storageConfig>
            <updateUrl path="mui/index/render"/>
        </settings>
        <aclResource>KnightWing_UIC::employees_listing</aclResource>
        <dataProvider class="Codilar\ProductVendor\Ui\Component\Vendor\DataProvider" name="vendor_listing_data_source">
            <settings>
                <requestFieldName>vendor_id</requestFieldName>
                <primaryFieldName>vendor_id</primaryFieldName>
            </settings>
        </dataProvider>
    </dataSource>
    <listingToolbar name="listing_top">
        <settings>
            <sticky>true</sticky>
        </settings>
        <bookmark name="bookmarks"/>
        <columnsControls name="columns_controls"/>
        <filters name="listing_filters">
            <settings>
                <templates>
                    <filters>
                        <select>
                            <param name="template" xsi:type="string">ui/grid/filters/elements/ui-select</param>
                            <param name="component" xsi:type="string">Magento_Ui/js/form/element/ui-select</param>
                        </select>
                    </filters>
                </templates>
            </settings>
        </filters>
        <massaction name="listing_massaction">
            <action name="delete">
                <settings>
                    <confirm>
                        <message translate="true">Are you sure you want to delete selected items?</message>
                        <title translate="true">Delete items</title>
                    </confirm>
                    <url path="vendor/massDelete/"/>
                    <type>delete</type>
                    <label translate="true">Delete</label>
                </settings>
            </action>
            <action name="edit">
                <settings>
                    <callback>
                        <target>editSelected</target>
                        <provider>vendor_listing.vendor_listing.vendor_listing_columns_editor</provider>
                    </callback>
                    <url path="vendor/massedit/"/>
                    <type>edit</type>
                    <label translate="true">Edit</label>
                </settings>
            </action>
        </massaction>
        <paging name="listing_paging"/>
    </listingToolbar>
    <columns name="vendor_listing_columns">
        <settings>
            <editorConfig>
                <param name="clientConfig" xsi:type="array">
                    <item name="saveUrl" xsi:type="url" path="vendor/inlineEdit"/>
                    <item name="validateBeforeSave" xsi:type="boolean">false</item>
                </param>
                <param name="indexField" xsi:type="string">vendor_id</param>
                <param name="enabled" xsi:type="boolean">true</param>
                <param name="selectProvider" xsi:type="string">vendor_listing.vendor_listing.vendor_listing_columns.ids</param>
            </editorConfig>
            <childDefaults>
                <param name="fieldAction" xsi:type="array">
                    <item name="provider" xsi:type="string">vendor_listing.vendor_listing.vendor_listing_columns_editor</item>
                    <item name="target" xsi:type="string">startEdit</item>
                    <item name="params" xsi:type="array">
                        <item name="0" xsi:type="string">${ $.$data.rowIndex }</item>
                        <item name="1" xsi:type="boolean">true</item>
                    </item>
                </param>
            </childDefaults>
        </settings>
        <selectionsColumn name="ids">
            <settings>
                <indexField>vendor_id</indexField>
                <resizeEnabled>false</resizeEnabled>
                <resizeDefaultWidth>55</resizeDefaultWidth>
            </settings>
        </selectionsColumn>
        <column name="vendor_id">
            <settings>

                <filter>textRange</filter>
                <label translate="true">ID</label>
                <sorting>asc</sorting>
            </settings>
        </column>
        <column name="vendor_name">
            <settings>
                <filter>text</filter>
                <editor>
                    <editorType>text</editorType>
                </editor>
                <dataType>text</dataType>

                <label translate="true">Vendor Name</label>
            </settings>
        </column>
        <column name="vendor_address">
            <settings>
                <filter>textRage</filter>
                <editor>
                    <editorType>text</editorType>
                </editor>
                <dataType>text</dataType>
                <label translate="true">Vendor Address</label>
            </settings>
        </column>
        <column name="vendor_email">
            <settings>
                <filter>text</filter>
                <editor>
                    <editorType>text</editorType>
                </editor>
                <dataType>text</dataType>
                <label translate="true">Vendor Email</label>
            </settings>
        </column>
        <column name="vendor_phone_number">
            <settings>

                <filter>text</filter>
                <editor>
                    <editorType>text</editorType>
                </editor>
                <dataType>text</dataType>
                <label translate="true">Vendor Phone</label>
            </settings>
        </column>
        <actionsColumn name="action" class="Codilar\ProductVendor\Ui\Component\Listing\Column\BlockActions">
            <settings>
                <indexField>vendor_id</indexField>
                <label translate="true">Action</label>
            </settings>
        </actionsColumn>
    </columns>
</listing>
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content">
            <uiComponent name="vendor_form" />
        </referenceContainer>
    </body>
</page>
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content">
            <uiComponent name="vendor_listing" />
        </referenceContainer>
    </body>
</page>
<?php

namespace Codilar\ProductVendor\Ui\Component\Vendor;

use Magento\Ui\DataProvider\AbstractDataProvider;

class DataProvider extends AbstractDataProvider
{
    public function __construct(
        $name,
        $primaryFieldName,
        $requestFieldName,
        \Codilar\ProductVendor\Model\ResourceModel\ProductVendor\Collection $collectionFactory,
        array $meta = [],
        array $data = []
    ) {
        $this->collection = $collectionFactory;
        parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data);
    }
}
<?php

namespace Codilar\ProductVendor\Ui\Component\AddVendor;
use Codilar\ProductVendor\Model\ResourceModel\ProductVendor\CollectionFactory;
use Magento\Framework\App\RequestInterface;
use Magento\Ui\DataProvider\AbstractDataProvider;

class DataProvider extends AbstractDataProvider
{
    /**
     * @var array
     */
    protected $loadedData;
    /**
     * @var RequestInterface
     */
    private $request;
    /**
     * @var CollectionFactory
     */
    private $collectionFactory;

    /**
     * DataProvider constructor.
     * @param string $name
     * @param string $primaryFieldName
     * @param string $requestFieldName
     * @param CollectionFactory $collectionFactory
     * @param RequestInterface $request
     * @param array $meta
     * @param array $data
     */
    public function __construct(
        string $name,
        string $primaryFieldName,
        string $requestFieldName,
        CollectionFactory $collectionFactory,
        RequestInterface $request,
        array $meta = [],
        array $data = []
    ) {
        $this->collection = $collectionFactory->create();
        parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data);
        $this->request = $request;
        $this->collectionFactory = $collectionFactory;
    }

    public function getData()
    {
        if (isset($this->loadedData)) {
            return $this->loadedData;
        }
        $id = $this->request->getParam('vendor_id');
        $items = $this->collectionFactory->create()->addFieldToFilter('vendor_id', $id)->getItems();
        foreach ($items as $item) {
            $this->loadedData[$item->getId()] = $item->getData();
        }
        return $this->loadedData;
    }
}

Ui

 Component

  AddVendor

    DataProvider.php

  Listing

    Column

       BlockActions.php

  Vendor

      DataProvider.php

view

   adminhtml

     layout

       vendor_add_index.xml

       vendor_index_index.xml

     ui_component

      vendor_form.xml

      vendor_listing.xml

<?php

namespace Codilar\ProductVendor\Ui\Component\Listing\Column;

use Magento\Cms\Block\Adminhtml\Page\Grid\Renderer\Action\UrlBuilder;
use Magento\Framework\UrlInterface;
use Magento\Framework\View\Element\UiComponent\ContextInterface;
use Magento\Framework\View\Element\UiComponentFactory;
use Magento\Ui\Component\Listing\Columns\Column;

class BlockActions extends Column
{
    const VENDOR_URL_PATH_DELETE = 'vendor/delete/index';

    /**
     * @var UrlBuilder
     */
    protected $actionUrlBuilder;

    /**
     * @var \Magento\Framework\UrlInterface
     */
    protected $urlBuilder;

    /**
     * @var string
     */
    private $editUrl;

    /**
     * @param ContextInterface $context
     * @param UiComponentFactory $uiComponentFactory
     * @param UrlBuilder $actionUrlBuilder
     * @param UrlInterface $urlBuilder
     * @param array $components
     * @param array $data
     */
    public function __construct(
        ContextInterface $context,
        UiComponentFactory $uiComponentFactory,
        UrlBuilder $actionUrlBuilder,
        UrlInterface $urlBuilder,
        array $components = [],
        array $data = []
    ) {
        $this->urlBuilder = $urlBuilder;
        $this->actionUrlBuilder = $actionUrlBuilder;
        parent::__construct($context, $uiComponentFactory, $components, $data);
    }

    /**
     * @inheritDoc
     */
    public function prepareDataSource(array $dataSource)
    {
        if (isset($dataSource['data']['items'])) {
            foreach ($dataSource['data']['items'] as & $item) {
                $name = $this->getData('name');
                if (isset($item['vendor_id'])) {
                    $item[$name]['delete'] = [
                        'href' => $this->urlBuilder->getUrl(self::VENDOR_URL_PATH_DELETE, ['vendor_id' => $item['vendor_id']]),
                        'label' => __('Delete'),
                        'confirm' => [
                            'title' => __('Delete '),
                            'message' => __('Are you sure you want to delete a record?'),
                            '__disableTmpl' => true,
                        ],
                        'post' => true,
                    ];
                    $item[$name]['edit'] = [
                        'href' => $this->urlBuilder->getUrl('vendor/add/index', ['vendor_id' => $item['vendor_id']]),
                        'label' => __('Edit'),
                        'post' => true,
                    ];
                }
                if (isset($item['identifier'])) {
                    $item[$name]['preview'] = [
                        'href' => $this->actionUrlBuilder->getUrl(
                            $item['identifier'],
                            isset($item['_first_store_id']) ? $item['_first_store_id'] : null,
                            isset($item['store_code']) ? $item['store_code'] : null
                        ),
                        'label' => __('View')
                    ];
                }
            }
        }

        return $dataSource;
    }
}