Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/@types/vscode.proposed.chatParticipantAdditions.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ declare module 'vscode' {
isComplete?: boolean;
toolSpecificData?: ChatTerminalToolInvocationData;
fromSubAgent?: boolean;
presentation?: 'hidden' | 'hiddenAfterComplete' | undefined;

constructor(toolName: string, toolCallId: string, isError?: boolean);
}
Expand Down
7 changes: 7 additions & 0 deletions src/github/createPRViewProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -505,6 +505,10 @@ export abstract class BaseCreatePullRequestViewProvider<T extends BasePullReques
return this._replyMessage(message, undefined);
}

private async openDescriptionSettings(): Promise<void> {
return vscode.commands.executeCommand('workbench.action.openSettings', 'githubPullRequests.pullRequestDescription');
}

protected override async _onDidReceiveMessage(message: IRequestMessage<any>) {
const result = await super._onDidReceiveMessage(message);
if (result !== this.MESSAGE_UNHANDLED) {
Expand Down Expand Up @@ -539,6 +543,9 @@ export abstract class BaseCreatePullRequestViewProvider<T extends BasePullReques
case 'pr.removeLabel':
return this.removeLabel(message);

case 'pr.openDescriptionSettings':
return this.openDescriptionSettings();

default:
return this.MESSAGE_UNHANDLED;
}
Expand Down
25 changes: 23 additions & 2 deletions webviews/createPullRequestViewNew/app.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import PullRequestContextNew from '../common/createContextNew';
import { ErrorBoundary } from '../common/errorBoundary';
import { LabelCreate } from '../common/label';
import { ContextDropdown } from '../components/contextDropdown';
import { accountIcon, feedbackIcon, gitCompareIcon, milestoneIcon, prMergeIcon, projectIcon, sparkleIcon, stopCircleIcon, tagIcon } from '../components/icon';
import { accountIcon, feedbackIcon, gitCompareIcon, milestoneIcon, prMergeIcon, projectIcon, settingsIcon, sparkleIcon, stopCircleIcon, tagIcon } from '../components/icon';
import { Avatar } from '../components/user';

type CreateMethod = 'create-draft' | 'create' | 'create-automerge-squash' | 'create-automerge-rebase' | 'create-automerge-merge';
Expand Down Expand Up @@ -172,6 +172,24 @@ export function main() {
}
}

function openDescriptionSettings(event: React.MouseEvent | React.KeyboardEvent): void {
let shouldExecute = false;

if (event.type === 'keydown') {
const keyEvent = event as React.KeyboardEvent;
if (keyEvent.key === 'Enter' || keyEvent.key === ' ') {
event.preventDefault();
shouldExecute = true;
}
} else if (event.type === 'click') {
shouldExecute = true;
}

if (shouldExecute) {
ctx.postMessage({ command: 'pr.openDescriptionSettings' });
}
}

async function generateTitle(useCopilot?: boolean) {
setGeneratingTitle(true);
await ctx.generateTitle(!!useCopilot);
Expand Down Expand Up @@ -325,7 +343,10 @@ export function main() {
: null}
</div>

<label htmlFor='description' className='input-title'>Description</label>
<div className='group-description-header'>
<label htmlFor='description' className='input-title'>Description</label>
<button type='button' title='Open pull request description settings' aria-label='Open pull request description settings' className='description-settings-action icon-button' onClick={openDescriptionSettings} onKeyDown={openDescriptionSettings} tabIndex={0}>{settingsIcon}</button>
</div>
<div className='group-description'>
<textarea
id='description'
Expand Down
45 changes: 45 additions & 0 deletions webviews/createPullRequestViewNew/index.css
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,51 @@ button.input-box {
text-transform: uppercase;
}

.group-description-header {
position: relative;
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 4px;
}

.group-description-header .input-title {
margin-bottom: 0;
}

.group-description-header .description-settings-action {
background: unset;
padding: 2px;
margin: unset;
height: 16px;
cursor: pointer;
opacity: 0.7;
}

.group-description-header .description-settings-action:hover {
outline-style: none;
opacity: 1;
background-color: var(--vscode-toolbar-hoverBackground);
}

.group-description-header .description-settings-action:focus {
outline-style: none;
}

.group-description-header .description-settings-action:focus-visible {
outline-width: 1px;
outline-style: solid;
outline-offset: -1px;
outline-color: var(--vscode-focusBorder);
background: unset;
opacity: 1;
}

.group-description-header .description-settings-action svg {
width: 14px;
height: 14px;
}

#title {
padding-right: 24px;
text-overflow: ellipsis;
Expand Down