Search ext: Add option to format table cell as link in search display
[civicrm-core.git] / ext / search / ang / crmSearchAdmin / displays / searchAdminDisplayTable.component.js
CommitLineData
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._);