blob: 7c90a6ffecc10c8016219db77fc810c678e6497b [file] [log] [blame]
/**
* Copyright 2020-present NAVER Corp.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import * as vscode from 'vscode';
import * as fs from 'fs';
import * as openwhisk from 'openwhisk';
import * as path from 'path';
import { WskTrigger } from '../wskEntity';
import { convertObjToKeyVal, convertKeyValToObj } from '../common';
import { WEBVIEW_TEMPLATE_PATH } from '../constant/path';
export async function showTriggerInfo(
trigger: WskTrigger,
context: vscode.ExtensionContext
): Promise<void> {
const panel = vscode.window.createWebviewPanel(
'showTriggerInfo',
`Trigger: ${trigger.label}`,
vscode.ViewColumn.One,
{
enableScripts: true,
}
);
const nodeModulesDiskPath = vscode.Uri.file(path.join(context.extensionPath, 'node_modules'));
const nodeModulePath = panel.webview.asWebviewUri(nodeModulesDiskPath);
const webviewTemplateDiskPath = vscode.Uri.file(WEBVIEW_TEMPLATE_PATH);
const webviewTemplatePath = panel.webview.asWebviewUri(webviewTemplateDiskPath);
const html = await fs.promises.readFile(
path.resolve(WEBVIEW_TEMPLATE_PATH, 'triggerInfo.html'),
'utf-8'
);
panel.webview.html = html
.replace(/{{nodeModulePath}}/gi, nodeModulePath.toString())
.replace(/{{webviewTemplatePath}}/gi, webviewTemplatePath.toString());
let triggerDesc: openwhisk.Trigger | null;
panel.webview.onDidReceiveMessage(async (message) => {
if (message.command === 'initialized') {
if (!triggerDesc) {
triggerDesc = await trigger.client.triggers.get(trigger.label);
}
let params = '';
let annotations = '';
if (triggerDesc.parameters) {
params = JSON.stringify(convertKeyValToObj(triggerDesc.parameters), null, 4);
}
if (triggerDesc.annotations) {
annotations = JSON.stringify(convertKeyValToObj(triggerDesc.annotations), null, 4);
}
panel.webview.postMessage({
command: 'getData',
name: triggerDesc.name,
params: params,
annotations: annotations,
//@ts-ignore
rules: triggerDesc.rules,
});
}
if (message.command === 'update') {
const annotationObject = JSON.parse(message.annotations);
const parameterObject = JSON.parse(message.parameters);
await trigger.client.triggers.update({
name: trigger.label,
trigger: {
annotations: convertObjToKeyVal(annotationObject),
parameters: convertObjToKeyVal(parameterObject),
},
});
vscode.window.showInformationMessage('The trigger is updated succesfully.');
triggerDesc = null;
}
});
}