spee.ch/client/utils/dynamicImport.js

42 lines
1.5 KiB
JavaScript
Raw Normal View History

const { customComponents } = require('siteConfig.js');
2018-03-20 12:23:39 -07:00
function getDeepestChildValue (parent, childrenKeys) {
if (!parent[childrenKeys[0]]) {
return null;
}
2018-03-20 12:23:39 -07:00
let childKey = childrenKeys.shift(); // .shift() retrieves the first element of array and removes it from array
let child = parent[childKey];
if (childrenKeys.length >= 1) {
return getDeepestChildValue(child, childrenKeys);
}
return child;
}
2018-03-20 13:20:15 -07:00
export const dynamicImport = (filePath) => {
2018-03-20 12:23:39 -07:00
// validate inputs
if (!filePath) {
throw new Error('no file path provided to dynamicImport()');
}
if (typeof filePath !== 'string') {
2018-03-20 13:26:52 -07:00
console.log('dynamicImport > filePath:', filePath);
console.log('dynamicImport > filePath type:', typeof filePath);
2018-03-20 12:23:39 -07:00
throw new Error('file path provided to dynamicImport() must be a string');
}
if (!customComponents) {
console.log('No customComponents found in siteConfig.js');
return null;
}
2018-03-20 12:23:39 -07:00
// split out the file folders // filter out any empty or white-space-only strings
const folders = filePath.split('/').filter(folderName => folderName.replace(/\s/g, '').length);
// check for the component corresponding to file path in the site config object
// i.e. customComponents[folders[0]][folders[2][...][folders[n]]
const component = getDeepestChildValue(customComponents, folders);
if (component) {
console.log('Found custom component:', component);
return component;
2018-03-20 12:23:39 -07:00
} else {
console.log('Found custom component:', component);
return null;
2018-03-20 12:23:39 -07:00
}
};