Grid düzenlerini saklama
LivaDataGrid, LivaTreeList ve LivaPivotGrid; kolon veya alan düzenlerini
kullanıcı bazında adlandırarak sunucuda saklayabilir. Uygulama kökündeki
LivaGridStateProvider depolamayı, her grid'in kimliği ise kayıt alanını
belirler.
Kurulum
import { LivaGridStateProvider } from "@dataliva/livalib";
<LivaGridStateProvider
apiUrl={`${API_URL}/UserGridLayout`}
token={token}
lang="TR"
canSetDefault={currentUser.isSystemAdmin}
>
<App />
</LivaGridStateProvider>
Provider altındaki her LivaDataGrid ve LivaTreeList için Düzen menüsü
kendiliğinden açılır; kimlik vermek zorunlu değildir (bkz. Otomatik anahtar).
Kimliği açıkça vermek için sayfa ve grid için benzersiz, sabit bir değer
kullanın:
<LivaDataGrid id="customer-list" stateVersion={1} {...props} />
<LivaTreeList id="cost-center-tree" stateVersion={1} {...props} />
<LivaPivotGrid stateStoringId="sales-analysis" stateVersion={1} {...props} />
Kimliği filtre, seçili kayıt veya kullanıcı gibi değişkenlerden üretmeyin. Kolon
ya da alan şeması geriye uyumsuz değiştiğinde stateVersion değerini artırın;
eski düzenler yeni şemaya uygulanmaz.
Otomatik anahtar
id verilmeyen DataGrid ve TreeList için kayıt anahtarı otomatik üretilir.
Anahtar şu değerlerin özetidir ve auto-grid-… / auto-tree-… biçimindedir:
- sayfa yolu (
pathname; hash yönlendirmede#/…kısmı da eklenir, sorgu dizesi eklenmez) — yol grid ilk açıldığında yakalanır, canlı tutulan sekmeler kendi anahtarını korur, - bileşen türü (grid / ağaç),
keyExpr,- kolonların
nameya dadataFieldlistesi (bant kolonlarının alt kolonları dahil, sıralanmış olarak).
Bu yüzden anahtar sayfa yenilemede, dil değişiminde, filtrelemede ve kolonların
yeniden sıralanmasında değişmez. Şu durumlarda sabit bir id verin:
- Aynı sayfada aynı
keyExprve kolonlara sahip birden fazla grid varsa — aksi halde aynı düzen kaydını paylaşırlar. - Kolon eklenip çıkarılması muhtemelse — kolon listesi değişince otomatik anahtar da değişir ve önceki düzenler artık bulunmaz.
- Aynı grid farklı yollarda açılıyorsa ve düzenlerin ortak olması gerekiyorsa.
PivotGrid'de kimlik stateStoringId propudur. Verilmezse provider altında düzen
saklama yine açılır, ancak anahtar yalnızca sayfa yolundan üretilir; aynı
sayfadaki kimliksiz pivotlar tek kaydı paylaşır. Provider altındaki pivotlara
her zaman stateStoringId verin.
Ne saklanır
Provider yoksa Düzen menüsü gösterilmez ve durum saklanmaz.
- DataGrid ve TreeList — kolon sırası, genişliği, görünürlüğü, sabitlemesi
(
fixed/fixedPosition), sıralama, gruplama ve filtreler: filtre satırı değeri ve operasyonu, başlık filtresi seçimleri ve grid genelifilterValue. - PivotGrid — alan konumu, sırası, filtreleri ve genişletme durumu.
Seçim, arama metni, sayfa ve açık/kapalı satırlar (TreeList düğümleri dahil)
oturum durumudur, saklanmaz; bir düzen uygulandığında da korunur. Filtre
içermeyen bir düzen uygulandığında — filtrelerin saklanmasından önce kaydedilmiş
eski düzenler dahil — grid'in genel filterValue'su temizlenir. Genel varsayılan
olarak işaretlenen düzen filtre içeriyorsa grid açılışta bu filtreyle gelir.
REST sözleşmesi
| Metot | Rota | Amaç |
|---|---|---|
GET | /{gridId} | Görünen düzenlerin metadatası |
GET | /{gridId}/default | Varsayılan düzen ({ layout } veya 204) |
GET | /{gridId}/{layoutId} | Tek düzen ({ layout }) |
POST | /{gridId} | { name, layout } ile kaydet/güncelle |
DELETE | /{gridId}/{layoutId} | Düzeni sil |
PUT | /{gridId}/{layoutId}/default | Genel varsayılan yap |
DELETE | /{gridId}/default | Genel varsayılanı kaldır |
{gridId}, grid'in id / stateStoringId değeri ya da otomatik anahtardır
(auto-grid-…). Liste kayıtları id, name, isDefault, isShared ve isOwn
alanlarını taşımalıdır. layout, JSON durumunun string'e çevrilmiş halidir.
canSetDefault yalnızca yönetici eylemini arayüzde gösterir; yetkiyi sunucu da
denetlemelidir.
Özel depolama
import type { LivaGridStateStorage } from "@dataliva/livalib";
const storage: LivaGridStateStorage = {
list: async (key) => [],
loadDefault: async (key) => null,
load: async (key, id) => null,
save: async (key, name, value) => undefined,
remove: async (key, id) => {},
setDefault: async (key, id) => {},
};
<LivaGridStateProvider storage={storage}>{children}</LivaGridStateProvider>
save metoduna gelen değer load tarafından değiştirilmeden geri dönmelidir.
storage ile apiUrl aynı anda verilmez.