diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-07-21 18:09:12 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-07-21 18:09:12 +0300 |
commit | a09c6d7e91de9abab7e2ea8dffce1cbb89bf95d8 (patch) | |
tree | bab46ee809784804b92228a0b860f3837b050755 /app | |
parent | 32ac796097b0b8fbdbc22157307d1849a3e7b35c (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app')
16 files changed, 31 insertions, 348 deletions
diff --git a/app/assets/javascripts/access_tokens/components/projects_field.vue b/app/assets/javascripts/access_tokens/components/projects_field.vue deleted file mode 100644 index 066cea5e90c..00000000000 --- a/app/assets/javascripts/access_tokens/components/projects_field.vue +++ /dev/null @@ -1,69 +0,0 @@ -<script> -import { GlFormGroup, GlFormRadio, GlFormText } from '@gitlab/ui'; -import ProjectsTokenSelector from './projects_token_selector.vue'; - -export default { - name: 'ProjectsField', - ALL_PROJECTS: 'ALL_PROJECTS', - SELECTED_PROJECTS: 'SELECTED_PROJECTS', - components: { GlFormGroup, GlFormRadio, GlFormText, ProjectsTokenSelector }, - props: { - inputAttrs: { - type: Object, - required: true, - }, - }, - data() { - return { - selectedRadio: !this.inputAttrs.value - ? this.$options.ALL_PROJECTS - : this.$options.SELECTED_PROJECTS, - selectedProjects: [], - }; - }, - computed: { - allProjectsRadioSelected() { - return this.selectedRadio === this.$options.ALL_PROJECTS; - }, - hiddenInputValue() { - return this.allProjectsRadioSelected - ? null - : this.selectedProjects.map((project) => project.id).join(','); - }, - initialProjectIds() { - if (!this.inputAttrs.value) { - return []; - } - - return this.inputAttrs.value.split(','); - }, - }, - methods: { - handleTokenSelectorFocus() { - this.selectedRadio = this.$options.SELECTED_PROJECTS; - }, - }, -}; -</script> - -<template> - <div> - <gl-form-group :label="__('Projects')" label-class="gl-pb-0!"> - <gl-form-text class="gl-pb-3">{{ - __('Set access permissions for this token.') - }}</gl-form-text> - <gl-form-radio v-model="selectedRadio" :value="$options.ALL_PROJECTS">{{ - __('All projects') - }}</gl-form-radio> - <gl-form-radio v-model="selectedRadio" :value="$options.SELECTED_PROJECTS">{{ - __('Selected projects') - }}</gl-form-radio> - <input :id="inputAttrs.id" type="hidden" :name="inputAttrs.name" :value="hiddenInputValue" /> - <projects-token-selector - v-model="selectedProjects" - :initial-project-ids="initialProjectIds" - @focus="handleTokenSelectorFocus" - /> - </gl-form-group> - </div> -</template> diff --git a/app/assets/javascripts/access_tokens/components/projects_token_selector.vue b/app/assets/javascripts/access_tokens/components/projects_token_selector.vue deleted file mode 100644 index 4843c52fcbb..00000000000 --- a/app/assets/javascripts/access_tokens/components/projects_token_selector.vue +++ /dev/null @@ -1,156 +0,0 @@ -<script> -import { - GlTokenSelector, - GlAvatar, - GlAvatarLabeled, - GlIntersectionObserver, - GlLoadingIcon, -} from '@gitlab/ui'; -import produce from 'immer'; - -import { convertToGraphQLIds, convertNodeIdsFromGraphQLIds } from '~/graphql_shared/utils'; - -import getProjectsQuery from '../graphql/queries/get_projects.query.graphql'; - -const DEBOUNCE_DELAY = 250; -const PROJECTS_PER_PAGE = 20; -const GRAPHQL_ENTITY_TYPE = 'Project'; - -export default { - name: 'ProjectsTokenSelector', - components: { - GlTokenSelector, - GlAvatar, - GlAvatarLabeled, - GlIntersectionObserver, - GlLoadingIcon, - }, - model: { - prop: 'selectedProjects', - }, - props: { - selectedProjects: { - type: Array, - required: true, - }, - initialProjectIds: { - type: Array, - required: true, - }, - }, - apollo: { - projects: { - query: getProjectsQuery, - debounce: DEBOUNCE_DELAY, - variables() { - return { - search: this.searchQuery, - after: null, - first: PROJECTS_PER_PAGE, - }; - }, - update({ projects }) { - return { - list: convertNodeIdsFromGraphQLIds(projects.nodes), - pageInfo: projects.pageInfo, - }; - }, - result() { - this.isLoadingMoreProjects = false; - this.isSearching = false; - }, - }, - initialProjects: { - query: getProjectsQuery, - variables() { - return { - ids: convertToGraphQLIds(GRAPHQL_ENTITY_TYPE, this.initialProjectIds), - }; - }, - manual: true, - skip() { - return !this.initialProjectIds.length; - }, - result({ data: { projects } }) { - this.$emit('input', convertNodeIdsFromGraphQLIds(projects.nodes)); - }, - }, - }, - data() { - return { - projects: { - list: [], - pageInfo: {}, - }, - searchQuery: '', - isLoadingMoreProjects: false, - isSearching: false, - }; - }, - methods: { - handleSearch(query) { - this.isSearching = true; - this.searchQuery = query; - }, - loadMoreProjects() { - this.isLoadingMoreProjects = true; - - this.$apollo.queries.projects.fetchMore({ - variables: { - after: this.projects.pageInfo.endCursor, - first: PROJECTS_PER_PAGE, - }, - updateQuery(previousResult, { fetchMoreResult: { projects: newProjects } }) { - const { projects: previousProjects } = previousResult; - - return produce(previousResult, (draftData) => { - draftData.projects.nodes = [...previousProjects.nodes, ...newProjects.nodes]; - draftData.projects.pageInfo = newProjects.pageInfo; - }); - }, - }); - }, - }, -}; -</script> - -<template> - <div class="gl-relative"> - <gl-token-selector - :selected-tokens="selectedProjects" - :dropdown-items="projects.list" - :loading="isSearching" - :placeholder="__('Select projects')" - menu-class="gl-w-full! gl-max-w-full!" - @input="$emit('input', $event)" - @focus="$emit('focus', $event)" - @text-input="handleSearch" - @keydown.enter.prevent - > - <template #token-content="{ token: project }"> - <gl-avatar - :entity-id="project.id" - :entity-name="project.name" - :src="project.avatarUrl" - :size="16" - /> - {{ project.nameWithNamespace }} - </template> - <template #dropdown-item-content="{ dropdownItem: project }"> - <gl-avatar-labeled - :entity-id="project.id" - :entity-name="project.name" - :size="32" - :src="project.avatarUrl" - :label="project.name" - :sub-label="project.nameWithNamespace" - /> - </template> - <template #dropdown-footer> - <gl-intersection-observer v-if="projects.pageInfo.hasNextPage" @appear="loadMoreProjects"> - <gl-loading-icon v-if="isLoadingMoreProjects" class="gl-mb-3" size="sm" /> - </gl-intersection-observer> - </template> - </gl-token-selector> - </div> -</template> diff --git a/app/assets/javascripts/access_tokens/index.js b/app/assets/javascripts/access_tokens/index.js index a7a03523e7f..9801aa08e28 100644 --- a/app/assets/javascripts/access_tokens/index.js +++ b/app/assets/javascripts/access_tokens/index.js @@ -1,6 +1,5 @@ import Vue from 'vue'; -import createFlash from '~/flash'; import { convertObjectPropsToCamelCase } from '~/lib/utils/common_utils'; import { parseRailsFormFields } from '~/lib/utils/forms'; import { __, sprintf } from '~/locale'; @@ -99,62 +98,6 @@ export const initNewAccessTokenApp = () => { }); }; -export const initProjectsField = () => { - const el = document.querySelector('.js-access-tokens-projects'); - - if (!el) { - return null; - } - - const { projects: inputAttrs } = parseRailsFormFields(el); - - if (window.gon.features.personalAccessTokensScopedToProjects) { - return new Promise((resolve) => { - Promise.all([ - import('./components/projects_field.vue'), - import('vue-apollo'), - import('~/lib/graphql'), - ]) - .then( - ([ - { default: ProjectsField }, - { default: VueApollo }, - { default: createDefaultClient }, - ]) => { - const apolloProvider = new VueApollo({ - defaultClient: createDefaultClient(), - }); - - Vue.use(VueApollo); - - resolve( - new Vue({ - el, - apolloProvider, - render(h) { - return h(ProjectsField, { - props: { - inputAttrs, - }, - }); - }, - }), - ); - }, - ) - .catch(() => { - createFlash({ - message: __( - 'An error occurred while loading the access tokens form, please try again.', - ), - }); - }); - }); - } - - return null; -}; - export const initTokensApp = () => { const el = document.getElementById('js-tokens-app'); diff --git a/app/assets/javascripts/editor/graphql/typedefs.graphql b/app/assets/javascripts/editor/graphql/typedefs.graphql index 2433ebf6c66..49beae033f1 100644 --- a/app/assets/javascripts/editor/graphql/typedefs.graphql +++ b/app/assets/javascripts/editor/graphql/typedefs.graphql @@ -12,12 +12,22 @@ type Items { nodes: [Item]! } +input ItemInput { + id: ID! + label: String! + icon: String + selected: Boolean + group: Int! + category: String + selectedLabel: String +} + extend type Query { items: Items } extend type Mutation { - updateToolbarItem(id: ID!, propsToUpdate: Item!): LocalErrors + updateToolbarItem(id: ID!, propsToUpdate: ItemInput!): LocalErrors removeToolbarItems(ids: [ID!]): LocalErrors - addToolbarItems(items: [Item]): LocalErrors + addToolbarItems(items: [ItemInput]): LocalErrors } diff --git a/app/assets/javascripts/environments/graphql/queries/environment_app.query.graphql b/app/assets/javascripts/environments/graphql/queries/environment_app.query.graphql index 2c17c42dd6d..c3ab9cf7fca 100644 --- a/app/assets/javascripts/environments/graphql/queries/environment_app.query.graphql +++ b/app/assets/javascripts/environments/graphql/queries/environment_app.query.graphql @@ -4,6 +4,5 @@ query getEnvironmentApp($page: Int, $scope: String) { stoppedCount environments reviewApp - stoppedCount } } diff --git a/app/assets/javascripts/graphql_shared/fragments/blobviewer.fragment.graphql b/app/assets/javascripts/graphql_shared/fragments/blobviewer.fragment.graphql deleted file mode 100644 index b202ed12f80..00000000000 --- a/app/assets/javascripts/graphql_shared/fragments/blobviewer.fragment.graphql +++ /dev/null @@ -1,7 +0,0 @@ -fragment BlobViewer on SnippetBlobViewer { - collapsed - renderError - tooLarge - type - fileType -} diff --git a/app/assets/javascripts/graphql_shared/fragments/iteration.fragment.graphql b/app/assets/javascripts/graphql_shared/fragments/iteration.fragment.graphql deleted file mode 100644 index 78a368089a8..00000000000 --- a/app/assets/javascripts/graphql_shared/fragments/iteration.fragment.graphql +++ /dev/null @@ -1,4 +0,0 @@ -fragment Iteration on Iteration { - id - title -} diff --git a/app/assets/javascripts/pages/profiles/personal_access_tokens/index.js b/app/assets/javascripts/pages/profiles/personal_access_tokens/index.js index 3fae9809e51..c520042c172 100644 --- a/app/assets/javascripts/pages/profiles/personal_access_tokens/index.js +++ b/app/assets/javascripts/pages/profiles/personal_access_tokens/index.js @@ -2,12 +2,10 @@ import { initAccessTokenTableApp, initExpiresAtField, initNewAccessTokenApp, - initProjectsField, initTokensApp, } from '~/access_tokens'; initAccessTokenTableApp(); initExpiresAtField(); initNewAccessTokenApp(); -initProjectsField(); initTokensApp(); diff --git a/app/assets/javascripts/pipeline_editor/graphql/mutations/client/lint_ci.mutation.graphql b/app/assets/javascripts/pipeline_editor/graphql/mutations/client/lint_ci.mutation.graphql index 5091d63111f..2d42ebb6ac3 100644 --- a/app/assets/javascripts/pipeline_editor/graphql/mutations/client/lint_ci.mutation.graphql +++ b/app/assets/javascripts/pipeline_editor/graphql/mutations/client/lint_ci.mutation.graphql @@ -13,7 +13,6 @@ mutation lintCI($endpoint: String, $content: String, $dry: Boolean) { only { refs } - afterScript stage tags when diff --git a/app/assets/javascripts/snippets/fragments/snippet_base.fragment.graphql b/app/assets/javascripts/snippets/fragments/snippet_base.fragment.graphql deleted file mode 100644 index d75b4011d1c..00000000000 --- a/app/assets/javascripts/snippets/fragments/snippet_base.fragment.graphql +++ /dev/null @@ -1,35 +0,0 @@ -#import '~/graphql_shared/fragments/blobviewer.fragment.graphql' - -fragment SnippetBase on Snippet { - id - title - description - descriptionHtml - createdAt - updatedAt - visibilityLevel - webUrl - httpUrlToRepo - sshUrlToRepo - blobs { - nodes { - binary - name - path - rawPath - size - externalStorage - renderedAsText - simpleViewer { - ...BlobViewer - } - richViewer { - ...BlobViewer - } - } - } - userPermissions { - adminSnippet - updateSnippet - } -} diff --git a/app/assets/javascripts/work_items/graphql/typedefs.graphql b/app/assets/javascripts/work_items/graphql/typedefs.graphql index 44a2999a72e..36ffba8a540 100644 --- a/app/assets/javascripts/work_items/graphql/typedefs.graphql +++ b/app/assets/javascripts/work_items/graphql/typedefs.graphql @@ -22,10 +22,25 @@ extend type WorkItem { mockWidgets: [LocalWorkItemWidget] } +input LocalUserInput { + id: ID! + name: String + username: String + webUrl: String + avatarUrl: String +} + +input LocalLabelInput { + id: ID! + title: String! + color: String + description: String +} + input LocalUpdateWorkItemInput { id: WorkItemID! - assignees: [UserCore!] - labels: [Label] + assignees: [LocalUserInput!] + labels: [LocalLabelInput] } type LocalWorkItemPayload { diff --git a/app/controllers/admin/broadcast_messages_controller.rb b/app/controllers/admin/broadcast_messages_controller.rb index bf573d45852..a53e832329f 100644 --- a/app/controllers/admin/broadcast_messages_controller.rb +++ b/app/controllers/admin/broadcast_messages_controller.rb @@ -58,7 +58,6 @@ class Admin::BroadcastMessagesController < Admin::ApplicationController def broadcast_message_params params.require(:broadcast_message).permit(%i( - color theme ends_at message diff --git a/app/controllers/profiles/personal_access_tokens_controller.rb b/app/controllers/profiles/personal_access_tokens_controller.rb index 1a8908e8571..a8d8e1e38a3 100644 --- a/app/controllers/profiles/personal_access_tokens_controller.rb +++ b/app/controllers/profiles/personal_access_tokens_controller.rb @@ -3,10 +3,6 @@ class Profiles::PersonalAccessTokensController < Profiles::ApplicationController feature_category :authentication_and_authorization - before_action do - push_frontend_feature_flag(:personal_access_tokens_scoped_to_projects, current_user) - end - def index set_index_vars scopes = params[:scopes].split(',').map(&:squish).select(&:present?).map(&:to_sym) unless params[:scopes].nil? diff --git a/app/services/issues/clone_service.rb b/app/services/issues/clone_service.rb index d054cf7827d..07dd9a98f89 100644 --- a/app/services/issues/clone_service.rb +++ b/app/services/issues/clone_service.rb @@ -41,7 +41,6 @@ module Issues def update_new_entity # we don't call `super` because we want to be able to decide whether or not to copy all comments over. update_new_entity_description - copy_award_emoji if with_notes copy_notes diff --git a/app/services/work_items/widgets/hierarchy_service/base_service.rb b/app/services/work_items/widgets/hierarchy_service/base_service.rb index 085d6c6b0e7..05625cb5240 100644 --- a/app/services/work_items/widgets/hierarchy_service/base_service.rb +++ b/app/services/work_items/widgets/hierarchy_service/base_service.rb @@ -15,7 +15,7 @@ module WorkItems elsif params.key?(:children) update_work_item_children(params.delete(:children)) else - invalid_args_error + invalid_args_error(params) end end @@ -64,7 +64,7 @@ module WorkItems error(_('A Work Item can be a parent or a child, but not both.')) end - def invalid_args_error + def invalid_args_error(params) error(_("One or more arguments are invalid: %{args}." % { args: params.keys.to_sentence } )) end diff --git a/app/views/shared/access_tokens/_form.html.haml b/app/views/shared/access_tokens/_form.html.haml index 0f6fc860883..3c39c1d6b74 100644 --- a/app/views/shared/access_tokens/_form.html.haml +++ b/app/views/shared/access_tokens/_form.html.haml @@ -45,9 +45,5 @@ = link_to _("Learn more."), help_path, target: '_blank', rel: 'noopener noreferrer' = render 'shared/tokens/scopes_form', prefix: prefix, token: token, scopes: scopes, f: f - - if prefix == :personal_access_token && Feature.enabled?(:personal_access_tokens_scoped_to_projects, current_user) - .js-access-tokens-projects - %input{ type: 'hidden', name: 'personal_access_token[projects]', id: 'personal_access_token_projects', data: { js_name: 'projects' } } - .gl-mt-3 = f.submit _('Create %{type}') % { type: type }, class: 'gl-button btn btn-confirm', data: { qa_selector: 'create_token_button' } |