@gitlab/duo-ui 0.4.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/components/chat/components/duo_chat_context/constants.js +2 -1
- package/dist/components/chat/components/duo_chat_context/duo_chat_context_item_details_modal/duo_chat_context_item_details_modal.js +36 -9
- package/dist/components/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.js +1 -1
- package/dist/components/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_item.js +8 -16
- package/dist/components/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items_loading.js +1 -1
- package/dist/components/chat/components/duo_chat_context/duo_chat_context_item_popover/duo_chat_context_item_popover.js +12 -8
- package/dist/components/chat/components/duo_chat_context/duo_chat_context_item_selections/duo_chat_context_item_selections.js +2 -2
- package/dist/components/chat/components/duo_chat_context/mock_context_data.js +118 -9
- package/dist/components/chat/components/duo_chat_context/utils.js +28 -2
- package/dist/components/chat/components/duo_chat_conversation/duo_chat_conversation.js +1 -1
- package/dist/components/chat/components/duo_chat_loader/duo_chat_loader.js +1 -1
- package/dist/components/chat/duo_chat.js +4 -4
- package/dist/components/workflow/components/duo_workflow_panel/duo_workflow_panel.js +1 -1
- package/dist/components/workflow/components/duo_workflow_prompt/duo_workflow_prompt.js +1 -1
- package/dist/components.css +1 -1
- package/dist/components.css.map +1 -1
- package/dist/tailwind.css +1 -1
- package/dist/tailwind.css.map +1 -1
- package/dist/utils/i18n.js +63 -0
- package/package.json +2 -2
- package/src/components/chat/components/duo_chat_context/constants.js +1 -0
- package/src/components/chat/components/duo_chat_context/duo_chat_context_item_details_modal/duo_chat_context_item_details_modal.vue +61 -6
- package/src/components/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.md +35 -0
- package/src/components/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.vue +1 -1
- package/src/components/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_item.vue +17 -25
- package/src/components/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items_loading.vue +1 -1
- package/src/components/chat/components/duo_chat_context/duo_chat_context_item_popover/duo_chat_context_item_popover.vue +20 -15
- package/src/components/chat/components/duo_chat_context/duo_chat_context_item_selections/duo_chat_context_item_selections.vue +10 -4
- package/src/components/chat/components/duo_chat_context/mock_context_data.js +148 -9
- package/src/components/chat/components/duo_chat_context/utils.js +32 -1
- package/src/components/chat/components/duo_chat_conversation/duo_chat_conversation.vue +1 -1
- package/src/components/chat/components/duo_chat_loader/duo_chat_loader.vue +1 -1
- package/src/components/chat/duo_chat.scss +19 -8
- package/src/components/chat/duo_chat.vue +15 -11
- package/src/components/workflow/components/duo_workflow_panel/duo_workflow_panel.vue +1 -1
- package/src/components/workflow/components/duo_workflow_prompt/duo_workflow_prompt.vue +1 -1
- package/src/utils/i18n.js +62 -0
- package/translations.js +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [1.0.0](https://gitlab.com/gitlab-org/duo-ui/compare/v0.4.0...v1.0.0) (2024-11-12)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* refactor translation mechanism ([e28fc10](https://gitlab.com/gitlab-org/duo-ui/commit/e28fc108870446555a9a75bd71f0b0e2cf6d8198))
|
|
7
|
+
* Update Duo Components to match GitLab UI v101.16.0 ([58c6bf9](https://gitlab.com/gitlab-org/duo-ui/commit/58c6bf91c1b237485d29717ecad581319d83ad64))
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### BREAKING CHANGES
|
|
11
|
+
|
|
12
|
+
* Synced Duo components with GitLab UI v101.16.0
|
|
13
|
+
see: https://gitlab.com/gitlab-org/gitlab-ui/-/releases/v101.16.0
|
|
14
|
+
|
|
1
15
|
# [0.4.0](https://gitlab.com/gitlab-org/duo-ui/compare/v0.3.0...v0.4.0) (2024-11-07)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -2,10 +2,11 @@ const CONTEXT_ITEM_CATEGORY_ISSUE = 'issue';
|
|
|
2
2
|
const CONTEXT_ITEM_CATEGORY_MERGE_REQUEST = 'merge_request';
|
|
3
3
|
const CONTEXT_ITEM_CATEGORY_FILE = 'file';
|
|
4
4
|
const CONTEXT_ITEM_CATEGORY_LOCAL_GIT = 'local_git';
|
|
5
|
+
const CONTEXT_ITEM_CATEGORY_DEPENDENCY = 'dependency';
|
|
5
6
|
const CONTEXT_ITEM_LOCAL_GIT_COMMIT = 'commit';
|
|
6
7
|
const CONTEXT_ITEM_LOCAL_GIT_DIFF = 'diff';
|
|
7
8
|
const LANGUAGE_IDENTIFIER_PREFIX = 'language-';
|
|
8
9
|
const LANGUAGE_IDENTIFIER_DIFF = 'language-diff';
|
|
9
10
|
const LANGUAGE_IDENTIFIER_PLAINTEXT = 'language-plaintext';
|
|
10
11
|
|
|
11
|
-
export { CONTEXT_ITEM_CATEGORY_FILE, CONTEXT_ITEM_CATEGORY_ISSUE, CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_MERGE_REQUEST, CONTEXT_ITEM_LOCAL_GIT_COMMIT, CONTEXT_ITEM_LOCAL_GIT_DIFF, LANGUAGE_IDENTIFIER_DIFF, LANGUAGE_IDENTIFIER_PLAINTEXT, LANGUAGE_IDENTIFIER_PREFIX };
|
|
12
|
+
export { CONTEXT_ITEM_CATEGORY_DEPENDENCY, CONTEXT_ITEM_CATEGORY_FILE, CONTEXT_ITEM_CATEGORY_ISSUE, CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_MERGE_REQUEST, CONTEXT_ITEM_LOCAL_GIT_COMMIT, CONTEXT_ITEM_LOCAL_GIT_DIFF, LANGUAGE_IDENTIFIER_DIFF, LANGUAGE_IDENTIFIER_PLAINTEXT, LANGUAGE_IDENTIFIER_PREFIX };
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { nextTick } from 'vue';
|
|
2
|
-
import { GlSkeletonLoader, GlModal, GlSafeHtmlDirective } from '@gitlab/ui';
|
|
3
|
-
import { translate } from '
|
|
2
|
+
import { GlAlert, GlSkeletonLoader, GlModal, GlSafeHtmlDirective } from '@gitlab/ui';
|
|
3
|
+
import { translate } from '../../../../../utils/i18n';
|
|
4
4
|
import { contextItemValidator } from '../utils';
|
|
5
|
-
import { CONTEXT_ITEM_CATEGORY_LOCAL_GIT, LANGUAGE_IDENTIFIER_DIFF, LANGUAGE_IDENTIFIER_PREFIX, LANGUAGE_IDENTIFIER_PLAINTEXT } from '../constants';
|
|
5
|
+
import { CONTEXT_ITEM_CATEGORY_LOCAL_GIT, LANGUAGE_IDENTIFIER_DIFF, LANGUAGE_IDENTIFIER_PREFIX, LANGUAGE_IDENTIFIER_PLAINTEXT, CONTEXT_ITEM_CATEGORY_DEPENDENCY } from '../constants';
|
|
6
6
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
7
7
|
|
|
8
8
|
var script = {
|
|
9
9
|
name: 'GlDuoChatContextItemDetailsModal',
|
|
10
10
|
components: {
|
|
11
|
+
GlAlert,
|
|
11
12
|
GlSkeletonLoader,
|
|
12
13
|
GlModal
|
|
13
14
|
},
|
|
@@ -32,6 +33,11 @@ var script = {
|
|
|
32
33
|
validator: contextItemValidator
|
|
33
34
|
}
|
|
34
35
|
},
|
|
36
|
+
data() {
|
|
37
|
+
return {
|
|
38
|
+
contentErrorIsVisible: false
|
|
39
|
+
};
|
|
40
|
+
},
|
|
35
41
|
computed: {
|
|
36
42
|
isLoadingContent() {
|
|
37
43
|
return this.contextItem.content === undefined;
|
|
@@ -50,16 +56,25 @@ var script = {
|
|
|
50
56
|
title() {
|
|
51
57
|
var _this$contextItem$met4, _this$contextItem$met5;
|
|
52
58
|
return ((_this$contextItem$met4 = this.contextItem.metadata) === null || _this$contextItem$met4 === void 0 ? void 0 : _this$contextItem$met4.title) || ((_this$contextItem$met5 = this.contextItem.metadata) === null || _this$contextItem$met5 === void 0 ? void 0 : _this$contextItem$met5.relativePath) || translate('GlDuoChatContextItemDetailsModal.title', 'Preview');
|
|
59
|
+
},
|
|
60
|
+
isDependencies() {
|
|
61
|
+
return this.contextItem.category === CONTEXT_ITEM_CATEGORY_DEPENDENCY;
|
|
53
62
|
}
|
|
54
63
|
},
|
|
55
64
|
watch: {
|
|
56
65
|
contextItem: {
|
|
57
66
|
async handler(newVal, oldVal) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
67
|
+
// Dependency items contain structured data as content, not code/markdown.
|
|
68
|
+
// So skip running this content through GFM, we'll parse and render it here in the component.
|
|
69
|
+
if (newVal.category === CONTEXT_ITEM_CATEGORY_DEPENDENCY) {
|
|
70
|
+
return;
|
|
62
71
|
}
|
|
72
|
+
const isUnchangedOrEmptyContent = !(newVal !== null && newVal !== void 0 && newVal.content) || (newVal === null || newVal === void 0 ? void 0 : newVal.content) === (oldVal === null || oldVal === void 0 ? void 0 : oldVal.content);
|
|
73
|
+
if (isUnchangedOrEmptyContent) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
await nextTick();
|
|
77
|
+
await this.hydrateContentWithGFM();
|
|
63
78
|
},
|
|
64
79
|
immediate: true
|
|
65
80
|
}
|
|
@@ -71,19 +86,31 @@ var script = {
|
|
|
71
86
|
this.renderGFM(this.$refs.content);
|
|
72
87
|
}
|
|
73
88
|
},
|
|
89
|
+
parseDependencies() {
|
|
90
|
+
if (this.contextItem.category !== CONTEXT_ITEM_CATEGORY_DEPENDENCY) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
return JSON.parse(this.contextItem.content);
|
|
95
|
+
} catch (error) {
|
|
96
|
+
this.contentErrorIsVisible = true;
|
|
97
|
+
return {};
|
|
98
|
+
}
|
|
99
|
+
},
|
|
74
100
|
onModalVisibilityChange(isVisible) {
|
|
75
101
|
if (!isVisible) {
|
|
76
102
|
this.$emit('close');
|
|
77
103
|
}
|
|
78
104
|
}
|
|
79
|
-
}
|
|
105
|
+
},
|
|
106
|
+
CONTENT_ERROR_MESSAGE: translate('GlDuoChatContextItemDetailsModal.contentErrorMessage', 'Item content could not be displayed.')
|
|
80
107
|
};
|
|
81
108
|
|
|
82
109
|
/* script */
|
|
83
110
|
const __vue_script__ = script;
|
|
84
111
|
|
|
85
112
|
/* template */
|
|
86
|
-
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-modal',{attrs:{"modal-id":"context-item-details-modal","title":_vm.title,"visible":true,"scrollable":true,"hide-footer":"","size":"lg"},on:{"change":_vm.onModalVisibilityChange}},[(_vm.isLoadingContent)?_c('gl-skeleton-loader'):_c('div',{ref:"content",attrs:{"data-testid":"context-item-content"}},[_c('pre',{directives:[{name:"safe-html",rawName:"v-safe-html",value:(_vm.contextItem.content),expression:"contextItem.content"}],staticClass:"code js-syntax-highlight gl-p-3",class:_vm.languageIdentifierClass})])],1)};
|
|
113
|
+
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-modal',{attrs:{"modal-id":"context-item-details-modal","title":_vm.title,"visible":true,"scrollable":true,"hide-footer":"","size":"lg"},on:{"change":_vm.onModalVisibilityChange}},[(_vm.isLoadingContent)?_c('gl-skeleton-loader'):(_vm.contentErrorIsVisible)?_c('gl-alert',{attrs:{"variant":"danger","dismissible":false,"data-testid":"content-error-alert"}},[_vm._v("\n "+_vm._s(_vm.$options.CONTENT_ERROR_MESSAGE)+"\n ")]):(_vm.isDependencies)?_c('div',{attrs:{"data-testid":"context-item-content"}},[_c('p',[_vm._v("Project dependencies from "+_vm._s(_vm.contextItem.metadata.secondaryText))]),_vm._v(" "),_vm._l((_vm.parseDependencies()),function(matches,index){return _c('div',{key:index},_vm._l((matches),function(dependencies,language){return _c('div',{key:language},[_c('h3',{staticClass:"gl-heading-4 gl-mb-2"},[_vm._v(_vm._s(language))]),_vm._v(" "),_c('ul',{staticClass:"gl-pl-6"},_vm._l((dependencies),function(dependency){return _c('li',{key:dependency},[_vm._v("\n "+_vm._s(dependency)+"\n ")])}),0)])}),0)})],2):_c('div',{ref:"content",attrs:{"data-testid":"context-item-content"}},[_c('pre',{directives:[{name:"safe-html",rawName:"v-safe-html",value:(_vm.contextItem.content),expression:"contextItem.content"}],staticClass:"code js-syntax-highlight gl-p-3",class:_vm.languageIdentifierClass})])],1)};
|
|
87
114
|
var __vue_staticRenderFns__ = [];
|
|
88
115
|
|
|
89
116
|
/* style */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import debounce from 'lodash/debounce';
|
|
2
|
-
import { translate } from '@gitlab/ui/dist/utils/i18n';
|
|
3
2
|
import { GlCard } from '@gitlab/ui';
|
|
3
|
+
import { translate } from '../../../../../utils/i18n';
|
|
4
4
|
import GlDuoChatContextItemSelections from '../duo_chat_context_item_selections/duo_chat_context_item_selections';
|
|
5
5
|
import { contextItemsValidator, categoriesValidator, wrapIndex } from '../utils';
|
|
6
6
|
import GlDuoChatContextItemMenuCategoryItems from './duo_chat_context_item_menu_category_items';
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { GlTruncate, GlIcon } from '@gitlab/ui';
|
|
1
|
+
import { GlBadge, GlTruncate, GlIcon } from '@gitlab/ui';
|
|
2
2
|
import GlDuoChatContextItemPopover from '../duo_chat_context_item_popover/duo_chat_context_item_popover';
|
|
3
|
-
import { categoryValidator, contextItemValidator,
|
|
4
|
-
import { CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_MERGE_REQUEST, CONTEXT_ITEM_CATEGORY_ISSUE, CONTEXT_ITEM_CATEGORY_FILE } from '../constants';
|
|
3
|
+
import { categoryValidator, contextItemValidator, getContextItemSecondaryText, getContextItemIcon, getContextItemSource } from '../utils';
|
|
5
4
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
6
5
|
|
|
7
6
|
var script = {
|
|
8
7
|
name: 'GlDuoChatContextItemMenuSearchItem',
|
|
9
8
|
components: {
|
|
9
|
+
GlBadge,
|
|
10
10
|
GlTruncate,
|
|
11
11
|
GlIcon,
|
|
12
12
|
GlDuoChatContextItemPopover
|
|
@@ -29,21 +29,13 @@ var script = {
|
|
|
29
29
|
return ((_this$contextItem$met = this.contextItem.metadata) === null || _this$contextItem$met === void 0 ? void 0 : _this$contextItem$met.title) || '';
|
|
30
30
|
},
|
|
31
31
|
secondaryText() {
|
|
32
|
-
|
|
33
|
-
case CONTEXT_ITEM_CATEGORY_FILE:
|
|
34
|
-
return this.contextItem.metadata.relativePath;
|
|
35
|
-
case CONTEXT_ITEM_CATEGORY_ISSUE:
|
|
36
|
-
return formatIssueId(this.contextItem.metadata.iid);
|
|
37
|
-
case CONTEXT_ITEM_CATEGORY_MERGE_REQUEST:
|
|
38
|
-
return formatMergeRequestId(this.contextItem.metadata.iid);
|
|
39
|
-
case CONTEXT_ITEM_CATEGORY_LOCAL_GIT:
|
|
40
|
-
return formatGitItemSecondaryText(this.contextItem);
|
|
41
|
-
default:
|
|
42
|
-
return '';
|
|
43
|
-
}
|
|
32
|
+
return getContextItemSecondaryText(this.contextItem);
|
|
44
33
|
},
|
|
45
34
|
icon() {
|
|
46
35
|
return getContextItemIcon(this.contextItem, this.category);
|
|
36
|
+
},
|
|
37
|
+
itemSource() {
|
|
38
|
+
return getContextItemSource(this.contextItem);
|
|
47
39
|
}
|
|
48
40
|
}
|
|
49
41
|
};
|
|
@@ -52,7 +44,7 @@ var script = {
|
|
|
52
44
|
const __vue_script__ = script;
|
|
53
45
|
|
|
54
46
|
/* template */
|
|
55
|
-
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-flex gl-flex-col"},[_c('div',{staticClass:"gl-flex gl-items-center"},[_c('gl-icon',{staticClass:"gl-mr-2 gl-shrink-0",attrs:{"name":_vm.icon,"data-testid":"category-icon"}}),_vm._v(" "),_c('gl-truncate',{staticClass:"gl-min-w-0",attrs:{"text":_vm.title,"data-testid":"item-title"}}),_vm._v(" "),_c('gl-icon',{staticClass:"gl-ml-2 gl-shrink-0 gl-cursor-pointer gl-text-secondary",attrs:{"id":("info-icon-" + (_vm.contextItem.id)),"name":"information-o","size":12}}),_vm._v(" "),_c('gl-duo-chat-context-item-popover',{attrs:{"context-item":_vm.contextItem,"target":("info-icon-" + (_vm.contextItem.id)),"placement":"left"}})],1),_vm._v(" "),(_vm.secondaryText)?_c('div',{staticClass:"gl-mt-1 gl-shrink-0 gl-whitespace-nowrap gl-text-secondary",attrs:{"data-testid":"item-secondary-text"}},[_c('gl-truncate',{attrs:{"text":_vm.secondaryText}})],1):_vm._e()])};
|
|
47
|
+
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:"gl-flex gl-flex-col"},[_c('div',{staticClass:"gl-flex gl-items-center"},[_c('gl-icon',{staticClass:"gl-mr-2 gl-shrink-0",attrs:{"name":_vm.icon,"data-testid":"category-icon"}}),_vm._v(" "),_c('gl-truncate',{staticClass:"gl-min-w-0",attrs:{"text":_vm.title,"data-testid":"item-title"}}),_vm._v(" "),_c('gl-icon',{staticClass:"gl-ml-2 gl-shrink-0 gl-cursor-pointer gl-text-secondary",attrs:{"id":("info-icon-" + (_vm.contextItem.id)),"name":"information-o","size":12}}),_vm._v(" "),_c('gl-duo-chat-context-item-popover',{attrs:{"context-item":_vm.contextItem,"target":("info-icon-" + (_vm.contextItem.id)),"placement":"left"}})],1),_vm._v(" "),(_vm.secondaryText)?_c('div',{staticClass:"gl-align-items-center gl-mt-1 gl-flex gl-shrink-0 gl-whitespace-nowrap gl-text-secondary",attrs:{"data-testid":"item-secondary-text"}},[(_vm.itemSource)?_c('gl-badge',{staticClass:"gl-mr-1",attrs:{"variant":"neutral","data-testid":"context-item-source"}},[_vm._v(_vm._s(_vm.itemSource))]):_vm._e(),_vm._v(" "),_c('gl-truncate',{staticClass:"gl-min-w-0",attrs:{"position":"middle","text":_vm.secondaryText}})],1):_vm._e()])};
|
|
56
48
|
var __vue_staticRenderFns__ = [];
|
|
57
49
|
|
|
58
50
|
/* style */
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { GlTruncate, GlAlert, GlIcon, GlPopover } from '@gitlab/ui';
|
|
2
|
-
import { translate } from '
|
|
3
|
-
import { CONTEXT_ITEM_CATEGORY_ISSUE, CONTEXT_ITEM_CATEGORY_MERGE_REQUEST, CONTEXT_ITEM_CATEGORY_FILE
|
|
4
|
-
import { formatMergeRequestId, formatIssueId,
|
|
1
|
+
import { GlBadge, GlTruncate, GlAlert, GlIcon, GlPopover } from '@gitlab/ui';
|
|
2
|
+
import { translate } from '../../../../../utils/i18n';
|
|
3
|
+
import { CONTEXT_ITEM_CATEGORY_ISSUE, CONTEXT_ITEM_CATEGORY_MERGE_REQUEST, CONTEXT_ITEM_CATEGORY_FILE } from '../constants';
|
|
4
|
+
import { formatMergeRequestId, formatIssueId, getContextItemIcon, getContextItemTypeLabel, getContextItemSecondaryText, getContextItemSource } from '../utils';
|
|
5
5
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
6
6
|
|
|
7
7
|
var script = {
|
|
8
8
|
name: 'DuoChatContextItemPopover',
|
|
9
9
|
components: {
|
|
10
|
+
GlBadge,
|
|
10
11
|
GlTruncate,
|
|
11
12
|
GlAlert,
|
|
12
13
|
GlIcon,
|
|
@@ -61,9 +62,6 @@ var script = {
|
|
|
61
62
|
var _this$filePath;
|
|
62
63
|
return (_this$filePath = this.filePath) === null || _this$filePath === void 0 ? void 0 : _this$filePath.split('/');
|
|
63
64
|
},
|
|
64
|
-
gitDetails() {
|
|
65
|
-
return this.contextItem.category === CONTEXT_ITEM_CATEGORY_LOCAL_GIT ? formatGitItemSecondaryText(this.contextItem) : null;
|
|
66
|
-
},
|
|
67
65
|
isEnabled() {
|
|
68
66
|
return this.contextItem.metadata.enabled !== false;
|
|
69
67
|
},
|
|
@@ -75,6 +73,12 @@ var script = {
|
|
|
75
73
|
},
|
|
76
74
|
itemTypeLabel() {
|
|
77
75
|
return getContextItemTypeLabel(this.contextItem);
|
|
76
|
+
},
|
|
77
|
+
secondaryText() {
|
|
78
|
+
return getContextItemSecondaryText(this.contextItem);
|
|
79
|
+
},
|
|
80
|
+
itemSource() {
|
|
81
|
+
return getContextItemSource(this.contextItem);
|
|
78
82
|
}
|
|
79
83
|
},
|
|
80
84
|
methods: {
|
|
@@ -86,7 +90,7 @@ var script = {
|
|
|
86
90
|
const __vue_script__ = script;
|
|
87
91
|
|
|
88
92
|
/* template */
|
|
89
|
-
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-popover',{attrs:{"target":_vm.target,"triggers":"hover focus","placement":_vm.placement,"title":_vm.title,"custom-class":"gl-duo-chat-item-popover"},scopedSlots:_vm._u([{key:"title",fn:function(){return [_c('div',[_c('div',{staticClass:"gl-heading-3 gl-mb-1 gl-mt-2 gl-leading-1",attrs:{"data-testid":"chat-context-popover-title"}},[_vm._v("\n "+_vm._s(_vm.title)+"\n ")]),_vm._v(" "),(_vm.itemTypeLabel)?_c('div',{staticClass:"gl-font-normal gl-text-subtle"},[
|
|
93
|
+
var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('gl-popover',{attrs:{"target":_vm.target,"triggers":"hover focus","placement":_vm.placement,"title":_vm.title,"custom-class":"gl-duo-chat-item-popover"},scopedSlots:_vm._u([{key:"title",fn:function(){return [_c('div',[_c('div',{staticClass:"gl-heading-3 gl-mb-1 gl-mt-2 gl-leading-1",attrs:{"data-testid":"chat-context-popover-title"}},[_vm._v("\n "+_vm._s(_vm.title)+"\n ")]),_vm._v(" "),(_vm.itemTypeLabel)?_c('div',{staticClass:"gl-flex gl-items-center gl-font-normal gl-text-subtle"},[_c('gl-truncate',{staticClass:"gl-min-w-0",attrs:{"text":_vm.itemTypeLabel}})],1):_vm._e()])]},proxy:true}])},[_vm._v(" "),_c('div',[(_vm.secondaryText)?_c('div',{staticClass:"gl-flex gl-items-center"},[_c('gl-icon',{staticClass:"gl-mr-1 gl-shrink-0",attrs:{"name":_vm.iconName,"size":12,"variant":"subtle"}}),_vm._v(" "),(_vm.itemSource)?_c('gl-badge',{staticClass:"gl-mr-1"},[_vm._v(_vm._s(_vm.itemSource))]):_vm._e(),_vm._v(" "),_c('gl-truncate',{staticClass:"gl-min-w-0",attrs:{"text":_vm.secondaryText}})],1):(_vm.filePath)?_c('div',[_c('gl-icon',{attrs:{"name":"document","size":12,"variant":"subtle"}}),_vm._v(" "),_c('span',{staticClass:"gl-break-all"},[_vm._v(_vm._s(_vm.contextItem.metadata.project))]),_vm._v(" "),_vm._l((_vm.filePathArray),function(pathPart,index){return _c('span',{key:pathPart,staticClass:"gl-break-all"},[_vm._v(_vm._s(pathPart)+_vm._s(index + 1 < _vm.filePathArray.length ? '/' : ''))])})],2):_c('div',[(_vm.iconName)?_c('gl-icon',{attrs:{"name":_vm.iconName,"size":12,"variant":"subtle"}}):_vm._e(),_vm._v(" "),_c('span',{staticClass:"gl-break-all"},[_vm._v(_vm._s(_vm.contextItem.metadata.project))]),_vm._v(" "),(_vm.id)?_c('span',{staticClass:"gl-break-all"},[_vm._v(_vm._s(_vm.formattedId))]):_vm._e()],1),_vm._v(" "),(!_vm.isEnabled)?_c('gl-alert',{staticClass:"gl-mb-1 gl-mt-3 gl-p-4 gl-text-sm",attrs:{"variant":"danger","data-testid":"chat-context-popover-disabled","dismissible":false,"show-icon":false}},[_vm._v("\n "+_vm._s(_vm.disabledMessage)+"\n ")]):_vm._e()],1)])};
|
|
90
94
|
var __vue_staticRenderFns__ = [];
|
|
91
95
|
|
|
92
96
|
/* style */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import uniqueId from 'lodash/uniqueId';
|
|
2
2
|
import { GlTruncate, GlIcon, GlToken } from '@gitlab/ui';
|
|
3
3
|
import GlDuoChatContextItemPopover from '../duo_chat_context_item_popover/duo_chat_context_item_popover';
|
|
4
|
-
import { CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_FILE } from '../constants';
|
|
4
|
+
import { CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_FILE, CONTEXT_ITEM_CATEGORY_DEPENDENCY } from '../constants';
|
|
5
5
|
import GlDuoChatContextItemDetailsModal from '../duo_chat_context_item_details_modal/duo_chat_context_item_details_modal';
|
|
6
6
|
import { contextItemsValidator, getContextItemIcon } from '../utils';
|
|
7
7
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
@@ -106,7 +106,7 @@ var script = {
|
|
|
106
106
|
this.previewContextItemId = contextItem.id;
|
|
107
107
|
},
|
|
108
108
|
canOpen(contextItem) {
|
|
109
|
-
return [CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_FILE].includes(contextItem.category);
|
|
109
|
+
return [CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_FILE, CONTEXT_ITEM_CATEGORY_DEPENDENCY].includes(contextItem.category);
|
|
110
110
|
},
|
|
111
111
|
onClosePreview() {
|
|
112
112
|
this.previewContextItemId = null;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CONTEXT_ITEM_CATEGORY_FILE, CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_ISSUE, CONTEXT_ITEM_CATEGORY_MERGE_REQUEST } from './constants';
|
|
1
|
+
import { CONTEXT_ITEM_CATEGORY_DEPENDENCY, CONTEXT_ITEM_CATEGORY_FILE, CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_CATEGORY_ISSUE, CONTEXT_ITEM_CATEGORY_MERGE_REQUEST } from './constants';
|
|
2
2
|
|
|
3
3
|
const MOCK_CATEGORIES = [{
|
|
4
4
|
label: 'Files',
|
|
@@ -16,6 +16,10 @@ const MOCK_CATEGORIES = [{
|
|
|
16
16
|
label: 'Merge Requests',
|
|
17
17
|
value: CONTEXT_ITEM_CATEGORY_MERGE_REQUEST,
|
|
18
18
|
icon: 'merge-request'
|
|
19
|
+
}, {
|
|
20
|
+
label: 'Dependencies',
|
|
21
|
+
value: CONTEXT_ITEM_CATEGORY_DEPENDENCY,
|
|
22
|
+
icon: 'package'
|
|
19
23
|
}];
|
|
20
24
|
function getMockCategory(categoryValue) {
|
|
21
25
|
return MOCK_CATEGORIES.find(cat => cat.value === categoryValue);
|
|
@@ -39,6 +43,9 @@ const MOCK_CONTEXT_ITEM_FILE = {
|
|
|
39
43
|
metadata: {
|
|
40
44
|
enabled: true,
|
|
41
45
|
title: 'strawberry.ts',
|
|
46
|
+
secondaryText: 'src/plants/strawberry.ts',
|
|
47
|
+
subTypeLabel: 'Project file',
|
|
48
|
+
icon: 'document',
|
|
42
49
|
project: 'example/garden',
|
|
43
50
|
relativePath: 'src/plants/strawberry.ts'
|
|
44
51
|
}
|
|
@@ -49,6 +56,9 @@ const MOCK_CONTEXT_ITEM_FILE_DISABLED = {
|
|
|
49
56
|
metadata: {
|
|
50
57
|
enabled: false,
|
|
51
58
|
title: 'motorbike.cs',
|
|
59
|
+
secondaryText: '/src/VehicleFoo/motorbike.cs',
|
|
60
|
+
subTypeLabel: 'Project file',
|
|
61
|
+
icon: 'document',
|
|
52
62
|
project: 'example/vehicles',
|
|
53
63
|
relativePath: '/src/VehicleFoo/motorbike.cs'
|
|
54
64
|
}
|
|
@@ -59,6 +69,9 @@ const mockFiles = [MOCK_CONTEXT_ITEM_FILE, {
|
|
|
59
69
|
metadata: {
|
|
60
70
|
enabled: true,
|
|
61
71
|
title: 'potato.ts',
|
|
72
|
+
secondaryText: '/src/plants/potato.ts',
|
|
73
|
+
subTypeLabel: 'Project file',
|
|
74
|
+
icon: 'document',
|
|
62
75
|
project: 'example/garden',
|
|
63
76
|
relativePath: '/src/plants/potato.ts'
|
|
64
77
|
}
|
|
@@ -69,7 +82,9 @@ const MOCK_CONTEXT_ITEM_ISSUE = {
|
|
|
69
82
|
metadata: {
|
|
70
83
|
enabled: true,
|
|
71
84
|
title: 'Implement watering schedule',
|
|
72
|
-
|
|
85
|
+
secondaryText: 'example/garden#1234',
|
|
86
|
+
subTypeLabel: 'Issue',
|
|
87
|
+
icon: 'issues',
|
|
73
88
|
iid: 1234
|
|
74
89
|
}
|
|
75
90
|
};
|
|
@@ -80,7 +95,9 @@ const MOCK_CONTEXT_ITEM_ISSUE_DISABLED = {
|
|
|
80
95
|
enabled: false,
|
|
81
96
|
disabledReasons: ['This foo is not available to bar', 'Lorem something something wow?'],
|
|
82
97
|
title: `Fix vehicle colours and make them look real nice and colourful won't that be wonderful wow this issue title is really long I sure hope it's gonna wrap OK`,
|
|
83
|
-
|
|
98
|
+
secondaryText: 'example/vehicle#91011',
|
|
99
|
+
subTypeLabel: 'Issue',
|
|
100
|
+
icon: 'issues',
|
|
84
101
|
iid: 91011
|
|
85
102
|
}
|
|
86
103
|
};
|
|
@@ -90,7 +107,9 @@ const mockIssues = [MOCK_CONTEXT_ITEM_ISSUE, {
|
|
|
90
107
|
metadata: {
|
|
91
108
|
enabled: true,
|
|
92
109
|
title: 'Refactor plant growth rates',
|
|
93
|
-
|
|
110
|
+
secondaryText: 'example/garden#5678',
|
|
111
|
+
subTypeLabel: 'Issue',
|
|
112
|
+
icon: 'issues',
|
|
94
113
|
iid: 5678
|
|
95
114
|
}
|
|
96
115
|
}, MOCK_CONTEXT_ITEM_ISSUE_DISABLED];
|
|
@@ -100,7 +119,9 @@ const MOCK_CONTEXT_ITEM_MERGE_REQUEST = {
|
|
|
100
119
|
metadata: {
|
|
101
120
|
enabled: true,
|
|
102
121
|
title: 'Improve database performance',
|
|
103
|
-
|
|
122
|
+
secondaryText: 'example/garden!1122',
|
|
123
|
+
subTypeLabel: 'Merge request',
|
|
124
|
+
icon: 'merge-request',
|
|
104
125
|
iid: 1122
|
|
105
126
|
}
|
|
106
127
|
};
|
|
@@ -111,7 +132,9 @@ const MOCK_CONTEXT_ITEM_MERGE_REQUEST_DISABLED = {
|
|
|
111
132
|
enabled: false,
|
|
112
133
|
disabledReasons: ['This foo is not available to bar', 'Lorem something something wow?'],
|
|
113
134
|
title: 'Fix broken layout at small viewports',
|
|
114
|
-
|
|
135
|
+
secondaryText: 'example/vehicle!5566',
|
|
136
|
+
subTypeLabel: 'Merge request',
|
|
137
|
+
icon: 'merge-request',
|
|
115
138
|
iid: 5566
|
|
116
139
|
}
|
|
117
140
|
};
|
|
@@ -122,7 +145,9 @@ const mockMergeRequests = [MOCK_CONTEXT_ITEM_MERGE_REQUEST, {
|
|
|
122
145
|
enabled: false,
|
|
123
146
|
disabledReasons: ['This foo is not available to bar', 'Lorem something something wow?'],
|
|
124
147
|
title: 'Add vehicle registration details',
|
|
125
|
-
|
|
148
|
+
secondaryText: 'example/vehicle!3344',
|
|
149
|
+
subTypeLabel: 'Merge request',
|
|
150
|
+
icon: 'merge-request',
|
|
126
151
|
iid: 3344
|
|
127
152
|
}
|
|
128
153
|
}, MOCK_CONTEXT_ITEM_MERGE_REQUEST_DISABLED];
|
|
@@ -132,6 +157,10 @@ const MOCK_CONTEXT_ITEM_GIT_DIFF = {
|
|
|
132
157
|
metadata: {
|
|
133
158
|
enabled: true,
|
|
134
159
|
title: 'Current working changes',
|
|
160
|
+
secondaryText: 'main',
|
|
161
|
+
subType: 'local_git',
|
|
162
|
+
subTypeLabel: 'Local Git repository diff',
|
|
163
|
+
icon: 'comparison',
|
|
135
164
|
commitId: 'main',
|
|
136
165
|
repositoryName: 'example/garden',
|
|
137
166
|
gitType: 'diff'
|
|
@@ -143,6 +172,10 @@ const MOCK_CONTEXT_ITEM_GIT_COMMIT = {
|
|
|
143
172
|
metadata: {
|
|
144
173
|
enabled: true,
|
|
145
174
|
title: 'fix: some bug fix commit',
|
|
175
|
+
secondaryText: '20f8caf94cb8f5e5f9dbd1a9ac32702321de201b',
|
|
176
|
+
subType: 'local_git',
|
|
177
|
+
subTypeLabel: 'Local Git repository commit',
|
|
178
|
+
icon: 'commit',
|
|
146
179
|
commitId: '20f8caf94cb8f5e5f9dbd1a9ac32702321de201b',
|
|
147
180
|
repositoryName: 'example/garden',
|
|
148
181
|
gitType: 'commit'
|
|
@@ -154,6 +187,9 @@ const mockGitItems = [MOCK_CONTEXT_ITEM_GIT_DIFF, {
|
|
|
154
187
|
metadata: {
|
|
155
188
|
enabled: true,
|
|
156
189
|
title: 'Diff from default branch',
|
|
190
|
+
secondaryText: 'main',
|
|
191
|
+
subTypeLabel: 'Local Git repository diff',
|
|
192
|
+
icon: 'comparison',
|
|
157
193
|
commitId: 'main',
|
|
158
194
|
repositoryName: 'example/garden',
|
|
159
195
|
gitType: 'diff'
|
|
@@ -164,6 +200,9 @@ const mockGitItems = [MOCK_CONTEXT_ITEM_GIT_DIFF, {
|
|
|
164
200
|
metadata: {
|
|
165
201
|
enabled: true,
|
|
166
202
|
title: 'feat: add cool new feature',
|
|
203
|
+
secondaryText: '32b9b56b6de75b32909986755fbc470f20fb6fc0',
|
|
204
|
+
subTypeLabel: 'Local Git repository commit',
|
|
205
|
+
icon: 'commit',
|
|
167
206
|
commitId: '32b9b56b6de75b32909986755fbc470f20fb6fc0',
|
|
168
207
|
repositoryName: 'example/garden',
|
|
169
208
|
gitType: 'commit'
|
|
@@ -174,13 +213,83 @@ const mockGitItems = [MOCK_CONTEXT_ITEM_GIT_DIFF, {
|
|
|
174
213
|
metadata: {
|
|
175
214
|
enabled: true,
|
|
176
215
|
title: 'fix: stop foo from bar when baz because customers ding',
|
|
216
|
+
secondaryText: '775d7efdce25c1af48c55abcadbefd1f181b92ce',
|
|
217
|
+
subTypeLabel: 'Local Git repository commit',
|
|
218
|
+
icon: 'commit',
|
|
177
219
|
commitId: '775d7efdce25c1af48c55abcadbefd1f181b92ce',
|
|
178
220
|
repositoryName: 'example/garden',
|
|
179
221
|
gitType: 'commit'
|
|
180
222
|
}
|
|
181
223
|
}];
|
|
224
|
+
const MOCK_CONTEXT_ITEM_DEPENDENCY = {
|
|
225
|
+
id: '823e4567-e89b-12d3-a456-426614174007',
|
|
226
|
+
category: CONTEXT_ITEM_CATEGORY_DEPENDENCY,
|
|
227
|
+
content: JSON.stringify([{
|
|
228
|
+
javascript: ['@types/node@16.11.7', '@vue/compiler-sfc@3.2.37', 'typescript@4.5.5', 'vue@3.2.37']
|
|
229
|
+
}]),
|
|
230
|
+
metadata: {
|
|
231
|
+
enabled: true,
|
|
232
|
+
title: 'example/garden',
|
|
233
|
+
secondaryText: 'package.json',
|
|
234
|
+
icon: 'package',
|
|
235
|
+
subType: 'dependency',
|
|
236
|
+
subTypeLabel: 'Project dependencies',
|
|
237
|
+
project: 'example/garden'
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
const MOCK_CONTEXT_ITEM_DEPENDENCY_DISABLED = {
|
|
241
|
+
id: '923e4567-e89b-12d3-a456-426614174008',
|
|
242
|
+
category: CONTEXT_ITEM_CATEGORY_DEPENDENCY,
|
|
243
|
+
content: JSON.stringify([{
|
|
244
|
+
javascript: ['@types/node@16.11.7', '@vue/compiler-sfc@3.2.37', 'typescript@4.5.5', 'vue@3.2.37'],
|
|
245
|
+
csharp: ['newtonsoft.json@13.0.1', 'microsoft.net.test.sdk@16.11.0']
|
|
246
|
+
}]),
|
|
247
|
+
metadata: {
|
|
248
|
+
enabled: false,
|
|
249
|
+
disabledReasons: ['Dependencies are not available for this project', 'Access restricted'],
|
|
250
|
+
title: 'example/vehicle',
|
|
251
|
+
secondaryText: 'package.json, vehicle.csproj',
|
|
252
|
+
icon: 'package',
|
|
253
|
+
subType: 'dependency',
|
|
254
|
+
subTypeLabel: 'Project dependencies',
|
|
255
|
+
project: 'example/vehicle'
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
const mockDependencies = [MOCK_CONTEXT_ITEM_DEPENDENCY, MOCK_CONTEXT_ITEM_DEPENDENCY_DISABLED, {
|
|
259
|
+
id: 'b23e4567-e89b-12d3-a456-426614174010',
|
|
260
|
+
category: CONTEXT_ITEM_CATEGORY_DEPENDENCY,
|
|
261
|
+
content: JSON.stringify([{
|
|
262
|
+
python: ['django@3.2.9', 'djangorestframework@3.12.4', 'psycopg2@2.9.2', 'celery@5.2.1'],
|
|
263
|
+
csharp: ['newtonsoft.json@13.0.1', 'microsoft.net.test.sdk@16.11.0']
|
|
264
|
+
}]),
|
|
265
|
+
metadata: {
|
|
266
|
+
enabled: true,
|
|
267
|
+
title: 'example/backend',
|
|
268
|
+
secondaryText: 'requirements.txt, some.backend.csproj',
|
|
269
|
+
icon: 'package',
|
|
270
|
+
subType: 'dependency',
|
|
271
|
+
subTypeLabel: 'Project dependencies',
|
|
272
|
+
project: 'example/backend'
|
|
273
|
+
}
|
|
274
|
+
}, {
|
|
275
|
+
id: 'c23e4567-e89b-12d3-a456-426614174011',
|
|
276
|
+
category: CONTEXT_ITEM_CATEGORY_DEPENDENCY,
|
|
277
|
+
content: JSON.stringify([{
|
|
278
|
+
javascript: ['jquery@3.5.1', 'backbone@1.4.0', 'underscore@1.13.1', 'moment@2.29.1']
|
|
279
|
+
}]),
|
|
280
|
+
metadata: {
|
|
281
|
+
enabled: false,
|
|
282
|
+
disabledReasons: ['Project is archived'],
|
|
283
|
+
title: 'example/legacy',
|
|
284
|
+
secondaryText: 'bower.json',
|
|
285
|
+
icon: 'package',
|
|
286
|
+
subType: 'dependency',
|
|
287
|
+
subTypeLabel: 'Project dependencies',
|
|
288
|
+
project: 'example/legacy'
|
|
289
|
+
}
|
|
290
|
+
}];
|
|
182
291
|
const getMockContextItems = () => {
|
|
183
|
-
const allItems = [...mockFiles, ...mockGitItems, ...mockIssues, ...mockMergeRequests];
|
|
292
|
+
const allItems = [...mockFiles, ...mockGitItems, ...mockIssues, ...mockMergeRequests, ...mockDependencies];
|
|
184
293
|
|
|
185
294
|
// put disabled items in the back
|
|
186
295
|
const disabledItems = allItems.filter(item => !item.metadata.enabled);
|
|
@@ -188,4 +297,4 @@ const getMockContextItems = () => {
|
|
|
188
297
|
return [...enabledItems, ...disabledItems];
|
|
189
298
|
};
|
|
190
299
|
|
|
191
|
-
export { MOCK_CATEGORIES, MOCK_CONTEXT_FILE_CONTENT, MOCK_CONTEXT_FILE_DIFF_CONTENT, MOCK_CONTEXT_ITEM_FILE, MOCK_CONTEXT_ITEM_FILE_DISABLED, MOCK_CONTEXT_ITEM_GIT_COMMIT, MOCK_CONTEXT_ITEM_GIT_DIFF, MOCK_CONTEXT_ITEM_ISSUE, MOCK_CONTEXT_ITEM_ISSUE_DISABLED, MOCK_CONTEXT_ITEM_MERGE_REQUEST, MOCK_CONTEXT_ITEM_MERGE_REQUEST_DISABLED, getMockCategory, getMockContextItems };
|
|
300
|
+
export { MOCK_CATEGORIES, MOCK_CONTEXT_FILE_CONTENT, MOCK_CONTEXT_FILE_DIFF_CONTENT, MOCK_CONTEXT_ITEM_DEPENDENCY, MOCK_CONTEXT_ITEM_DEPENDENCY_DISABLED, MOCK_CONTEXT_ITEM_FILE, MOCK_CONTEXT_ITEM_FILE_DISABLED, MOCK_CONTEXT_ITEM_GIT_COMMIT, MOCK_CONTEXT_ITEM_GIT_DIFF, MOCK_CONTEXT_ITEM_ISSUE, MOCK_CONTEXT_ITEM_ISSUE_DISABLED, MOCK_CONTEXT_ITEM_MERGE_REQUEST, MOCK_CONTEXT_ITEM_MERGE_REQUEST_DISABLED, getMockCategory, getMockContextItems };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { translate } from '
|
|
1
|
+
import { translate } from '../../../../utils/i18n';
|
|
2
2
|
import { CONTEXT_ITEM_CATEGORY_LOCAL_GIT, CONTEXT_ITEM_LOCAL_GIT_COMMIT, CONTEXT_ITEM_LOCAL_GIT_DIFF, CONTEXT_ITEM_CATEGORY_FILE, CONTEXT_ITEM_CATEGORY_ISSUE, CONTEXT_ITEM_CATEGORY_MERGE_REQUEST } from './constants';
|
|
3
3
|
|
|
4
4
|
function categoryValidator(category) {
|
|
@@ -24,6 +24,9 @@ function formatMergeRequestId(iid) {
|
|
|
24
24
|
if (!iid) return '';
|
|
25
25
|
return `!${iid}`;
|
|
26
26
|
}
|
|
27
|
+
function getContextItemSource(contextItem) {
|
|
28
|
+
return contextItem.metadata.repositoryName || contextItem.metadata.project || null;
|
|
29
|
+
}
|
|
27
30
|
function getGitItemIcon(contextItem) {
|
|
28
31
|
const iconMap = {
|
|
29
32
|
[CONTEXT_ITEM_LOCAL_GIT_COMMIT]: 'commit',
|
|
@@ -42,6 +45,9 @@ function getContextItemIcon(contextItem) {
|
|
|
42
45
|
let category = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
|
|
43
46
|
icon: null
|
|
44
47
|
};
|
|
48
|
+
if (contextItem.metadata.icon) {
|
|
49
|
+
return contextItem.metadata.icon;
|
|
50
|
+
}
|
|
45
51
|
if (contextItem.category === CONTEXT_ITEM_CATEGORY_LOCAL_GIT) {
|
|
46
52
|
const gitIcon = getGitItemIcon(contextItem);
|
|
47
53
|
if (gitIcon) return gitIcon;
|
|
@@ -58,6 +64,9 @@ function getContextItemIcon(contextItem) {
|
|
|
58
64
|
return iconMap[contextItem.category] || null;
|
|
59
65
|
}
|
|
60
66
|
function getContextItemTypeLabel(contextItem) {
|
|
67
|
+
if (contextItem.metadata.subTypeLabel) {
|
|
68
|
+
return contextItem.metadata.subTypeLabel;
|
|
69
|
+
}
|
|
61
70
|
if (contextItem.category === CONTEXT_ITEM_CATEGORY_LOCAL_GIT) {
|
|
62
71
|
switch (contextItem.metadata.gitType) {
|
|
63
72
|
case CONTEXT_ITEM_LOCAL_GIT_DIFF:
|
|
@@ -91,6 +100,23 @@ function formatGitItemSecondaryText(contextItem) {
|
|
|
91
100
|
const separator = commitId ? ' - ' : '';
|
|
92
101
|
return `${repositoryName}${separator}${commitId || ''}`;
|
|
93
102
|
}
|
|
103
|
+
function getContextItemSecondaryText(contextItem) {
|
|
104
|
+
if (contextItem.metadata.secondaryText) {
|
|
105
|
+
return contextItem.metadata.secondaryText;
|
|
106
|
+
}
|
|
107
|
+
switch (contextItem.category) {
|
|
108
|
+
case CONTEXT_ITEM_CATEGORY_FILE:
|
|
109
|
+
return contextItem.metadata.relativePath;
|
|
110
|
+
case CONTEXT_ITEM_CATEGORY_ISSUE:
|
|
111
|
+
return formatIssueId(contextItem.metadata.iid);
|
|
112
|
+
case CONTEXT_ITEM_CATEGORY_MERGE_REQUEST:
|
|
113
|
+
return formatMergeRequestId(contextItem.metadata.iid);
|
|
114
|
+
case CONTEXT_ITEM_CATEGORY_LOCAL_GIT:
|
|
115
|
+
return formatGitItemSecondaryText(contextItem);
|
|
116
|
+
default:
|
|
117
|
+
return '';
|
|
118
|
+
}
|
|
119
|
+
}
|
|
94
120
|
|
|
95
121
|
/**
|
|
96
122
|
* Calculates a new index within a range. If the new index would fall out of bounds, wraps to the start/end of the range.
|
|
@@ -103,4 +129,4 @@ function wrapIndex(currentIndex, step, totalLength) {
|
|
|
103
129
|
return (currentIndex + step + totalLength) % totalLength;
|
|
104
130
|
}
|
|
105
131
|
|
|
106
|
-
export { categoriesValidator, categoryValidator, contextItemValidator, contextItemsValidator, formatGitItemSecondaryText, formatIssueId, formatMergeRequestId, getContextItemIcon, getContextItemTypeLabel, wrapIndex };
|
|
132
|
+
export { categoriesValidator, categoryValidator, contextItemValidator, contextItemsValidator, formatGitItemSecondaryText, formatIssueId, formatMergeRequestId, getContextItemIcon, getContextItemSecondaryText, getContextItemSource, getContextItemTypeLabel, wrapIndex };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { translate } from '@gitlab/ui/dist/utils/i18n';
|
|
2
1
|
import { GlSprintf } from '@gitlab/ui';
|
|
2
|
+
import { translate } from '../../../../utils/i18n';
|
|
3
3
|
import { LOADING_TRANSITION_DURATION } from '../../constants';
|
|
4
4
|
import __vue_normalize__ from 'vue-runtime-helpers/dist/normalize-component.js';
|
|
5
5
|
|