From 0c7f5391a959a7c22b9ed19c0472a7938f362003 Mon Sep 17 00:00:00 2001 From: anna_vovchenko Date: Tue, 12 Oct 2021 19:14:24 +0300 Subject: [PATCH 1/3] Change the Kubernetes section UX Now that we want to encourage our customers to use the GitLab Agent, we are changing the Kubernetes section UX: - adding 3 tabs on the top of the page - adding 'All' tab to show both Kubernetes options in 1 view - adding the actions button that is constant across the tabs - updating the tabs to have unique permalinks (via query parameters) Changelog: changed --- .../components/agent_empty_state.vue | 53 ++--- .../clusters_list/components/agent_table.vue | 167 ++++++-------- .../clusters_list/components/agents.vue | 27 ++- .../clusters_list/components/clusters.vue | 38 +++- .../components/clusters_actions.vue | 49 ++++ .../components/clusters_empty_state.vue | 79 +++++++ .../components/clusters_main_view.vue | 71 ++++++ .../components/clusters_view_all.vue | 209 +++++++++++++++++ .../components/install_agent_modal.vue | 5 +- .../javascripts/clusters_list/constants.js | 47 ++++ .../javascripts/clusters_list/eventhub.js | 3 + .../graphql/queries/get_agents.query.graphql | 2 + app/assets/javascripts/clusters_list/index.js | 4 +- .../javascripts/clusters_list/load_agents.js | 44 ---- .../clusters_list/load_clusters.js | 5 + .../clusters_list/load_main_view.js | 57 +++++ .../clusters_list/store/actions.js | 16 +- .../clusters_list/store/mutation_types.js | 1 + .../clusters_list/store/mutations.js | 5 +- .../javascripts/clusters_list/store/state.js | 7 +- app/assets/stylesheets/pages/clusters.scss | 18 ++ app/helpers/clusters_helper.rb | 38 ++-- .../clusters/clusters/_cluster_list.html.haml | 19 +- .../clusters/clusters/_empty_state.html.haml | 14 -- app/views/clusters/clusters/index.html.haml | 20 +- app/views/clusters/clusters/new.html.haml | 2 +- .../features/clusters/create_agent_spec.rb | 5 +- .../features/projects/cluster_agents_spec.rb | 6 +- locale/gitlab.pot | 88 +++++-- .../infrastructure/kubernetes/index.rb | 2 +- .../components/agent_empty_state_spec.js | 14 +- .../components/agent_table_spec.js | 6 +- .../clusters_list/components/agents_spec.js | 43 +++- .../components/clusters_actions_spec.js | 55 +++++ .../components/clusters_empty_state_spec.js | 79 +++++++ .../components/clusters_main_view_spec.js | 66 ++++++ .../clusters_list/components/clusters_spec.js | 59 +++-- .../components/clusters_view_all_spec.js | 214 ++++++++++++++++++ .../clusters_list/store/mutations_spec.js | 10 +- spec/helpers/clusters_helper_spec.rb | 38 +++- 40 files changed, 1354 insertions(+), 331 deletions(-) create mode 100644 app/assets/javascripts/clusters_list/components/clusters_actions.vue create mode 100644 app/assets/javascripts/clusters_list/components/clusters_empty_state.vue create mode 100644 app/assets/javascripts/clusters_list/components/clusters_main_view.vue create mode 100644 app/assets/javascripts/clusters_list/components/clusters_view_all.vue create mode 100644 app/assets/javascripts/clusters_list/eventhub.js delete mode 100644 app/assets/javascripts/clusters_list/load_agents.js create mode 100644 app/assets/javascripts/clusters_list/load_main_view.js delete mode 100644 app/views/clusters/clusters/_empty_state.html.haml create mode 100644 spec/frontend/clusters_list/components/clusters_actions_spec.js create mode 100644 spec/frontend/clusters_list/components/clusters_empty_state_spec.js create mode 100644 spec/frontend/clusters_list/components/clusters_main_view_spec.js create mode 100644 spec/frontend/clusters_list/components/clusters_view_all_spec.js diff --git a/app/assets/javascripts/clusters_list/components/agent_empty_state.vue b/app/assets/javascripts/clusters_list/components/agent_empty_state.vue index 405339b3d365cf..4afcdff47f3290 100644 --- a/app/assets/javascripts/clusters_list/components/agent_empty_state.vue +++ b/app/assets/javascripts/clusters_list/components/agent_empty_state.vue @@ -17,7 +17,7 @@ export default { inject: [ 'emptyStateImage', 'projectPath', - 'agentDocsUrl', + 'multipleClustersDocsUrl', 'installDocsUrl', 'getStartedDocsUrl', 'integrationDocsUrl', @@ -37,22 +37,29 @@ export default { diff --git a/app/assets/javascripts/clusters_list/components/agent_table.vue b/app/assets/javascripts/clusters_list/components/agent_table.vue index 487e512c06d50f..49d87d8f99777f 100644 --- a/app/assets/javascripts/clusters_list/components/agent_table.vue +++ b/app/assets/javascripts/clusters_list/components/agent_table.vue @@ -1,22 +1,12 @@ diff --git a/app/assets/javascripts/clusters_list/components/agents.vue b/app/assets/javascripts/clusters_list/components/agents.vue index ed44c1f5fa795d..9aa07373241885 100644 --- a/app/assets/javascripts/clusters_list/components/agents.vue +++ b/app/assets/javascripts/clusters_list/components/agents.vue @@ -2,9 +2,9 @@ import { GlAlert, GlKeysetPagination, GlLoadingIcon } from '@gitlab/ui'; import { MAX_LIST_COUNT, ACTIVE_CONNECTION_TIME } from '../constants'; import getAgentsQuery from '../graphql/queries/get_agents.query.graphql'; +import eventHub from '../eventhub'; import AgentEmptyState from './agent_empty_state.vue'; import AgentTable from './agent_table.vue'; -import InstallAgentModal from './install_agent_modal.vue'; export default { apollo: { @@ -21,12 +21,14 @@ export default { this.updateTreeList(data); return data; }, + result() { + this.emitAgentsLoaded(); + }, }, }, components: { AgentEmptyState, AgentTable, - InstallAgentModal, GlAlert, GlKeysetPagination, GlLoadingIcon, @@ -38,11 +40,16 @@ export default { required: false, type: String, }, + limit: { + default: null, + required: false, + type: Number, + }, }, data() { return { cursor: { - first: MAX_LIST_COUNT, + first: this.limit ? this.limit : MAX_LIST_COUNT, last: null, }, folderList: {}, @@ -70,7 +77,7 @@ export default { return this.$apollo.queries.agents.loading; }, showPagination() { - return this.agentPageInfo.hasPreviousPage || this.agentPageInfo.hasNextPage; + return !this.limit && (this.agentPageInfo.hasPreviousPage || this.agentPageInfo.hasNextPage); }, treePageInfo() { return this.agents?.project?.repository?.tree?.trees?.pageInfo || {}; @@ -79,6 +86,9 @@ export default { return Boolean(this.agents?.project?.repository?.tree?.trees?.nodes?.length); }, }, + mounted() { + eventHub.$on('agentRegistered', this.reloadAgents); + }, methods: { reloadAgents() { this.$apollo.queries.agents.refetch(); @@ -130,14 +140,18 @@ export default { } return 'unused'; }, + emitAgentsLoaded() { + const count = this.agents?.project?.clusterAgents?.count; + this.$emit('onAgentsLoad', count); + }, }, };