d5886c11e7c4cc29a07d3047bb008022cee2730fabbc97c85a3dff04b3f233b74bcf45bf85ee8ab54936664f5bfbc648adbe5db674fdeb65bf85fff23bf5ec 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var vue = require('vue');
  4. var virtualTree = require('../virtual-tree.js');
  5. function useCheck(props, tree) {
  6. const checkedKeys = vue.ref(/* @__PURE__ */ new Set());
  7. const indeterminateKeys = vue.ref(/* @__PURE__ */ new Set());
  8. const { emit } = vue.getCurrentInstance();
  9. vue.watch([() => tree.value, () => props.defaultCheckedKeys], () => {
  10. return vue.nextTick(() => {
  11. _setCheckedKeys(props.defaultCheckedKeys);
  12. });
  13. }, {
  14. immediate: true
  15. });
  16. const updateCheckedKeys = () => {
  17. if (!tree.value || !props.showCheckbox || props.checkStrictly) {
  18. return;
  19. }
  20. const { levelTreeNodeMap, maxLevel } = tree.value;
  21. const checkedKeySet = checkedKeys.value;
  22. const indeterminateKeySet = /* @__PURE__ */ new Set();
  23. for (let level = maxLevel - 1; level >= 1; --level) {
  24. const nodes = levelTreeNodeMap.get(level);
  25. if (!nodes)
  26. continue;
  27. nodes.forEach((node) => {
  28. const children = node.children;
  29. if (children) {
  30. let allChecked = true;
  31. let hasChecked = false;
  32. for (const childNode of children) {
  33. const key = childNode.key;
  34. if (checkedKeySet.has(key)) {
  35. hasChecked = true;
  36. } else if (indeterminateKeySet.has(key)) {
  37. allChecked = false;
  38. hasChecked = true;
  39. break;
  40. } else {
  41. allChecked = false;
  42. }
  43. }
  44. if (allChecked) {
  45. checkedKeySet.add(node.key);
  46. } else if (hasChecked) {
  47. indeterminateKeySet.add(node.key);
  48. checkedKeySet.delete(node.key);
  49. } else {
  50. checkedKeySet.delete(node.key);
  51. indeterminateKeySet.delete(node.key);
  52. }
  53. }
  54. });
  55. }
  56. indeterminateKeys.value = indeterminateKeySet;
  57. };
  58. const isChecked = (node) => checkedKeys.value.has(node.key);
  59. const isIndeterminate = (node) => indeterminateKeys.value.has(node.key);
  60. const toggleCheckbox = (node, isChecked2, nodeClick = true, immediateUpdate = true) => {
  61. const checkedKeySet = checkedKeys.value;
  62. const toggle = (node2, checked) => {
  63. checkedKeySet[checked ? virtualTree.SetOperationEnum.ADD : virtualTree.SetOperationEnum.DELETE](node2.key);
  64. const children = node2.children;
  65. if (!props.checkStrictly && children) {
  66. children.forEach((childNode) => {
  67. if (!childNode.disabled) {
  68. toggle(childNode, checked);
  69. }
  70. });
  71. }
  72. };
  73. toggle(node, isChecked2);
  74. if (immediateUpdate) {
  75. updateCheckedKeys();
  76. }
  77. if (nodeClick) {
  78. afterNodeCheck(node, isChecked2);
  79. }
  80. };
  81. const afterNodeCheck = (node, checked) => {
  82. const { checkedNodes, checkedKeys: checkedKeys2 } = getChecked();
  83. const { halfCheckedNodes, halfCheckedKeys } = getHalfChecked();
  84. emit(virtualTree.NODE_CHECK, node.data, {
  85. checkedKeys: checkedKeys2,
  86. checkedNodes,
  87. halfCheckedKeys,
  88. halfCheckedNodes
  89. });
  90. emit(virtualTree.NODE_CHECK_CHANGE, node.data, checked);
  91. };
  92. function getCheckedKeys(leafOnly = false) {
  93. return getChecked(leafOnly).checkedKeys;
  94. }
  95. function getCheckedNodes(leafOnly = false) {
  96. return getChecked(leafOnly).checkedNodes;
  97. }
  98. function getHalfCheckedKeys() {
  99. return getHalfChecked().halfCheckedKeys;
  100. }
  101. function getHalfCheckedNodes() {
  102. return getHalfChecked().halfCheckedNodes;
  103. }
  104. function getChecked(leafOnly = false) {
  105. const checkedNodes = [];
  106. const keys = [];
  107. if ((tree == null ? void 0 : tree.value) && props.showCheckbox) {
  108. const { treeNodeMap } = tree.value;
  109. checkedKeys.value.forEach((key) => {
  110. const node = treeNodeMap.get(key);
  111. if (node && (!leafOnly || leafOnly && node.isLeaf)) {
  112. keys.push(key);
  113. checkedNodes.push(node.data);
  114. }
  115. });
  116. }
  117. return {
  118. checkedKeys: keys,
  119. checkedNodes
  120. };
  121. }
  122. function getHalfChecked() {
  123. const halfCheckedNodes = [];
  124. const halfCheckedKeys = [];
  125. if ((tree == null ? void 0 : tree.value) && props.showCheckbox) {
  126. const { treeNodeMap } = tree.value;
  127. indeterminateKeys.value.forEach((key) => {
  128. const node = treeNodeMap.get(key);
  129. if (node) {
  130. halfCheckedKeys.push(key);
  131. halfCheckedNodes.push(node.data);
  132. }
  133. });
  134. }
  135. return {
  136. halfCheckedNodes,
  137. halfCheckedKeys
  138. };
  139. }
  140. function setCheckedKeys(keys) {
  141. checkedKeys.value.clear();
  142. indeterminateKeys.value.clear();
  143. vue.nextTick(() => {
  144. _setCheckedKeys(keys);
  145. });
  146. }
  147. function setChecked(key, isChecked2) {
  148. if ((tree == null ? void 0 : tree.value) && props.showCheckbox) {
  149. const node = tree.value.treeNodeMap.get(key);
  150. if (node) {
  151. toggleCheckbox(node, isChecked2, false);
  152. }
  153. }
  154. }
  155. function _setCheckedKeys(keys) {
  156. if (tree == null ? void 0 : tree.value) {
  157. const { treeNodeMap } = tree.value;
  158. if (props.showCheckbox && treeNodeMap && (keys == null ? void 0 : keys.length) > 0) {
  159. for (const key of keys) {
  160. const node = treeNodeMap.get(key);
  161. if (node && !isChecked(node)) {
  162. toggleCheckbox(node, true, false, false);
  163. }
  164. }
  165. updateCheckedKeys();
  166. }
  167. }
  168. }
  169. return {
  170. updateCheckedKeys,
  171. toggleCheckbox,
  172. isChecked,
  173. isIndeterminate,
  174. getCheckedKeys,
  175. getCheckedNodes,
  176. getHalfCheckedKeys,
  177. getHalfCheckedNodes,
  178. setChecked,
  179. setCheckedKeys
  180. };
  181. }
  182. exports.useCheck = useCheck;
  183. //# sourceMappingURL=useCheck.js.map