valueUtil.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. const INTERNAL_KEY_PREFIX = 'RC_TABLE_KEY';
  2. function toArray(arr) {
  3. if (arr === undefined || arr === null) {
  4. return [];
  5. }
  6. return Array.isArray(arr) ? arr : [arr];
  7. }
  8. export function getPathValue(record, path) {
  9. // Skip if path is empty
  10. if (!path && typeof path !== 'number') {
  11. return record;
  12. }
  13. const pathList = toArray(path);
  14. let current = record;
  15. for (let i = 0; i < pathList.length; i += 1) {
  16. if (!current) {
  17. return null;
  18. }
  19. const prop = pathList[i];
  20. current = current[prop];
  21. }
  22. return current;
  23. }
  24. export function getColumnsKey(columns) {
  25. const columnKeys = [];
  26. const keys = {};
  27. columns.forEach(column => {
  28. const {
  29. key,
  30. dataIndex
  31. } = column || {};
  32. let mergedKey = key || toArray(dataIndex).join('-') || INTERNAL_KEY_PREFIX;
  33. while (keys[mergedKey]) {
  34. mergedKey = `${mergedKey}_next`;
  35. }
  36. keys[mergedKey] = true;
  37. columnKeys.push(mergedKey);
  38. });
  39. return columnKeys;
  40. }
  41. export function mergeObject() {
  42. const merged = {};
  43. /* eslint-disable no-param-reassign */
  44. function fillProps(obj, clone) {
  45. if (clone) {
  46. Object.keys(clone).forEach(key => {
  47. const value = clone[key];
  48. if (value && typeof value === 'object') {
  49. obj[key] = obj[key] || {};
  50. fillProps(obj[key], value);
  51. } else {
  52. obj[key] = value;
  53. }
  54. });
  55. }
  56. }
  57. /* eslint-enable */
  58. for (var _len = arguments.length, objects = new Array(_len), _key = 0; _key < _len; _key++) {
  59. objects[_key] = arguments[_key];
  60. }
  61. objects.forEach(clone => {
  62. fillProps(merged, clone);
  63. });
  64. return merged;
  65. }
  66. export function validateValue(val) {
  67. return val !== null && val !== undefined;
  68. }