mirror of
https://github.com/Microsoft/vscode
synced 2024-08-27 21:09:43 +00:00
SCM - history item now supports searching (#209070)
This commit is contained in:
parent
e49b522e12
commit
a2acd131e4
|
@ -899,7 +899,7 @@ interface HistoryItemTemplate {
|
|||
readonly disposables: IDisposable;
|
||||
}
|
||||
|
||||
class HistoryItemRenderer implements ICompressibleTreeRenderer<SCMHistoryItemTreeElement, void, HistoryItemTemplate> {
|
||||
class HistoryItemRenderer implements ICompressibleTreeRenderer<SCMHistoryItemTreeElement, LabelFuzzyScore, HistoryItemTemplate> {
|
||||
|
||||
static readonly TEMPLATE_ID = 'history-item';
|
||||
get templateId(): string { return HistoryItemRenderer.TEMPLATE_ID; }
|
||||
|
@ -915,7 +915,7 @@ class HistoryItemRenderer implements ICompressibleTreeRenderer<SCMHistoryItemTre
|
|||
|
||||
const element = append(container, $('.history-item'));
|
||||
|
||||
const iconLabel = new IconLabel(element, { supportIcons: true });
|
||||
const iconLabel = new IconLabel(element, { supportIcons: true, supportHighlights: true, supportDescriptionHighlights: true });
|
||||
const iconContainer = prepend(iconLabel.element, $('.icon-container'));
|
||||
|
||||
const disposables = new DisposableStore();
|
||||
|
@ -931,7 +931,7 @@ class HistoryItemRenderer implements ICompressibleTreeRenderer<SCMHistoryItemTre
|
|||
return { iconContainer, label: iconLabel, actionBar, statsContainer, filesLabel, insertionsLabel, deletionsLabel, elementDisposables: new DisposableStore(), disposables };
|
||||
}
|
||||
|
||||
renderElement(node: ITreeNode<SCMHistoryItemTreeElement, void>, index: number, templateData: HistoryItemTemplate, height: number | undefined): void {
|
||||
renderElement(node: ITreeNode<SCMHistoryItemTreeElement, LabelFuzzyScore>, index: number, templateData: HistoryItemTemplate, height: number | undefined): void {
|
||||
const historyItem = node.element;
|
||||
|
||||
templateData.iconContainer.className = 'icon-container';
|
||||
|
@ -939,7 +939,8 @@ class HistoryItemRenderer implements ICompressibleTreeRenderer<SCMHistoryItemTre
|
|||
templateData.iconContainer.classList.add(...ThemeIcon.asClassNameArray(historyItem.icon));
|
||||
}
|
||||
|
||||
templateData.label.setLabel(historyItem.label, historyItem.description);
|
||||
const [matches, descriptionMatches] = this.processMatches(historyItem, node.filterData);
|
||||
templateData.label.setLabel(historyItem.label, historyItem.description, { matches, descriptionMatches });
|
||||
|
||||
templateData.actionBar.clear();
|
||||
templateData.actionBar.context = historyItem;
|
||||
|
@ -953,11 +954,22 @@ class HistoryItemRenderer implements ICompressibleTreeRenderer<SCMHistoryItemTre
|
|||
this.renderStatistics(node, index, templateData, height);
|
||||
}
|
||||
|
||||
renderCompressedElements(node: ITreeNode<ICompressedTreeNode<SCMHistoryItemTreeElement>, void>, index: number, templateData: HistoryItemTemplate, height: number | undefined): void {
|
||||
renderCompressedElements(node: ITreeNode<ICompressedTreeNode<SCMHistoryItemTreeElement>, LabelFuzzyScore>, index: number, templateData: HistoryItemTemplate, height: number | undefined): void {
|
||||
throw new Error('Should never happen since node is incompressible');
|
||||
}
|
||||
|
||||
private renderStatistics(node: ITreeNode<SCMHistoryItemTreeElement, void>, index: number, templateData: HistoryItemTemplate, height: number | undefined): void {
|
||||
private processMatches(historyItem: SCMHistoryItemTreeElement, filterData: LabelFuzzyScore | undefined): [IMatch[] | undefined, IMatch[] | undefined] {
|
||||
if (!filterData) {
|
||||
return [undefined, undefined];
|
||||
}
|
||||
|
||||
return [
|
||||
historyItem.label === filterData.label ? createMatches(filterData.score) : undefined,
|
||||
historyItem.description === filterData.label ? createMatches(filterData.score) : undefined
|
||||
];
|
||||
}
|
||||
|
||||
private renderStatistics(node: ITreeNode<SCMHistoryItemTreeElement, LabelFuzzyScore>, index: number, templateData: HistoryItemTemplate, height: number | undefined): void {
|
||||
const historyItem = node.element;
|
||||
|
||||
if (historyItem.statistics) {
|
||||
|
@ -988,9 +1000,10 @@ class HistoryItemRenderer implements ICompressibleTreeRenderer<SCMHistoryItemTre
|
|||
templateData.statsContainer.classList.toggle('hidden', historyItem.statistics === undefined);
|
||||
}
|
||||
|
||||
disposeElement(element: ITreeNode<SCMHistoryItemTreeElement, void>, index: number, templateData: HistoryItemTemplate, height: number | undefined): void {
|
||||
disposeElement(element: ITreeNode<SCMHistoryItemTreeElement, LabelFuzzyScore>, index: number, templateData: HistoryItemTemplate, height: number | undefined): void {
|
||||
templateData.elementDisposables.clear();
|
||||
}
|
||||
|
||||
disposeTemplate(templateData: HistoryItemTemplate): void {
|
||||
templateData.disposables.dispose();
|
||||
}
|
||||
|
@ -1289,7 +1302,10 @@ export class SCMTreeKeyboardNavigationLabelProvider implements ICompressibleKeyb
|
|||
} else if (isSCMHistoryItemGroupTreeElement(element)) {
|
||||
return element.label;
|
||||
} else if (isSCMHistoryItemTreeElement(element)) {
|
||||
return element.label;
|
||||
// For a history item we want to match both the message and
|
||||
// the author. A match in the message takes precedence over
|
||||
// a match in the author.
|
||||
return [element.label, element.description];
|
||||
} else if (isSCMViewSeparator(element)) {
|
||||
return element.label;
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue