@@ 1-74 (lines=74) @@ | ||
1 | define(function(require) { |
|
2 | 'use strict'; |
|
3 | ||
4 | var Select2GridChannelAwareComponent; |
|
5 | var _ = require('underscore'); |
|
6 | var Select2GridComponent = require('oro/select2-grid-component'); |
|
7 | var BaseSelect2View = require('oroform/js/app/views/select2-view'); |
|
8 | var viewFactory = require('orochannel/js/app/factory/select2-channel-aware-view-factory'); |
|
9 | var Select2View = viewFactory(BaseSelect2View); |
|
10 | ||
11 | Select2GridChannelAwareComponent = Select2GridComponent.extend({ |
|
12 | $sourceElement: null, |
|
13 | channelId: '', |
|
14 | channelFieldName: '', |
|
15 | gridName: '', |
|
16 | ViewType: Select2View, |
|
17 | /** |
|
18 | * @inheritDoc |
|
19 | */ |
|
20 | constructor: function Select2GridChannelAwareComponent() { |
|
21 | Select2GridChannelAwareComponent.__super__.constructor.apply(this, arguments); |
|
22 | }, |
|
23 | ||
24 | /** |
|
25 | * @inheritDoc |
|
26 | */ |
|
27 | initialize: function(options) { |
|
28 | this.$sourceElement = options._sourceElement; |
|
29 | this.channelId = _.result(options, 'channel_id') || this.channelId; |
|
30 | this.channelFieldName = _.result(options, 'channel_field_name') || this.channelFieldName; |
|
31 | this.gridName = options.configs.grid.name; |
|
32 | Select2GridChannelAwareComponent.__super__.initialize.call(this, options); |
|
33 | }, |
|
34 | prepareViewOptions: function(options, config) { |
|
35 | var opts = Select2GridChannelAwareComponent.__super__.prepareViewOptions.apply(this, arguments); |
|
36 | opts.$channelSelector = this.findChannelSelectorElement(); |
|
37 | opts.additionalParamsCb = _.bind(this._getAdditionalParams, this); |
|
38 | ||
39 | return opts; |
|
40 | }, |
|
41 | preConfig: function(config) { |
|
42 | Select2GridChannelAwareComponent.__super__.preConfig.call(this, config); |
|
43 | ||
44 | var that = this; |
|
45 | config.ajax.data = _.wrap(config.ajax.data, function(parentDataFunction) { |
|
46 | var result = parentDataFunction.apply(this, _.rest(arguments)); |
|
47 | ||
48 | return _.extend(result, that._getAdditionalParams()); |
|
49 | }); |
|
50 | ||
51 | return config; |
|
52 | }, |
|
53 | findChannelSelectorElement: function() { |
|
54 | return this.$sourceElement.closest('form').find('select[name="' + this.channelFieldName + '"]'); |
|
55 | }, |
|
56 | _getAdditionalParams: function() { |
|
57 | var result = {}; |
|
58 | var $channel = this.findChannelSelectorElement(); |
|
59 | var channelIds = [$channel.val()]; |
|
60 | ||
61 | if (this.channelId) { |
|
62 | channelIds.push(this.channelId); |
|
63 | } |
|
64 | ||
65 | result.channelIds = channelIds.join(','); |
|
66 | ||
67 | result[this.gridName + '[channelIds]'] = channelIds.join(','); |
|
68 | ||
69 | return result; |
|
70 | } |
|
71 | }); |
|
72 | ||
73 | return Select2GridChannelAwareComponent; |
|
74 | }); |
|
75 | ||
76 |
@@ 1-63 (lines=63) @@ | ||
1 | define(function(require) { |
|
2 | 'use strict'; |
|
3 | ||
4 | var Select2AutocompleteChannelAwareComponent; |
|
5 | var $ = require('jquery'); |
|
6 | var _ = require('underscore'); |
|
7 | var Select2AutocompleteComponent = require('oro/select2-autocomplete-component'); |
|
8 | var BaseSelect2View = require('oroform/js/app/views/select2-autocomplete-view'); |
|
9 | var viewFactory = require('orochannel/js/app/factory/select2-channel-aware-view-factory'); |
|
10 | var Select2View = viewFactory(BaseSelect2View); |
|
11 | ||
12 | Select2AutocompleteChannelAwareComponent = Select2AutocompleteComponent.extend({ |
|
13 | $sourceElement: null, |
|
14 | channelId: '', |
|
15 | channelFieldName: '', |
|
16 | ViewType: Select2View, |
|
17 | /** |
|
18 | * @inheritDoc |
|
19 | */ |
|
20 | constructor: function Select2AutocompleteChannelAwareComponent() { |
|
21 | Select2AutocompleteChannelAwareComponent.__super__.constructor.apply(this, arguments); |
|
22 | }, |
|
23 | /** |
|
24 | * @inheritDoc |
|
25 | */ |
|
26 | initialize: function(options) { |
|
27 | this.$sourceElement = options._sourceElement; |
|
28 | this.channelId = _.result(options, 'channel_id') || this.channelId; |
|
29 | this.channelFieldName = _.result(options, 'channel_field_name') || this.channelFieldName; |
|
30 | Select2AutocompleteChannelAwareComponent.__super__.initialize.call(this, options); |
|
31 | }, |
|
32 | prepareViewOptions: function(options, config) { |
|
33 | var opts = Select2AutocompleteChannelAwareComponent.__super__.prepareViewOptions.apply(this, arguments); |
|
34 | opts.$channelSelector = this.findChannelSelectorElement(); |
|
35 | opts.additionalParamsCb = _.bind(this._getAdditionalParams, this); |
|
36 | ||
37 | return opts; |
|
38 | }, |
|
39 | makeQuery: function(query) { |
|
40 | var $channel = $('select[name="' + this.channelFieldName + '"]'); |
|
41 | return query + ';' + (this.channelId || $channel.val()); |
|
42 | }, |
|
43 | findChannelSelectorElement: function() { |
|
44 | return this.$sourceElement.closest('form').find('select[name="' + this.channelFieldName + '"]'); |
|
45 | }, |
|
46 | _getAdditionalParams: function() { |
|
47 | var params = {}; |
|
48 | ||
49 | var $channel = this.findChannelSelectorElement(); |
|
50 | var channelIds = [$channel.val()]; |
|
51 | if (this.channelId) { |
|
52 | channelIds.push(this.channelId); |
|
53 | } |
|
54 | ||
55 | params.channelIds = channelIds.join(','); |
|
56 | ||
57 | return { |
|
58 | params: params |
|
59 | }; |
|
60 | } |
|
61 | }); |
|
62 | return Select2AutocompleteChannelAwareComponent; |
|
63 | }); |
|
64 | ||
65 |