Ana içeriğe atla

Widget

Widget, bir Dashboard içinde tek bir Indicator’ü görselleştirir. Birleşik filtreleri (site, yıl aralığı, durumlar), farklı görselleştirme tiplerini, toplama ve gösterim seçeneklerini, dataset eşlemesini ve isteğe bağlı hedef (targets) katmanını destekler.

Türler

  • line_chart: çok serili zaman trendleri
  • bar_chart: kategorik/zamansal karşılaştırmalar (default/stacked/percent)
  • pie_chart: oransal dağılımlar
  • value: tek KPI değeri
  • periodic_values: dönemsel/kalender özetleri
  • table: hiyerarşik gösterge kırılım tablosu

Veri Yapısı

// apps/azalt/src/server/db/types/dashboard.ts (özet)
type DashboardWidgetType =
  | "line_chart" | "bar_chart" | "pie_chart" | "value" | "table" | "periodic_values";

interface DashboardFilter { siteIds?: string[]; startYear?: number; endYear?: number; statuses?: ("APPROVED"|"COMPLETED"|"REJECTED")[] }

interface DashboardWidgetSettings {
  indicatorDatasetMappings?: Record<string, {
    useDatasetValue: boolean;
    datasetId?: string;
    name?: string;
    field?: string;
  }> | null;
  aggregator?: "sum" | "avg" | "ratio";
  period?: "MONTHLY" | "QUARTERLY" | "YEARLY" | "TIMESTAMP";
  displayMode?: "sites" | "aggregated" | "groups";
  chartSettings?: "default" | "stacked" | "percent";
  showNumbers?: boolean;
  showIndicatorName?: boolean;
  angle?: number;
  siteGroups?: Array<{ id: string; name: string; siteIds: string[] }>;
  decimalPlaces: number;
  selectedTargetEntries?: string[];
  showTargets?: boolean;
}

interface DashboardWidget {
  id: string; dashboardId: string; indicatorId: string; name: string;
  type: DashboardWidgetType; x: number; y: number; w: number; h: number;
  settings: DashboardWidgetSettings; filter: DashboardFilter | null;
}

Filtreler ve Öncelik

  • Widget düzeyi filter, siteIds, startYear, endYear, statuses belirtebilir.
  • Belirtilmezse Dashboard globalFilter uygulanır.
  • Durumlar (statuses), organizasyon varsayılanlarına; yoksa APPROVED’a düşer.
  • Halka açık dashboard’larda, kaydedilmeyen per-widget geçici geçersiz kılmalar kabul edilir (public API).

Ayarlar

  • Toplama: sum, avg, ratio
  • Periyot: MONTHLY, QUARTERLY, YEARLY (grafikler için TIMESTAMP aylığa normalize edilir)
  • Görünüm modu: sites (site bazlı), aggregated (tek seri), groups (özel site grupları)
  • Çubuk grafiği: default, stacked, percent
  • Biçimlendirme: decimalPlaces, showNumbers, showIndicatorName, angle (pie)
  • Dataset eşlemesi: her gösterge girdisi için dataset/alan seçimi; eksik alan/yıl bazında veri yok gibi eşleme sorunları arayüzde gösterilir
  • Hedefler: hedef çizgileri ve seçili hedef girdileri

Veri ve API

  • İç (uygulama): dashboardWidgets.getData bir widget’ın göstergesi için, birleştirilmiş filtreler ve ayarları dikkate alarak hesaplanmış değerleri döner.
  • Halka açık: dashboards.getWithData tüm widget’lar için birleşik bir yük döner (dashboard, widget’lar, dataset’ler, göstergeler, widgetData). Halka açık görünüm viewOptions (ör. tip) ve per-widget filtre geçersiz kılmalarını iletebilir.

Güvenlik ve Yetkiler

  • Okuma: Viewer veya halka açık bağlantı (halka açık dashboard’larda)
  • Widget oluştur/güncelle/sil: Manager ve üzeri

Sık Yapılan İşlemler

  • Widget ekleme: gösterge, tip ve yerleşim (x,y,w,h) seç
  • Ayarları düzenleme: periyot, toplama, görünüm modu, ondalık
  • Dashboard varsayılanlarını geçersiz kılmak için widget filtresi uygula
  • Gösterge girişleri için dataset eşlemesi yap; eşleme sorunlarını gider
  • Widget’ı sürükle-bırak ile taşı veya kaldır

İlgili Kavramlar

  • Dashboard — konteyner ve küresel filtre
  • Indicator — widget’ın görselleştirdiği metrik
  • Dataset — gösterge hesaplamalarında kullanılan katsayılar ve referans değerler