@viewdo/dxp-story-cli
Version:
README.md
59 lines (50 loc) • 2.12 kB
JavaScript
const IndexJsWriter = require('../../common/index.js.js');
const SettingsJsWriter = require("../../common/_settings.js.js");
const isEmpty = require('lodash/isEmpty');
const camelCase = require('lodash/camelCase');
const SettingsStateJsWriter = require("./_settings.states.js.js");
class EmbeddedViewsRenderer {
constructor(_console = console) {
Object.assign(this, {
index_js_writer: new IndexJsWriter(_console),
settings_js_writer: new SettingsJsWriter(undefined, _console),
settings_state_js_writer: new SettingsStateJsWriter(_console),
isEmpty,
camelCase
});
}
create(embedded_view, state_embedded_view_path, common_states) {
const { index_js_writer, settings_js_writer, camelCase, settings_state_js_writer } = this;
const { states = [] } = embedded_view;
const variables = states.reduce((current_state_variables, state) => {
const { stateId: state_id } = state;
current_state_variables[state_id] = camelCase(state_id);
return current_state_variables;
}, {});
const imports = states.reduce((current_imports, state, index) => {
const { stateId: state_id } = state;
const variable = variables[state_id];
const file_path = `./${state_id}`;
const import_data = {
variable,
file_path
};
const isCommon = common_states.find((common_state) => {
return common_state.id == state_id;
});
if (isCommon) return current_imports;
return [
...current_imports,
import_data
];
}, []);
const state_settings_data = {
embedded_view,
imports
}
index_js_writer.write(state_embedded_view_path);
settings_js_writer.write(embedded_view, state_embedded_view_path);
settings_state_js_writer.write(state_settings_data, state_embedded_view_path);
};
}
module.exports = EmbeddedViewsRenderer;