From ee0b8d84210ee230dfc11c8ac373b0fd3f50af82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sedat=20=C3=96zt=C3=BCrk?= Date: Sun, 30 Nov 2025 20:15:04 +0300 Subject: [PATCH] =?UTF-8?q?Card=20ve=20CardItem=20g=C3=BCncellemesi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ui/src/views/list/Card.tsx | 55 ++++++++++++++++++++++++++++------ ui/src/views/list/CardItem.tsx | 7 ++++- 2 files changed, 52 insertions(+), 10 deletions(-) diff --git a/ui/src/views/list/Card.tsx b/ui/src/views/list/Card.tsx index dcc42d71..5d9dc8ef 100644 --- a/ui/src/views/list/Card.tsx +++ b/ui/src/views/list/Card.tsx @@ -120,10 +120,35 @@ const Card = (props: CardProps) => { setCurrentPage(1) // Reset to first page when sorting } - const handleSelectAll = (checked: boolean) => { + const handleSelectAll = async (checked: boolean) => { if (checked) { const keyField = gridDto?.gridOptions.keyFieldName - if (keyField) { + const selectAllMode = gridDto?.gridOptions?.selectionDto?.selectAllMode?.toLowerCase() + + if (!keyField) return + + if (selectAllMode === 'allpages') { + // Tüm sayfalardan tüm kayıtları al + if (!gridDataSource) return + + setLoading(true) + try { + const loadOptions = { + skip: 0, + take: totalCount, // Tüm kayıtları al + requireTotalCount: false, + } + + const res: any = await gridDataSource.load(loadOptions) + const allKeys = new Set(res.data.map((row: any) => row[keyField])) + setSelectedKeys(allKeys) + } catch (err) { + console.error('Select all pages error:', err) + } finally { + setLoading(false) + } + } else { + // Sadece mevcut sayfadaki kayıtları seç (page veya default) const allKeys = new Set(data.map(row => row[keyField])) setSelectedKeys(allKeys) } @@ -410,8 +435,14 @@ const Card = (props: CardProps) => { useEffect(() => { if (gridDataSource) { loadData() + + // selectionMode = page ise sayfa değiştiğinde seçimi temizle + const selectAllMode = gridDto?.gridOptions?.selectionDto?.selectAllMode?.toLowerCase() + if (selectAllMode === 'page') { + setSelectedKeys(new Set()) + } } - }, [gridDataSource, loadData]) + }, [gridDataSource, loadData, currentPage, gridDto]) useEffect(() => { if (!gridDto) return @@ -428,10 +459,6 @@ const Card = (props: CardProps) => { useEffect(() => { if (data.length > 0) { window.scrollTo({ top: 0, behavior: 'smooth' }) - - if (data.length < 6) { - setLayoutCount(data.length) - } } }, [data]) @@ -453,7 +480,12 @@ const Card = (props: CardProps) => { {selectionMode === 'multiple' && gridDto?.gridOptions?.selectionDto?.allowSelectAll && (
0 && selectedKeys.size === data.length} + checked={ + selectedKeys.size > 0 && + (gridDto?.gridOptions?.selectionDto?.selectAllMode?.toLowerCase() === 'allpages' + ? selectedKeys.size === totalCount + : selectedKeys.size === data.length) + } onChange={(checked: boolean) => handleSelectAll(checked)} className="cursor-pointer" /> @@ -651,7 +683,12 @@ const Card = (props: CardProps) => {

) : ( -
+
{gridDataSource && data.map((row, idx) => { const keyField = gridDto.gridOptions.keyFieldName diff --git a/ui/src/views/list/CardItem.tsx b/ui/src/views/list/CardItem.tsx index 72ef48bc..db3bffed 100644 --- a/ui/src/views/list/CardItem.tsx +++ b/ui/src/views/list/CardItem.tsx @@ -190,7 +190,12 @@ const CardItem = forwardRef(( >
{selectionMode !== 'none' && onSelectionChange && ( -
e.stopPropagation()}> +
{ + e.stopPropagation() + onSelectionChange(!isSelected) + }} + > {