import gravityForms from "../../gravity_forms.app.mjs";
export default {
key: "gravity_forms-create-entry",
name: "Create Entry",
description: "Creates a new entry in a Gravity Forms form. [See the documentation](https://docs.gravityforms.com/creating-entries-with-the-rest-api-v2/)",
version: "0.0.1",
type: "action",
props: {
gravityForms,
formId: {
propDefinition: [
gravityForms,
"formId",
],
reloadProps: true,
},
createdBy: {
type: "integer",
label: "Created By",
description: "The user ID of the entry submitter.",
optional: true,
},
dateCreated: {
type: "string",
label: "Date Created",
description: "The date the entry was created, in UTC. **Format: YYYY-MM-DD HH:MM:SS**",
optional: true,
},
ip: {
type: "string",
label: "IP",
description: "The IP address of the entry creator.",
optional: true,
},
isFulfilled: {
type: "boolean",
label: "Is Fulfilled",
description: "Whether the transaction has been fulfilled, if applicable.",
optional: true,
},
isRead: {
type: "boolean",
label: "Is Read",
description: "Whether the entry has been read.",
optional: true,
},
isStarred: {
type: "boolean",
label: "Is Starred",
description: "Whether the entry is starred.",
optional: true,
},
sourceUrl: {
type: "string",
label: "Source Url",
description: "The URL where the form was embedded.",
optional: true,
},
status: {
type: "string",
label: "Status",
description: "The status of the entry.",
optional: true,
},
userAgent: {
type: "string",
label: "User Agent",
description: "The user agent string for the browser used to submit the entry.",
optional: true,
},
},
methods: {
async getFields(formId) {
const formResponse = await this.gravityForms.listForms({
params: {
["include[]"]: formId,
},
});
return formResponse[`${formId}`].fields;
},
},
async additionalProps() {
let props = {};
if (this.formId) {
const fields = await this.getFields(this.formId);
for (const field of fields) {
let inputs = {};
if (field.inputs) {
for (const input of field.inputs) {
if (!input.isHidden) {
inputs[`field_${input.id}`] = {
type: "string",
label: input.label,
description: field.description || input.label,
optional: !field.isRequired,
};
}
}
}
if (!Object.keys(inputs).length) {
props[`field_${field.id}`] = {
type: "string",
label: field.label,
description: field.description || field.label,
optional: !field.isRequired,
};
}
props = {
...props,
...inputs,
};
}
}
return props;
},
async run({ $ }) {
const formFields = {};
const fields = await this.getFields(this.formId);
for (const field of fields) {
if (field.inputs) {
for (const input of field.inputs) {
if (!input.isHidden) {
formFields[`${input.id}`] = this[`field_${input.id}`];
}
}
}
formFields[`${field.id}`] = this[`field_${field.id}`];
}
const response = await this.gravityForms.createEntry({
formId: this.formId,
data: {
...formFields,
created_by: this.createdBy,
date_created: this.dateCreated,
ip: this.ip,
is_fulfilled: `${+this.isFulfilled}`,
is_read: +this.isRead,
is_starred: +this.isStarred,
source_url: this.sourceUrl,
status: this.status,
user_agent: this.userAgent,
},
});
$.export("$summary", `Successfully created an entry with ID: ${response.id}`);
return response;
},
};