Adam Pitel a9f0e75e1b Add Operations - External Process page for vendor processing tracking
Two-tab dashboard tracking external labor workflows (e.g., tin plating):
- Tab 1 "At Vendor": Open POs for outside process items (EXTLAB classcode),
  showing vendor, PO#, finished/manufactured/ext labor PNs, qty, ship date,
  expected return (7-day default), days out, and WO demand
- Tab 2 "Awaiting Shipment": WOs with manufactured material issued but no
  open PO for the outside process item, showing days waiting in stockroom

Nav button added to all 11 pages in Operations section (rows 56-60).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 14:41:49 -04:00

This app is built using Appsmith. Turn any datasource into an internal app in minutes. Appsmith lets you drag-and-drop components to build dashboards, write logic with JavaScript objects and connect to any API, database or GraphQL source.

GithubDocsCommunityTutorialsYoutubeDiscord


Widget Positioning & Spacing

Appsmith uses a grid-based layout system for widget positioning.

Grid Basics

Property Description Default
topRow Starting row position (0-based) -
bottomRow Ending row position -
leftColumn Starting column (0-based) -
rightColumn Ending column -
parentRowSpace Pixels per row 10px
parentColumnSpace Pixels per column ~25px

The canvas is 64 columns wide. Each row is 10 pixels tall.

Calculating Size

Height = (bottomRow - topRow) × 10px
Width  = (rightColumn - leftColumn) × 25px

Visual Example

Row 0  ┌────────────────────────────────────────┐
       │     Navigation (topRow: 0)             │
Row 7  └────────────────────────────────────────┘  ← bottomRow: 7
Row 8  ┌────────────────────────────────────────┐  ← topRow: 8 (1 row gap = 10px)
       │     Content Widget                     │
Row 16 └────────────────────────────────────────┘

This Project's Standard

Widget topRow bottomRow Notes
Navigation 0 7 70px tall
First Content 8 16 10px gap below nav

Dynamic Height

Widgets with "dynamicHeight": "AUTO_HEIGHT" adjust height based on content. The bottomRow serves as an initial guide, and originalTopRow/originalBottomRow store the original placement values.


Adding a New Page

New pages are added via AI agent (Cursor). The agent follows the skills in .cursor/skills/ to clone the template, create the query, wire the table, add navigation buttons to all pages, and register the page in application.json.

What You Need

  1. Page name — Full display name in the format <Section> - <Label> (e.g. Pending POs - ALx Pending).
  2. Section — Which navigation section the page belongs to (e.g. Pending POs, Sales). If the section already exists, the button is appended; otherwise a new section is created first.
  3. SQL query — The exact query the page's table should run.

Prompt Format

Tell the agent which section, what name, and what query. One sentence is enough:

Add a new page under the Pending POs section "Pending POs - ALx Pending" with select * from mpe.get_prototype_po_dashboard_data(array['25502', '27985']::text[]) query

What the Agent Does

Step Detail
Clone template Copies Sales - Capacity Planning page structure (page JSON, widgets, Container1 nav)
Create query Adds queries/<query_name>/ with .txt (raw SQL) and metadata.json
Wire table Sets Table1.tableData to {{<query_name>.data}}
Set heading Updates Heading.json text to the page name
Generate gitSyncIds Creates unique <24-char-hex>_<uuid> IDs for the page JSON and query metadata (required for Appsmith git sync)
Register page Adds entry to application.json pages array
Add nav button Creates Button2Copy<N>.json on every page — highlighted on its own page, white on all others

Verifying

After the agent finishes, run git status to confirm only the expected files were added/changed:

  • application.json — one new page entry
  • pages/<New Page>/ — full page directory (page JSON, query, widgets)
  • pages/<Every Other Page>/widgets/Container1/Button2Copy<N>.json — new nav button on each existing page
Description
No description provided
Readme 899 KiB
Languages
Markdown 100%