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