import widgetform from "../../widgetform.app.mjs";
export default {
key: "widgetform-new-submission-instant",
name: "New Form Submission (Instant)",
description: "Emit new event when a form submission is received. [See the documentation](https://usewidgetform.notion.site/Zapier-API-185312164ccf808eb902f411608aa35d)",
version: "0.0.1",
type: "source",
props: {
widgetform,
db: "$.service.db",
http: "$.interface.http",
form: {
propDefinition: [
widgetform,
"form",
],
},
},
hooks: {
async activate() {
const { id } = await this.widgetform.createSubscription({
data: {
hook_url: this.http.endpoint,
},
});
if (!id) {
throw new Error("Error creating subscription");
}
this._setSubscriptionId(id);
},
async deactivate() {
const id = this._getSubscriptionId();
if (!id) {
return;
}
await this.widgetform.deleteSubscription({
data: {
subscription_id: id,
},
});
},
async deploy() {
const response = await this.widgetform.listResponses();
if (!response?.length) {
return;
}
const submissions = this.form
? response.filter(({ form_name }) => form_name === this.form)
: response;
submissions.reverse().forEach((submission) => {
const meta = this.generateMeta(submission);
this.$emit(submission, meta);
});
},
},
methods: {
_getSubscriptionId() {
return this.db.get("subscriptionId");
},
_setSubscriptionId(subscriptionId) {
this.db.set("subscriptionId", subscriptionId);
},
generateMeta(submission) {
const ts = Date.now();
return {
id: ts,
summary: `New Submission for ${submission.form_name}`,
ts,
};
},
},
async run(event) {
const submission = event.body;
if (!submission || (this.form && (submission.form_name !== this.form))) {
return;
}
const meta = this.generateMeta(submission);
this.$emit(submission, meta);
},
};