|  |  | @ -1,5 +1,18 @@ | 
			
		
	
		
			
				
					|  |  |  | <template> | 
			
		
	
		
			
				
					|  |  |  |     <div class="shadow-box list mb-3" :class="{ scrollbar: scrollbar }"> | 
			
		
	
		
			
				
					|  |  |  |     <div class="shadow-box mb-3"> | 
			
		
	
		
			
				
					|  |  |  |         <div class="list-header"> | 
			
		
	
		
			
				
					|  |  |  |             <div class="placeholder"></div> | 
			
		
	
		
			
				
					|  |  |  |             <div class="search-wrapper"> | 
			
		
	
		
			
				
					|  |  |  |                 <a v-if="searchText == ''" class="search-icon"> | 
			
		
	
		
			
				
					|  |  |  |                     <font-awesome-icon icon="search" /> | 
			
		
	
		
			
				
					|  |  |  |                 </a> | 
			
		
	
		
			
				
					|  |  |  |                 <a v-if="searchText != ''" class="search-icon" @click="clearSearchText"> | 
			
		
	
		
			
				
					|  |  |  |                     <font-awesome-icon icon="times" /> | 
			
		
	
		
			
				
					|  |  |  |                 </a> | 
			
		
	
		
			
				
					|  |  |  |                 <input v-model="searchText" class="form-control search-input" :placeholder="$t('Search...')" /> | 
			
		
	
		
			
				
					|  |  |  |             </div> | 
			
		
	
		
			
				
					|  |  |  |         </div> | 
			
		
	
		
			
				
					|  |  |  |         <div class="list" :class="{ scrollbar: scrollbar }"> | 
			
		
	
		
			
				
					|  |  |  |             <div v-if="Object.keys($root.monitorList).length === 0" class="text-center mt-3"> | 
			
		
	
		
			
				
					|  |  |  |                 {{ $t("No Monitors, please") }} <router-link to="/add">{{ $t("add one") }}</router-link> | 
			
		
	
		
			
				
					|  |  |  |             </div> | 
			
		
	
	
		
			
				
					|  |  | @ -27,6 +40,7 @@ | 
			
		
	
		
			
				
					|  |  |  |                 </div> | 
			
		
	
		
			
				
					|  |  |  |             </router-link> | 
			
		
	
		
			
				
					|  |  |  |         </div> | 
			
		
	
		
			
				
					|  |  |  |     </div> | 
			
		
	
		
			
				
					|  |  |  | </template> | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | <script> | 
			
		
	
	
		
			
				
					|  |  | @ -45,6 +59,11 @@ export default { | 
			
		
	
		
			
				
					|  |  |  |             type: Boolean, | 
			
		
	
		
			
				
					|  |  |  |         }, | 
			
		
	
		
			
				
					|  |  |  |     }, | 
			
		
	
		
			
				
					|  |  |  |     data() { | 
			
		
	
		
			
				
					|  |  |  |         return { | 
			
		
	
		
			
				
					|  |  |  |             searchText: "", | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |     }, | 
			
		
	
		
			
				
					|  |  |  |     computed: { | 
			
		
	
		
			
				
					|  |  |  |         sortedMonitorList() { | 
			
		
	
		
			
				
					|  |  |  |             let result = Object.values(this.$root.monitorList); | 
			
		
	
	
		
			
				
					|  |  | @ -74,6 +93,17 @@ export default { | 
			
		
	
		
			
				
					|  |  |  |                 return m1.name.localeCompare(m2.name); | 
			
		
	
		
			
				
					|  |  |  |             }) | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             // Simple filter by search text | 
			
		
	
		
			
				
					|  |  |  |             // finds monitor name, tag name or tag value | 
			
		
	
		
			
				
					|  |  |  |             if (this.searchText != "") { | 
			
		
	
		
			
				
					|  |  |  |                 const loweredSearchText = this.searchText.toLowerCase(); | 
			
		
	
		
			
				
					|  |  |  |                 result = result.filter(monitor => { | 
			
		
	
		
			
				
					|  |  |  |                     return monitor.name.toLowerCase().includes(loweredSearchText) | 
			
		
	
		
			
				
					|  |  |  |                     || monitor.tags.find(tag => tag.name.toLowerCase().includes(loweredSearchText) | 
			
		
	
		
			
				
					|  |  |  |                     || tag.value?.toLowerCase().includes(loweredSearchText)) | 
			
		
	
		
			
				
					|  |  |  |                 }) | 
			
		
	
		
			
				
					|  |  |  |             } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |             return result; | 
			
		
	
		
			
				
					|  |  |  |         }, | 
			
		
	
		
			
				
					|  |  |  |     }, | 
			
		
	
	
		
			
				
					|  |  | @ -81,6 +111,9 @@ export default { | 
			
		
	
		
			
				
					|  |  |  |         monitorURL(id) { | 
			
		
	
		
			
				
					|  |  |  |             return "/dashboard/" + id; | 
			
		
	
		
			
				
					|  |  |  |         }, | 
			
		
	
		
			
				
					|  |  |  |         clearSearchText() { | 
			
		
	
		
			
				
					|  |  |  |             this.searchText = ""; | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |     }, | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | </script> | 
			
		
	
	
		
			
				
					|  |  | @ -93,6 +126,35 @@ export default { | 
			
		
	
		
			
				
					|  |  |  |     padding-right: 5px !important; | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | .list-header { | 
			
		
	
		
			
				
					|  |  |  |     border-bottom: 1px solid #dee2e6; | 
			
		
	
		
			
				
					|  |  |  |     border-radius: 10px 10px 0 0; | 
			
		
	
		
			
				
					|  |  |  |     margin: -10px; | 
			
		
	
		
			
				
					|  |  |  |     margin-bottom: 10px; | 
			
		
	
		
			
				
					|  |  |  |     padding: 15px; | 
			
		
	
		
			
				
					|  |  |  |     display: flex; | 
			
		
	
		
			
				
					|  |  |  |     justify-content: space-between; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     .dark & { | 
			
		
	
		
			
				
					|  |  |  |         background-color: #161b22; | 
			
		
	
		
			
				
					|  |  |  |         border-bottom: 0; | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | .search-wrapper { | 
			
		
	
		
			
				
					|  |  |  |     display: flex; | 
			
		
	
		
			
				
					|  |  |  |     align-items: center; | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | .search-icon { | 
			
		
	
		
			
				
					|  |  |  |     padding: 10px; | 
			
		
	
		
			
				
					|  |  |  |     color: #c0c0c0; | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | .search-input { | 
			
		
	
		
			
				
					|  |  |  |     max-width: 15em; | 
			
		
	
		
			
				
					|  |  |  | } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  | .list { | 
			
		
	
		
			
				
					|  |  |  |     &.scrollbar { | 
			
		
	
		
			
				
					|  |  |  |         min-height: calc(100vh - 240px); | 
			
		
	
	
		
			
				
					|  |  | 
 |