# LivaDataGrid
Package: @dataliva/livalib
Description: @dataliva/livalib veri tablosu bileşeni.

DevExtreme DataGrid üzerine kurulu, tam donanımlı veri tablosu bileşeni.
Sayfalama, filtreleme, arama, seçim, satır içi düzenleme ve dışa aktarma gibi
özellikler hazır prop'larla açılıp kapatılır. Veri kaynağı olarak yerel bir dizi
veya ASP.NET uzak veri kaynağı tanımı kullanılabilir.

```tsx
import { LivaDataGrid, type LivaDataGridColumn } from "@dataliva/livalib";
```

## Temel kullanım

`columns` ve `keyExpr` zorunludur; `dataSource` düz bir dizi olabilir. Kolonlar
`LivaDataGridColumn` tipindedir ve en sık `dataField`, `caption`, `dataType`,
`format` ile `alignment` alanları kullanılır. `showPager` sayfalayıcıyı açar,
`pagingDefaultPageSize` ve `pagingAllowedPageSizes` sayfa boyutunu yönetir.

```tsx
type Personel = { id: number; adSoyad: string; sehir: string; gorev: string; maas: number };

const personeller: Personel[] = [
  { id: 1, adSoyad: "Ayşe Yılmaz", sehir: "İstanbul", gorev: "Yönetici", maas: 82000 },
  // ...
];

const kolonlar: LivaDataGridColumn[] = [
  { dataField: "adSoyad", caption: "Ad Soyad" },
  { dataField: "sehir", caption: "Şehir" },
  { dataField: "gorev", caption: "Görev" },
  { dataField: "maas", caption: "Maaş", dataType: "number", format: "#,##0 ₺", alignment: "right" },
];
```

**Örnek — Temel kullanım ve sayfalama:**

```tsx
<div style={{ height: 380, width: "100%" }}>
  <LivaDataGrid
    dataSource={personeller}
    columns={kolonlar}
    keyExpr="id"
    fullHeight
    showBorders
    scrollingMode="standard"
    showPager
    pagingDefaultPageSize={5}
    pagingAllowedPageSizes={[5, 10]}
  />
</div>
```

## Filtreleme ve arama

`showFilterRow` kolon altına filtre satırı, `showHeaderFilter` kolon başlığına
değer listesi, `showSearchPanel` ise tablo genelinde arama kutusu ekler.
`rowAlternationEnabled` satırları dönüşümlü renklendirerek okunabilirliği
artırır.

**Örnek — Filtreleme ve arama:**

```tsx
<div style={{ height: 420, width: "100%" }}>
  <LivaDataGrid
    dataSource={personeller}
    columns={kolonlar}
    keyExpr="id"
    fullHeight
    showBorders
    rowAlternationEnabled
    scrollingMode="standard"
    showFilterRow
    showHeaderFilter
    showSearchPanel
    showPager
    pagingDefaultPageSize={5}
  />
</div>
```

## Prop'lar

### Temel ve veri

| Prop | Tip | Varsayılan |
|------|------|---------|
| `columns` | `LivaDataGridColumn[]` | — (zorunlu) |
| `keyExpr` | `string` | — (zorunlu) |
| `dataSource` | `Array<any> \| LivaDataGridDataSourceTypes` | — |
| `title` | `string` | — |
| `desc` | `string` | — |
| `remoteOperations` | `boolean` | — |
| `refreshMode` | `GridsEditRefreshMode` | — |
| `selectedRowKeys` | `any[]` | — |

### Görünüm ve düzen

