fix for issue 4596 (#4670)

This commit is contained in:
Alan Ren
2019-03-22 14:11:26 -07:00
committed by GitHub
parent 4a87a24235
commit d00c3780a6
2 changed files with 81 additions and 13 deletions

View File

@@ -558,14 +558,7 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
if (searchTexts && searchTexts.length > 0) { if (searchTexts && searchTexts.length > 0) {
searchTexts.forEach(searchText => { searchTexts.forEach(searchText => {
if (searchText !== '@allmarketplace') { if (searchText !== '@allmarketplace') {
filteredExtensions = filteredExtensions.filter( filteredExtensions = filteredExtensions.filter(e => ExtensionGalleryService.isMatchingExtension(e, searchText));
e => e.extensionName && e.extensionName.includes(searchText) ||
e.publisher && e.publisher.publisherName && e.publisher.publisherName.includes(searchText) ||
e.publisher && e.publisher.displayName && e.publisher.displayName.includes(searchText) ||
e.displayName && e.displayName.includes(searchText) ||
e.shortDescription && e.shortDescription.includes(searchText) ||
e.extensionId && e.extensionId.includes(searchText)
);
} }
}); });
} }
@@ -574,11 +567,11 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
// Sorting // Sorting
switch (query.sortBy) { switch (query.sortBy) {
case SortBy.PublisherName: case SortBy.PublisherName:
filteredExtensions.sort( (a, b) => ExtensionGalleryService.compareByField(a.publisher, b.publisher, 'publisherName')); filteredExtensions.sort((a, b) => ExtensionGalleryService.compareByField(a.publisher, b.publisher, 'publisherName'));
break; break;
case SortBy.Title: case SortBy.Title:
default: default:
filteredExtensions.sort( (a, b) => ExtensionGalleryService.compareByField(a, b, 'displayName')); filteredExtensions.sort((a, b) => ExtensionGalleryService.compareByField(a, b, 'displayName'));
break; break;
} }
@@ -592,6 +585,24 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
return { galleryExtensions: filteredExtensions, total: actualTotal }; return { galleryExtensions: filteredExtensions, total: actualTotal };
} }
// {{SQL CARBON EDIT}}
/*
* Checks whether the extension matches the search text
*/
public static isMatchingExtension(extension: IRawGalleryExtension, searchText: string): boolean {
if (!searchText) {
return true;
}
let text = searchText.toLocaleLowerCase();
return extension
&& (extension.extensionName && extension.extensionName.toLocaleLowerCase().includes(text) ||
extension.publisher && extension.publisher.publisherName && extension.publisher.publisherName.toLocaleLowerCase().includes(text) ||
extension.publisher && extension.publisher.displayName && extension.publisher.displayName.toLocaleLowerCase().includes(text) ||
extension.displayName && extension.displayName.toLocaleLowerCase().includes(text) ||
extension.shortDescription && extension.shortDescription.toLocaleLowerCase().includes(text) ||
extension.extensionId && extension.extensionId.toLocaleLowerCase().includes(text));
}
public static compareByField(a: any, b: any, fieldName: string): number { public static compareByField(a: any, b: any, fieldName: string): number {
if (a && !b) { if (a && !b) {
return 1; return 1;
@@ -608,7 +619,7 @@ export class ExtensionGalleryService implements IExtensionGalleryService {
if (!b || !b[fieldName] && (!a || !a[fieldName])) { if (!b || !b[fieldName] && (!a || !a[fieldName])) {
return 0; return 0;
} }
if (a[fieldName] === b[fieldName]) { if (a[fieldName] === b[fieldName]) {
return 0; return 0;
} }
return a[fieldName] < b[fieldName] ? -1 : 1; return a[fieldName] < b[fieldName] ? -1 : 1;

View File

@@ -66,10 +66,10 @@ suite('Extension Gallery Service', () => {
assert.equal(ExtensionGalleryService.compareByField(a.publisher, b.publisher, 'publisherName'), 0); assert.equal(ExtensionGalleryService.compareByField(a.publisher, b.publisher, 'publisherName'), 0);
a.publisher = { displayName: undefined, publisherId: undefined, publisherName: undefined}; a.publisher = { displayName: undefined, publisherId: undefined, publisherName: undefined };
assert.equal(ExtensionGalleryService.compareByField(a.publisher, b.publisher, 'publisherName'), 1); assert.equal(ExtensionGalleryService.compareByField(a.publisher, b.publisher, 'publisherName'), 1);
b.publisher = { displayName: undefined, publisherId: undefined, publisherName: undefined}; b.publisher = { displayName: undefined, publisherId: undefined, publisherName: undefined };
assert.equal(ExtensionGalleryService.compareByField(a.publisher, b.publisher, 'publisherName'), 0); assert.equal(ExtensionGalleryService.compareByField(a.publisher, b.publisher, 'publisherName'), 0);
a.publisher.publisherName = 'a'; a.publisher.publisherName = 'a';
@@ -90,4 +90,61 @@ suite('Extension Gallery Service', () => {
b.displayName = 'test1'; b.displayName = 'test1';
assert.equal(ExtensionGalleryService.compareByField(a, b, 'displayName'), 0); assert.equal(ExtensionGalleryService.compareByField(a, b, 'displayName'), 0);
}); });
// {{SQL CARBON EDIT}}
test('isMatchingExtension', () => {
let createEmptyExtension = () => {
return {
extensionId: '',
extensionName: '',
displayName: '',
shortDescription: '',
publisher: {
displayName: '',
publisherId: '',
publisherName: ''
},
versions: [],
statistics: [],
flags: ''
};
};
let searchText = 'tExt1 withSpace';
let matchingText = 'test text1 Withspace test';
let notMatchingText = 'test test';
let extension;
assert(!ExtensionGalleryService.isMatchingExtension(undefined, searchText), 'empty extension should not match any search text');
extension = createEmptyExtension();
assert(ExtensionGalleryService.isMatchingExtension(extension, undefined), 'empty search text should match any not null extension');
extension = createEmptyExtension();
extension.extensionName = notMatchingText;
assert(!ExtensionGalleryService.isMatchingExtension(extension, searchText), 'invalid search text should not match extension');
extension = createEmptyExtension();
extension.extensionId = matchingText;
assert(ExtensionGalleryService.isMatchingExtension(extension, searchText), 'extensionid field should be used for matching');
extension = createEmptyExtension();
extension.extensionName = matchingText;
assert(ExtensionGalleryService.isMatchingExtension(extension, searchText), 'extensionName field should be used for matching');
extension = createEmptyExtension();
extension.displayName = matchingText;
assert(ExtensionGalleryService.isMatchingExtension(extension, searchText), 'displayName field should be used for matching');
extension = createEmptyExtension();
extension.shortDescription = matchingText;
assert(ExtensionGalleryService.isMatchingExtension(extension, searchText), 'shortDescription field should be used for matching');
extension = createEmptyExtension();
extension.publisher.displayName = matchingText;
assert(ExtensionGalleryService.isMatchingExtension(extension, searchText), 'publisher displayName field should be used for matching');
extension = createEmptyExtension();
extension.publisher.publisherName = matchingText;
assert(ExtensionGalleryService.isMatchingExtension(extension, searchText), 'publisher publisherName field should be used for matching');
});
}); });