/
expression-editor-component.js
104 lines (93 loc) · 3.62 KB
/
expression-editor-component.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
import $ from 'jquery';
import _ from 'underscore';
import loadModules from 'oroui/js/app/services/load-modules';
import ExpressionEditorView from 'oroform/js/app/views/expression-editor-view';
import EntityStructureDataProvider from 'oroentity/js/app/services/entity-structure-data-provider';
import ExpressionEditorUtil from 'oroform/js/expression-editor-util';
import BaseComponent from 'oroui/js/app/components/base/component';
const ExpressionEditorComponent = BaseComponent.extend({
/**
* @inheritDoc
*/
constructor: function ExpressionEditorComponent(options) {
ExpressionEditorComponent.__super__.constructor.call(this, options);
},
/**
* @param {Object} options
* @param {Object} options.dataProviderConfig
* @param {Array<string>} options.expressionFunctionProviderModules
*/
initialize(options) {
this._deferredInit();
$.when(
this.initEntityStructureDataProvider(options),
this.loadExpressionFunctionProviders(options)
)
.then(this._init.bind(this, options))
.then(this._resolveDeferredInit.bind(this));
ExpressionEditorComponent.__super__.initialize.call(this, options);
},
/**
* Initializes entity structure data provider
*
* @param {Object} options
* @return {Promise<EntityStructureDataProvider>}
*/
initEntityStructureDataProvider(options) {
return EntityStructureDataProvider
.createDataProvider(options.dataProviderConfig, this);
},
/**
* Loads FunctionProviders if modules are declared in options
*
* @return {Promise<[ExpressionFunctionProviderInterface]>|undefined}
*/
loadExpressionFunctionProviders(options) {
if (options.expressionFunctionProviderModules) {
return loadModules(options.expressionFunctionProviderModules);
}
},
/**
* Continue initialization once all promises are resolved
*
* @param {Object} options
* @param {EntityStructureDataProvider} entityStructureDataProvider
* @param {Array<ExpressionFunctionProviderInterface>} [expressionFunctionProviders]
*/
_init(options, entityStructureDataProvider, expressionFunctionProviders) {
if (this.disposed) {
return;
}
this.entityStructureDataProvider = entityStructureDataProvider;
const utilOptions = _.extend({
dataSourceNames: _.keys(options.dataSource),
entityDataProvider: entityStructureDataProvider,
expressionFunctionProviders: expressionFunctionProviders
}, _.pick(options, 'itemLevelLimit', 'allowedOperations', 'operations', 'supportedNames'));
this.expressionEditorUtil = new ExpressionEditorUtil(utilOptions);
const viewOptions = _.extend({
el: options._sourceElement,
autoRender: true,
util: this.expressionEditorUtil,
operationButtons: [{
name: 'field',
type: 'selectField',
viewOptions: {
supportedNames: options.supportedNames,
dataSourceNames: _.keys(options.dataSource),
entityStructureDataProvider
}
}]
}, _.pick(options, 'dataSource'));
this.view = new ExpressionEditorView(viewOptions);
},
/**
* Sets root entity in instance EntityStructureDataProvider
*
* @param {string} entityClassName
*/
setEntity(entityClassName) {
this.entityStructureDataProvider.setRootEntityClassName(entityClassName);
}
});
export default ExpressionEditorComponent;