Widget Patterns
Common UI patterns using Appivo widgets
Widget Patterns Example
Learn common UI patterns built with Appivo's widget system.
What You'll Build
Reusable UI patterns including:
- Master-detail layouts
- Dashboard with metrics
- Search with filters
- Modal workflows
Prerequisites
- Completed the Hello World example
- Understanding of widgets and data binding
Pattern 1: Master-Detail Layout
Display a list with detail panel.
Layout Structure
- FlexContainer: Master-Detail
- Panel: Master List (width: 40%)
- DataGrid: Items
- Click row to select
- Highlight selected row
- DataGrid: Items
- Panel: Detail View (width: 60%)
- Shows selected item details
- Empty state when nothing selected
- Panel: Master List (width: 40%)
Implementation
- FlexContainer: Master-Detail
- Direction: row
- Gap: 20px
- Left Panel:
- DataGrid: Customers
- Columns: name, email, status
- onRowClick: Set selected_customer
- Row highlighting: When id = selected_customer.id
- DataGrid: Customers
- Right Panel (visible when customer selected):
- Panel: Customer Details
- Label: customer.name (large)
- Label: customer.email
- Label: customer.phone
- Panel: Recent Orders
- DataGrid: Orders filtered by customer_id
- Panel: Customer Details
Empty State
- Panel: No Selection (visible when no customer selected)
- Icon: user
- Label: "Select a customer to view details"
Pattern 2: Dashboard Layout
Display metrics and quick actions.
Layout Structure
- GridContainer: Dashboard (3 columns)
- Panel: Today's Sales
- Large number: $12,345
- Change indicator: +15%
- Panel: New Orders
- Large number: 47
- Link: View all
- Panel: Pending Approval
- Large number: 5
- Button: Review
- Panel: Sales Chart (spans 2 columns)
- Chart: Line chart of sales
- Panel: Recent Activity
- List: Latest 10 activities
- Panel: Today's Sales
Metric Card Pattern
- Panel: Metric Card
- Label: "Total Revenue" (small, gray)
- Label: "$45,678" (large, bold)
- FlexContainer: Change
- Icon: arrow-up (green) or arrow-down (red)
- Label: "12% vs last month"
- Link: "View details →"
Calculate Metrics
Use data binding with aggregations:
Label: Total Revenue
Value: SUM(orders.total) where created_at = today
Format: Currency
Label: Order Count
Value: COUNT(orders) where status != "Cancelled"
Pattern 3: Search with Filters
Advanced search interface.
Layout Structure
- Panel: Search Interface
- FlexContainer: Search Bar
- TextField: Search (with icon)
- Button: Advanced Filters
- Panel: Filter Panel (collapsible)
- Select: Status
- DateField: Date From
- DateField: Date To
- Select: Category
- Button: Apply Filters
- Label: "Showing 25 of 142 results"
- DataGrid: Results
- Paginated, sortable
- FlexContainer: Search Bar
Search Bar Component
- FlexContainer: Search Bar
- TextField: Search Query
- Placeholder: "Search products..."
- Icon: magnifying glass
- onKeyPress (Enter): Execute search
- onChange (debounced 300ms): Filter results
- Button: Clear
- Visible when: search has value
- onClick: Clear search
- Button: Filters
- Icon: funnel
- Badge: Active filter count
- onClick: Toggle filter panel
- TextField: Search Query
Active Filters Display
- FlexContainer: Active Filters
- Visible when: Any filter active
- Chip: Status = Active
- X button to remove
- Chip: Category = Electronics
- X button to remove
- Chip: Date: Jan 1 - Jan 31
- X button to remove
- Button: Clear all
Pattern 4: Modal Form
Form in a modal dialog.
Modal Trigger
Button: Add New Customer
onClick: Show Add Customer Modal
Modal Structure
- Modal: Add Customer
- Header: "Add New Customer"
- Content:
- TextField: Name (required)
- EmailField: Email (required)
- PhoneField: Phone
- Select: Type (Personal/Business)
- Footer:
- Button: Cancel (closes modal)
- Button: Save (primary)
- Disabled until: Form is valid
- onClick:
- Create customer
- Close modal
- Refresh list
- Show success toast
Modal Sizes
Modal: Small (400px)
- Simple confirmations
- Quick inputs
Modal: Medium (600px)
- Standard forms
- Most common
Modal: Large (800px)
- Complex forms
- Multi-section content
Modal: Full (90% width)
- Detailed views
- Wizards
Pattern 5: Tabs with Content
Organize content into tabs.
Tab Structure
- TabContainer: Customer Details
- Tab: Overview
- Customer info
- Quick stats
- Tab: Orders
- DataGrid: Customer orders
- Tab: Documents
- List: Uploaded files
- Tab: Notes
- List: Previous notes
- Form: Add note
- Tab: Overview
Tab with Badge
Tab: Orders
Badge: 12 (active order count)
Tab Loading
Tab: Documents
Loading: Show spinner until data loads
Empty: "No documents uploaded"
Pattern 6: Wizard / Stepper
Multi-step process.
Wizard Structure
- Panel: Order Wizard
- Stepper: Progress
- Step 1: Cart (completed)
- Step 2: Shipping (active)
- Step 3: Payment
- Step 4: Confirm
- Panel: Step Content
- Current step form/content
- FlexContainer: Navigation
- Button: Back
- Disabled on: First step
- Spacer
- Button: Next (steps 1-3)
- onClick: Validate, then advance
- Button: Complete (step 4)
- onClick: Submit order
- Button: Back
- Stepper: Progress
Step Validation
Step 2: Shipping
Required fields: address, city, country
Validation: All required fields filled
Next button: Disabled until valid
Pattern 7: Card Grid
Display items as cards.
Card Grid Layout
- GridContainer: Products
- Columns: 4 (responsive: 3 on tablet, 2 on mobile)
- Gap: 20px
- Card Template:
- Image: Product photo
- Label: Product name
- Label: Price (bold)
- Label: Category (small, gray)
- Button: Add to Cart
Card with Actions
- Panel: Product Card
- Image: product.image
- AspectRatio: 4:3
- FlexContainer: Content
- Label: product.name
- Label: product.price (formatted)
- StarRating: product.rating (read-only)
- FlexContainer: Actions
- Button: Quick View (icon only)
- Button: Add to Wishlist (icon only)
- Button: Add to Cart
- Image: product.image
Pattern 8: Table Actions
DataGrid with row actions.
Row Action Menu
- DataGrid: Orders
- Columns:
- order_number
- customer
- date
- total
- status
- actions (custom column)
- Actions Column:
- Button: View (icon: eye)
- Button: Edit (icon: pencil)
- Menu: More
- Item: Duplicate
- Item: Print
- Separator
- Item: Delete (danger)
Bulk Actions
- DataGrid: Orders
- Selection: Checkbox column
- Bulk Actions Toolbar (visible when items selected):
- Label: "3 items selected"
- Button: Export
- Button: Update Status
- Button: Delete
Pattern 9: Empty States
Handle no-data scenarios.
Empty State Component
- Panel: Empty State
- Centered: true
- Icon: inbox (large, gray)
- Label: "No orders yet" (heading)
- Label: "Orders will appear here..." (description)
- Button: Create First Order (primary)
Context-Specific Empty States
Search Results Empty:
Icon: search
Title: "No results found"
Description: "Try different search terms"
Action: Clear search
Filtered Empty:
Icon: filter
Title: "No matching items"
Description: "Adjust your filters"
Action: Clear filters
New User Empty:
Icon: rocket
Title: "Welcome!"
Description: "Get started by..."
Action: Create first item
Best Practices
Consistency
- Use same patterns across views
- Maintain consistent spacing
- Use consistent button placement
- Follow established conventions
Responsiveness
- Test on multiple screen sizes
- Stack elements on mobile
- Adjust column counts
- Consider touch targets
Accessibility
- Use proper labels
- Ensure keyboard navigation
- Provide screen reader text
- Maintain color contrast
Performance
- Lazy load tab content
- Paginate large lists
- Optimize images
- Cache where appropriate
Next Steps
- User Interfaces Guide - Complete UI reference
- Widgets Reference - All available widgets
- Mobile Development - Mobile UI patterns