<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.
-->
<loading-state error="error" ng-if="!info"></loading-state>
<div ng-if="info">
    <div class="form-group">
        <input type="text"
               ng-model="searchCriteria"
               class="form-control"
               placeholder="Search for name (e.g. producer, target, etc)"
               auto-focus />
    </div>

    <div class="table-responsive">
        <table class="table table-bordered table-editable">
            <thead>
                <tr>
                    <th ng-click="reverse = !reverse">
                        Name <span class="fa" ng-class="{'fa-caret-down': reverse, 'fa-caret-up': !reverse}"></span>
                    </th>
                    <th>Value</th>
                </tr>
            </thead>
            <tbody>
                <tr ng-repeat="item in info | orderBy:'name':reverse | filter:{name: searchCriteria} track by item.name" ng-switch="item.type">
                    <td>
                        {{item.name}}
                    </td>
                    <td ng-switch-when="java.lang.Number" editable-number="item.value" edit-disabled="!item.reconfigurable" onbeforesave="updateAdjunctConfig(item, $data)" buttons="right" e-disabled-submit-on-enter>
                        {{item.value}}
                    </td>
                    <td ng-switch-when="java.lang.Integer" ng-class="{'edit-disabled': !item.reconfigurable}" editable-number="item.value" edit-disabled="!item.reconfigurable" onbeforesave="updateAdjunctConfig(item, $data)" buttons="right" e-disabled-submit-on-enter>
                        {{item.value}}
                    </td>
                    <td ng-switch-default ng-class="{'edit-disabled': !item.reconfigurable}" editable-text="item.value" edit-disabled="!item.reconfigurable" onbeforesave="updateAdjunctConfig(item, $data)" buttons="right" e-disabled-submit-on-enter>
                        {{item.value}}
                    </td>
                </tr>
                <tr ng-if="item.length == 0 ">
                    <td colspan="2" class="text-center"><h4>No sensors found matching <code>{{filterValue}}</code></h4></td>
                </tr>
            </tbody>
        </table>
    </div>
</div>
