UI Configuration
Expert guidance on NocoBase UI configuration — blocks, pages, actions, field components, and layout design.
Block Types
| Block |
Description |
Best For |
| Table |
Data grid with columns |
Data listing, CRUD |
| Form |
Input form |
Record creation, editing |
| Details |
Read-only record view |
Record display |
| Kanban |
Board view by status |
Pipeline tracking |
| Calendar |
Date-based calendar |
Scheduling, events |
| Gantt |
Timeline chart |
Project planning |
| List |
Simple list layout |
Simple data display |
| Grid Card |
Card layout in grid |
Visual catalogs |
| Chart |
Data visualization |
Reports, dashboards |
| Markdown |
Static content |
Instructions, documentation |
| Iframe |
Embedded external content |
External tools |
Table Block
Configuration
Collection: contacts
Fields visible: [name, email, phone, company, status, createdAt]
Default sort: createdAt DESC
Page size: 20
Actions:
- Create (opens form)
- Edit (inline or modal)
- Delete (with confirmation)
- Filter
- Export
- Bulk actions
Column Configuration
Column: name
- Width: 200px
- Fixed: left
- Sortable: true
- Filterable: true
Column: status
- Component: Tag (colored)
- Width: 120px
- Filterable: true
Column: email
- Component: Link (mailto)
- Width: 250px
Column: createdAt
- Format: YYYY-MM-DD HH:mm
- Width: 180px
- Sortable: true
Form Block
Configuration
Collection: contacts
Mode: create / edit
Layout: vertical / horizontal
Fields:
- name (required, text input)
- email (required, email input)
- phone (phone input)
- company (relation picker → companies)
- status (select dropdown)
- notes (rich text editor)
- avatar (image upload)
Actions:
- Submit
- Cancel
- Save as Draft
Field Layout
Grid layout example:
Row 1: [name (50%), email (50%)]
Row 2: [phone (50%), company (50%)]
Row 3: [status (30%), birthday (30%), source (40%)]
Row 4: [notes (100%)]
Row 5: [Submit] [Cancel]
Kanban Block
Configuration
Collection: deals
Group by: stage (SingleSelect)
Columns: [Discovery, Proposal, Negotiation, Closed Won, Closed Lost]
Card fields: [title, amount, contact.name, closeDate]
Sort within column: -amount (highest first)
Card Template
Card displays:
- Title: deal title (bold)
- Subtitle: contact name
- Badge: amount (formatted as currency)
- Footer: close date
Calendar Block
Configuration
Collection: events
Date field: startDate
End date field: endDate (optional, for multi-day events)
Title field: title
Color field: category (color by type)
Chart Block
Configuration
Collection: orders
Type: bar / line / pie / doughnut / area
X axis: month (date field, grouped by month)
Y axis: total (sum of amount)
Group by: status
Actions
Standard CRUD Actions
| Action |
Description |
Config |
| Create |
Open create form |
Form block, modal/drawer/page |
| Edit |
Open edit form |
Form block, modal/drawer/inline |
| View |
Open details |
Details block, modal/drawer/page |
| Delete |
Delete record |
Confirmation dialog |
| Duplicate |
Copy record |
Pre-fill form |
| Print |
Print record |
Print template |
| Export |
Export to Excel/CSV |
Field selection |
Bulk Actions
Available for Table block:
- Bulk delete
- Bulk update (specific fields)
- Bulk export
Custom Actions
Action: Submit for Approval
Type: Workflow trigger
Workflow: approval_flow
Condition: status == "Draft"
Confirmation: "Are you sure you want to submit?"
Page & Menu Structure
Page Layout
Page: Contacts
└── Tabs:
├── All Contacts (Table block)
├── By Company (Table block, grouped)
└── New Contact (Form block)
Menu Structure
Menu:
├── Dashboard (Chart blocks)
├── CRM
│ ├── Contacts (Table + Kanban tabs)
│ ├── Companies (Table)
│ └── Deals (Kanban + Table tabs)
├── Operations
│ ├── Orders (Table)
│ └── Products (Grid Card)
└── Settings
├── Users (Table)
└── Roles (Table)
Field Components
| Field Type |
Available Components |
| string |
Input, TextArea, Tag |
| select |
Select, Radio, Tag |
| boolean |
Switch, Checkbox |
| date |
DatePicker, RangePicker |
| number |
InputNumber, Slider, Progress |
| relation |
RecordPicker, SubForm, SubTable |
| attachment |
Upload, ImageUpload |
| richText |
RichText editor |
| json |
JSON editor, Code editor |
Tools for UI Configuration
| Tool |
Purpose |
page_create |
Create a new page |
page_list |
List all pages |
page_inspect |
Inspect page structure (blocks, columns, actions) |
page_delete |
Delete a page |
table_add |
Add a block (table, form, etc.) to a page |
column_add |
Add a column/field to a block |
action_add |
Add an action button to a block |
menu_create_group |
Create a menu group |
collection_get |
Get collection fields (to know what columns to add) |
Executable Workflows
Workflow: Create a Page with Table Block
Step 1: collection_get("contacts")
→ Understand available fields: name, email, phone, company, status, createdAt
Step 2: page_create("Contacts")
→ Page created with ID
Step 3: table_add(page, { collection: "contacts", type: "table" })
→ Table block added
Step 4: column_add(block, "name")
column_add(block, "email")
column_add(block, "phone")
column_add(block, "status")
column_add(block, "createdAt")
→ Columns added to table
Step 5: action_add(block, "create")
action_add(block, "edit")
action_add(block, "delete")
action_add(block, "filter")
→ Actions added
Workflow: Create a Page with Form Block
Step 1: collection_get("orders")
→ Fields: customer, product, quantity, total, status, notes
Step 2: page_create("New Order")
→ Page created
Step 3: table_add(page, { collection: "orders", type: "form" })
→ Form block added
Step 4: column_add(block, "customer") // relation picker
column_add(block, "product") // relation picker
column_add(block, "quantity") // number input
column_add(block, "notes") // text area
→ Form fields added
Step 5: action_add(block, "submit")
action_add(block, "cancel")
→ Form actions added
Workflow: Create a Kanban Board Page
Step 1: collection_get("deals")
→ Fields: title, amount, stage, contact, closeDate
Step 2: page_create("Deal Pipeline")
→ Page created
Step 3: table_add(page, { collection: "deals", type: "kanban", groupField: "stage" })
→ Kanban block added, grouped by stage field
Step 4: column_add(block, "title")
column_add(block, "amount")
column_add(block, "contact")
column_add(block, "closeDate")
→ Card fields configured
Workflow: Inspect and Extend Existing Page
Step 1: page_list()
→ Find target page
Step 2: page_inspect(pageId)
→ See current blocks, columns, actions
Step 3: column_add(block, "newField")
→ Add missing columns
Step 4: action_add(block, "export")
→ Add missing actions
Step 5: page_inspect(pageId)
→ Verify changes
Workflow: Build Complete Application UI
Step 1: collection_list()
→ Understand all available collections
Step 2: menu_create_group("CRM")
menu_create_group("Operations")
→ Create navigation groups
Step 3: For each collection, create a page with appropriate block type:
page_create("Contacts", { parent: "CRM" }) → table_add → column_add → action_add
page_create("Deals", { parent: "CRM" }) → table_add (kanban) → column_add
page_create("Orders", { parent: "Operations" }) → table_add → column_add → action_add
Step 4: page_create("Dashboard")
→ Add chart blocks for overview
Step 5: page_list() → Verify complete navigation
Best Practices
- Design for the user — different blocks for different roles
- Inspect before building — always run
collection_get to know available fields before adding columns
- Use tabs — group related views in tabs on the same page
- Configure filters — add commonly-used filters to table blocks
- Hide system fields — don't show createdAt/updatedBy in forms
- Use modal for quick edits — drawer for detailed forms, page for complex ones
- Default sort matters — newest first (-createdAt) is usually best
- Show related data — use sub-tables for hasMany relations
- Use Kanban for pipelines — status-based workflows are perfect for boards
- Dashboard first — create a dashboard page with chart blocks for overview
- Verify with page_inspect — always inspect the page after modifications to confirm structure