Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(VDataTable): highlight filter matches #21073

Open
wants to merge 11 commits into
base: dev
Choose a base branch
from

Conversation

KaelWD
Copy link
Member

@KaelWD KaelWD commented Mar 6, 2025

Description

Closes #20357
Depends on #16462

Markup:

<template>
  <v-container>
    <v-data-table :headers="headers" :items="items" :search="search" item-value="name" />

    <v-combobox v-model:search="search" :items="items" item-title="name" />
  </v-container>
</template>

<script setup>
  import { ref } from 'vue'

  const search = ref('')
  const headers = [
    {
      title: 'Dessert (100g serving)',
      align: 'start',
      sortable: false,
      key: 'name',
    },
    { title: 'Calories', align: 'end', key: 'calories' },
    { title: 'Fat (g)', align: 'end', key: 'fat' },
    { title: 'Carbs (g)', align: 'end', key: 'carbs' },
    { title: 'Protein (g)', align: 'end', key: 'protein' },
    { title: 'Iron (%)', align: 'end', key: 'iron' },
  ]
  const items = [
    {
      name: 'Frozen Yogurt',
      calories: 159,
      fat: 6.0,
      carbs: 24,
      protein: 4.0,
      iron: '1',
    },
    {
      name: 'Jelly bean',
      calories: 375,
      fat: 0.0,
      carbs: 94,
      protein: 0.0,
      iron: '0',
    },
    {
      name: 'KitKat',
      calories: 518,
      fat: 26.0,
      carbs: 65,
      protein: 7,
      iron: '6',
    },
    {
      name: 'Eclair',
      calories: 262,
      fat: 16.0,
      carbs: 23,
      protein: 6.0,
      iron: '7',
    },
    {
      name: 'Gingerbread',
      calories: 356,
      fat: 16.0,
      carbs: 49,
      protein: 3.9,
      iron: '16',
    },
    {
      name: 'Ice cream sandwich',
      calories: 237,
      fat: 9.0,
      carbs: 37,
      protein: 4.3,
      iron: '1',
    },
    {
      name: 'Lollipop',
      calories: 392,
      fat: 0.2,
      carbs: 98,
      protein: 0,
      iron: '2',
    },
    {
      name: 'Cupcake',
      calories: 305,
      fat: 3.7,
      carbs: 67,
      protein: 4.3,
      iron: '8',
    },
    {
      name: 'Honeycomb',
      calories: 408,
      fat: 3.2,
      carbs: 87,
      protein: 6.5,
      iron: '45',
    },
    {
      name: 'Donut',
      calories: 452,
      fat: 25.0,
      carbs: 51,
      protein: 4.9,
      iron: '22',
    },
  ]
</script>

@KaelWD KaelWD changed the title feat: support multiple filter result highlighting, add to VDataTable feat(VDataTable): highlight filter matches Mar 6, 2025
@KaelWD KaelWD added T: enhancement Functionality that enhances existing features and removed T: feature A new feature labels Mar 6, 2025
@KaelWD KaelWD added this to the v3.8.0 (Andromeda) milestone Mar 6, 2025
@KaelWD
Copy link
Member Author

KaelWD commented Mar 6, 2025

Matches are keyed on item.value so it does funny things if item-value is not set correctly like highlight the second character of every item.

_filteredMatches.set(item.value, matches)

@KaelWD KaelWD marked this pull request as ready for review March 7, 2025 07:12
@KaelWD KaelWD requested a review from a team March 7, 2025 07:12
@@ -164,3 +164,6 @@

&-active
color: $data-table-header-mobile-chip-icon-color-active

.v-data-table__mask
background: rgb(var(--v-theme-on-surface-variant))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a way we can make this more flexible?

<v-data-table :headers="headers" :items="items" :search="search" class="bg-primary" item-value="name" />

image

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is bg-primary class without additional theme="dark" a valid use case for v-data-table?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes it fixes it but I hate that fix. Mainly because when we say theme="dark", we're saying use those colors. So now everything inside of that component would operate with a different palette.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C: VDataTable C: VDataTableVirtual T: enhancement Functionality that enhances existing features
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants