chore: adapt webhook preview
This commit is contained in:
parent
82979379f1
commit
9ed2271d12
3 changed files with 34 additions and 72 deletions
|
|
@ -79,12 +79,27 @@ frappe.webhook = {
|
|||
};
|
||||
|
||||
frappe.ui.form.on("Webhook", {
|
||||
onload: (frm) => {
|
||||
frm.preview_fields = frm.doc.__onload.preview_fields;
|
||||
},
|
||||
refresh: (frm) => {
|
||||
frappe.webhook.set_fieldname_select(frm);
|
||||
frm.set_query(
|
||||
"background_jobs_queue",
|
||||
"frappe.integrations.doctype.webhook.webhook.get_all_queues"
|
||||
);
|
||||
|
||||
if (frm.doc.webhook_doctype) {
|
||||
frm.add_custom_button(__("Preview"), () => {
|
||||
const args = {
|
||||
doc: frm.doc,
|
||||
doctype: frm.doc.webhook_doctype,
|
||||
preview_fields: frm.preview_fields,
|
||||
};
|
||||
let dialog = new frappe.views.RenderPreviewer(args);
|
||||
return dialog;
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
request_structure: (frm) => {
|
||||
|
|
@ -98,17 +113,6 @@ frappe.ui.form.on("Webhook", {
|
|||
enable_security: (frm) => {
|
||||
frm.toggle_reqd("webhook_secret", frm.doc.enable_security);
|
||||
},
|
||||
|
||||
preview_document: (frm) => {
|
||||
frappe.call({
|
||||
method: "generate_preview",
|
||||
doc: frm.doc,
|
||||
callback: (r) => {
|
||||
frm.refresh_field("meets_condition");
|
||||
frm.refresh_field("preview_request_body");
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
frappe.ui.form.on("Webhook Data", {
|
||||
|
|
|
|||
|
|
@ -30,13 +30,7 @@
|
|||
"webhook_headers",
|
||||
"sb_webhook_data",
|
||||
"webhook_data",
|
||||
"webhook_json",
|
||||
"preview_tab",
|
||||
"preview_document",
|
||||
"column_break_26",
|
||||
"meets_condition",
|
||||
"section_break_28",
|
||||
"preview_request_body"
|
||||
"webhook_json"
|
||||
],
|
||||
"fields": [
|
||||
{
|
||||
|
|
@ -169,37 +163,6 @@
|
|||
"options": "POST\nPUT\nDELETE",
|
||||
"reqd": 1
|
||||
},
|
||||
{
|
||||
"fieldname": "preview_tab",
|
||||
"fieldtype": "Tab Break",
|
||||
"label": "Preview"
|
||||
},
|
||||
{
|
||||
"fieldname": "preview_document",
|
||||
"fieldtype": "Dynamic Link",
|
||||
"label": "Select Document",
|
||||
"options": "webhook_doctype"
|
||||
},
|
||||
{
|
||||
"fieldname": "preview_request_body",
|
||||
"fieldtype": "Code",
|
||||
"is_virtual": 1,
|
||||
"label": "Request Body"
|
||||
},
|
||||
{
|
||||
"fieldname": "meets_condition",
|
||||
"fieldtype": "Data",
|
||||
"is_virtual": 1,
|
||||
"label": "Meets Condition?"
|
||||
},
|
||||
{
|
||||
"fieldname": "column_break_26",
|
||||
"fieldtype": "Column Break"
|
||||
},
|
||||
{
|
||||
"fieldname": "section_break_28",
|
||||
"fieldtype": "Section Break"
|
||||
},
|
||||
{
|
||||
"default": "0",
|
||||
"description": "On checking this option, URL will be treated like a jinja template string",
|
||||
|
|
@ -226,7 +189,7 @@
|
|||
"link_fieldname": "webhook"
|
||||
}
|
||||
],
|
||||
"modified": "2024-03-23 16:04:03.108172",
|
||||
"modified": "2024-07-22 09:23:32.642172",
|
||||
"modified_by": "Administrator",
|
||||
"module": "Integrations",
|
||||
"name": "Webhook",
|
||||
|
|
@ -250,4 +213,4 @@
|
|||
"sort_order": "DESC",
|
||||
"states": [],
|
||||
"track_changes": 1
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,9 +36,6 @@ class Webhook(Document):
|
|||
enable_security: DF.Check
|
||||
enabled: DF.Check
|
||||
is_dynamic_url: DF.Check
|
||||
meets_condition: DF.Data | None
|
||||
preview_document: DF.DynamicLink | None
|
||||
preview_request_body: DF.Code | None
|
||||
request_method: DF.Literal["POST", "PUT", "DELETE"]
|
||||
request_structure: DF.Literal["", "Form URL-Encoded", "JSON"]
|
||||
request_url: DF.SmallText
|
||||
|
|
@ -59,6 +56,15 @@ class Webhook(Document):
|
|||
webhook_secret: DF.Password | None
|
||||
# end: auto-generated types
|
||||
|
||||
def onload(self):
|
||||
self.set_onload(
|
||||
"preview_fields",
|
||||
[
|
||||
{"label": _("Meets Condition?"), "fieldtype": "Data", "method": "preview_meets_condition"},
|
||||
{"label": _("Request Body"), "fieldtype": "Code", "method": "preview_request_body"},
|
||||
],
|
||||
)
|
||||
|
||||
def validate(self):
|
||||
self.validate_docevent()
|
||||
self.validate_condition()
|
||||
|
|
@ -119,35 +125,24 @@ class Webhook(Document):
|
|||
frappe.throw(_("Invalid Webhook Secret"))
|
||||
|
||||
@frappe.whitelist()
|
||||
def generate_preview(self):
|
||||
# This function doesn't need to do anything specific as virtual fields
|
||||
# get evaluated automatically.
|
||||
pass
|
||||
|
||||
@property
|
||||
def meets_condition(self):
|
||||
def preview_meets_condition(self, preview_document):
|
||||
if not self.condition:
|
||||
return _("Yes")
|
||||
|
||||
if not (self.preview_document and self.webhook_doctype):
|
||||
return _("Select a document to check if it meets conditions.")
|
||||
|
||||
try:
|
||||
doc = frappe.get_cached_doc(self.webhook_doctype, self.preview_document)
|
||||
doc = frappe.get_cached_doc(self.webhook_doctype, preview_document)
|
||||
met_condition = frappe.safe_eval(self.condition, eval_locals=get_context(doc))
|
||||
except Exception as e:
|
||||
frappe.local.message_log = []
|
||||
return _("Failed to evaluate conditions: {}").format(e)
|
||||
return _("Yes") if met_condition else _("No")
|
||||
|
||||
@property
|
||||
def preview_request_body(self):
|
||||
if not (self.preview_document and self.webhook_doctype):
|
||||
return _("Select a document to preview request data")
|
||||
|
||||
@frappe.whitelist()
|
||||
def preview_request_body(self, preview_document):
|
||||
try:
|
||||
doc = frappe.get_cached_doc(self.webhook_doctype, self.preview_document)
|
||||
doc = frappe.get_cached_doc(self.webhook_doctype, preview_document)
|
||||
return frappe.as_json(get_webhook_data(doc, self))
|
||||
except Exception as e:
|
||||
frappe.local.message_log = []
|
||||
return _("Failed to compute request body: {}").format(e)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue