devextreme
Version:
JavaScript/TypeScript Component Suite for Responsive Web Development
89 lines (88 loc) • 3.36 kB
JavaScript
/**
* DevExtreme (esm/__internal/ui/radio_group/radio_collection.js)
* Version: 25.2.8
* Build date: Mon Jun 08 2026
*
* Copyright (c) 2012 - 2026 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
import $ from "../../../core/renderer";
import {
deferRender
} from "../../../core/utils/common";
import DataExpressionMixin from "../../../ui/editor/ui.data_expression";
import CollectionWidget from "../../ui/collection/collection_widget.edit";
const RADIO_BUTTON_CHECKED_CLASS = "dx-radiobutton-checked";
const RADIO_BUTTON_ICON_CHECKED_CLASS = "dx-radiobutton-icon-checked";
const RADIO_BUTTON_ICON_CLASS = "dx-radiobutton-icon";
const RADIO_BUTTON_ICON_DOT_CLASS = "dx-radiobutton-icon-dot";
const RADIO_VALUE_CONTAINER_CLASS = "dx-radio-value-container";
const RADIO_BUTTON_CLASS = "dx-radiobutton";
class RadioCollection extends CollectionWidget {
_focusTarget() {
return $(this.element()).parent()
}
_nullValueSelectionSupported() {
return true
}
_getDefaultOptions() {
return Object.assign({}, super._getDefaultOptions(), DataExpressionMixin._dataExpressionDefaultOptions(), {
_itemAttributes: {
role: "radio"
}
})
}
_initMarkup() {
super._initMarkup();
deferRender(() => {
this._itemElements().addClass("dx-radiobutton")
})
}
_keyboardEventBindingTarget() {
return this._focusTarget()
}
_postprocessRenderItem(args) {
const {
itemData: {
html: html
},
itemElement: itemElement
} = args;
if (!html) {
const $radio = $("<div>").addClass("dx-radiobutton-icon");
$("<div>").addClass("dx-radiobutton-icon-dot").appendTo($radio);
const $radioContainer = $("<div>").append($radio).addClass("dx-radio-value-container");
$(itemElement).prepend($radioContainer)
}
super._postprocessRenderItem(args)
}
_processSelectableItem($itemElement, isSelected) {
super._processSelectableItem($itemElement, isSelected);
$itemElement.toggleClass("dx-radiobutton-checked", isSelected).find(".dx-radiobutton-icon").first().toggleClass("dx-radiobutton-icon-checked", isSelected);
this.setAria("checked", isSelected, $itemElement)
}
_refreshContent() {
this._prepareContent();
this._renderContent()
}
_supportedKeys() {
const parent = super._supportedKeys();
return Object.assign({}, parent, {
enter(e) {
var _parent$enter;
e.preventDefault();
null === (_parent$enter = parent.enter) || void 0 === _parent$enter || _parent$enter.apply(this, [e])
},
space(e) {
var _parent$space;
e.preventDefault();
null === (_parent$space = parent.space) || void 0 === _parent$space || _parent$space.apply(this, [e])
}
})
}
_itemElements() {
return this._itemContainer().children(this._itemSelector())
}
_setAriaSelectionAttribute() {}
}
export default RadioCollection;