diff --git a/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/lbaasv2.scss b/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/lbaasv2.scss index daf1bdc..b75dfe7 100644 --- a/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/lbaasv2.scss +++ b/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/lbaasv2.scss @@ -67,3 +67,15 @@ } } } + +/* Progress indicator in the table while items are loading */ +[table-status] { + .progress { + margin: 0px auto; + width: 25%; + height: $line-height-computed; + .progress-bar { + width: 100%; + } + } +} \ No newline at end of file diff --git a/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/listeners/table.controller.js b/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/listeners/table.controller.js index 4abba18..cfe3b1f 100644 --- a/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/listeners/table.controller.js +++ b/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/listeners/table.controller.js @@ -46,6 +46,8 @@ var ctrl = this; ctrl.items = []; ctrl.src = []; + ctrl.loading = true; + ctrl.error = false; ctrl.checked = {}; ctrl.loadbalancerId = $routeParams.loadbalancerId; ctrl.batchActions = batchActions.init(ctrl.loadbalancerId); @@ -56,11 +58,21 @@ //////////////////////////////// function init() { - api.getListeners(ctrl.loadbalancerId).success(success); + ctrl.src = []; + ctrl.loading = true; + ctrl.error = false; + api.getListeners(ctrl.loadbalancerId).then(success, fail); } function success(response) { - ctrl.src = response.items; + ctrl.src = response.data.items; + ctrl.loading = false; + } + + function fail(/*response*/) { + ctrl.src = []; + ctrl.loading = false; + ctrl.error = true; } } diff --git a/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/listeners/table.controller.spec.js b/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/listeners/table.controller.spec.js index 3f0b2ec..c949ed7 100644 --- a/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/listeners/table.controller.spec.js +++ b/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/listeners/table.controller.spec.js @@ -18,12 +18,17 @@ describe('LBaaS v2 Listeners Table Controller', function() { var controller, lbaasv2API, rowActions, batchActions; - var items = []; + var items = [{ foo: 'bar' }]; + var apiFail = false; function fakeAPI() { return { - success: function(callback) { - callback({ items: items }); + then: function(success, fail) { + if (apiFail && fail) { + fail(); + } else { + success({ data: { items: items } }); + } } }; } @@ -64,6 +69,8 @@ var ctrl = createController(); expect(ctrl.items).toEqual([]); expect(ctrl.src).toEqual(items); + expect(ctrl.loading).toBe(false); + expect(ctrl.error).toBe(false); expect(ctrl.checked).toEqual({}); expect(ctrl.loadbalancerId).toEqual('1234'); expect(rowActions.init).toHaveBeenCalledWith(ctrl.loadbalancerId); @@ -74,13 +81,16 @@ }); it('should invoke lbaasv2 apis', function() { - createController(); + var ctrl = createController(); expect(lbaasv2API.getListeners).toHaveBeenCalled(); + expect(ctrl.src.length).toBe(1); }); - it('should init the rowactions', function() { - createController(); - expect(lbaasv2API.getListeners).toHaveBeenCalled(); + it('should show error if loading fails', function() { + apiFail = true; + var ctrl = createController(); + expect(ctrl.src.length).toBe(0); + expect(ctrl.error).toBe(true); }); }); diff --git a/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/listeners/table.html b/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/listeners/table.html index cc21842..d31ae2f 100644 --- a/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/listeners/table.html +++ b/neutron_lbaas_dashboard/static/dashboard/project/lbaasv2/listeners/table.html @@ -112,6 +112,8 @@ + +