Skip to content

Commit 5cd111e

Browse files
committed
fix(table): stop selectable propagation
1 parent 1a9d42e commit 5cd111e

File tree

4 files changed

+13
-5
lines changed

4 files changed

+13
-5
lines changed

.changeset/few-ants-leave.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@indielayer/ui": patch
3+
---
4+
5+
fix(table): stop selectable propagation

packages/ui/docs/pages/component/table/selectable.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { ref } from 'vue'
33
import { type TableHeader } from '@indielayer/ui'
44
55
const headers: TableHeader[] = [
6-
{ text: '#', value: 'id', align: 'center' },
6+
{ text: '#', value: 'id' },
77
{ text: 'Title', value: 'title' },
88
{ text: 'Description', value: 'description', truncate: true, width: 400 },
99
{ text: 'Published', value: 'published', align: 'center' },
@@ -50,6 +50,7 @@ const singleSelected = ref<number>(2)
5050
selectable
5151
:headers="headers"
5252
:items="items"
53+
@click-row="(item) => console.log('Row clicked:', item)"
5354
/>
5455
</x-card>
5556
<x-card>

packages/ui/src/components/menu/MenuItem.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ import { useTheme, type ThemeComponent } from '../../composables/useTheme'
6060
6161
import XIcon from '../../components/icon/Icon.vue'
6262
import XSpinner from '../../components/spinner/Spinner.vue'
63+
import XCheckbox from '../../components/checkbox/Checkbox.vue'
6364
6465
import type { MenuArrayItem } from './Menu.vue'
6566

packages/ui/src/components/table/Table.vue

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ import XSkeleton from '../skeleton/Skeleton.vue'
8787
import type { SkeletonShape } from '../skeleton/Skeleton.vue'
8888
8989
import XIcon from '../icon/Icon.vue'
90+
import XCheckbox from '../checkbox/Checkbox.vue'
9091
9192
import { chevronDownIcon } from '../../common/icons'
9293
@@ -278,14 +279,14 @@ const { styles, classes, className } = useTheme('Table', {}, props)
278279
:class="classes.table"
279280
>
280281
<x-table-head :sticky-header="stickyHeader">
281-
<x-table-header v-if="props.selectable && !props.singleSelect" width="48" class="!px-3 !py-2.5">
282+
<x-table-header v-if="props.selectable && !props.singleSelect" width="40" class="!pl-3.5 !pr-0.5 !py-2.5 cursor-pointer" @click="toggleSelectAll">
282283
<x-checkbox
283284
:model-value="allRowsSelected || someRowsSelected"
284285
:indeterminate="someRowsSelected"
285286
hide-footer
286287
aria-label="Select all rows"
287288
skip-form-registry
288-
@click.prevent="toggleSelectAll"
289+
@click.prevent.stop="toggleSelectAll"
289290
/>
290291
</x-table-header>
291292
<x-table-header v-if="expandable" width="48" class="!p-0"/>
@@ -354,13 +355,13 @@ const { styles, classes, className } = useTheme('Table', {}, props)
354355
:single-select="singleSelect"
355356
@click="onTableRowClick(item.data, item.index)"
356357
>
357-
<x-table-cell v-if="props.selectable && !singleSelect" width="48">
358+
<x-table-cell v-if="props.selectable && !singleSelect" width="40" class="!pl-3.5 !pr-0.5 cursor-pointer" @click.stop="toggleRowSelection(keyProp ? (item.data as Record<string, unknown>)[keyProp] : item.index)">
358359
<x-checkbox
359360
:model-value="isRowSelected(keyProp ? (item.data as Record<string, unknown>)[keyProp] : item.index)"
360361
hide-footer
361362
:aria-label="`Select row ${index + 1}`"
362363
skip-form-registry
363-
@click.prevent="toggleRowSelection(keyProp ? (item.data as Record<string, unknown>)[keyProp] : item.index)"
364+
@click.prevent.stop="toggleRowSelection(keyProp ? (item.data as Record<string, unknown>)[keyProp] : item.index)"
364365
/>
365366
</x-table-cell>
366367
<x-table-cell v-if="expandable" width="48" class="!p-1">

0 commit comments

Comments
 (0)