Last active
August 16, 2018 15:21
-
-
Save darielnoel/1212ec35a7753b58459fa419de1c81b5 to your computer and use it in GitHub Desktop.
em-react-helper.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//import { merge, template, forIn, isArray, isObject, isString } from 'lodash'; | |
import merge from 'lodash/merge'; | |
import { loadComponentProperties, getHookFunctions, getSsrCmpConfig, decodeSsrCmpConfig, parseSsrCmpConfig } from '../em-components'; | |
import { evaluateObject } from './cmp-config-helper'; | |
function clientPopulateCmpConfig(cmpConfig) { | |
let { name } = cmpConfig; | |
return new Promise((resolve, reject) => { | |
let hooks = getHookFunctions(cmpConfig); | |
const registryHost = cmpConfig.servicesConfig.config.endPoint; | |
if (!registryHost) { | |
reject('You need to provide a registry host in cmpConfig'); | |
} | |
hooks.loadEnvConfig(cmpConfig, registryHost) | |
.then(envConfig => { | |
if (!cmpConfig.envConfig) { | |
cmpConfig.envConfig = {}; | |
} | |
cmpConfig.envConfig = merge(cmpConfig.envConfig, envConfig); | |
return cmpConfig; | |
}) | |
.then(result => { | |
hooks.loadContextBasedSettings(cmpConfig) | |
.then(result => { | |
cmpConfig = merge(cmpConfig, result); | |
cmpConfig = evaluateObject(cmpConfig, cmpConfig); | |
return hooks.preloadCustomProps(cmpConfig); | |
}) | |
.then(result => { | |
cmpConfig = merge(cmpConfig, result); | |
resolve(cmpConfig); | |
}) | |
.catch(err => { | |
console.log('Issues preloadGenericProps', err); | |
reject(err); | |
}) | |
}) | |
}); | |
} | |
function clientRenderComponent(Component, cmpConfig) { | |
let { name } = cmpConfig; | |
return new Promise((resolve, reject) => { | |
let hooks = getHookFunctions(cmpConfig); | |
let targetNodeSelector = cmpConfig.targetNodeSelector || `[data-em-cmp="${name}"]`; | |
var matches = document.querySelectorAll(targetNodeSelector); | |
for (let index = 0; index < matches.length; index++) { | |
let element = matches[index]; | |
cmpConfig = loadComponentProperties(element, cmpConfig); | |
hooks.loadSsrConfig(cmpConfig, element) | |
.then(ssrCmpConfig => { | |
if (ssrCmpConfig) { | |
cmpConfig = merge(cmpConfig, ssrCmpConfig); | |
cmpConfig = evaluateObject(cmpConfig, cmpConfig); | |
} | |
const envConfigDefaultEndpoint = `@@REGISTRY_HOST/config/v1`; | |
return hooks.loadEnvConfig(cmpConfig, envConfigDefaultEndpoint); | |
}) | |
.then(envConfig => { | |
if (!cmpConfig.envConfig) { | |
cmpConfig.envConfig = {}; | |
} | |
cmpConfig.envConfig = merge(cmpConfig.envConfig, envConfig); | |
return hooks.componentView(cmpConfig); | |
}) | |
.then(result => { | |
hooks.loadContext(cmpConfig) | |
.then(result => { | |
cmpConfig = merge(cmpConfig, result); | |
cmpConfig = evaluateObject(cmpConfig, cmpConfig); | |
return hooks.loadContextBasedSettings(cmpConfig); | |
}) | |
.then(result => { | |
// Give more priority to the ssrCmpConfig Loaded | |
if (cmpConfig.preferSsrConfig) { | |
cmpConfig = merge(result, cmpConfig); | |
} else { | |
cmpConfig = merge(cmpConfig, result); | |
} | |
cmpConfig = evaluateObject(cmpConfig, cmpConfig); | |
return hooks.preloadCustomProps(cmpConfig); | |
}) | |
.then(result => { | |
cmpConfig = merge(cmpConfig, result); | |
return hooks.renderClientComponent(Component, cmpConfig, element); | |
}) | |
.then(result => { | |
cmpConfig = merge(cmpConfig, result); | |
return hooks.removeLoadingState(Component, cmpConfig, element); | |
}) | |
.catch(err => { | |
console.log('Issues preloadGenericProps', err); | |
reject(err); | |
}) | |
}) | |
} | |
resolve(cmpConfig); | |
}); | |
} | |
function serverRenderComponent(Component, cmpConfig) { | |
return new Promise((resolve, reject) => { | |
let { name } = cmpConfig; | |
console.log("rendering: ", name); | |
let hooks = getHookFunctions(cmpConfig); | |
// var compiled = template(JSON.stringify(cmpConfig), {...cmpConfig}); | |
// compiled({ 'user': 'fred' }) | |
cmpConfig = evaluateObject(cmpConfig, cmpConfig); | |
hooks.loadContextBasedSettings(cmpConfig) | |
.then(result => { | |
if (cmpConfig.preferSsrConfig) { | |
cmpConfig = merge(result, cmpConfig); | |
} else { | |
cmpConfig = merge(cmpConfig, result); | |
} | |
cmpConfig = evaluateObject(cmpConfig, cmpConfig); | |
return hooks.preloadCustomProps(cmpConfig); | |
}) | |
.then(result => { | |
cmpConfig = merge(cmpConfig, result); | |
console.log('Antes del renderServer', cmpConfig); | |
return hooks.renderServerComponent(Component, cmpConfig); | |
}) | |
.then(stringHTML => { | |
resolve(stringHTML); | |
}) | |
.catch(err => { | |
console.log('Issues preloadGenericProps', err); | |
reject(err); | |
}) | |
}); | |
} | |
export { clientRenderComponent, serverRenderComponent, clientPopulateCmpConfig }; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment