helpdesk-search-table.component.html 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <!--
  2. ~ Password Management Servlets (PWM)
  3. ~ http://www.pwm-project.org
  4. ~
  5. ~ Copyright (c) 2006-2009 Novell, Inc.
  6. ~ Copyright (c) 2009-2020 The PWM Project
  7. ~
  8. ~ Licensed under the Apache License, Version 2.0 (the "License");
  9. ~ you may not use this file except in compliance with the License.
  10. ~ You may obtain a copy of the License at
  11. ~
  12. ~ http://www.apache.org/licenses/LICENSE-2.0
  13. ~
  14. ~ Unless required by applicable law or agreed to in writing, software
  15. ~ distributed under the License is distributed on an "AS IS" BASIS,
  16. ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  17. ~ See the License for the specific language governing permissions and
  18. ~ limitations under the License.
  19. -->
  20. <div class="peoplesearch-header">
  21. <div class="basic-search-container" ng-if="!$ctrl.advancedSearch">
  22. <h2 id="page-content-title" ng-if="!$ctrl.advancedSearch" translate="Title_Helpdesk">Help Desk</h2>
  23. <ias-search-box id="input" ng-model="$ctrl.query"
  24. ng-model-options="{debounce: $ctrl.inputDebounce}"
  25. placeholder="{{'Placeholder_Search' | translate}}" auto-focus>
  26. </ias-search-box>
  27. <ias-button id="advanced-search-icon" class="ias-icon-button" ng-click="$ctrl.enableAdvancedSearch()"
  28. ng-if="$ctrl.advancedSearchEnabled"
  29. ng-attr-title="{{ 'Title_AdvancedSearch' | translate }}">
  30. <ias-icon class="ias-selected" icon="search_advanced"></ias-icon>
  31. </ias-button>
  32. </div>
  33. <div class="advanced-search-container" ng-if="$ctrl.advancedSearch">
  34. <div class="attribute-row" ng-repeat="query in $ctrl.queries">
  35. <select ng-model="query.key" ng-change="$ctrl.onAdvancedSearchAttributeChanged(query)">
  36. <option ng-repeat="tag in $ctrl.advancedSearchTags" ng-attr-value="{{tag.attribute}}">{{tag.label}}</option>
  37. </select>
  38. <!--Show a drop-down if the attribute type is 'select'-->
  39. <select ng-model="query.value" ng-if="$ctrl.advancedSearchTags[query.key].type === 'select'"
  40. ng-change="$ctrl.onAdvancedSearchValueChanged($event)" class="attribute-value">
  41. <option ng-attr-value="{{name}}"
  42. ng-repeat="(name, label) in $ctrl.advancedSearchTags[query.key].options">{{label}}</option>
  43. </select>
  44. <!--Otherwise, just show a regular input field-->
  45. <input ng-model="query.value" ng-if="$ctrl.advancedSearchTags[query.key].type !== 'select'"
  46. ng-change="$ctrl.onAdvancedSearchValueChanged($event)" class="attribute-value"
  47. autocomplete="off" ng-model-options="{debounce: $ctrl.inputDebounce}">
  48. <ias-button class="ias-icon-button" ng-click="$ctrl.removeSearchTag($index)"
  49. ng-attr-title="{{ 'Button_Remove' | translate }}">
  50. <ias-icon icon="close_thin"></ias-icon>
  51. </ias-button>
  52. </div>
  53. <ias-button id="add-attribute-row" class="ias-icon-button" ng-click="$ctrl.addSearchTag()"
  54. ng-if="$ctrl.queries.length < $ctrl.advancedSearchMaxRows"
  55. ng-attr-title="{{ 'Button_AddSearchAttribute' | translate }}">
  56. <ias-icon icon="new_thin"></ias-icon>
  57. </ias-button>
  58. </div>
  59. <span class="ias-fill"></span>
  60. <div class="ias-header">
  61. <ias-button id="view-tile-icon" class="ias-icon-button"
  62. ng-click="$ctrl.gotoCardsView()"
  63. ng-attr-title="{{ 'Title_HelpDeskCard' | translate }}">
  64. <ias-icon icon="view_tile_thin"></ias-icon>
  65. </ias-button>
  66. <ias-button id="view-list-icon" class="ias-icon-button ias-selected"
  67. ng-disabled="true"
  68. ng-attr-title="{{ 'Title_HelpDeskTable' | translate }}">
  69. <ias-icon icon="view_list_thin"></ias-icon>
  70. </ias-button>
  71. <div class="icon-divider vertical"></div>
  72. <ias-button class="ias-icon-button table-configuration-menu-toggle" ias-toggle="menu1"
  73. ng-attr-title="{{ 'Title_Settings' | translate }}">
  74. <ias-icon icon="configure_thick"></ias-icon>
  75. </ias-button>
  76. <ias-menu name="menu1" ias-align="end end" class="ias-styles-root">
  77. <div class="ias-input-container">
  78. <div class="checkbox-button" ng-repeat="(key, value) in $ctrl.columnConfiguration">
  79. <input type="checkbox" ng-model="value.visible" aria-label="Toggle column visibility" />
  80. <ias-button class="toggle-column-btn" ng-click="value.visible = !value.visible; $event.stopImmediatePropagation();">{{value.label}}</ias-button>
  81. </div>
  82. </div>
  83. </ias-menu>
  84. </div>
  85. </div>
  86. <div class="search-info-container">
  87. <div class="search-info" ng-class="{'loading': !$ctrl.getMessage()}"
  88. ng-if="$ctrl.loading || $ctrl.searchMessage || $ctrl.errorMessage"
  89. ng-bind="$ctrl.getMessage() || ('Display_PleaseWait' | translate)">
  90. </div>
  91. </div>
  92. <div class="people-search-component-content">
  93. <table class="ias-table" ias-sort="$ctrl.sort" ng-show="$ctrl.searchResult.people.length">
  94. <thead>
  95. <tr>
  96. <th ng-repeat="(key, value) in $ctrl.columnConfiguration" ng-if="value.visible"
  97. ias-sort-on="key">{{value.label}}</th>
  98. </tr>
  99. </thead>
  100. <tbody>
  101. <tr ng-repeat="person in $ctrl.searchResult.people | orderBy:$ctrl.sort"
  102. ng-click="$ctrl.selectPerson(person)">
  103. <td ng-repeat="(key, value) in $ctrl.columnConfiguration" ng-if="value.visible">
  104. <span ng-bind="person[key]"></span>
  105. </td>
  106. <td></td>
  107. </tr>
  108. </tbody>
  109. </table>
  110. </div>