1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- define([
- 'Magento_Ui/js/form/element/single-checkbox',
- 'uiRegistry'
- ], function (Checkbox, registry) {
- 'use strict';
- return Checkbox.extend({
- defaults: {
- clearing: false,
- parentContainer: '',
- parentSelections: '',
- changer: '',
- exports: {
- value: '${$.parentName}:isDefaultValue'
- }
- },
- /**
- * @inheritdoc
- */
- initObservable: function () {
- this._super().
- observe('elementTmpl');
- return this;
- },
- /**
- * @inheritdoc
- */
- initConfig: function () {
- this._super();
- this.imports.changeType = this.retrieveParentName(this.parentContainer) + '.' + this.changer + ':value';
- return this;
- },
- /**
- * @inheritdoc
- */
- onUpdate: function () {
- if (this.prefer === 'radio' && this.checked() && !this.clearing) {
- this.clearValues();
- }
- this._super();
- },
- /**
- * Checkbox to radio type changer.
- *
- * @param {String} type - type to change.
- */
- changeType: function (type) {
- var typeMap = registry.get(this.retrieveParentName(this.parentContainer) + '.' + this.changer).typeMap;
- this.prefer = typeMap[type];
- this.elementTmpl(this.templates[typeMap[type]]);
- },
- /**
- * Clears values in components like this.
- */
- clearValues: function () {
- var records = registry.get(this.retrieveParentName(this.parentSelections)),
- index = this.index,
- uid = this.uid;
- records.elems.each(function (record) {
- record.elems.filter(function (comp) {
- return comp.index === index && comp.uid !== uid;
- }).each(function (comp) {
- comp.clearing = true;
- comp.clear();
- comp.clearing = false;
- });
- });
- },
- /**
- * Retrieve name for the most global parent with provided index.
- *
- * @param {String} parent - parent name.
- * @returns {String}
- */
- retrieveParentName: function (parent) {
- return this.name.replace(new RegExp('^(.+?\\.)?' + parent + '\\..+'), '$1' + parent);
- }
- });
- });
|