Skip to content

Search is only available in production builds. Try building and previewing the site to test it out locally.

Form Events

Form events are triggered when forms are submitted in the Tracktile platform.

Copy these interfaces to type your webhook handlers:

/** Base event properties included in all webhook events */
interface BaseEvent {
/** Unique event identifier (UUID) */
id: string;
/** Event type */
kind: string;
/** ISO 8601 timestamp */
time: string;
/** Transaction identifier for grouping related events */
transactionId: string;
}
/** Form submission action types */
type FormSubmissionAction =
| "submit"
| "approve"
| "reject"
| "cancel";
/** Form submission object */
interface FormSubmission {
/** Submission UUID */
id: string;
/** Form template UUID */
formId: string;
/** Form template name */
formName: string;
/** User who submitted */
submittedBy: string;
/** Submission timestamp */
submittedAt: string;
/** Form field values */
values: Record<string, unknown>;
}

Triggered when a form is submitted.

{
"id": "evt_abc123",
"kind": "form.submitted",
"time": "2024-01-15T10:30:00Z",
"transactionId": "txn_xyz789",
"formSubmission": {
"id": "sub_456",
"formId": "form_789",
"formName": "Quality Inspection",
"submittedBy": "user_123",
"submittedAt": "2024-01-15T10:30:00Z",
"values": {
"temperature": 4.5,
"humidity": 65,
"passed": true,
"notes": "All checks passed"
}
},
"action": "submit",
"requiresApproval": false
}
ActionDescription
submitInitial form submission
approveSubmission approved (for forms requiring approval)
rejectSubmission rejected
cancelSubmission cancelled

Union type for handling any form event:

type FormEvent = FormSubmittedEvent;
// Type guard for form events
function isFormEvent(event: BaseEvent): event is FormEvent {
return event.kind.startsWith("form.");
}
// Example webhook handler
async function handleFormWebhook(event: FormEvent) {
switch (event.kind) {
case "form.submitted":
const { formSubmission, action, requiresApproval } = event;
console.log(
`Form ${formSubmission.formName} ${action}ed by ${formSubmission.submittedBy}`
);
if (requiresApproval) {
// Notify approvers
console.log("Submission requires approval");
}
// Process form values
if (formSubmission.formName === "Quality Inspection") {
const { passed, temperature, notes } = formSubmission.values as {
passed: boolean;
temperature: number;
notes: string;
};
if (!passed) {
// Trigger quality alert
console.log(`Quality check failed: ${notes}`);
}
}
break;
}
}