Commit | Line | Data |
---|---|---|
44402a2e CW |
1 | (function(angular, $, _) { |
2 | "use strict"; | |
3 | ||
493f83d4 | 4 | angular.module('crmSearchAdmin').component('searchAdminDisplayTable', { |
44402a2e CW |
5 | bindings: { |
6 | display: '<', | |
7 | apiEntity: '<', | |
8 | apiParams: '<' | |
9 | }, | |
10 | require: { | |
11 | crmSearchAdmin: '^crmSearchAdmin' | |
12 | }, | |
493f83d4 | 13 | templateUrl: '~/crmSearchAdmin/displays/searchAdminDisplayTable.html', |
44402a2e CW |
14 | controller: function($scope, searchMeta) { |
15 | var ts = $scope.ts = CRM.ts(), | |
16 | ctrl = this; | |
17 | ||
18 | function fieldToColumn(fieldExpr) { | |
19 | var info = searchMeta.parseExpr(fieldExpr); | |
20 | return { | |
21 | expr: fieldExpr, | |
22 | label: ctrl.getFieldLabel(fieldExpr), | |
23 | dataType: (info.fn && info.fn.name === 'COUNT') ? 'Integer' : info.field.data_type | |
24 | }; | |
25 | } | |
26 | ||
27 | this.sortableOptions = { | |
e35ea035 CW |
28 | connectWith: '.crm-search-admin-edit-columns', |
29 | containment: '.crm-search-admin-edit-columns-wrapper' | |
44402a2e CW |
30 | }; |
31 | ||
32 | this.removeCol = function(index) { | |
33 | ctrl.hiddenColumns.push(ctrl.display.settings.columns[index]); | |
34 | ctrl.display.settings.columns.splice(index, 1); | |
35 | }; | |
36 | ||
37 | this.restoreCol = function(index) { | |
38 | ctrl.display.settings.columns.push(ctrl.hiddenColumns[index]); | |
39 | ctrl.hiddenColumns.splice(index, 1); | |
40 | }; | |
41 | ||
e35ea035 CW |
42 | this.toggleLink = function(col) { |
43 | col.link = col.link ? '' : (window.location.pathname + window.location.search).replace('civicrm/admin/search', 'civicrm/'); | |
44 | }; | |
45 | ||
44402a2e | 46 | this.$onInit = function () { |
44402a2e CW |
47 | ctrl.getFieldLabel = ctrl.crmSearchAdmin.getFieldLabel; |
48 | if (!ctrl.display.settings.columns) { | |
49 | ctrl.display.settings.columns = _.transform(ctrl.apiParams.select, function(columns, fieldExpr) { | |
50 | columns.push(fieldToColumn(fieldExpr)); | |
51 | }); | |
52 | ctrl.hiddenColumns = []; | |
53 | } else { | |
54 | var activeColumns = _.collect(ctrl.display.settings.columns, 'expr'); | |
55 | ctrl.hiddenColumns = _.transform(ctrl.apiParams.select, function(hiddenColumns, fieldExpr) { | |
56 | if (!_.includes(activeColumns, fieldExpr)) { | |
57 | hiddenColumns.push(fieldToColumn(fieldExpr)); | |
58 | } | |
59 | }); | |
60 | _.each(activeColumns, function(fieldExpr, index) { | |
61 | if (!_.includes(ctrl.apiParams.select, fieldExpr)) { | |
62 | ctrl.display.settings.columns.splice(index, 1); | |
63 | } | |
64 | }); | |
65 | } | |
66 | }; | |
67 | ||
68 | } | |
69 | }); | |
70 | ||
71 | })(angular, CRM.$, CRM._); |