瀏覽代碼

Add search feature to SSL Certificates

Ivan Kristianto 3 年之前
父節點
當前提交
29c0fcbad6
共有 2 個文件被更改,包括 61 次插入26 次删除
  1. 8 0
      frontend/js/app/nginx/certificates/main.ejs
  2. 53 26
      frontend/js/app/nginx/certificates/main.js

+ 8 - 0
frontend/js/app/nginx/certificates/main.ejs

@@ -3,6 +3,14 @@
     <div class="card-header">
         <h3 class="card-title"><%- i18n('certificates', 'title') %></h3>
         <div class="card-options">
+            <form class="search-form" role="search">
+                <div class="input-icon">
+                    <span class="input-icon-addon">
+                      <i class="fe fe-search"></i>
+                    </span>
+                    <input name="source-query" type="text" value="" class="form-control form-control-sm" placeholder="Search Certificates…" aria-label="Search in SSL Certificates">
+                </div>
+            </form>
             <a href="#" class="btn btn-outline-secondary btn-sm ml-2 help"><i class="fe fe-help-circle"></i></a>
             <% if (showAddButton) { %>
             <div class="dropdown">

+ 53 - 26
frontend/js/app/nginx/certificates/main.js

@@ -14,7 +14,44 @@ module.exports = Mn.View.extend({
         list_region: '.list-region',
         add:         '.add-item',
         help:        '.help',
-        dimmer:      '.dimmer'
+        dimmer:      '.dimmer',
+        search:      '.search-form',
+        query:       'input[name="source-query"]'
+    },
+
+    fetch: App.Api.Nginx.Certificates.getAll,
+
+    showData: function(response) {
+        this.showChildView('list_region', new ListView({
+            collection: new CertificateModel.Collection(response)
+        }));
+    },
+
+    showError: function(err) {
+        this.showChildView('list_region', new ErrorView({
+            code:    err.code,
+            message: err.message,
+            retry:   function () {
+                App.Controller.showNginxCertificates();
+            }
+        }));
+
+        console.error(err);
+    },
+
+    showEmpty: function() {
+        let manage = App.Cache.User.canManage('certificates');
+
+        this.showChildView('list_region', new EmptyView({
+            title:      App.i18n('certificates', 'empty'),
+            subtitle:   App.i18n('all-hosts', 'empty-subtitle', {manage: manage}),
+            link:       manage ? App.i18n('certificates', 'add') : null,
+            btn_color:  'pink',
+            permission: 'certificates',
+            action:     function () {
+                App.Controller.showNginxCertificateForm();
+            }
+        }));
     },
 
     regions: {
@@ -31,6 +68,17 @@ module.exports = Mn.View.extend({
         'click @ui.help': function (e) {
             e.preventDefault();
             App.Controller.showHelp(App.i18n('certificates', 'help-title'), App.i18n('certificates', 'help-content'));
+        },
+
+        'submit @ui.search': function (e) {
+            e.preventDefault();
+            let query = this.ui.query.val();
+
+            this.fetch(['owner'], query)
+                .then(response => this.showData(response))
+                .catch(err => {
+                    this.showError(err);
+                });
         }
     },
 
@@ -41,39 +89,18 @@ module.exports = Mn.View.extend({
     onRender: function () {
         let view = this;
 
-        App.Api.Nginx.Certificates.getAll(['owner'])
+        view.fetch(['owner'])
             .then(response => {
                 if (!view.isDestroyed()) {
                     if (response && response.length) {
-                        view.showChildView('list_region', new ListView({
-                            collection: new CertificateModel.Collection(response)
-                        }));
+                        view.showData(response);
                     } else {
-                        let manage = App.Cache.User.canManage('certificates');
-
-                        view.showChildView('list_region', new EmptyView({
-                            title:      App.i18n('certificates', 'empty'),
-                            subtitle:   App.i18n('all-hosts', 'empty-subtitle', {manage: manage}),
-                            link:       manage ? App.i18n('certificates', 'add') : null,
-                            btn_color:  'pink',
-                            permission: 'certificates',
-                            action:     function () {
-                                App.Controller.showNginxCertificateForm();
-                            }
-                        }));
+                        view.showEmpty();
                     }
                 }
             })
             .catch(err => {
-                view.showChildView('list_region', new ErrorView({
-                    code:    err.code,
-                    message: err.message,
-                    retry:   function () {
-                        App.Controller.showNginxCertificates();
-                    }
-                }));
-
-                console.error(err);
+                view.showError(err);
             })
             .then(() => {
                 view.ui.dimmer.removeClass('active');