Skip to content
Merged
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
83 changes: 51 additions & 32 deletions packages/amazonq/src/lsp/chat/webviewProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
Uri,
} from 'vscode'
import { LanguageServerResolver } from 'aws-core-vscode/shared'
import { QuickActionCommandGroup } from '@aws/mynah-ui'

export class AmazonQChatViewProvider implements WebviewViewProvider {
public static readonly viewType = 'aws.amazonq.AmazonQChatView'
Expand All @@ -21,6 +22,24 @@ export class AmazonQChatViewProvider implements WebviewViewProvider {

webview: Webview | undefined

private readonly quickActionCommands: QuickActionCommandGroup[] = [
{
groupName: 'Quick Actions',
commands: [
{
command: '/help',
icon: 'help',
description: 'Learn more about Amazon Q',
},
{
command: '/clear',
icon: 'trash',
description: 'Clear this session',
},
],
},
]

constructor(private readonly mynahUIPath: string) {}

public resolveWebviewView(webviewView: WebviewView, context: WebviewViewResolveContext, _token: CancellationToken) {
Expand All @@ -34,40 +53,40 @@ export class AmazonQChatViewProvider implements WebviewViewProvider {
}

const uiPath = webviewView.webview.asWebviewUri(Uri.parse(this.mynahUIPath)).toString()
webviewView.webview.html = getWebviewContent(uiPath)
webviewView.webview.html = this.getWebviewContent(uiPath)

this.onDidResolveWebviewEmitter.fire()
}
}

function getWebviewContent(mynahUIPath: string) {
return `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Chat</title>
<style>
body,
html {
background-color: var(--mynah-color-bg);
color: var(--mynah-color-text-default);
height: 100%;
width: 100%;
overflow: hidden;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<script type="text/javascript" src="${mynahUIPath.toString()}" defer onload="init()"></script>
<script type="text/javascript">
const init = () => {
amazonQChat.createChat(acquireVsCodeApi(), {disclaimerAcknowledged: false});
}
</script>
</body>
</html>`
private getWebviewContent(mynahUIPath: string) {
return `
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Chat</title>
<style>
body,
html {
background-color: var(--mynah-color-bg);
color: var(--mynah-color-text-default);
height: 100%;
width: 100%;
overflow: hidden;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<script type="text/javascript" src="${mynahUIPath.toString()}" defer onload="init()"></script>
<script type="text/javascript">
const init = () => {
amazonQChat.createChat(acquireVsCodeApi(), { disclaimerAcknowledged: false, quickActionCommands: ${JSON.stringify(this.quickActionCommands)}});
}
</script>
</body>
</html>`
}
}
Loading