Skip to content

Custom Cells

Demonstrates custom cell templates with formatting and styling.

Custom Templates

Use the template property to customize cell rendering with HTML strings.

ID
Name
Price
Status
Rating
1
Product A
$29.99
active
⭐⭐⭐⭐ 4.5/5
2
Product B
$49.99
inactive
⭐⭐⭐ 3.8/5
3
Product C
$19.99
active
⭐⭐⭐⭐ 4.2/5

Custom Cells with Slots

Use the #cell slot to render Vue components, badges, buttons, or any custom content.

ID
Title
Status
Owner
Priority
Progress
1
Landing page redesign
In progress
LSLivia Santos
High
62%
2
CRM integration
Completed
POPaulo Oliveira
Medium
100%
3
Winter Sale campaign
Awaiting approval
FCFernanda Costa
High
35%

Basic Custom Cells

Custom cell templates with formatting and styling. Price is styled in blue, status uses color coding, and rating displays stars.

ID
Name
Price
Status
Rating
1
Product A
$29.99
active
⭐⭐⭐⭐ 4.5/5
2
Product B
$49.99
inactive
⭐⭐⭐ 3.8/5
3
Product C
$19.99
active
⭐⭐⭐⭐ 4.2/5
4
Product D
$39.99
active
⭐⭐⭐⭐⭐ 5/5

Code

vue
<script setup lang="ts">
import { ref } from 'vue'
import { PantanalGrid, type ColumnDef } from '@pantanal/grid'

const rows = ref([
  { id: 1, name: 'Product A', price: 29.99, status: 'active', rating: 4.5 },
  { id: 2, name: 'Product B', price: 49.99, status: 'inactive', rating: 3.8 }
])

const columns: ColumnDef[] = [
  { field: 'id', title: 'ID', width: 80 },
  { field: 'name', title: 'Name' },
  {
    field: 'price',
    title: 'Price',
    template: ({ value }) => `<strong class="text-blue-600">$${value.toFixed(2)}</strong>`
  },
  {
    field: 'status',
    title: 'Status',
    template: ({ value }) => {
      const color = value === 'active' ? 'green' : 'red'
      return `<span class="text-${color}-500 font-semibold">${value}</span>`
    }
  },
  {
    field: 'rating',
    title: 'Rating',
    template: ({ value }) => {
      const stars = '⭐'.repeat(Math.floor(value))
      return `<div>${stars} ${value}/5</div>`
    }
  }
]
</script>

<template>
  <PantanalGrid
    :rows="rows"
    :columns="columns"
    key-field="id"
    locale="en"
    responsive="table"
  />
</template>

Features Demonstrated

  • Custom formatting: Price with custom styling
  • Conditional styling: Status with color coding
  • Complex templates: Rating with stars