From 47a3dc65512c6eb3f88e6ba6842f58db3f03413c Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 21 Dec 2022 09:07:17 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- .../boards/components/board_filtered_search.vue | 8 + app/assets/javascripts/issues/list/constants.js | 7 +- app/assets/javascripts/issues/list/utils.js | 8 +- app/assets/javascripts/lib/mermaid.js | 18 ++- .../access_request_action_buttons.vue | 2 - .../approve_access_request_button.vue | 1 - .../action_buttons/invite_action_buttons.vue | 2 - .../components/action_buttons/leave_button.vue | 1 - .../action_buttons/remove_group_link_button.vue | 1 - .../action_buttons/remove_member_button.vue | 25 +-- .../action_buttons/user_action_buttons.vue | 22 +-- .../members/components/table/created_at.vue | 8 +- .../components/table/member_action_buttons.vue | 5 - .../members/components/table/member_activity.vue | 38 +++++ .../members/components/table/member_source.vue | 41 ++++- .../members/components/table/members_table.vue | 23 ++- app/assets/javascripts/members/constants.js | 11 +- .../pages/groups/group_members/index.js | 2 +- .../pages/projects/project_members/index.js | 2 +- app/assets/javascripts/vue_shared/constants.js | 2 +- app/assets/stylesheets/page_bundles/members.scss | 4 + app/controllers/import/bulk_imports_controller.rb | 6 +- app/views/groups/new.html.haml | 5 +- config/feature_flags/development/bulk_import.yml | 8 - config/webpack.vendor.config.js | 3 +- ...ndex_members_on_member_namespace_id_compound.rb | 19 +++ db/schema_migrations/20221216232658 | 1 + .../reference_architectures/10k_users.md | 2 +- doc/api/container_registry.md | 4 +- .../database/avoiding_downtime_in_migrations.md | 6 +- doc/development/database/database_dictionary.md | 115 +++++++++++--- doc/user/group/import/index.md | 1 + lib/api/bulk_imports.rb | 2 +- lib/api/group_export.rb | 116 +++++++------- lib/api/project_export.rb | 167 ++++++++++---------- lib/bulk_imports/features.rb | 4 - lib/gitlab/database/gitlab_schema.rb | 84 +++++----- .../automatic_lock_writes_on_tables.rb | 2 +- lib/gitlab/http.rb | 3 +- locale/gitlab.pot | 18 +++ package.json | 3 +- .../import/bulk_imports_controller_spec.rb | 8 +- spec/db/docs_spec.rb | 17 ++ spec/features/admin/users/users_spec.rb | 2 +- .../groups/import_export/migration_history_spec.rb | 2 + spec/features/groups/members/sort_members_spec.rb | 4 +- spec/features/projects/members/sorting_spec.rb | 4 +- .../admin/users/components/user_date_spec.js | 2 +- .../components/board_filtered_search_spec.js | 3 +- spec/frontend/issues/list/mock_data.js | 13 ++ .../access_request_action_buttons_spec.js | 1 - .../action_buttons/invite_action_buttons_spec.js | 1 - .../action_buttons/remove_member_button_spec.js | 14 -- .../action_buttons/user_action_buttons_spec.js | 31 +--- .../__snapshots__/member_activity_spec.js.snap | 61 ++++++++ .../members/components/table/created_at_spec.js | 19 +-- .../components/table/member_activity_spec.js | 40 +++++ .../members/components/table/member_source_spec.js | 94 +++++++---- .../members/components/table/members_table_spec.js | 20 ++- spec/lib/gitlab/database/gitlab_schema_spec.rb | 26 +++- .../automatic_lock_writes_on_tables_spec.rb | 8 +- spec/requests/api/bulk_imports_spec.rb | 122 ++++++++++----- spec/requests/api/group_export_spec.rb | 11 +- spec/requests/api/project_export_spec.rb | 14 +- yarn.lock | 172 ++++++++++++++------- 65 files changed, 948 insertions(+), 541 deletions(-) create mode 100644 app/assets/javascripts/members/components/table/member_activity.vue delete mode 100644 config/feature_flags/development/bulk_import.yml create mode 100644 db/post_migrate/20221216232658_index_members_on_member_namespace_id_compound.rb create mode 100644 db/schema_migrations/20221216232658 create mode 100644 spec/frontend/members/components/table/__snapshots__/member_activity_spec.js.snap create mode 100644 spec/frontend/members/components/table/member_activity_spec.js diff --git a/app/assets/javascripts/boards/components/board_filtered_search.vue b/app/assets/javascripts/boards/components/board_filtered_search.vue index 97f52f21e7f..ce86a4d3123 100644 --- a/app/assets/javascripts/boards/components/board_filtered_search.vue +++ b/app/assets/javascripts/boards/components/board_filtered_search.vue @@ -244,6 +244,13 @@ export default { }); } + if (this.filterParams['not[healthStatus]']) { + filteredSearchValue.push({ + type: TOKEN_TYPE_HEALTH, + value: { data: this.filterParams['not[healthStatus]'], operator: '!=' }, + }); + } + if (search) { filteredSearchValue.push(search); } @@ -285,6 +292,7 @@ export default { 'not[my_reaction_emoji]': this.filterParams.not.myReactionEmoji, 'not[iteration_id]': this.filterParams.not.iterationId, 'not[release_tag]': this.filterParams.not.releaseTag, + 'not[health_status]': this.filterParams.not.healthStatus, }, undefined, ); diff --git a/app/assets/javascripts/issues/list/constants.js b/app/assets/javascripts/issues/list/constants.js index 49a953cad43..33892f5386d 100644 --- a/app/assets/javascripts/issues/list/constants.js +++ b/app/assets/javascripts/issues/list/constants.js @@ -360,14 +360,17 @@ export const filters = { }, [TOKEN_TYPE_HEALTH]: { [API_PARAM]: { - [NORMAL_FILTER]: 'healthStatus', - [SPECIAL_FILTER]: 'healthStatus', + [NORMAL_FILTER]: 'healthStatusFilter', + [SPECIAL_FILTER]: 'healthStatusFilter', }, [URL_PARAM]: { [OPERATOR_IS]: { [NORMAL_FILTER]: 'health_status', [SPECIAL_FILTER]: 'health_status', }, + [OPERATOR_NOT]: { + [NORMAL_FILTER]: 'not[health_status]', + }, }, }, [TOKEN_TYPE_CONTACT]: { diff --git a/app/assets/javascripts/issues/list/utils.js b/app/assets/javascripts/issues/list/utils.js index b566e08731c..03b0b3367fc 100644 --- a/app/assets/javascripts/issues/list/utils.js +++ b/app/assets/javascripts/issues/list/utils.js @@ -13,6 +13,7 @@ import { TOKEN_TYPE_MILESTONE, TOKEN_TYPE_RELEASE, TOKEN_TYPE_TYPE, + TOKEN_TYPE_HEALTH, } from '~/vue_shared/components/filtered_search_bar/constants'; import { ALTERNATIVE_FILTER, @@ -267,8 +268,13 @@ const wildcardTokens = [TOKEN_TYPE_ITERATION, TOKEN_TYPE_MILESTONE, TOKEN_TYPE_R const isWildcardValue = (tokenType, value) => wildcardTokens.includes(tokenType) && specialFilterValues.includes(value); +const isHealthStatusSpecialFilter = (tokenType, value) => + tokenType === TOKEN_TYPE_HEALTH && specialFilterValues.includes(value); + const requiresUpperCaseValue = (tokenType, value) => - tokenType === TOKEN_TYPE_TYPE || isWildcardValue(tokenType, value); + tokenType === TOKEN_TYPE_TYPE || + isWildcardValue(tokenType, value) || + isHealthStatusSpecialFilter(tokenType, value); const formatData = (token) => { if (requiresUpperCaseValue(token.type, token.value.data)) { diff --git a/app/assets/javascripts/lib/mermaid.js b/app/assets/javascripts/lib/mermaid.js index c72561ce69d..a119a33b0d7 100644 --- a/app/assets/javascripts/lib/mermaid.js +++ b/app/assets/javascripts/lib/mermaid.js @@ -1,4 +1,5 @@ import mermaid from 'mermaid'; +import mindmap from '@mermaid-js/mermaid-mindmap'; import { getParameterByName } from '~/lib/utils/url_utility'; const setIframeRenderedSize = (h, w) => { @@ -12,11 +13,10 @@ const drawDiagram = (source) => { // eslint-disable-next-line no-unsanitized/property element.innerHTML = svgCode; - const height = parseInt(element.firstElementChild.getAttribute('height'), 10); - const width = parseInt(element.firstElementChild.style.maxWidth, 10); + const { width, height } = element.firstElementChild.viewBox.baseVal; setIframeRenderedSize(height, width); }; - mermaid.mermaidAPI.render('mermaid', source, insertSvg); + mermaid.mermaidAPI.renderAsync('mermaid', source, insertSvg); }; const darkModeEnabled = () => getParameterByName('darkMode') === 'true'; @@ -56,7 +56,13 @@ const addListener = () => { false, ); }; - -addListener(); -initMermaid(); +mermaid + .registerExternalDiagrams([mindmap]) + .then(() => { + addListener(); + initMermaid(); + }) + .catch((error) => { + throw error; + }); export default {}; diff --git a/app/assets/javascripts/members/components/action_buttons/access_request_action_buttons.vue b/app/assets/javascripts/members/components/action_buttons/access_request_action_buttons.vue index f4893721b9e..164fed308ff 100644 --- a/app/assets/javascripts/members/components/action_buttons/access_request_action_buttons.vue +++ b/app/assets/javascripts/members/components/action_buttons/access_request_action_buttons.vue @@ -49,8 +49,6 @@ export default { :message="message" :title="s__('Member|Deny access')" :is-access-request="true" - icon="close" - button-category="primary" /> diff --git a/app/assets/javascripts/members/components/action_buttons/approve_access_request_button.vue b/app/assets/javascripts/members/components/action_buttons/approve_access_request_button.vue index 112f722c632..90034f46e7c 100644 --- a/app/assets/javascripts/members/components/action_buttons/approve_access_request_button.vue +++ b/app/assets/javascripts/members/components/action_buttons/approve_access_request_button.vue @@ -40,7 +40,6 @@ export default { :title="$options.title" :aria-label="$options.title" icon="check" - variant="confirm" type="submit" /> diff --git a/app/assets/javascripts/members/components/action_buttons/invite_action_buttons.vue b/app/assets/javascripts/members/components/action_buttons/invite_action_buttons.vue index ab9abfd38c6..91062c222f4 100644 --- a/app/assets/javascripts/members/components/action_buttons/invite_action_buttons.vue +++ b/app/assets/javascripts/members/components/action_buttons/invite_action_buttons.vue @@ -41,8 +41,6 @@ export default { diff --git a/app/assets/javascripts/members/components/action_buttons/leave_button.vue b/app/assets/javascripts/members/components/action_buttons/leave_button.vue index f600a207b8d..6713819c382 100644 --- a/app/assets/javascripts/members/components/action_buttons/leave_button.vue +++ b/app/assets/javascripts/members/components/action_buttons/leave_button.vue @@ -33,7 +33,6 @@ export default { :title="$options.title" :aria-label="$options.title" icon="leave" - variant="danger" /> diff --git a/app/assets/javascripts/members/components/action_buttons/remove_group_link_button.vue b/app/assets/javascripts/members/components/action_buttons/remove_group_link_button.vue index fef7940eaa2..24500fbe44d 100644 --- a/app/assets/javascripts/members/components/action_buttons/remove_group_link_button.vue +++ b/app/assets/javascripts/members/components/action_buttons/remove_group_link_button.vue @@ -32,7 +32,6 @@ export default { diff --git a/app/assets/javascripts/members/components/action_buttons/user_action_buttons.vue b/app/assets/javascripts/members/components/action_buttons/user_action_buttons.vue index 122e0a142a9..66b5ced1fa9 100644 --- a/app/assets/javascripts/members/components/action_buttons/user_action_buttons.vue +++ b/app/assets/javascripts/members/components/action_buttons/user_action_buttons.vue @@ -1,5 +1,5 @@ @@ -83,9 +73,7 @@ export default { :member-type="member.type" :user-deletion-obstacles="userDeletionObstaclesUserData" :message="message" - :icon="removeMemberButtonIcon" - :button-text="removeMemberButtonText" - :button-category="removeMemberButtonCategory" + :title="$options.i18n.title" />
diff --git a/app/assets/javascripts/members/components/table/created_at.vue b/app/assets/javascripts/members/components/table/created_at.vue index 0bad70894f9..44d124ad0db 100644 --- a/app/assets/javascripts/members/components/table/created_at.vue +++ b/app/assets/javascripts/members/components/table/created_at.vue @@ -1,10 +1,10 @@ + + diff --git a/app/assets/javascripts/members/components/table/member_source.vue b/app/assets/javascripts/members/components/table/member_source.vue index 30fcbfcd3f8..ed1971d020b 100644 --- a/app/assets/javascripts/members/components/table/member_source.vue +++ b/app/assets/javascripts/members/components/table/member_source.vue @@ -1,11 +1,19 @@ diff --git a/app/assets/javascripts/members/components/table/members_table.vue b/app/assets/javascripts/members/components/table/members_table.vue index 0512bc04085..c847f9c8311 100644 --- a/app/assets/javascripts/members/components/table/members_table.vue +++ b/app/assets/javascripts/members/components/table/members_table.vue @@ -4,12 +4,10 @@ import { mapState } from 'vuex'; import MembersTableCell from 'ee_else_ce/members/components/table/members_table_cell.vue'; import { canUnban, canOverride, canRemove, canResend, canUpdate } from 'ee_else_ce/members/utils'; import { mergeUrlParams } from '~/lib/utils/url_utility'; -import UserDate from '~/vue_shared/components/user_date.vue'; import { FIELD_KEY_ACTIONS, FIELDS, ACTIVE_TAB_QUERY_PARAM_NAME, - TAB_QUERY_PARAM_VALUES, MEMBER_STATE_AWAITING, MEMBER_STATE_ACTIVE, USER_STATE_BLOCKED, @@ -23,6 +21,7 @@ import ExpirationDatepicker from './expiration_datepicker.vue'; import MemberActionButtons from './member_action_buttons.vue'; import MemberAvatar from './member_avatar.vue'; import MemberSource from './member_source.vue'; +import MemberActivity from './member_activity.vue'; import RoleDropdown from './role_dropdown.vue'; export default { @@ -40,7 +39,7 @@ export default { RemoveGroupLinkModal, RemoveMemberModal, ExpirationDatepicker, - UserDate, + MemberActivity, LdapOverrideConfirmationModal: () => import('ee_component/members/components/ldap/ldap_override_confirmation_modal.vue'), }, @@ -80,9 +79,6 @@ export default { return paramName && currentPage && perPage && totalItems; }, - isInvitedUser() { - return this.tabQueryParamValue === TAB_QUERY_PARAM_VALUES.invite; - }, }, methods: { hasActionButtons(member) { @@ -249,7 +245,11 @@ export default { @@ -281,12 +281,8 @@ export default { - - -