Files
umbrix-libcore/extension/html/rpc/extensionPage.js
2024-09-26 23:16:20 +02:00

85 lines
2.6 KiB
JavaScript

const { client,extension } = require('./client.js');
const { renderForm } = require('./formRenderer.js');
const { listExtensions } = require('./extensionList.js');
var currentExtensionId=undefined;
function openExtensionPage(extensionId) {
currentExtensionId=extensionId;
$("#extension-list-container").hide();
$("#extension-page-container").show();
const request = new extension.ExtensionRequest();
request.setExtensionId(extensionId);
const stream = client.connect(request, {});
stream.on('data', (response) => {
if (response.getExtensionId() === currentExtensionId) {
ui=JSON.parse(response.getJsonUi())
if(response.getType()== proto.hiddifyrpc.ExtensionResponseType.SHOW_DIALOG) {
renderForm(ui, "dialog",handleSubmitButtonClick,handleCancelButtonClick,undefined);
}else{
renderForm(ui, "",handleSubmitButtonClick,handleCancelButtonClick,handleStopButtonClick);
}
}
});
stream.on('error', (err) => {
console.error('Error opening extension page:', err);
});
stream.on('end', () => {
console.log('Stream ended');
});
}
async function handleSubmitButtonClick(event) {
event.preventDefault();
const formData = new FormData(event.target.closest('form'));
const request = new extension.ExtensionRequest();
formData.forEach((value, key) => {
request.getDataMap()[key] = value;
});
request.setExtensionId(currentExtensionId);
try {
await client.submitForm(request, {});
console.log('Form submitted successfully.');
} catch (err) {
console.error('Error submitting form:', err);
}
}
async function handleCancelButtonClick(event) {
event.preventDefault();
const request = new extension.ExtensionRequest();
request.setExtensionId(currentExtensionId);
try {
await client.cancel(request, {});
console.log('Extension cancelled successfully.');
} catch (err) {
console.error('Error cancelling extension:', err);
}
}
async function handleStopButtonClick(event) {
event.preventDefault();
const request = new extension.ExtensionRequest();
request.setExtensionId(currentExtensionId);
try {
await client.stop(request, {});
console.log('Extension stopped successfully.');
currentExtensionId = undefined;
listExtensions(); // Return to the extension list
} catch (err) {
console.error('Error stopping extension:', err);
}
}
module.exports = { openExtensionPage };