ui.hierarchical_collection_widget.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. /**
  2. * DevExtreme (ui/hierarchical_collection/ui.hierarchical_collection_widget.js)
  3. * Version: 19.1.16
  4. * Build date: Tue Oct 18 2022
  5. *
  6. * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED
  7. * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
  8. */
  9. "use strict";
  10. var _renderer = require("../../core/renderer");
  11. var _renderer2 = _interopRequireDefault(_renderer);
  12. var _data = require("../../core/utils/data");
  13. var _extend = require("../../core/utils/extend");
  14. var _iterator = require("../../core/utils/iterator");
  15. var _devices = require("../../core/devices");
  16. var _devices2 = _interopRequireDefault(_devices);
  17. var _icon = require("../../core/utils/icon");
  18. var _icon2 = _interopRequireDefault(_icon);
  19. var _ui = require("./ui.data_adapter");
  20. var _ui2 = _interopRequireDefault(_ui);
  21. var _uiCollection_widget = require("../collection/ui.collection_widget.edit");
  22. var _uiCollection_widget2 = _interopRequireDefault(_uiCollection_widget);
  23. var _bindable_template = require("../widget/bindable_template");
  24. var _bindable_template2 = _interopRequireDefault(_bindable_template);
  25. var _type = require("../../core/utils/type");
  26. var _common = require("../../core/utils/common");
  27. function _interopRequireDefault(obj) {
  28. return obj && obj.__esModule ? obj : {
  29. "default": obj
  30. }
  31. }
  32. var DISABLED_STATE_CLASS = "dx-state-disabled";
  33. var HierarchicalCollectionWidget = _uiCollection_widget2.default.inherit({
  34. _getDefaultOptions: function() {
  35. return (0, _extend.extend)(this.callBase(), {
  36. keyExpr: "id",
  37. displayExpr: "text",
  38. selectedExpr: "selected",
  39. disabledExpr: "disabled",
  40. itemsExpr: "items",
  41. hoverStateEnabled: true,
  42. parentIdExpr: "parentId",
  43. expandedExpr: "expanded"
  44. })
  45. },
  46. _defaultOptionsRules: function() {
  47. return this.callBase().concat([{
  48. device: function() {
  49. return "desktop" === _devices2.default.real().deviceType && !_devices2.default.isSimulator()
  50. },
  51. options: {
  52. focusStateEnabled: true
  53. }
  54. }])
  55. },
  56. _init: function() {
  57. this.callBase();
  58. this._initAccessors();
  59. this._initDataAdapter();
  60. this._initDynamicTemplates()
  61. },
  62. _initDataSource: function() {
  63. this.callBase();
  64. this._dataSource && this._dataSource.paginate(false)
  65. },
  66. _initDataAdapter: function() {
  67. var accessors = this._createDataAdapterAccessors();
  68. this._dataAdapter = new _ui2.default((0, _extend.extend)({
  69. dataAccessors: {
  70. getters: accessors.getters,
  71. setters: accessors.setters
  72. },
  73. items: this.option("items")
  74. }, this._getDataAdapterOptions()))
  75. },
  76. _getDataAdapterOptions: _common.noop,
  77. _initDynamicTemplates: function() {
  78. var that = this;
  79. this._defaultTemplates.item = new _bindable_template2.default(function($container, itemData) {
  80. $container.html(itemData.html).append(this._getIconContainer(itemData)).append(this._getTextContainer(itemData)).append(this._getPopoutContainer(itemData));
  81. that._addContentClasses(itemData, $container.parent())
  82. }.bind(this), ["text", "html", "items", "icon"], this.option("integrationOptions.watchMethod"), {
  83. text: this._displayGetter,
  84. items: this._itemsGetter
  85. })
  86. },
  87. _getIconContainer: function(itemData) {
  88. return itemData.icon ? _icon2.default.getImageContainer(itemData.icon) : void 0
  89. },
  90. _getTextContainer: function(itemData) {
  91. return (0, _renderer2.default)("<span>").text(itemData.text)
  92. },
  93. _getPopoutContainer: _common.noop,
  94. _addContentClasses: _common.noop,
  95. _initAccessors: function() {
  96. var that = this;
  97. (0, _iterator.each)(this._getAccessors(), function(_, accessor) {
  98. that._compileAccessor(accessor)
  99. });
  100. this._compileDisplayGetter()
  101. },
  102. _getAccessors: function() {
  103. return ["key", "selected", "items", "disabled", "parentId", "expanded"]
  104. },
  105. _getChildNodes: function(node) {
  106. var that = this;
  107. var arr = [];
  108. (0, _iterator.each)(node.internalFields.childrenKeys, function(_, key) {
  109. var childNode = that._dataAdapter.getNodeByKey(key);
  110. arr.push(childNode)
  111. });
  112. return arr
  113. },
  114. _hasChildren: function(node) {
  115. return node && node.internalFields.childrenKeys.length
  116. },
  117. _compileAccessor: function(optionName) {
  118. var getter = "_" + optionName + "Getter";
  119. var setter = "_" + optionName + "Setter";
  120. var optionExpr = this.option(optionName + "Expr");
  121. if (!optionExpr) {
  122. this[getter] = _common.noop;
  123. this[setter] = _common.noop;
  124. return
  125. } else {
  126. if ((0, _type.isFunction)(optionExpr)) {
  127. this[setter] = function(obj, value) {
  128. obj[optionExpr()] = value
  129. };
  130. this[getter] = function(obj) {
  131. return obj[optionExpr()]
  132. };
  133. return
  134. }
  135. }
  136. this[getter] = (0, _data.compileGetter)(optionExpr);
  137. this[setter] = (0, _data.compileSetter)(optionExpr)
  138. },
  139. _createDataAdapterAccessors: function() {
  140. var that = this;
  141. var accessors = {
  142. getters: {},
  143. setters: {}
  144. };
  145. (0, _iterator.each)(this._getAccessors(), function(_, accessor) {
  146. var getterName = "_" + accessor + "Getter";
  147. var setterName = "_" + accessor + "Setter";
  148. var newAccessor = "parentId" === accessor ? "parentKey" : accessor;
  149. accessors.getters[newAccessor] = that[getterName];
  150. accessors.setters[newAccessor] = that[setterName]
  151. });
  152. accessors.getters.display = !this._displayGetter ? function(itemData) {
  153. return itemData.text
  154. } : this._displayGetter;
  155. return accessors
  156. },
  157. _initMarkup: function() {
  158. this.callBase();
  159. this._addWidgetClass()
  160. },
  161. _addWidgetClass: function() {
  162. this._focusTarget().addClass(this._widgetClass())
  163. },
  164. _widgetClass: _common.noop,
  165. _renderItemFrame: function(index, itemData) {
  166. var $itemFrame = this.callBase.apply(this, arguments);
  167. $itemFrame.toggleClass(DISABLED_STATE_CLASS, !!this._disabledGetter(itemData));
  168. return $itemFrame
  169. },
  170. _optionChanged: function(args) {
  171. switch (args.name) {
  172. case "displayExpr":
  173. case "keyExpr":
  174. this._initAccessors();
  175. this._initDynamicTemplates();
  176. this.repaint();
  177. break;
  178. case "itemsExpr":
  179. case "selectedExpr":
  180. case "disabledExpr":
  181. case "expandedExpr":
  182. case "parentIdExpr":
  183. this._initAccessors();
  184. this._initDataAdapter();
  185. this.repaint();
  186. break;
  187. case "items":
  188. this._initDataAdapter();
  189. this.callBase(args);
  190. break;
  191. default:
  192. this.callBase(args)
  193. }
  194. }
  195. });
  196. module.exports = HierarchicalCollectionWidget;