diff --git a/src/components/experimental/duo/chat/components/duo_chat_context/constants.js b/src/components/experimental/duo/chat/components/duo_chat_context/constants.js
index d1d1b777dbf775644fad584d3691a2957d88c19c..7d825c7cc9a610425bd73a1e55b8dfef36bace3d 100644
--- a/src/components/experimental/duo/chat/components/duo_chat_context/constants.js
+++ b/src/components/experimental/duo/chat/components/duo_chat_context/constants.js
@@ -1,3 +1,3 @@
-export const CONTEXT_ITEM_TYPE_ISSUE = 'issue';
-export const CONTEXT_ITEM_TYPE_MERGE_REQUEST = 'merge_request';
-export const CONTEXT_ITEM_TYPE_PROJECT_FILE = 'project_file';
+export const CONTEXT_ITEM_CATEGORY_ISSUE = 'issue';
+export const CONTEXT_ITEM_CATEGORY_MERGE_REQUEST = 'merge_request';
+export const CONTEXT_ITEM_CATEGORY_FILE = 'file';
diff --git a/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.spec.js b/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.spec.js
index 9fb517fda5dd2169692a05c005f7f972d0bee3ab..670067ddf26c04975a2552a82476151fbf1ec6c5 100644
--- a/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.spec.js
+++ b/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.spec.js
@@ -2,9 +2,9 @@ import { shallowMount } from '@vue/test-utils';
import { nextTick } from 'vue';
import { getMockCategory, getMockContextItems, MOCK_CATEGORIES } from '../mock_context_data';
import {
- CONTEXT_ITEM_TYPE_ISSUE,
- CONTEXT_ITEM_TYPE_MERGE_REQUEST,
- CONTEXT_ITEM_TYPE_PROJECT_FILE,
+ CONTEXT_ITEM_CATEGORY_ISSUE,
+ CONTEXT_ITEM_CATEGORY_MERGE_REQUEST,
+ CONTEXT_ITEM_CATEGORY_FILE,
} from '../constants';
import GlDuoChatContextItemSelections from '../duo_chat_context_item_selections/duo_chat_context_item_selections.vue';
import GlDuoChatContextItemMenuCategoryItems from './duo_chat_context_item_menu_category_items.vue';
@@ -122,19 +122,22 @@ describe('GlDuoChatContextItemMenu', () => {
});
describe.each([
- CONTEXT_ITEM_TYPE_ISSUE,
- CONTEXT_ITEM_TYPE_MERGE_REQUEST,
- CONTEXT_ITEM_TYPE_PROJECT_FILE,
+ CONTEXT_ITEM_CATEGORY_ISSUE,
+ CONTEXT_ITEM_CATEGORY_MERGE_REQUEST,
+ CONTEXT_ITEM_CATEGORY_FILE,
])('when a "%s" category has been selected', (categoryValue) => {
let category;
let results;
beforeEach(() => {
category = getMockCategory(categoryValue);
results = getMockContextItems()
- .filter((item) => item.type === categoryValue)
+ .filter((item) => item.category === categoryValue)
.map((item, index) => ({
...item,
- isEnabled: index % 2 === 0, // disable odd indexed items
+ metadata: {
+ ...item.metadata,
+ enabled: index % 2 === 0, // disable odd indexed items
+ },
}));
createComponent({
@@ -260,7 +263,10 @@ describe('GlDuoChatContextItemMenu', () => {
await wrapper.setProps({
results: results.map((result, index) => ({
...result,
- isEnabled: index === firstEnabledIndex,
+ metadata: {
+ ...result.metadata,
+ enabled: index === firstEnabledIndex,
+ },
})),
});
await nextTick();
diff --git a/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.vue b/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.vue
index 65093aea2c894033162a2c136fd8eb37e1c516b7..a3fbca3a2b05f3f137bc03ea4360d167a5eaa5c2 100644
--- a/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.vue
+++ b/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu.vue
@@ -77,7 +77,7 @@ export default {
return this.open && !this.selectedCategory;
},
allResultsAreDisabled() {
- return this.results.every((result) => !result.isEnabled);
+ return this.results.every((result) => !result.metadata.enabled);
},
},
watch: {
@@ -90,7 +90,7 @@ export default {
this.debouncedSearch(query);
},
results(newResults) {
- const firstEnabledIndex = newResults.findIndex((result) => result.isEnabled);
+ const firstEnabledIndex = newResults.findIndex((result) => result.metadata.enabled);
this.activeIndex = firstEnabledIndex >= 0 ? firstEnabledIndex : 0;
},
},
@@ -117,7 +117,7 @@ export default {
});
}, SEARCH_DEBOUNCE_MS),
selectItem(item) {
- if (!item.isEnabled) {
+ if (!item.metadata.enabled) {
return;
}
@@ -214,7 +214,7 @@ export default {
// If we've looped through all items and found no enabled ones, keep the current index
return;
}
- } while (!this.results[newIndex].isEnabled);
+ } while (!this.results[newIndex].metadata.enabled);
this.activeIndex = newIndex;
},
diff --git a/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_item.spec.js b/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_item.spec.js
index 9ddf410b2518e086a7122b689f6569a6986ca3eb..4c5eacfbcacb833d86473477e3e6fc52b5d699e4 100644
--- a/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_item.spec.js
+++ b/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_item.spec.js
@@ -6,9 +6,9 @@ import {
MOCK_CONTEXT_ITEM_MERGE_REQUEST,
} from '../mock_context_data';
import {
- CONTEXT_ITEM_TYPE_ISSUE,
- CONTEXT_ITEM_TYPE_MERGE_REQUEST,
- CONTEXT_ITEM_TYPE_PROJECT_FILE,
+ CONTEXT_ITEM_CATEGORY_ISSUE,
+ CONTEXT_ITEM_CATEGORY_MERGE_REQUEST,
+ CONTEXT_ITEM_CATEGORY_FILE,
} from '../constants';
import GlDuoChatContextItemPopover from '../duo_chat_context_item_popover/duo_chat_context_item_popover.vue';
import GlDuoChatContextItemMenuSearchItem from './duo_chat_context_item_menu_search_item.vue';
@@ -30,15 +30,15 @@ describe('GlDuoChatContextItemMenuContextSearchItem', () => {
describe.each([
{
- category: getMockCategory(CONTEXT_ITEM_TYPE_PROJECT_FILE),
+ category: getMockCategory(CONTEXT_ITEM_CATEGORY_FILE),
contextItem: MOCK_CONTEXT_ITEM_FILE,
},
{
- category: getMockCategory(CONTEXT_ITEM_TYPE_ISSUE),
+ category: getMockCategory(CONTEXT_ITEM_CATEGORY_ISSUE),
contextItem: MOCK_CONTEXT_ITEM_ISSUE,
},
{
- category: getMockCategory(CONTEXT_ITEM_TYPE_MERGE_REQUEST),
+ category: getMockCategory(CONTEXT_ITEM_CATEGORY_MERGE_REQUEST),
contextItem: MOCK_CONTEXT_ITEM_MERGE_REQUEST,
},
])('for "$category"', ({ category, contextItem }) => {
@@ -58,7 +58,7 @@ describe('GlDuoChatContextItemMenuContextSearchItem', () => {
});
it('renders the default context item title', () => {
- expect(wrapper.text()).toContain(contextItem.metadata.name);
+ expect(wrapper.text()).toContain(contextItem.metadata.title);
});
});
});
diff --git a/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_item.vue b/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_item.vue
index df4175b15921126db059790e72f7f1588ebd3b55..fe45351990432c8d90bc4fdc0f6486c2e39eb0b7 100644
--- a/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_item.vue
+++ b/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_item.vue
@@ -8,9 +8,9 @@ import {
formatMergeRequestId,
} from '../utils';
import {
- CONTEXT_ITEM_TYPE_ISSUE,
- CONTEXT_ITEM_TYPE_MERGE_REQUEST,
- CONTEXT_ITEM_TYPE_PROJECT_FILE,
+ CONTEXT_ITEM_CATEGORY_ISSUE,
+ CONTEXT_ITEM_CATEGORY_MERGE_REQUEST,
+ CONTEXT_ITEM_CATEGORY_FILE,
} from '../constants';
export default {
@@ -30,16 +30,16 @@ export default {
},
computed: {
title() {
- return this.contextItem.metadata?.name || '';
+ return this.contextItem.metadata?.title || '';
},
secondaryText() {
switch (this.category.value) {
- case CONTEXT_ITEM_TYPE_PROJECT_FILE:
- return this.contextItem.metadata.info.relFilePath;
- case CONTEXT_ITEM_TYPE_ISSUE:
- return formatIssueId(this.contextItem.metadata.info.iid);
- case CONTEXT_ITEM_TYPE_MERGE_REQUEST:
- return formatMergeRequestId(this.contextItem.metadata.info.iid);
+ case CONTEXT_ITEM_CATEGORY_FILE:
+ return this.contextItem.metadata.relativePath;
+ case CONTEXT_ITEM_CATEGORY_ISSUE:
+ return formatIssueId(this.contextItem.metadata.iid);
+ case CONTEXT_ITEM_CATEGORY_MERGE_REQUEST:
+ return formatMergeRequestId(this.contextItem.metadata.iid);
default:
return '';
}
diff --git a/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items.spec.js b/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items.spec.js
index 8fca41335aef1f7a7693e0f978faf613d0348c49..4757d463d98ff0d1b7396e459872624305419635 100644
--- a/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items.spec.js
+++ b/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items.spec.js
@@ -2,9 +2,9 @@ import { shallowMount } from '@vue/test-utils';
import { nextTick } from 'vue';
import { MOCK_CATEGORIES, getMockContextItems, getMockCategory } from '../mock_context_data';
import {
- CONTEXT_ITEM_TYPE_ISSUE,
- CONTEXT_ITEM_TYPE_MERGE_REQUEST,
- CONTEXT_ITEM_TYPE_PROJECT_FILE,
+ CONTEXT_ITEM_CATEGORY_ISSUE,
+ CONTEXT_ITEM_CATEGORY_MERGE_REQUEST,
+ CONTEXT_ITEM_CATEGORY_FILE,
} from '../constants';
import GlDuoChatContextItemMenuSearchItems from './duo_chat_context_item_menu_search_items.vue';
import GlDuoChatContextItemMenuSearchItemsLoading from './duo_chat_context_item_menu_search_items_loading.vue';
@@ -17,7 +17,8 @@ describe('GlDuoChatContextItemMenuSearchItems', () => {
const createWrapper = (props = {}) => {
category = props.category || MOCK_CATEGORIES.at(0);
- results = props.results || getMockContextItems().filter((item) => item.type === category.value);
+ results =
+ props.results || getMockContextItems().filter((item) => item.category === category.value);
wrapper = shallowMount(GlDuoChatContextItemMenuSearchItems, {
propsData: {
@@ -196,7 +197,10 @@ describe('GlDuoChatContextItemMenuSearchItems', () => {
await wrapper.setProps({
results: results.map((result, index) => ({
...result,
- isEnabled: index !== disabledIndex,
+ metadata: {
+ ...result.metadata,
+ enabled: index !== disabledIndex,
+ },
})),
});
@@ -218,7 +222,10 @@ describe('GlDuoChatContextItemMenuSearchItems', () => {
wrapper.setProps({
results: getMockContextItems().map((result) => ({
...result,
- isEnabled: false,
+ metadata: {
+ ...result.metadata,
+ enabled: false,
+ },
})),
});
await nextTick();
@@ -231,15 +238,15 @@ describe('GlDuoChatContextItemMenuSearchItems', () => {
describe.each([
{
- testCase: getMockCategory(CONTEXT_ITEM_TYPE_PROJECT_FILE),
+ testCase: getMockCategory(CONTEXT_ITEM_CATEGORY_FILE),
expectedPlaceholder: 'Search files...',
},
{
- testCase: getMockCategory(CONTEXT_ITEM_TYPE_ISSUE),
+ testCase: getMockCategory(CONTEXT_ITEM_CATEGORY_ISSUE),
expectedPlaceholder: 'Search issues...',
},
{
- testCase: getMockCategory(CONTEXT_ITEM_TYPE_MERGE_REQUEST),
+ testCase: getMockCategory(CONTEXT_ITEM_CATEGORY_MERGE_REQUEST),
expectedPlaceholder: 'Search merge requests...',
},
])('when category is "$testCase.label"', ({ testCase, expectedPlaceholder }) => {
diff --git a/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items.vue b/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items.vue
index 6349ca7ee6472833f7f7ff984bca6305d095470e..ca20fdb8973af41259f9c90161f2af9b85f97ef2 100644
--- a/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items.vue
+++ b/src/components/experimental/duo/chat/components/duo_chat_context/duo_chat_context_item_menu/duo_chat_context_item_menu_search_items.vue
@@ -87,12 +87,12 @@ export default {
this.$emit('keyup', e);
},
setActiveIndex(index) {
- if (this.results[index]?.isEnabled) {
+ if (this.results[index]?.metadata.enabled) {
this.$emit('active-index-change', index);
}
},
isActiveItem(contextItem, index) {
- return index === this.activeIndex && contextItem.isEnabled;
+ return index === this.activeIndex && contextItem.metadata.enabled;
},
},
i18n: {
@@ -127,9 +127,10 @@ export default {
:key="contextItem.id"
:class="{
'active-command': isActiveItem(contextItem, index),
- 'gl-cursor-not-allowed [&>button]:focus-within:!gl-shadow-none': !contextItem.isEnabled,
+ 'gl-cursor-not-allowed [&>button]:focus-within:!gl-shadow-none':
+ !contextItem.metadata.enabled,
}"
- :tabindex="!contextItem.isEnabled ? -1 : undefined"
+ :tabindex="!contextItem.metadata.enabled ? -1 : undefined"
class="duo-chat-context-search-result-item"
data-testid="search-result-item"
@click="selectItem(contextItem)"
@@ -138,7 +139,7 @@ export default {