Search ext: Add links to search admin and improve links in displays
[civicrm-core.git] / ext / search / ang / crmSearchAdmin / displays / searchAdminDisplayTable.component.js
1 (function(angular, $, _) {
2 "use strict";
3
4 angular.module('crmSearchAdmin').component('searchAdminDisplayTable', {
5 bindings: {
6 display: '<',
7 apiEntity: '<',
8 apiParams: '<'
9 },
10 require: {
11 crmSearchAdmin: '^crmSearchAdmin'
12 },
13 templateUrl: '~/crmSearchAdmin/displays/searchAdminDisplayTable.html',
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 = {
28 connectWith: '.crm-search-admin-edit-columns',
29 containment: '.crm-search-admin-edit-columns-wrapper'
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
42 this.$onInit = function () {
43 ctrl.getFieldLabel = ctrl.crmSearchAdmin.getFieldLabel;
44 if (!ctrl.display.settings) {
45 ctrl.display.settings = {
46 limit: 20,
47 pager: true
48 };
49 }
50 if (!ctrl.display.settings.columns) {
51 ctrl.display.settings.columns = _.transform(ctrl.apiParams.select, function(columns, fieldExpr) {
52 columns.push(fieldToColumn(fieldExpr));
53 });
54 ctrl.hiddenColumns = [];
55 } else {
56 var activeColumns = _.collect(ctrl.display.settings.columns, 'expr');
57 ctrl.hiddenColumns = _.transform(ctrl.apiParams.select, function(hiddenColumns, fieldExpr) {
58 if (!_.includes(activeColumns, fieldExpr)) {
59 hiddenColumns.push(fieldToColumn(fieldExpr));
60 }
61 });
62 _.each(activeColumns, function(fieldExpr, index) {
63 if (!_.includes(ctrl.apiParams.select, fieldExpr)) {
64 ctrl.display.settings.columns.splice(index, 1);
65 }
66 });
67 }
68 ctrl.links = _.cloneDeep(searchMeta.getEntity(ctrl.apiEntity).paths || []);
69 _.each(ctrl.apiParams.join, function(join) {
70 var joinName = join[0].split(' AS '),
71 joinEntity = searchMeta.getEntity(joinName[0]);
72 _.each(joinEntity.paths, function(path) {
73 var link = _.cloneDeep(path);
74 link.path = link.path.replace(/\[/g, '[' + joinName[1] + '.');
75 ctrl.links.push(link);
76 });
77 });
78 };
79
80 }
81 });
82
83 })(angular, CRM.$, CRM._);