Since the checkbox toggles if the fields are visible or hidden with JavaScript I want the password fields to be required when visible and not required when hidden.
How could I achieve something like this?
I'm creating the fields like this in LayoutProcessor.php
$jsLayoutResult['components']['checkout']['children']['steps']['children']['shipping-step']['children']
['shippingAddress']['children']['customer-email']['children']['additional-login-form-fields']['children']['create_account_checkbox'] = [
'component' => 'Magento_Ui/js/form/element/abstract',
'config' => [
'customScope' => 'shippingAddress.custom_attributes',
'template' => 'ui/form/field',
'elementTmpl' => 'BB_Checkout/form/element/checkbox-overwrite'
],
'provider' => 'checkoutProvider',
'dataScope' => 'shippingAddress.custom_attributes.create_account_checkbox',
'description' => __('I would like to create an account'),
'sortOrder' => '1004',
'validation' => [
'required-entry' => false,
]
];
$jsLayoutResult['components']['checkout']['children']['steps']['children']['shipping-step']['children']
['shippingAddress']['children']['customer-email']['children']['additional-login-form-fields']['children']['create_account_password'] = [
'component' => 'Magento_Ui/js/form/element/abstract',
'config' => [
'customScope' => 'shippingAddress.custom_attributes',
'customEntry' => null,
'template' => 'ui/form/field',
'elementTmpl' => 'BB_Checkout/form/element/password-overwrite'
],
'dataScope' => 'shippingAddress.custom_attributes.create_account_password',
'label' => __('Password'),
'provider' => 'checkoutProvider',
'validation' => [
'validate-password' => true,
'required-entry' => true
],
'options' => [],
'filterBy' => null,
'customEntry' => null,
'visible' => true,
'sortOrder' => '1005'
];
$jsLayoutResult['components']['checkout']['children']['steps']['children']['shipping-step']['children']
['shippingAddress']['children']['customer-email']['children']['additional-login-form-fields']['children']['create_account_password_confirm'] = [
'component' => 'Magento_Ui/js/form/element/abstract',
'config' => [
'customScope' => 'shippingAddress.custom_attributes',
'customEntry' => null,
'template' => 'ui/form/field',
'elementTmpl' => 'BB_Checkout/form/element/password-overwrite-confirm-password'
],
'dataScope' => 'shippingAddress.custom_attributes.create_account_password_confirm',
'label' => __('Confirm password'),
'provider' => 'checkoutProvider',
'validation' => [
'required-entry' => true
],
'options' => [],
'filterBy' => null,
'customEntry' => null,
'visible' => true,
'sortOrder' => '1006'
];
And i'm currently hiding and showing them like this:
create-account.js
/**
* Create account by entering password and confirm password.
*/
require([
'jquery'
], function ($) {
return togglePasswordFields = function () {
if($('input[name*="create_account_checkbox"]:checked').length && $('.form-login .hidden-fields:visible').length != 1) {
$('div[name*="create_account_password"]').css('display','block');
$('div[name*="create_account_password_confirm"]').css('display','block');
$('div[name*="create_account_password"]').setAttribute('aria-required', true);
$('div[name*="create_account_password"]').required = true;
$('div[name*="create_account_password_confirm"]').setAttribute('aria-required', true);
$('div[name*="create_account_password_confirm"]').required = true;
} else {
$('div[name*="create_account_password"]').css('display','none');
$('div[name*="create_account_password_confirm"]').css('display','none');
$('div[name*="create_account_password"]').setAttribute('aria-required', false);
$('div[name*="create_account_password"]').required = false);
$('div[name*="create_account_password_confirm"]').setAttribute('aria-required', false);
$('div[name*="create_account_password_confirm"]').required = false;
}
}
});The aria-required, true/false and required = true/false doesn't do a thing right now.
Thanks!
