1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- import * as _ from 'lodash';
- import { processColor } from 'react-native';
- import * as resolveAssetSource from 'react-native/Libraries/Image/resolveAssetSource';
-
- export class OptionsProcessor {
- constructor(public store, public uniqueIdProvider) { }
-
- public processOptions(options) {
- _.forEach(options, (value, key) => {
- if (!value) { return; }
-
- this.processComponent(key, value, options);
- this.processColor(key, value, options);
- this.processImage(key, value, options);
- this.processButtonsPassProps(key, value);
-
- if (!_.isEqual(key, 'passProps') && (_.isObject(value) || _.isArray(value))) {
- this.processOptions(value);
- }
- });
- }
-
- private processColor(key, value, options) {
- if (_.isEqual(key, 'color') || _.endsWith(key, 'Color')) {
- options[key] = processColor(value);
- }
- }
-
- private processImage(key, value, options) {
- if (_.isEqual(key, 'icon') || _.isEqual(key, 'image') || _.endsWith(key, 'Icon') || _.endsWith(key, 'Image')) {
- options[key] = resolveAssetSource(value);
- }
- }
-
- private processButtonsPassProps(key, value) {
- if (_.endsWith(key, 'Buttons')) {
- _.forEach(value, (button) => {
- if (button.passProps && button.id) {
- this.store.setPropsForId(button.id, button.passProps);
- button.passProps = undefined;
- }
- });
- }
- }
-
- private processComponent(key, value, options) {
- if (_.isEqual(key, 'component')) {
- value.componentId = value.id ? value.id : this.uniqueIdProvider.generate('CustomComponent');
- if (value.passProps) {
- this.store.setPropsForId(value.componentId, value.passProps);
- }
- options[key] = _.omit(value, 'passProps');
- }
- }
- }
|