util.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. export const NODE_KEY = '$treeNodeId';
  2. export const markNodeData = function(node, data) {
  3. if (!data || data[NODE_KEY]) return;
  4. Object.defineProperty(data, NODE_KEY, {
  5. value: node.id,
  6. enumerable: false,
  7. configurable: false,
  8. writable: false
  9. });
  10. };
  11. export const getNodeKey = function(key, data) {
  12. if (!data) return null;
  13. if (!key) return data[NODE_KEY];
  14. return data[key];
  15. };
  16. export const objectAssign = function(target) {
  17. for (let i = 1, j = arguments.length; i < j; i++) {
  18. let source = arguments[i] || {};
  19. for (let prop in source) {
  20. if (source.hasOwnProperty(prop)) {
  21. let value = source[prop];
  22. if (value !== undefined) {
  23. target[prop] = value;
  24. }
  25. }
  26. }
  27. }
  28. return target;
  29. };
  30. // TODO: use native Array.find, Array.findIndex when IE support is dropped
  31. export const arrayFindIndex = function(arr, pred) {
  32. for (let i = 0; i !== arr.length; ++i) {
  33. if (pred(arr[i])) {
  34. return i;
  35. }
  36. }
  37. return -1;
  38. };
  39. export const getChildState = function(node) {
  40. let all = true;
  41. let none = true;
  42. let allWithoutDisable = true;
  43. for (let i = 0, j = node.length; i < j; i++) {
  44. const n = node[i];
  45. if (n.checked !== true || n.indeterminate) {
  46. all = false;
  47. if (!n.disabled) {
  48. allWithoutDisable = false;
  49. }
  50. }
  51. if (n.checked !== false || n.indeterminate) {
  52. none = false;
  53. }
  54. }
  55. return {
  56. all,
  57. none,
  58. allWithoutDisable,
  59. half: !all && !none
  60. };
  61. };
  62. export const reInitChecked = function(node) {
  63. if (!node || node.childNodesId.length === 0) return;
  64. let childNodes = node.getChildNodes(node.childNodesId);
  65. const {
  66. all,
  67. none,
  68. half
  69. } = getChildState(childNodes);
  70. if (all) {
  71. node.checked = true;
  72. node.indeterminate = false;
  73. } else if (half) {
  74. node.checked = false;
  75. node.indeterminate = true;
  76. } else if (none) {
  77. node.checked = false;
  78. node.indeterminate = false;
  79. }
  80. let parent = node.getParent(node.parentId);
  81. if (!parent || parent.level === 0) return;
  82. if (!node.store().checkStrictly) {
  83. reInitChecked(parent);
  84. }
  85. };
  86. export const getPropertyFromData = function(node, prop) {
  87. const props = node.store().props;
  88. const data = node.data || {};
  89. const config = props[prop];
  90. if (typeof config === 'function') {
  91. return config(data, node);
  92. } else if (typeof config === 'string') {
  93. return data[config];
  94. } else if (typeof config === 'undefined') {
  95. const dataProp = data[prop];
  96. return dataProp === undefined ? '' : dataProp;
  97. }
  98. };
  99. export const isNull = function(v) {
  100. return v === undefined || v === null || v === '';
  101. }