From c97e6c68451dd6cb5a57a13f2ed75779810e055b Mon Sep 17 00:00:00 2001 From: Tatiana Ovchinnikova Date: Mon, 14 Feb 2022 13:49:00 -0600 Subject: [PATCH] Add pagination to Networks table in Launch Instance wizard The most elegant way to add pagination is to refactor the table using which already contains pagination instead of wiring it to the existing table framework. This solution adds the pagination and makes the code more readable. Partial-Bug: #1859423 Change-Id: I10dad8367b444f1097e677fb3dfec841405dcbc7 --- .../network/network-details.html | 23 +++ .../network/network.controller.js | 39 +++- .../network/network.controller.spec.js | 3 - .../launch-instance/network/network.html | 175 ++---------------- .../networkports/ports.controller.js | 5 +- .../networkports/ports.spec.js | 1 - 6 files changed, 69 insertions(+), 177 deletions(-) create mode 100644 openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/network/network-details.html diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/network/network-details.html b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/network/network-details.html new file mode 100644 index 0000000000..cee9222ed4 --- /dev/null +++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/network/network-details.html @@ -0,0 +1,23 @@ +
+
ID
+
{$ item.id $}
+
Project
+
{$ item.tenant_id $}
+
External Network
+
{$ item['router:external'] | yesno $}
+
+Provider Network +
+
+
Type
+
{$ item['provider:network_type'] $}
+
+
+
Segmentation ID
+
{$ item['provider:segmentation_id'] $}
+
+
+
Physical Network
+
{$ item['provider:physical_network'] $}
+
+
diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/network/network.controller.js b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/network/network.controller.js index 6126c9099e..bd2f324650 100644 --- a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/network/network.controller.js +++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/network/network.controller.js @@ -28,11 +28,12 @@ LaunchInstanceNetworkController.$inject = [ '$scope', + 'horizon.dashboard.project.workflow.launch-instance.basePath', 'horizon.framework.widgets.action-list.button-tooltip.row-warning.service', 'launchInstanceModel' ]; - function LaunchInstanceNetworkController($scope, tooltipService, launchInstanceModel) { + function LaunchInstanceNetworkController($scope, basePath, tooltipService, launchInstanceModel) { var ctrl = this; ctrl.networkStatuses = { @@ -45,21 +46,45 @@ 'DOWN': gettext('Down') }; + function getStatus(status) { + return ctrl.networkStatuses[status]; + } + + function getAdminState(state) { + return ctrl.networkAdminStates[state]; + } + ctrl.tableDataMulti = { - available: $scope.model.networks, - allocated: $scope.model.newInstanceSpec.networks, - displayedAvailable: [], - displayedAllocated: [], + available: launchInstanceModel.networks, + allocated: launchInstanceModel.newInstanceSpec.networks, minItems: 1 }; + ctrl.availableTableConfig = { + selectAll: false, + trackId: 'id', + detailsTemplateUrl: basePath + 'network/network-details.html', + columns: [ + {id: 'name', title: gettext('Network'), priority: 1, + template: '
{$ item.name || item.id $}
'}, + {id: 'subnets', title: gettext('Subnets Associated'), priority: 2, + template: '
{$ subnet.name || subnet.id $}
'}, + {id: 'shared', title: gettext('Shared'), filters: ['yesno'], priority: 1}, + {id: 'admin_state', title: gettext('Admin State'), filters: [getAdminState], priority: 1}, + {id: 'status', title: gettext('Status'), filters: [getStatus], priority: 1} + ] + }; + + ctrl.allocatedTableConfig = angular.copy(ctrl.availableTableConfig); + ctrl.allocatedTableConfig.noItemsMessage = gettext( + 'Select one or more networks from the available networks below.'); + ctrl.tableLimits = { maxAllocation: -1 }; ctrl.tableHelpText = { - allocHelpText: gettext('Select networks from those listed below.'), - availHelpText: gettext('Select at least one network') + availHelpText: gettext('Select one or more') }; ctrl.tooltipModel = tooltipService; diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/network/network.controller.spec.js b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/network/network.controller.spec.js index d2e962fc54..22dad64425 100644 --- a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/network/network.controller.spec.js +++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/network/network.controller.spec.js @@ -82,7 +82,6 @@ it('contains help text for the table', function() { expect(ctrl.tableHelpText).toBeDefined(); - expect(ctrl.tableHelpText.allocHelpText).toBeDefined(); expect(ctrl.tableHelpText.availHelpText).toBeDefined(); }); @@ -90,8 +89,6 @@ expect(ctrl.tableDataMulti).toBeDefined(); expect(ctrl.tableDataMulti.available).toEqual(['net-a', 'net-b']); expect(ctrl.tableDataMulti.allocated).toEqual(['net-a']); - expect(ctrl.tableDataMulti.displayedAllocated).toEqual([]); - expect(ctrl.tableDataMulti.displayedAvailable).toEqual([]); expect(ctrl.tableDataMulti.minItems).toEqual(1); }); diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/network/network.html b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/network/network.html index eeda2f9142..d52e00ff2b 100644 --- a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/network/network.html +++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/network/network.html @@ -1,169 +1,16 @@

- Networks provide the communication channels for instances in the cloud. + Networks provide the communication channels for instances in the cloud. You can select ports instead of networks or a mix of both.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NetworkSubnets AssociatedSharedAdmin StateStatus
-
- Select an item from Available items below -
-
- - {$ $index + 1 $} - - - {$ row.name || row.id $} -
{$ subnet.name || subnet.id $}
-
{$ row.shared | yesno $}{$ row.admin_state | decode:ctrl.networkAdminStates $}{$ row.status | decode:ctrl.networkStatuses $} - - - - - -
-
-
ID
-
{$ row.id $}
-
Project
-
{$ row.tenant_id $}
-
External Network
-
{$ row['router:external'] | yesno $}
-
- Provider Network -
-
-
Type
-
{$ row['provider:network_type'] $}
-
-
-
Segmentation ID
-
{$ row['provider:segmentation_id'] $}
-
-
-
Physical Network
-
{$ row['provider:physical_network'] $}
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NetworkSubnets AssociatedSharedAdmin StateStatus
-
- No available items -
-
- - {$ row.name || row.id $} -
{$ subnet.name || subnet.id $}
-
{$ row.shared | yesno $}{$ row.admin_state | decode:ctrl.networkAdminStates $}{$ row.status | decode:ctrl.networkStatuses $} - - - - - - - - -
-
-
ID
-
{$ row.id $}
-
Project
-
{$ row.tenant_id $}
-
External Network
-
{$ row['router:external'] | yesno $}
-
- Provider Network -
-
-
Type
-
{$ row['provider:network_type'] $}
-
-
-
Segmentation ID
-
{$ row['provider:segmentation_id'] $}
-
-
-
Physical Network
-
{$ row['provider:physical_network'] $}
-
-
-
-
-
-
+ + + +
diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.controller.js b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.controller.js index 462a8573e4..e4483b7559 100644 --- a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.controller.js +++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.controller.js @@ -100,10 +100,11 @@ }; ctrl.allocatedTableConfig = angular.copy(ctrl.availableTableConfig); + ctrl.allocatedTableConfig.noItemsMessage = gettext( + 'Select one or more ports from the available ports below.'); ctrl.tableHelpText = { - allocHelpText: gettext('Select ports from those listed below.'), - availHelpText: gettext('Select one or more ports') + availHelpText: gettext('Select one or more') }; ctrl.filterFacets = [{ diff --git a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.spec.js b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.spec.js index da5611aa18..459a1e5f03 100644 --- a/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.spec.js +++ b/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/networkports/ports.spec.js @@ -59,7 +59,6 @@ it('contains help text for the table', function() { expect(ctrl.tableHelpText).toBeDefined(); - expect(ctrl.tableHelpText.allocHelpText).toBeDefined(); }); it('nameOrID returns the name', function() {