generator-react-native-tvos
Version:
React Native tvOS application generator
65 lines (49 loc) • 2.06 kB
JavaScript
const ejs = require('ejs');
const jetpack = require('fs-jetpack');
const { upperFirst, find } = require('lodash');
const {
routesImportTemplate,
tabBarItemTemplate,
routesImportContainersTemplate,
routesTemplate,
} = require('./fragments');
const { components } = require('../../constants/configMapping');
const getSelectedComponents = compArr => compArr.map(
comp => find(components, { name: comp }).file);
module.exports = {
printNavigator: (screens, keys, destinationPath) => {
const template = jetpack.read(`${__dirname}/index.ejs`);
const nav = {};
nav.routes = keys.reduce(
(acc, key) => acc += ` ${ejs.render(routesImportTemplate, { key })}\n`, '');
nav.initialTab = keys[0];
nav.tabs = keys.reduce(
(acc, key, idx) => acc += ejs.render(
tabBarItemTemplate, { key, title: screens[idx].name }), '');
const rendered = ejs.render(template, { nav });
jetpack.write(`${destinationPath}/index.js`, rendered);
return true;
},
printRoutes: (screens, keys, destinationPath) => {
const template = jetpack.read(`${__dirname}/routes.ejs`);
const routes = { imports: '', routes: ''};
keys.forEach((key, idx) => {
const selectedComponents = getSelectedComponents(screens[idx].components);
['index', 'details'].forEach(type => {
routes.imports += ejs.render(
routesImportContainersTemplate[type], { upperKey: upperFirst(key) });
routes.routes += ejs.render(
routesTemplate[type], { key, upperKey: upperFirst(key), title: screens[idx].name });
});
if (selectedComponents.indexOf('Category') !== -1) {
routes.imports += ejs.render(
routesImportContainersTemplate.category, { upperKey: upperFirst(key) });
routes.routes += ejs.render(
routesTemplate.category, { key, upperKey: upperFirst(key), title: screens[idx].name });
}
});
const rendered = ejs.render(template, { routes });
jetpack.write(`${destinationPath}/routes.js`, rendered);
return true;
}
};