LivaDocsv1.1.2

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 name ya da dataField listesi (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ı keyExpr ve 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 geneli filterValue.
  • 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

MetotRotaAmaç
GET/{gridId}Görünen düzenlerin metadatası
GET/{gridId}/defaultVarsayı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}/defaultGenel varsayılan yap
DELETE/{gridId}/defaultGenel 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.