| Prop | Tip | Varsayılan |
|------|------|---------|
| `height` | `number \| string` | `'100%'` |
| `width` | `number \| string` | `'100%'` |
| `visible` | `boolean` | `true` |
| `fullHeight` | `boolean` | `false` |
| `gridSize` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `'md'` |
| `radius` | `'none' \| 'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `'none'` |
| `cursor` | `'pointer' \| 'default'` | `'default'` |
| `showBorders` | `boolean` | `true` |
| `showRowLines` | `boolean` | `false` |
| `showColumnLines` | `boolean` | `true` |
| `showColumnHeaders` | `boolean` | `true` |
| `rowAlternationEnabled` | `boolean` | `true` |
| `hoverStateEnabled` | `boolean` | `true` |
| `wordWrapEnabled` | `boolean` | `false` |
| `columnAutoWidth` | `boolean` | `false` |
| `columnHidingEnabled` | `boolean` | `false` |
| `allowColumnResizing` | `boolean` | `true` |
| `allowColumnReordering` | `boolean` | `false` |
| `columnResizingMode` | `'nextColumn' \| 'widget'` | `'widget'` |
| `columnChooser` | `boolean` | `true` |
| `allowGrouping` | `boolean` | `false` |
| `rtlEnabled` | `boolean` | `false` |
| `noDataText` | `string` | `'No data'` |
| `showSkeleton` | `boolean` | `true` |
| `isInitializing` | `boolean` | `false` |
| `loadPanel` | `{ enabled?, text?, showPane?, showIndicator?, shading? }` | etkin |

### Seçim, kaydırma ve sayfalama

| Prop | Tip | Varsayılan |
|------|------|---------|
| `selectionMode` | `'none' \| 'single' \| 'multiple'` | `'none'` |
| `scrollingMode` | `'standard' \| 'virtual' \| 'infinite'` | `'infinite'` |
| `showPager` | `boolean` | `false` |
| `pagingDefaultPageSize` | `number` | `10` |
| `pagingAllowedPageSizes` | `number[]` | `[5, 10, 20]` |

> **Not:** `scrollingMode` varsayılanı `'infinite'` olduğundan sayfalayıcı
> (`showPager`) ve sayfa boyutu ayarları etkisiz kalır — infinite/virtual
> kaydırmada tüm satırlar kaydırılarak yüklenir. Klasik sayfalayıcıyı görmek
> için `scrollingMode="standard"` verin.

### Filtreleme ve arama

| Prop | Tip | Varsayılan |
|------|------|---------|
| `showFilterRow` | `boolean` | `false` |
| `showHeaderFilter` | `boolean` | `true` |
| `showFilterPanel` | `boolean` | `false` |
| `showSearchPanel` | `boolean` | `true` |
| `showCreateFilterButton` | `boolean` | `true` |

### Düzenleme (CRUD)

| Prop | Tip | Varsayılan |
|------|------|---------|
| `editMode` | `'cell' \| 'row' \| 'popup' \| 'form' \| 'batch'` | `'batch'` |
| `allowAdding` | `boolean` | `false` |
| `allowEditing` | `boolean` | `false` |
| `allowDeleting` | `boolean` | `false` |
| `allowCloning` | `boolean` | `false` |
| `editPopup` | `{ title?, width?, height?, readOnly?, onSave?, onCancel?, children?, ... }` | — |

### Araç çubuğu ve dışa/içe aktarma

| Prop | Tip | Varsayılan |
|------|------|---------|
| `showToolbar` | `boolean \| 'top' \| 'bottom'` | `true` |
| `toolbarItems` | `any[]` | — |
| `headerToolbar` | `React.ReactNode` | — |
| `isLivaContextMenu` | `boolean` | `true` |
| `summary` | `Summary` | — |
| `exportOptions` | `LivaDataGridExportOptions` | — |
| `importExportSettings` | `LivaDataGridImportExportSettings` | — |
| `enableRowDragging` | `boolean` | `false` |

### Master-detail

| Prop | Tip | Varsayılan |
|------|------|---------|
| `masterDetailEnabled` | `boolean` | `false` |
| `masterDetailRender` | `(data: { data, key }) => React.ReactNode` | — |
| `masterDetailAutoExpandAll` | `boolean` | `false` |

### Ay (month) araçları

| Prop | Tip | Varsayılan |
|------|------|---------|
| `monthOptions` | `MonthBuilderOptions` | — |
| `monthAdjustOptions` | `LivaMonthAdjustOptions` | — |

### Olay geri çağrıları

| Prop | Tip |
|------|------|
| `onRowClick` | `(e: RowClickEvent) => void` |
| `onRowDblClick` | `(e: RowDblClickEvent) => void` |
| `onSelectionChanged` | `(e: SelectionChangedEvent) => void` |
| `onRowUpdated` | `(e: any) => void` |
| `onRowInserted` | `(e: RowInsertedEvent) => void` |
| `onRowRemoved` | `(e: RowRemovedEvent) => void` |
| `onRowPrepared` | `(e: RowPreparedEvent) => void` |
| `onCellPrepared` | `(e: CellPreparedEvent) => void` |
| `onCellClick` | `(e: CellClickEvent) => void` |
| `onCellDblClick` | `(e: CellDblClickEvent) => void` |
| `onEditingStart` | `(e: EditingStartEvent) => void` |
| `onInitNewRow` | `(e: any) => void` |
| `onInitialized` | `(e: any) => void` |
| `onSaving` | `(e: any) => void` |
| `onToolbarPreparing` | `(e: any) => void` |
| `onRowDragging` | `(e: LivaRowDraggingEvent) => void` |
| `onAddClick` | `() => void` |
| `onShowRowStatus` | `(rowData: any, rowKey?: any) => void` |

## Kolon tipi — `LivaDataGridColumn`

DevExtreme `IColumnProps` alanlarına ek olarak (`dataField`, `caption`,
`dataType`, `format`, `width`, `visible`, `cellRender` vb.) aşağıdaki Liva'ya
özgü alanları destekler:

| Alan | Tip | Açıklama |
|------|------|---------|
| `alignment` | `'left' \| 'center' \| 'right' \| 'start'` | Başlık/hücre hizası |
| `cellAlignment` | `'left' \| 'center' \| 'right'` | Yalnızca hücre içeriği hizası |
| `summary` | `LivaDataGridColumnSummary` | Kolon bazlı özet (`sum`, `min`, `max`, `avg`, `count`) |
| `lookup` | `{ dataSource, valueExpr?, displayExpr? }` | Değer eşleme listesi |
| `dropdown` | `LivaDataGridColumnDropdown` | Hücre içi açılır liste (`plain \| datagrid \| treelist`) |
| `fixed` | `boolean` | Kolonu sabitle |
| `fixedPosition` | `'left' \| 'right'` | Sabitleme yönü |
| `hidingPriority` | `number` | Duyarlı gizleme önceliği |

## Yardımcı tipler

- **`LivaDataGridDataSourceTypes`** — ASP.NET uzak veri kaynağı seçenekleri;
  `AspNetData.Options` alanlarına ek olarak `token?`, `customizeLoadParams?` ve
  `errorHandler?` içerir.
- **`LivaDataGridExportOptions`** — `{ enabled?, actions?, fileName? }`;
  `actions` değeri `'excelAll' \| 'excelSelected' \| 'csv' \| 'pdf'` dizisidir.
- **`LivaDataGridImportExportSettings`** — özel içe/dışa aktarma kancaları:
  `onImportExcel?`, `onExportExcel?`, `onDownloadTemplate?`,
  `onImportSettings?`, `onExportSettings?`.
- **`LivaMonthAdjustOptions`** — ay sütunları için kümülatif / değer artırma
  aracı: `monthFields`, `totalField`, `summaryFields`, `onApply`.
