I'm creating an extension that modifies the checkout page. What I want to do is create a custom textarea with some additional classes and a wrapper class. I used the default textarea UI Component as a base.
How can I use this new component in my checkout page?
What I did so far:
Create an extension: Silvan\Checkout, added class Comment.php in Silvan\Checkout\Component\Form\Element
and created file view/frontend/ui_component/etc/definition.xml:
<?xml version="1.0" encoding="UTF-8"?>
<components xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_definition.xsd">
<comment class="Silvan\Checkout\Component\Form\Element\Comment">
<argument name="data" xsi:type="array">
<item name="js_config" xsi:type="array">
<item name="component" xsi:type="string">Silvan_Checkout/js/form/element/comment</item>
<item name="config" xsi:type="array">
<item name="template" xsi:type="string">ui/form/field</item>
<item name="elementTmpl" xsi:type="string">ui/form/element/comment</item>
</item>
</item>
</argument>
</comment>
</components>
view/frontend/web/js/form/element/comment.js
define([
'./abstract'
], function (Abstract) {
'use strict';
return Abstract.extend({
defaults: {
cols: 15,
rows: 2,
template: 'ui/form/element/comment'
}
});
});
view/frontend/web/templates/form/element/comment.html
<div class="c-checkout-form--comments">
<div class="c-checkout-form__title h5">
Opmerking bij bestelling
</div>
<!-- /.h5 -->
<div class="form__group">
<textarea class="form__text--full-width form__text--bg-gray" data-bind="
value: value,
hasFocus: focused,
attr: {
name: inputName,
cols: cols,
rows: rows,
'aria-describedby': noticeId,
placeholder: placeholder,
id: uid
}"
/>
</div>
<!-- /.form__group -->
</div>
Then I try to use the component in my checkout page under shipping-address-fieldset/children:
<item name="order_comment" xsi:type="array">
<item name="config" xsi:type="array">
<item name="component" xsi:type="string">Silvan_Checkout/js/form/element/comment</item>
<item name="config" xsi:type="array">
<item name="template" xsi:type="string">ui/form/field</item>
<item name="elementTmpl" xsi:type="string">ui/form/element/comment</item>
</item>
</item>
</item>