Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/assets/javascripts/vue_shared/components/sidebar/labels_select_widget/labels_select_root.vue')
-rw-r--r--app/assets/javascripts/vue_shared/components/sidebar/labels_select_widget/labels_select_root.vue406
1 files changed, 0 insertions, 406 deletions
diff --git a/app/assets/javascripts/vue_shared/components/sidebar/labels_select_widget/labels_select_root.vue b/app/assets/javascripts/vue_shared/components/sidebar/labels_select_widget/labels_select_root.vue
deleted file mode 100644
index 2c27a69d587..00000000000
--- a/app/assets/javascripts/vue_shared/components/sidebar/labels_select_widget/labels_select_root.vue
+++ /dev/null
@@ -1,406 +0,0 @@
-<script>
-import { debounce } from 'lodash';
-import issuableLabelsSubscription from 'ee_else_ce/sidebar/queries/issuable_labels.subscription.graphql';
-import { MutationOperationMode, getIdFromGraphQLId } from '~/graphql_shared/utils';
-import { createAlert } from '~/flash';
-import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
-import { IssuableType } from '~/issues/constants';
-
-import { __ } from '~/locale';
-import SidebarEditableItem from '~/sidebar/components/sidebar_editable_item.vue';
-import { issuableLabelsQueries } from '~/sidebar/constants';
-import { DEBOUNCE_DROPDOWN_DELAY, DropdownVariant } from './constants';
-import DropdownContents from './dropdown_contents.vue';
-import DropdownValue from './dropdown_value.vue';
-import {
- isDropdownVariantSidebar,
- isDropdownVariantStandalone,
- isDropdownVariantEmbedded,
-} from './utils';
-
-export default {
- components: {
- DropdownValue,
- DropdownContents,
- SidebarEditableItem,
- },
- mixins: [glFeatureFlagsMixin()],
- inject: {
- allowLabelEdit: {
- default: false,
- },
- },
- props: {
- iid: {
- type: String,
- required: false,
- default: '',
- },
- fullPath: {
- type: String,
- required: true,
- },
- allowLabelRemove: {
- type: Boolean,
- required: false,
- default: false,
- },
- allowMultiselect: {
- type: Boolean,
- required: false,
- default: false,
- },
- variant: {
- type: String,
- required: false,
- default: DropdownVariant.Sidebar,
- },
- labelsFilterBasePath: {
- type: String,
- required: false,
- default: '',
- },
- labelsFilterParam: {
- type: String,
- required: false,
- default: 'label_name',
- },
- dropdownButtonText: {
- type: String,
- required: false,
- default: __('Label'),
- },
- labelsListTitle: {
- type: String,
- required: false,
- default: __('Assign labels'),
- },
- labelsCreateTitle: {
- type: String,
- required: false,
- default: __('Create group label'),
- },
- footerCreateLabelTitle: {
- type: String,
- required: false,
- default: __('Create group label'),
- },
- footerManageLabelTitle: {
- type: String,
- required: false,
- default: __('Manage group labels'),
- },
- issuableType: {
- type: String,
- required: true,
- },
- workspaceType: {
- type: String,
- required: true,
- },
- attrWorkspacePath: {
- type: String,
- required: true,
- },
- labelCreateType: {
- type: String,
- required: true,
- },
- },
- data() {
- return {
- contentIsOnViewport: true,
- issuable: null,
- labelsSelectInProgress: false,
- oldIid: null,
- sidebarExpandedOnClick: false,
- };
- },
- computed: {
- isLoading() {
- return this.labelsSelectInProgress || this.$apollo.queries.issuable.loading;
- },
- issuableLabelIds() {
- return this.issuableLabels.map((label) => label.id);
- },
- issuableLabels() {
- return this.issuable?.labels.nodes || [];
- },
- issuableId() {
- return this.issuable?.id;
- },
- },
- apollo: {
- issuable: {
- query() {
- return issuableLabelsQueries[this.issuableType].issuableQuery;
- },
- skip() {
- return !isDropdownVariantSidebar(this.variant);
- },
- variables() {
- return {
- iid: this.iid,
- fullPath: this.fullPath,
- };
- },
- update(data) {
- return data.workspace?.issuable;
- },
- error() {
- createAlert({ message: __('Error fetching labels.') });
- },
- subscribeToMore: {
- document() {
- return issuableLabelsSubscription;
- },
- variables() {
- return {
- issuableId: this.issuableId,
- };
- },
- skip() {
- return !this.issuableId || !this.isDropdownVariantSidebar;
- },
- updateQuery(
- _,
- {
- subscriptionData: {
- data: { issuableLabelsUpdated },
- },
- },
- ) {
- if (issuableLabelsUpdated) {
- const {
- id,
- labels: { nodes },
- } = issuableLabelsUpdated;
- this.$emit('updateSelectedLabels', { id, labels: nodes });
- }
- },
- },
- },
- },
- watch: {
- iid(_, oldVal) {
- this.oldIid = oldVal;
- },
- },
- mounted() {
- document.addEventListener('toggleSidebarRevealLabelsDropdown', this.handleCollapsedValueClick);
- },
- beforeDestroy() {
- document.removeEventListener(
- 'toggleSidebarRevealLabelsDropdown',
- this.handleCollapsedValueClick,
- );
- },
- methods: {
- handleDropdownClose(labels) {
- if (this.iid !== '') {
- this.updateSelectedLabels(this.getUpdateVariables(labels));
- } else {
- this.$emit('updateSelectedLabels', { labels });
- }
-
- this.collapseEditableItem();
- },
- collapseEditableItem() {
- this.$refs.editable?.collapse();
- if (this.sidebarExpandedOnClick) {
- this.sidebarExpandedOnClick = false;
- this.$emit('toggleCollapse');
- }
- },
- handleCollapsedValueClick() {
- this.sidebarExpandedOnClick = true;
- this.$emit('toggleCollapse');
- debounce(() => {
- this.$refs.editable.toggle();
- this.$refs.dropdownContents.showDropdown();
- }, DEBOUNCE_DROPDOWN_DELAY)();
- },
- getUpdateVariables(labels) {
- let labelIds = [];
-
- labelIds = labels.map(({ id }) => id);
- const currentIid = this.oldIid || this.iid;
-
- const updateVariables = {
- iid: currentIid,
- projectPath: this.fullPath,
- labelIds,
- };
-
- switch (this.issuableType) {
- case IssuableType.Issue:
- return updateVariables;
- case IssuableType.MergeRequest:
- return {
- ...updateVariables,
- operationMode: MutationOperationMode.Replace,
- };
- case IssuableType.Epic:
- return {
- iid: currentIid,
- groupPath: this.fullPath,
- addLabelIds: labelIds.map((id) => getIdFromGraphQLId(id)),
- removeLabelIds: this.issuableLabelIds
- .filter((id) => !labelIds.includes(id))
- .map((id) => getIdFromGraphQLId(id)),
- };
- default:
- return {};
- }
- },
- updateSelectedLabels(inputVariables) {
- this.labelsSelectInProgress = true;
-
- this.$apollo
- .mutate({
- mutation: issuableLabelsQueries[this.issuableType].mutation,
- variables: { input: inputVariables },
- })
- .then(({ data }) => {
- if (data.updateIssuableLabels?.errors?.length) {
- throw new Error();
- }
-
- this.$emit('updateSelectedLabels', {
- id: data.updateIssuableLabels?.issuable?.id,
- labels: data.updateIssuableLabels?.issuable?.labels?.nodes,
- });
- })
- .catch((error) =>
- createAlert({
- message: __('An error occurred while updating labels.'),
- captureError: true,
- error,
- }),
- )
- .finally(() => {
- this.labelsSelectInProgress = false;
- });
- },
- getRemoveVariables(labelId) {
- const removeVariables = {
- iid: this.iid,
- projectPath: this.fullPath,
- };
-
- switch (this.issuableType) {
- case IssuableType.Issue:
- return {
- ...removeVariables,
- removeLabelIds: [labelId],
- };
- case IssuableType.MergeRequest:
- return {
- ...removeVariables,
- labelIds: [labelId],
- operationMode: MutationOperationMode.Remove,
- };
- case IssuableType.Epic:
- return {
- iid: this.iid,
- removeLabelIds: [getIdFromGraphQLId(labelId)],
- groupPath: this.fullPath,
- };
- default:
- return {};
- }
- },
- handleLabelRemove(labelId) {
- this.updateSelectedLabels(this.getRemoveVariables(labelId));
- this.$emit('onLabelRemove', labelId);
- },
- isDropdownVariantSidebar,
- isDropdownVariantStandalone,
- isDropdownVariantEmbedded,
- },
-};
-</script>
-
-<template>
- <div
- class="labels-select-wrapper gl-relative"
- :class="{
- 'is-standalone': isDropdownVariantStandalone(variant),
- 'is-embedded': isDropdownVariantEmbedded(variant),
- }"
- data-testid="sidebar-labels"
- data-qa-selector="labels_block"
- >
- <template v-if="isDropdownVariantSidebar(variant)">
- <sidebar-editable-item
- ref="editable"
- :title="__('Labels')"
- :loading="isLoading"
- :can-edit="allowLabelEdit"
- @open="oldIid = null"
- >
- <template #collapsed>
- <dropdown-value
- :disable-labels="labelsSelectInProgress"
- :selected-labels="issuableLabels"
- :allow-label-remove="allowLabelRemove"
- :labels-filter-base-path="labelsFilterBasePath"
- :labels-filter-param="labelsFilterParam"
- @onLabelRemove="handleLabelRemove"
- @onCollapsedValueClick="handleCollapsedValueClick"
- >
- <slot></slot>
- </dropdown-value>
- </template>
- <template #default="{ edit }">
- <dropdown-value
- :disable-labels="labelsSelectInProgress"
- :selected-labels="issuableLabels"
- :allow-label-remove="allowLabelRemove"
- :labels-filter-base-path="labelsFilterBasePath"
- :labels-filter-param="labelsFilterParam"
- class="gl-mb-2"
- @onLabelRemove="handleLabelRemove"
- >
- <slot></slot>
- </dropdown-value>
- <dropdown-contents
- ref="dropdownContents"
- :dropdown-button-text="dropdownButtonText"
- :allow-multiselect="allowMultiselect"
- :labels-list-title="labelsListTitle"
- :footer-create-label-title="footerCreateLabelTitle"
- :footer-manage-label-title="footerManageLabelTitle"
- :labels-create-title="labelsCreateTitle"
- :selected-labels="issuableLabels"
- :variant="variant"
- :is-visible="edit"
- :full-path="fullPath"
- :workspace-type="workspaceType"
- :attr-workspace-path="attrWorkspacePath"
- :label-create-type="labelCreateType"
- @setLabels="handleDropdownClose"
- @closeDropdown="collapseEditableItem"
- />
- </template>
- </sidebar-editable-item>
- </template>
- <dropdown-contents
- v-else
- ref="dropdownContents"
- :allow-multiselect="allowMultiselect"
- :dropdown-button-text="dropdownButtonText"
- :labels-list-title="labelsListTitle"
- :footer-create-label-title="footerCreateLabelTitle"
- :footer-manage-label-title="footerManageLabelTitle"
- :labels-create-title="labelsCreateTitle"
- :selected-labels="issuableLabels"
- :variant="variant"
- :full-path="fullPath"
- :workspace-type="workspaceType"
- :attr-workspace-path="attrWorkspacePath"
- :label-create-type="labelCreateType"
- @setLabels="handleDropdownClose"
- />
- </div>
-</template>