Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/src/extension/prompts/node/panel/projectLabels.tsx
13405 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import { BasePromptElementProps, PromptElement, PromptSizing, UserMessage } from '@vscode/prompt-tsx';
7
import { IPromptWorkspaceLabels } from '../../../context/node/resolvers/promptWorkspaceLabels';
8
import { EmbeddedInsideUserMessage, embeddedInsideUserMessageDefault } from '../base/promptElement';
9
import { Tag } from '../base/tag';
10
11
export interface ProjectLabelsProps extends BasePromptElementProps, EmbeddedInsideUserMessage {
12
}
13
14
export class ProjectLabels extends PromptElement<ProjectLabelsProps, void> {
15
16
constructor(
17
props: ProjectLabelsProps,
18
@IPromptWorkspaceLabels private readonly workspaceLabels: IPromptWorkspaceLabels,
19
) {
20
super(props);
21
}
22
23
override async render(state: void, sizing: PromptSizing) {
24
await this.workspaceLabels.collectContext();
25
const labels = this.workspaceLabels.labels;
26
if (labels.length === 0) {
27
return undefined;
28
}
29
30
if (this.props.embeddedInsideUserMessage ?? embeddedInsideUserMessageDefault) {
31
return (
32
<Tag name='projectLabels' priority={this.props.priority}>
33
{this._render(labels)}
34
</Tag>
35
);
36
}
37
38
return (
39
<UserMessage priority={this.props.priority}>
40
{this._render(labels)}
41
</UserMessage >
42
);
43
}
44
45
private _render(labels: string[]) {
46
return (
47
<>
48
I am working on a project of the following nature:<br />
49
{labels.reduce((prev, curr) => `${prev}\n- ${curr}`, '').trim()}
50
</>
51
);
52
}
53
}
54
55