> For the complete documentation index, see [llms.txt](https://docs.in8sync.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.in8sync.com/client-admin-guide/getting-started/action-components.md).

# Action Components

Buttons and dropdowns that submit forms, navigate, trigger actions, and print. The category index — pick a component to dive in.

Action components are how users drive workflows forward — submit a form, navigate, set a variable, open a modal, or print. Each block in this category serves a distinct interaction pattern.

Most action blocks live across module types, but a few (Submit Button, certain Action Button modes) are restricted to specific module types. Each component page calls out where it's available.

## When you'd reach for this category

* **Building an order form** → Submit Button at the bottom (or Payments on POS pages, which submits for you).
* **Adding any in-page action** that isn't form submission → Action Button.
* **Letting users switch sub-views or filters on a page** → Action Dropdown.
* **Letting users print what's on screen** → Print. For receipt/invoice printing tied to a transaction, use Submit Button's configuration instead.
* **Printing a receipt or document from a template** → Template Printer (drives a configured print template rather than the visible page).

## Action Button

A configurable button that triggers actions, navigates, sets variables, opens pop-ups, or runs custom logic when clicked.

The most flexible action block. A single button that, when clicked, runs whatever you've configured — submit a form, open a different page, set a session variable, open a modal, or run custom JavaScript.

### Available in

* Page modules
* Order Form modules
* Catalog modules

Action Button isn't available in Dashboard, Modal, Reports, or Navigation modules.

### When to use

* A "View Details" button that opens a transaction record in a modal.
* A "Continue to Payment" button that navigates between pages of an order flow.
* A "Apply Discount" button that requires PIN authorisation before running.
* A "Reset" button that clears a session variable.
* Any in-page action that doesn't submit the whole form (use **Submit Button** for that).

### Settings

| Setting       | Description                                                                                                                                                                         |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Configure** | Opens the configuration modal. All Action Button options live here — label, action type, target, styling, visibility rules, confirmation prompt, success toast, and PIN protection. |

The configuration modal supports:

* **Label** — button text.
* **Action type** — what happens on click (navigate, set variable, open modal, run custom code, etc.).
* **Target** — destination page, variable name, or modal ID, depending on action type.
* **Styling** — variant (default, destructive, outline, secondary, ghost, link), size (default, sm, lg, icon).
* **Visibility rules** — show/hide the button conditionally based on session variables, with all-or-any logic across rules.
* **Require confirmation** — prompt before executing.
* **Show success toast** — show a notification after the action completes.
* **PIN authorisation** — gate the action behind a PIN — see [PIN Override](/client-admin-guide/workflow-builder-overview/pin-override.md).

### How it works

When the button is clicked:

1. **Visibility check** — if visibility rules are set, the button only renders when they pass.
2. **Confirmation** (optional) — a dialog asks the user to confirm.
3. **PIN check** (optional) — if PIN authorisation is enabled, the user is prompted before the action runs.
4. **Action runs** — the configured action type executes (navigate, submit, set variable, etc.).
5. **Feedback** (optional) — a success toast appears if enabled.

{% hint style="info" %}
Action Button defaults to the `standard` action type. Other action types (custom JavaScript, modal triggers, variable setters) are picked from a dropdown inside the configuration modal.
{% endhint %}

### Examples

**Open a record in a modal.** Add a Modal block with a Transaction Record inside. Place an Action Button labelled *View Details* in your search results, configure action type *Open Modal*, and set Target to the modal's ID.

**Conditional visibility.** Place a *Refund* button on the order detail page. Add a visibility rule: `transactionStatus = "Completed"`. The button only appears for completed orders.

**PIN-protected void.** A *Void Order* button with action type *Run Custom Code* (calling the void RPC), confirmation prompt enabled, and PIN authorisation required. Cashiers see the button but only managers can complete the action.

### Related to Action Button

* [Submit Button](#submit-button) — The dedicated form-submit alternative.
* [Action Dropdown](#action-dropdown) — Multiple actions grouped under one button.
* [PIN Override](/client-admin-guide/workflow-builder-overview/pin-override.md) — How PIN protection works end-to-end.
* [Module Variables](/client-admin-guide/workflow-builder-overview/module-variables.md) — Reading and setting session variables from action buttons.

## Action Dropdown

A dropdown control whose selection runs custom JavaScript — useful for variable-driven flow control on a page.

A dropdown that runs custom logic when the user picks an option. Each selection can read or set session variables, change page state, or trigger downstream blocks. Think of it as a switch — the user's choice controls what the rest of the page does.

### Available in

* Page modules
* Order Form modules
* Catalog modules
* Dashboard modules
* Modal modules

Action Dropdown isn't available in Reports or Navigation modules.

### When to use

* Switching between sub-views on a single page (e.g. *Recent / This week / This month* on a report).
* Letting a cashier pick an order type (*Sale / Return / Quote*) that drives downstream form behaviour.
* Filtering a Catalog Display by a session variable the user controls.
* Anywhere the user's choice should change page state without navigating away.

### Settings

| Setting       | Description                                                                                                                                         |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Configure** | Opens the configuration modal. All Action Dropdown options live here — label, placeholder, default value, options list, JS code, variant, and size. |

The configuration modal supports:

* **Label** — text shown above the dropdown.
* **Placeholder** — hint text shown when no option is selected.
* **Default value** — option pre-selected when the page loads.
* **Options Mode** — *Static* (you list the options) or *Script* (a small JavaScript snippet returns the options at render time).
* **Options** — when Mode is Static: the list of `{ label, value }` pairs.
* **Options Script** — when Mode is Script: a snippet that returns the options array, useful for options that depend on session variables, the signed-in user, or other dynamic state.
* **JS Code** — JavaScript that runs on selection. Has access to:
  * `setVariable(name, value)` — write a session variable.
  * `getVariable(name)` — read a session variable.
  * `variables` — object of all current session variables.
* **Variant / size** — visual styling.

### How it works

When the user picks an option:

1. The selection is captured.
2. The configured **JS Code** runs with the selected value available in scope.
3. Side effects (set variables, update state) propagate to other blocks on the page that read those variables.

{% hint style="info" %}
Action Dropdown is the right block when the user's choice should drive other blocks on the page. If the user just needs to navigate, use **Action Button** with action type *Navigate* instead.
{% endhint %}

### Examples

**Date-range switcher.** Place an Action Dropdown above a Report Widget with options *Today / This week / This month*. The JS code calls `setVariable('reportRange', value)`. The Report Widget filters its query by the `reportRange` variable.

**Order type picker.** On an order form, a *Transaction Type* dropdown with *Sales Order / Cash Sale / Estimate*. The JS code sets a session variable that other blocks (Submit Button, Summary) read to adjust their behaviour.

### Related to Action Dropdown

* [Action Button](#action-button) — Single-action button with the same kind of configuration modal.
* [Module Variables](/client-admin-guide/workflow-builder-overview/module-variables.md) — How session variables work and where to read/set them.
* [Variables](/client-admin-guide/getting-started/advanced-components.md#variables) — Initialise variables on page load (no UI control needed).

## Submit Button

The dedicated form-submit button for Order Form modules — gathers the order, validates, submits, then shows the completion modal with optional receipt and invoice.

The standard "complete this order" button for Order Form modules. It gathers all form data on the page, runs validation (required fields, customer holds, summary errors), submits the transaction, and on success opens the completion modal with optional receipt preview, invoice preview, and print actions.

### Available in

* Order Form modules
* Public Page modules

Submit Button isn't available in Page, Catalog, Dashboard, Modal, Reports, or Navigation modules. For action-driven submits in those contexts, use **Action Button** with action type *Submit*.

### When to use

* Always at the bottom (or end of the flow) of an Order Form page that doesn't have a Payments block.
* When you need the standard order-submission behaviour: validation, NetSuite write, completion modal, receipt/invoice handling.
* For non-POS order forms. On POS pages where Payments drives submission, use **Visible Order Types** in the configuration modal to hide Submit Button for those order types.

### Settings

| Setting                             | Description                                                                                                            |
| ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| **Button Label**                    | Button text. Default: *Submit Order*.                                                                                  |
| **Button Variant**                  | Visual style: *default*, *destructive*, *outline*, *secondary*, *ghost*, *link*.                                       |
| **Button Size**                     | Size: *default*, *sm*, *lg*, *icon*.                                                                                   |
| **Order Completion Title**          | Heading on the completion modal. Default: *{orderType} Complete* (e.g. *Sales Order Complete*).                        |
| **Order Completion Message**        | Message shown in the completion modal after a successful submit. Default: *Your order has been queued for processing.* |
| **Finish Button Label**             | Text on the *finish* / *new order* button in the completion modal. Default: *Finish & New Order*.                      |
| **Receipt & Invoice Configuration** | Opens the configuration modal — receipt and invoice toggles, completion behaviour, polling, page navigation.           |

The Receipt & Invoice configuration modal supports:

* **Receipt preview / print / auto-print** — show preview, print button, or auto-print on submit.
* **Receipt Template ID** — the NetSuite template used for the printed receipt.
* **Debug Receipts** — surface the resolved variable context in the preview (for template authors).
* **Invoice preview / print / download** — toggles for each completion-modal action.
* **Invoice Template ID** — the NetSuite template used for the invoice.
* **Email Settings** tab — enable sending an email on order completion; select the email template; the recipient auto-fills from the template's default recipient. When enabled, a *Send by email* option appears in the completion modal.
* **Order Completion** group:
  * **Enable Transaction Polling** — wait for NetSuite to finish processing the queued transaction before showing the success state, surfacing the final transaction ID.
  * **Transaction Record Page ID** — the workflow page to redirect to (or show a *View Order* link to) for the resulting transaction.
  * **Require Customer Selection** — block submit if no customer is selected, even if the order otherwise passes validation.
  * **Allow Zero Dollar Orders** — allow submission when the order total is $0. Useful for free items, samples, or warranty replacements.
  * **Finish And New Page ID** — the page the *Finish* button navigates to after success — typically a fresh order page.
* **Advanced** tab — **Redirect Mode** controls where *Finish & New Order* navigates: *Custom Page* (a workflow page) or *Custom URL* (an external URL, which also skips the completion modal entirely).
* **Order Types** tab — **Visible Order Types** restricts which order types the Submit Button appears for. Leave empty to show for all order types.

### How it works

When clicked, Submit Button runs through this sequence:

{% stepper %}
{% step %}

### Validation

Checks summary errors, customer hold status, and required fields. Surfaces problems inline rather than submitting a broken order.
{% endstep %}

{% step %}

### Submission

Calls the order-submit hook, which writes the transaction to NetSuite and waits for the response.
{% endstep %}

{% step %}

### Completion modal

On success, opens the **Order Completion** modal with the configured message, optional receipt/invoice preview, and the print/download/email actions you've enabled.
{% endstep %}

{% step %}

### URL cleanup

Removes transient URL parameters (`id`, `recordId`, `transactionId`, `orderId`) so the user can start a fresh order without stale state.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
Use **Visible Order Types** (in the Order Types tab of the configuration modal) to control which order types the Submit Button appears for. On POS pages where Payments drives submission, configure Visible Order Types to exclude those order types so both blocks don't appear simultaneously.
{% endhint %}

### Examples

**Standard order form.** Customer Select at top, Order Lines in the middle, Discount Header and Shipping Method, Summary, then a Submit Button. No Payments block — Submit handles the order.

**POS register.** Customer Select, Order Lines, Summary, Payments. Submit Button is in the workflow but invisible at runtime — Payments runs the submission instead.

**Retail with optional auto-print.** Submit Button with Receipt auto-print enabled — every successful sale prints a receipt to the configured receipt printer without an extra click.

### Related to Submit Button

* [Payments](/client-admin-guide/getting-started/transaction-components.md#payments) — The POS payment block that drives submission for register flows.
* [Order Lines](/client-admin-guide/getting-started/transaction-components.md#order-lines) — The line items table that Submit Button reads on submit.
* [Action Button](#action-button) — For non-Order-Form contexts, configure an Action Button with action type Submit.

## Print

A button that triggers a print-optimised render of the current page, with optional title prompt and styling tuned for A4 landscape output.

A simple button that prints the current page. The block injects print-optimised styles (landscape A4, hidden Puck UI, expanded tables, visible select values) and optionally prompts the user for a title before printing.

Use it for one-click "Print this page" actions on summaries, confirmations, reports, and detail views.

### Available in

* All module types

Print isn't restricted by module — it's a generic page-print action and works wherever you place it.

### When to use

* A *Print Receipt* button on an order completion screen.
* A *Print Report* button at the top of a Reports page.
* A *Print Detail* button on a transaction-record detail view.
* Any page where the user occasionally needs a paper copy of what's on screen.

For receipts and invoices triggered automatically as part of order submission, use **Submit Button**'s receipt/invoice configuration instead — that handles the printer routing and template-driven layout, not a screenshot of the page.

### Settings

| Setting                 | Description                                                                                |
| ----------------------- | ------------------------------------------------------------------------------------------ |
| **Print Configuration** | Opens the configuration modal. Holds the button label, optional title prompt, and styling. |

The configuration modal supports:

* **Button label** — text shown on the button. Default: *Print*.
* **Prompt for title** — when enabled, the user is asked for a title before printing; the title is added to the printed page. The user can cancel.
* **Styling** — variant (default, destructive, outline, secondary, ghost, link), size (default, sm, lg, icon), and full-width toggle.

### How it works

When the user clicks the Print button:

1. **Title prompt** (optional) — if enabled, a dialog asks for a title. Cancel aborts the print.
2. **Style injection** — print-only CSS is injected: A4 landscape, 0.5cm margins, Puck editor UI hidden, table cells set to nowrap, overflow containers expanded, select dropdowns rendered as their selected value, logos hidden.
3. **Title placement** — the title (and current date) is inserted at the top of the printed output.
4. **Viewport adjustment** — the viewport is temporarily widened to at least 1400px so the print render matches what's on screen, not a mobile-collapsed version.
5. **Print dialog** opens. The user picks a printer and confirms.
6. **Cleanup** — viewport, injected styles, and title element are restored after the dialog closes.

{% hint style="info" %}
Print uses the browser's native print dialog. There's no integration with NetSuite's printer routing — for template-driven receipt and invoice printing tied to specific printers, use Submit Button's Receipt & Invoice Configuration.
{% endhint %}

### Examples

**Print a transaction summary.** On a Page module showing a Transaction Record, place a Print button at the top right with the label *Print Order*. Enable Prompt for Title so the user can name the printout (e.g. *Order #1234 — Customer Copy*).

**Print a report.** On a Reports module, drop a Print button next to the page heading. Disable the title prompt — the report's heading is already on the page.

### Related to Print

* [Submit Button](#submit-button) — Triggers receipt and invoice printing as part of order submission, with NetSuite template support.
* [Action Button](#action-button) — For more complex print flows, an Action Button with custom code can call print logic conditionally.

## Template Printer

Print or preview a configured template — receipts, invoices, labels, packing slips — with full variable substitution from the current page's data.

A button that prints (or previews) a NetSuite template — receipt, invoice, packing slip, label, or any custom template. The block resolves variables from the current page's data, fills the template, and prints to the browser's print dialog or shows a preview first.

Use this anywhere a single click should produce a formatted document — POS receipt at end of sale, invoice from a transaction-detail page, label print from a fulfilment page, or any custom workflow that ends in a printed artifact.

### Available in

* All module types

### When to use

* Order Form pages where the user needs a receipt or invoice button next to **Submit Button**.
* Transaction-detail pages with *Print Invoice* or *Print Packing Slip* buttons.
* Fulfilment workflows where a label needs to print on demand.
* Any page where a printable document should be one-click away.

### Settings

The block opens a configuration modal that handles all of its setup:

| Setting                | Description                                                                                                                                                                                                                            |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Template**           | The NetSuite template to use. Filterable by entity, workflow, module, and template type.                                                                                                                                               |
| **Location Templates** | Optional per-location template overrides. When a user's active location matches an entry here, the location-specific template is used instead of the default. Useful when each store or warehouse has its own receipt or label layout. |
| **Button Label**       | Text shown on the button. Default: *Print Template*.                                                                                                                                                                                   |
| **Show Preview**       | Whether the button opens a preview modal first (with a *Print* action inside) or sends straight to the browser print dialog.                                                                                                           |
| **Styling**            | Button variant, size, and full-width toggle — to match your page's other buttons.                                                                                                                                                      |

### How it works

1. Loads the configured template from NetSuite at render time.
2. When the user clicks the button, the block reads the current page's state (form fields, transaction data, customer record, etc.).
3. Variables in the template (`{customer.name}`, `{transaction.total}`, etc.) are substituted with live values.
4. If **Show Preview** is on, the rendered HTML opens in a preview modal with *Print* and *Cancel* actions.
5. Otherwise, the rendered HTML is sent to the browser print dialog directly.

### Examples

**POS receipt.** Drop Template Printer next to Submit Button on an Order Form. Configure the template to a *Cash Sale Receipt* template, button label *Print Receipt*, show preview true. After completing a sale, the cashier clicks Print Receipt to print to the register's receipt printer.

**On-demand invoice.** On a transaction-detail page, drop Template Printer with template *Invoice* and label *Print Invoice*. Show preview false — clicking the button goes straight to the print dialog.

**Shipping label.** On a fulfilment page, configure with a label template and label *Print Label*. The user clicks once to print the label to the configured printer.

### Common issues

* **"No template configured"** — open the configuration modal and select a template.
* **Variables show as `{name}` instead of values** — the variable name doesn't match a value on the page. Check the template's variable list against the page's available data.
* **Print dialog shows blank page** — check the template's CSS and ensure the page-state variables are populated. The preview modal helps debug this.

### Related to Template Printer

* [Print](#print) — The simpler print action — uses a fixed template without variable substitution.
* [Submit Button](#submit-button) — Often paired with Template Printer on Order Form pages.

## Order Confirmation Email

Send an order confirmation email to customers when an order is submitted — configured inside the Submit Button or Payments block.

When an order is submitted or paid, SphericalBRM can prompt the cashier to send a confirmation email to the customer. This is not a separate block — it is an optional feature you turn on inside the **Submit Button** or **Payments** block configuration.

### What it is

An opt-in email step that appears at order completion. After the order is submitted or payment is taken, the cashier sees a **Send Invoice by Email** checkbox. If checked, the system sends a NetSuite email template to the customer's email address on file.

### When you'd use it

* You want customers to receive an emailed receipt or invoice when their order is completed.
* You have a NetSuite email template set up and want to offer it at the point of sale.

### Before you start

* **Who can do this:** Client admins who can edit page builder configurations.
* Your NetSuite Admin must confirm that outbound email is enabled on your NetSuite account.
* An email template must exist in NetSuite before you can select it in the block settings — this is what supplies the sender and the email body.
* If you want the email to include a receipt or invoice as an attachment, a matching [Receipt Template](/netsuite-admin-guide/overview-2/receipt-templates.md) or [Invoice Template](/netsuite-admin-guide/overview-2/invoice-templates.md) needs to exist too. These are two separate things your NetSuite Admin sets up — missing either one is the most common reason "the email feature isn't working" during setup.

### Step by step

**On the Submit Button block:**

1. Open the page in the Page Builder and click the **Submit Button** block.
2. Click **Configure Submit Button** in the settings panel on the right.
3. Go to the **Email Settings** tab.
4. Turn on the **Email on Completion** toggle.
5. Use the **Email Template** selector to choose the NetSuite template to send.
6. Click **Save**.

**On the Payments block:**

1. Open the page in the Page Builder and click the **Payments** block.
2. Click **Configure Payments** in the settings panel on the right.
3. Go to the **Email Settings** tab.
4. Turn on the **Email on Completion** toggle.
5. Use the **Email Template** selector to choose the NetSuite template to send.
6. Click **Save**.

{% hint style="info" %}
You can enable the feature on both blocks independently. If your workflow uses both Submit Button and Payments, enable it on the block that finalizes the order for your process.
{% endhint %}

### What success looks like

When a cashier completes an order, a **Send Invoice by Email** checkbox appears on the completion screen. If the cashier checks it, the selected email template is sent to the customer's email address. If the customer has no email on file, the cashier can enter one before sending.

### Customizing the email content

The content of the email — subject line, body text, and which order details are included — is defined in the NetSuite email template, not in SphericalBRM. Ask your NetSuite Admin to create or update the template record in NetSuite.

### Common issues

* **Email not sending** — confirm outbound email is enabled in NetSuite. Contact your NetSuite Admin.
* **No templates appear in the selector** — the template may not exist in NetSuite, or it may be the wrong template type. Ask your NetSuite Admin to check the template record.
* **Customer did not receive the email** — confirm the customer record has a valid email address in NetSuite, or that the cashier entered a correct address at checkout.

### Related to Order Confirmation Email

* [Submit Button](#submit-button) — Where Email on Completion is enabled for form-submit workflows.
* [Payments](/client-admin-guide/getting-started/transaction-components.md#payments) — Where Email on Completion is enabled for payment-first workflows.

## Print Statements

Generates a NetSuite account statement for a customer. Staff select the customer, choose a date range, and click **Print** or **Download PDF**. NetSuite produces the statement on demand from its current records.

### Available in

* Page modules
* Dashboard modules
* Reports modules

### When to use

* Customer account management pages where staff hand customers a printed balance statement.
* Financial dashboards where staff need to pull ad hoc statements for any customer.
* Reports pages that include a statement-generation tool alongside summary data.

For printing the current page layout (receipts, form summaries, custom views), use the **Print** block instead. Print Statements generates the actual NetSuite statement document — it isn't a screenshot of the page.

### Settings

| Setting   | Description                                                         |
| --------- | ------------------------------------------------------------------- |
| **Title** | Heading text displayed above the form. Default: *Print Statements*. |

### How it works

{% stepper %}
{% step %}

### Select a customer

Use the search field to find and select the customer. If a customer is already selected elsewhere on the page, the field pre-fills automatically.

If you are logged in as a customer account (B2B portal), your own entity is pre-selected and the search field is hidden.
{% endstep %}

{% step %}

### Enter dates

Set the **Start Date** and **Statement Date**. The statement covers transactions from the start date up to the statement date. Statement date defaults to today.
{% endstep %}

{% step %}

### Choose options

* **Open Transactions** — include only unpaid or open items on the statement.
* **Consolidate Statements** — combine subsidiary statements into one document (for NetSuite OneWorld instances).
  {% endstep %}

{% step %}

### Print or download

Click **Print** to open the statement in a new browser window and trigger the print dialog, or **Download PDF** to save the statement as a PDF file to your device.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
In NetSuite OneWorld instances, the customer search is filtered by the currently selected subsidiary.
{% endhint %}

### Before you start

Your NetSuite Admin needs to confirm NetSuite's native Statements feature is turned on, and that any custom role using this block has the Print Statements permission — see [Print Statement Setup](/netsuite-admin-guide/overview-1/print-statements.md). Without that, this block won't generate anything.

### Common issues

* **Statement is blank or shows no transactions** — the customer may have no activity in NetSuite within the selected date range. Confirm the date range and check the customer's transaction history.
* **Customer field doesn't pre-fill** — the customer selection on the page may not have resolved yet. Use the built-in search field to find and select the customer.
* **Nothing happens when printing, or an error appears** — this usually points to a NetSuite-side setup gap. See [Print Statement Setup](/netsuite-admin-guide/overview-1/print-statements.md).

### Related to Print Statements

* [Print](#print) — Print the current page's contents — not a NetSuite document.
* [Template Printer](#template-printer) — Print receipts, invoices, or labels using a configured template.
* [Print Statement Setup (NetSuite Admin)](/netsuite-admin-guide/overview-1/print-statements.md) — What must be enabled in NetSuite before this block works.

## File Cabinet

A block for accessing and managing files — displays a file browser or list, with options to upload, download, or open files.

### Available in

* Page modules
* Order Form modules
* Dashboard modules

File Cabinet isn't available in Catalog, Modal, Reports, or Navigation modules.

### When to use

* Pages that need file upload or download capability (e.g. import/export, document uploads).
* Displaying a file library or document manager inside a page.
* Any place where users need to access stored files without leaving the workflow.

### Settings

| Setting            | Description                                   |
| ------------------ | --------------------------------------------- |
| **Title**          | Block heading. Default: *Files*.              |
| **Upload Enabled** | Whether users can upload files. Default: Yes. |

{% hint style="warning" %}
**Note:** File Cabinet's full interaction model and file storage backend are still being refined. This section is brief and factual pending final implementation details.
{% endhint %}

### How it works

File Cabinet renders a file-browsing interface. Users can select files, and optionally upload new ones if that setting is enabled. Selection may trigger downstream actions (e.g. attaching to a record, downloading).

### Examples

**Document upload.** A Section Card titled *Required Documents* with a File Cabinet inside, upload enabled, filtered to PDF only.

**Invoice browser.** A Page module with a File Cabinet showing prior invoices for a customer, download enabled, upload disabled.

### Related to File Cabinet

* [Action Button](#action-button) — For triggering custom file actions with more control.
* [Section Card](/client-admin-guide/getting-started/content-components.md#section-card) — For grouping a File Cabinet with related content.

***

## Quick Actions

A compact menu or button group for triggering common actions without navigation — useful for action-heavy pages.

### Available in

* Page modules
* Order Form modules
* Dashboard modules

Quick Actions isn't available in Catalog, Modal, Reports, or Navigation modules.

### When to use

* A row of quick-action buttons at the top of a page (e.g. *New*, *Edit*, *Delete*, *Print*).
* Grouping multiple related actions into a compact icon or button menu.
* Anywhere you want action shortcuts without cluttering the page layout.

For individual, isolated buttons, use **Action Button**. For modal-based actions or complex workflows, use **Modal** + **Action Button**.

### Settings

| Setting         | Description                                                                       |
| --------------- | --------------------------------------------------------------------------------- |
| **Actions**     | Array of action items to display. Each action has a label, icon, and action type. |
| **Orientation** | Horizontal or Vertical. Default: Horizontal.                                      |

{% hint style="warning" %}
**Note:** Quick Actions rendering and button behaviour are still being refined. This section is brief pending final confirmation of visual patterns and action types.
{% endhint %}

### How it works

Quick Actions renders the configured items as a compact button group. Users click an action to trigger it. The block can be oriented horizontally (e.g. a toolbar row) or vertically (e.g. a sidebar menu).

### Examples

**Toolbar.** Quick Actions with items *New Order*, *New Quote*, *Print*, *Archive*, displayed horizontally at the top of a transaction list page.

**Admin shortcuts.** Vertical Quick Actions with *Add User*, *Edit Settings*, *Export Data* on an admin dashboard.

### Related to Quick Actions

* [Action Button](#action-button) — For individual action buttons with full configuration control.
* [Action Dropdown](#action-dropdown) — For a single dropdown that runs custom logic on selection.

***

## Related

<table data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>PIN Override</strong></td><td>How PIN protection wraps around action buttons.</td><td><a href="/client-admin-guide/workflow-builder-overview/pin-override.md">PIN Override</a></td></tr><tr><td><strong>Module Variables</strong></td><td>Reading and setting session variables from action buttons and dropdowns.</td><td><a href="/client-admin-guide/workflow-builder-overview/module-variables.md">Workflow Session Variables</a></td></tr><tr><td><strong>Page Builder Overview</strong></td><td>The Page Builder entry point with the full category list.</td><td><a href="/client-admin-guide/getting-started.md">Page Builder</a></td></tr></tbody></table>
