From f997bd51a409219e669207d08fe3d1d05fa76141 Mon Sep 17 00:00:00 2001 From: Omri Bar-Zik Date: Fri, 18 Jun 2021 17:20:20 +0300 Subject: [PATCH] feat: adding search in service view (#164) --- src/widgetsTemplates/list.widget.template.js | 4 +++ widgets/searchInput.widget.js | 2 +- widgets/services/servicesList.widget.js | 31 ++++++++++++++++++++ widgets/toolbar.widget.js | 4 +++ 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/widgetsTemplates/list.widget.template.js b/src/widgetsTemplates/list.widget.template.js index a58cf4f..b089f73 100644 --- a/src/widgetsTemplates/list.widget.template.js +++ b/src/widgetsTemplates/list.widget.template.js @@ -73,6 +73,10 @@ class myWidget extends baseWidget(EventEmitter) { searchInput.on('keypress', (data) => { this.filterList(data) }) + + searchInput.on('exitSearch', () => { + this.focus() + }) } } diff --git a/widgets/searchInput.widget.js b/widgets/searchInput.widget.js index 88ecd7a..30340fa 100644 --- a/widgets/searchInput.widget.js +++ b/widgets/searchInput.widget.js @@ -63,7 +63,7 @@ class myWidget extends baseWidget(EventEmitter) { this.widget.clearValue() this.inputValue = [] this.widget.destroy() - this.widgetsRepo.get('containerList').focus() + this.emit('exitSearch') } else { this.emit('keypress', this.captureText(key)) } diff --git a/widgets/services/servicesList.widget.js b/widgets/services/servicesList.widget.js index deb0b2d..d2f5113 100644 --- a/widgets/services/servicesList.widget.js +++ b/widgets/services/servicesList.widget.js @@ -3,6 +3,11 @@ const ListWidget = require('../../src/widgetsTemplates/list.widget.template') class myWidget extends ListWidget { + constructor ({ blessed = {}, contrib = {}, screen = {}, grid = {} }) { + super({ blessed, contrib, screen, grid }) + this.servicesListData = [] + } + getLabel () { return 'Services' } @@ -23,6 +28,30 @@ class myWidget extends ListWidget { this.utilsRepo.get('docker').listServices(cb) } + filterList (data) { + let filteredContainersList = this.servicesListData[0] + let serviceList = this.servicesListData.slice(1) + let filteredServices = [] + + if (data) { + filteredServices = serviceList.filter((service) => { + const serviceName = service[1] + const serviceImageName = service[2] + + if ((serviceName.indexOf(data) !== -1) || (serviceImageName.indexOf(data) !== -1)) { + return true + } + }) + } + + if (filteredServices.length > 0) { + filteredServices.unshift(filteredContainersList) + this.update(filteredServices) + } else { + this.update(this.servicesListData) + } + } + formatList (services) { const list = [] @@ -39,6 +68,8 @@ class myWidget extends ListWidget { list.unshift(['Id', 'Name', 'Image', 'Replicas']) + this.servicesListData = list + return list } diff --git a/widgets/toolbar.widget.js b/widgets/toolbar.widget.js index 1947afd..ec70061 100644 --- a/widgets/toolbar.widget.js +++ b/widgets/toolbar.widget.js @@ -47,6 +47,10 @@ class myWidget extends baseWidget(EventEmitter) { 'copy id': { keys: ['c'], callback: () => { this.emit('key', 'c') } + }, + 'search': { + keys: ['/'], + callback: () => { this.emit('key', '/') } } }