return leafRefPath;
},
+ cleanupFieldKeyArray (fieldKeyArray) {
+ fieldKeyArray.map((fieldKey, fieldKeyIndex) => {
+ fieldKeyArray[fieldKeyIndex] = fieldKey.replace(/.*\/(.*)/, '$1');
+ });
+ return fieldKeyArray;
+ },
+
resolveLeafRefPath (catalogs, leafRefPath, fieldKey, path, container) {
let pathCopy = _clone(path);
// Strip any prefixes
// Split on delimiter (/)
const pathArray = leafRefPathCopy.split('/');
+
let fieldKeyArray = fieldKey.split(':');
+
+ // strip prepending qualifiers from fieldKeys
+ fieldKeyArray = this.cleanupFieldKeyArray(fieldKeyArray);
let results = [];
// Check if relative path or not
// TODO: Below works but
- // better to convert the pathCopy to absolute/rooted path
+ // better to convert the pathCopy to absolute/rooted path
// and use the absolute module instead
if (this.isRelativePath(leafRefPathCopy)) {
let i = pathArray.length;
- while (pathArray[pathArray.length - i] == '..') {
+ while ((pathArray[pathArray.length - i] == '..') && fieldKeyArray.length > 1) {
fieldKeyArray.splice(-1, 1);
if (!isNaN(Number(fieldKeyArray[fieldKeyArray.length - 1]))) {
// found a number, so an index. strip it
} else if (fieldKeyArray.length == 2) {
for (let key in catalogs) {
for (let subKey in catalogs[key]) {
- let found = _find(catalogs[key][subKey], {id: fieldKeyArray[0]});
+ console.log(key, subKey);
+ var found = _find(catalogs[key][subKey], {id: fieldKeyArray[0]});
if (found) {
for (let foundKey in found) {
- // let topLevel = _find(found[foundKey], {id: fieldKeyArray[1]});
- if (foundKey == fieldKeyArray[1]) {
- results = this.getAbsoluteResults(found[foundKey], pathArray.splice(-i, i));
- return results;
+ if (_isArray(found[foundKey])) {
+ let topLevel = _find(found[foundKey], {id: fieldKeyArray[1]});
+ if (topLevel) {
+ results = this.getAbsoluteResults(topLevel, pathArray.splice(-i, i));
+ return results;
+ }
+ } else {
+ if (foundKey == fieldKeyArray[1]) {
+ results = this.getAbsoluteResults(found[foundKey], pathArray.splice(-i, i));
+ return results;
+ }
}
}
}
} else if (fieldKeyArray.length == 3) {
for (let key in catalogs) {
for (let subKey in catalogs[key]) {
- let found = _.find(catalogs[key][subKey], {id: fieldKeyArray[0]});
+ let found = _find(catalogs[key][subKey], {id: fieldKeyArray[0]});
if (found) {
for (let foundKey in found) {
- let topLevel = _.find(found[foundKey], {id: fieldKeyArray[1]});
- if (topLevel) {
- results = this.getAbsoluteResults(topLevel, pathArray.splice(-i, i));
- return results;
+ if (_isArray(found[foundKey])) {
+ let topLevel = _find(found[foundKey], {id: fieldKeyArray[1]});
+ if (topLevel) {
+ results = this.getAbsoluteResults(topLevel, pathArray.splice(-i, i));
+ return results;
+ }
+ } else {
+ if (foundKey == fieldKeyArray[1]) {
+ results = this.getAbsoluteResults(found[foundKey], pathArray.splice(-i, i));
+ return results;
+ }
}
}
}
}
}
}
+