SearchKit - More efficient use of space when configuring display fields
authorColeman Watts <coleman@civicrm.org>
Tue, 23 Feb 2021 13:31:38 +0000 (08:31 -0500)
committerColeman Watts <coleman@civicrm.org>
Tue, 23 Feb 2021 18:48:34 +0000 (13:48 -0500)
ext/search/ang/crmSearchAdmin/crmSearchAdminLinkSelect.component.js
ext/search/ang/crmSearchAdmin/crmSearchAdminLinkSelect.html
ext/search/ang/crmSearchAdmin/displays/common/fieldOptions.html
ext/search/css/crmSearchAdmin.css

index 5a2a8ab8533defe3e19146a23f68f8ad6fdd9a56..dc916ad98d798d6196e1d57debc136f83abbe3ec 100644 (file)
         return links;
       }
 
-      function onChange() {
-        var val = $('select', $element).val();
-        if (val !== ctrl.column.link) {
-          var link = ctrl.getLink(val);
-          if (link) {
-            ctrl.column.link = link.path;
-            ctrl.column.title = link.title;
-          } else if (val === 'civicrm/') {
+      this.setValue = function(val) {
+        var link = ctrl.getLink(val),
+          oldLink = ctrl.getLink(ctrl.column.link);
+        if (link) {
+          ctrl.column.link = link.path;
+          ctrl.column.title = link.title;
+        } else {
+          if (val === 'civicrm/') {
             ctrl.column.link = val;
-            $timeout(function() {
-              $('input', $element).focus();
+            $timeout(function () {
+              $('input[type=text]', $element).focus();
             });
           } else {
             ctrl.column.link = '';
+          }
+          if (oldLink && ctrl.column.title === oldLink.title) {
             ctrl.column.title = '';
           }
         }
+      };
+
+      function onChange() {
+        var val = $('select', $element).val();
+        if (val !== ctrl.column.link) {
+          ctrl.setValue(val);
+        }
       }
 
       this.$onInit = function() {
index 74bc7291301762a5fc960b9e26f52c0483979329..3f0fa40aeba5ddb86f3eddd9c1fc539d45803d57 100644 (file)
@@ -1,5 +1,9 @@
-<select class="form-control">
-  <option value="" ng-selected="!$ctrl.column.link" >{{ ts('None') }}</option>
+<label title="{{ ts('Display as clickable link') }}" >
+  <input type="checkbox" ng-checked="$ctrl.column.link" ng-click="$ctrl.setValue($ctrl.column.link ? '' : ($ctrl.links[0] && $ctrl.links[0].path || 'civicrm/'))" >
+  {{ $ctrl.column.link ? ts('Link:') : ts('Link') }}
+</label>
+<select class="form-control" ng-show="$ctrl.links.length && $ctrl.column.link">
+  <option value="">{{ ts('None') }}</option>
   <option ng-repeat="link in $ctrl.links" value="{{ link.path }}" ng-selected="$ctrl.column.link === link.path">
     {{ link.title }}
   </option>
@@ -7,7 +11,5 @@
     {{ ts('Other...') }}
   </option>
 </select>
-<div class="form-group" ng-if="$ctrl.column.link && !$ctrl.getLink($ctrl.column.link)">
-  <input class="form-control" type="text" ng-model="$ctrl.column.link" ng-model-options="{updateOn: 'blur'}" />
-  <crm-search-admin-token-select api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" model="$ctrl.column" field="link"></crm-search-admin-token-select>
-</div>
+<input class="form-control" type="text" ng-if="$ctrl.column.link && !$ctrl.getLink($ctrl.column.link)" ng-model="$ctrl.column.link" ng-model-options="{updateOn: 'blur'}" />
+<crm-search-admin-token-select ng-if="$ctrl.column.link && !$ctrl.getLink($ctrl.column.link)" api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" model="$ctrl.column" field="link"></crm-search-admin-token-select>
index 8524d4109112e9acdc5b02a0437e0a06e6344c01..81f1b302f63f1abf1eefcd4b3b827fe57b2b6a03 100644 (file)
@@ -1,9 +1,9 @@
-<div class="form-inline">
-  <label>{{:: ts('Link:') }}</label>
-  <crm-search-admin-link-select column="col" api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams"></crm-search-admin-link-select>
-</div>
-<div class="form-inline">
-  <label>{{:: ts('Tooltip:') }}</label>
-  <input class="form-control" type="text" ng-model="col.title" />
-  <crm-search-admin-token-select api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" model="col" field="title"></crm-search-admin-token-select>
+<crm-search-admin-link-select class="form-inline crm-search-admin-flex-row" column="col" api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams"></crm-search-admin-link-select>
+<div class="form-inline crm-search-admin-flex-row">
+  <label>
+    <input type="checkbox" ng-checked="col.title" ng-click="col.title = col.title ? null : $ctrl.parent.getFieldLabel(col.key)" >
+    {{ col.title ? ts('Tooltip:') : ts('Tooltip') }}
+  </label>
+  <input class="form-control" type="text" ng-model="col.title" ng-if="col.title" ng-model-options="{updateOn: 'blur'}" />
+  <crm-search-admin-token-select ng-if="col.title" api-entity="$ctrl.apiEntity" api-params="$ctrl.apiParams" model="col" field="title"></crm-search-admin-token-select>
 </div>
index 69a780068a71c4fb29c30f2555f8bc53e0c29b58..2121cd507abd341ead339158d7fbf8ed089b5365 100644 (file)
   top: 0;
 }
 
+#bootstrap-theme .crm-search-admin-flex-row {
+  display: flex;
+  align-items: center;
+}
+#bootstrap-theme .crm-search-admin-flex-row > *:not(:first-child) {
+  margin-left: 6px;
+}
+#bootstrap-theme .crm-search-admin-flex-row > input[type=text] {
+  flex: 1;
+}
+
 #bootstrap-theme input[type=search]::placeholder {
   font-family: FontAwesome;
   text-align: right;