APIs

Show:
  1. /**
  2. @module ember-flexberry
  3. */
  4.  
  5. import { isArray } from '@ember/array';
  6.  
  7. /**
  8. Used for getting objects by path containing DS.RecordArray
  9.  
  10. @for Utils.Layers
  11. @method getRecord
  12. @param {Object} source this
  13. @param {String} keyName Property path
  14. @return {Object} Retriveved object from path
  15.  
  16. Usage:
  17. controllers/my-form.js
  18. ```javascript
  19. import { getRecord } from 'ember-flexberry/utils/extended-get'l
  20. let layer = getRecord(this, 'map.mapLayer.0.layers.1')
  21.  
  22. ```
  23. */
  24. let getRecord = function (source, keyName) {
  25. // array of keys
  26. let keys = keyName.split('.');
  27.  
  28. // first object from path
  29. let result = source.get(keys[0] || keyName);
  30.  
  31. if (keys.length > 1) {
  32. for (let i = 1, len = keys.length; i < len; i++) {
  33. // needed for recognition if key is index
  34. let keyValue = parseInt(keys[i]);
  35.  
  36. // if previous object is array and key is index
  37. if (isArray(result) && !isNaN(keyValue)) {
  38. result = result.objectAt(keys[i]);
  39. } else {
  40. result = result.get(keys[i]);
  41. }
  42. }
  43. }
  44.  
  45. return result;
  46. };
  47.  
  48. export {
  49. getRecord
  50. };
  51.