npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

prime-one-table

v0.0.23

Published

- [prime-one-table](#prime-one-table) - [İçindekiler](#i̇çindekiler) - [Kurulum](#kurulum) - [Kullanım](#kullanım) - [Şablon](#şablon) - [Kod Örneği](#kod-örneği) - [Olaylar](#olaylar) - [onLazyLoad](#onlazyload) - [selectionChange

Readme

prime-one-table

İçindekiler

Kurulum

Paketi kurmak için npm kullanabilirsiniz:

npm install prime-one-table

Kullanım

PrimeOneTable bileşenini kullanmak için aşağıdaki adımları takip edebilirsiniz:

Şablon

<lib-prime-one-table
  [tableOptions]="tableOptions()"
  (onLazyLoad)="onLazyLoad($event)"
  (selectionChange)="selectionChange($event)"
></lib-prime-one-table>

Kod Örneği

Aşağıdaki örnek, PrimeOneTable bileşenini nasıl yapılandırabileceğinizi gösterir:

import { Component, inject } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { PrimeOneTableComponent } from 'prime-one-table';
import { PrimeOneTableOptions, PrimeOneColumn } from 'path-to-prime-one-table/types/types';

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [PrimeOneTableComponent, HttpClient],
  templateUrl: './app.component.html'
})
export class AppComponent {
  httpClient = inject(HttpClient);
  tableOptions = signal<PrimeOneTableOptions<ExampleData>>({
    lazy: true,
    data: [],
    selectable: true,
    dataKey: 'id',
    sortMode: 'multiple',
    resizable: true,
    gridlines: true,
    reorderable: true,
    filter: false,
    pagination: {
        initialRows: 10,
        totalRecords: 0,
        pagination: true,
        paginationPerPageOptions: [10, 20, 50]
    },
    columns: [
        { header: 'ID', field: 'id' },
        { header: 'Başlık', field: 'title' },
        { header: 'Gövde', field: 'body' }
    ],
  });

  ngOnInit() {
    this.httpClient
      .get('https://jsonplaceholder.typicode.com/posts')
      .subscribe((res: any) => {
        this.tableOptions.update(v => ({
            ...v,
            data: res,
            pagination: {
                ...v.pagination!,
                totalRecords: res.length
            }
        }))
      });
  }

  onLazyLoad(event: TableLazyLoadEvent) {
    console.log('Lazy Load Event:', event);
    this.httpClient
      .get('https://jsonplaceholder.typicode.com/posts', {params: {_start: (event.first ?? 0) / (event.rows ?? 1), _limit: (event.rows ?? this.tableOptions().pagination?.initialRows ?? 10)}})
      .subscribe((res: any) => {
        this.tableOptions.update(v => ({
            ...v,
            data: res,
            pagination: {
                ...v.pagination!,
                totalRecords: res.length
            }
        }))
      });
  }

  selectionChange(event: any) {
    console.log('Selection Change Event:', event);
  }
}

Olaylar

onLazyLoad

Tablo verileri lazy yükleme ile yüklendiğinde çağrılır.

function handleLazyLoad(event: TableLazyLoadEvent) {
  // event: Yükleme olayı ile ilgili detaylar
}

selectionChange

Seçim değiştiğinde çağrılır.

function handleSelectionChange(event: any) {
  // event: Seçim değişikliği ile ilgili detaylar
}

Özelleştirme

Tabloyu özelleştirmek için columns dizisine özel hücre şablonları ve filtreler ekleyebilirsiniz. İşte bir örnek:

Özel Hücre Şablonları

columns: [
  { header: 'ID', field: 'id' },
  {
    header: 'Başlık',
    field: 'title',
    customTemplate: true,
  },
  {
    header: 'Gövde',
    field: 'body',
    customTemplate: true,
  },
];
<ng-template
  customCellTemplate
  [typeData]="tableOptions().data"
  let-col="col"
  let-rowData="rowData"
>
  @switch (col.field) { @case ('title') {
  <strong class="text-red-500 font-semibold"> {{ rowData[col.field] }} </strong>
  } @case ('body') {
  <p class="text-red-600 font-light">{{ rowData[col.field] }}</p>
  } }
</ng-template>

Özel Filtreler

Özel filtreler kullanarak daha karmaşık filtreleme mantıkları uygulayabilirsiniz.

columns: [
  { header: 'ID', field: 'id' },
  {
    header: 'Başlık',
    field: 'title',
    customTemplate: true,
    filter: {
      field: 'title',
      type: 'custom',
      placeholder: 'Placeholder',
    },
  },
  {
    header: 'Gövde',
    field: 'body',
    customTemplate: true,
  },
];
<ng-template
  customFilterTemplate
  [typeData]="tableOptions().data"
  let-col="col"
  let-value="value"
  let-filter="filter"
>
  @switch (col.field) { @case ('title') {
  <input
    pInputText
    placeholder="Title"
    (onChange)="filter($event.target.value)"
  />
  } }
</ng-template>

Excel Export

tableOptions.excelExport tanımlandığında tablo başlığında bir Excel butonu belirir. Dışa aktarım, sayfalama türüne göre iki farklı şekilde çalışır:

| Mod | lazy | Veri kaynağı | | ------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | Frontend pagination | false | Bellekteki tüm veri. Aktif filtre ve sıralama uygulanır, sayfalama uygulanmaz — yalnızca görünen sayfa değil, tüm satırlar aktarılır. | | Backend pagination | true | excelExport.fetchAll ile backend'den çekilen, sayfalanmamış tüm veri. |

Çıktı bağımlılıksız dahili bir XLSX yazıcısı ile üretilir; exceljs / xlsx gibi ek bir paket kurmanız gerekmez. Tarih, sayı ve boolean değerler Excel'de gerçek tipleriyle yazılır; başlık satırı dondurulur ve otomatik filtre eklenir.

Frontend pagination

lazy: false ise ek bir ayar gerekmez:

tableOptions = signal<PrimeOneTableOptions<ExampleData>>({
  lazy: false,
  data: [],
  dataKey: 'id',
  excelExport: {
    fileName: () => `kullanicilar-${new Date().toISOString().slice(0, 10)}`,
    sheetName: 'Kullanıcılar',
  },
  columns: [
    { header: 'ID', field: 'id' },
    { header: 'Ad', field: 'name' },
  ],
});

Backend pagination

lazy: true ise fetchAll zorunludur. Fonksiyon, tablodaki güncel filtre ve sıralama durumunu taşıyan bir lazyLoadEvent alır ve sayfalanmamış veriyi döndürür. Observable, Promise veya doğrudan dizi döndürebilirsiniz.

excelExport: {
  fileName: 'kullanicilar',
  fetchAll: (request) =>
    this.httpClient.get<ExampleData[]>('/api/users', {
      params: {
        // Sayfalama alanları: tek istekte first = 0, rows = totalRecords
        _start: request.lazyLoadEvent.first ?? 0,
        _limit: request.lazyLoadEvent.rows ?? request.totalRecords,
        _sort: request.lazyLoadEvent.sortField ?? '',
        _order: request.lazyLoadEvent.sortOrder === -1 ? 'desc' : 'asc',
      },
    }),
}

fetchAll tanımlanmadan lazy: true bir tablo dışa aktarılmaya çalışılırsa export, exportError olayı ile anlamlı bir hata mesajı vererek sonlanır.

Parçalı (chunked) çekim

Sayfa boyutunu sınırlayan API'ler için chunkSize verin. Veri, backend tükenene kadar (boş ya da eksik dolu sayfa gelene veya totalRecords'a ulaşılana kadar) sayfa sayfa çekilir ve butonda yüklenen / toplam ilerlemesi gösterilir.

excelExport: {
  chunkSize: 1000,
  fetchAll: (request) =>
    this.httpClient
      .get<{ items: ExampleData[]; total: number }>('/api/users', {
        params: {
          skip: request.lazyLoadEvent.first ?? 0,
          take: request.lazyLoadEvent.rows ?? 1000,
        },
      })
      // totalRecords döndürmek, tablonun bildirdiği toplamı düzeltir.
      .pipe(map((res) => ({ data: res.items, totalRecords: res.total }))),
  // Güvenlik sınırı: aşılırsa dosya üretilmez, exportError tetiklenir.
  maxRows: 100_000,
}

Kolon bazlı ayarlar

columns: [
  // Excel'e hiç yazılmaz
  { header: 'İşlemler', field: 'id', exportable: false },

  // Ekranda farklı, Excel'de farklı başlık ve genişlik
  { header: 'Ad', field: 'name', exportHeader: 'Tam Ad', exportWidth: 30 },

  // Sayı biçimi korunur, hücre metin değil sayı olarak yazılır
  { header: 'Tutar', field: 'amount', exportFormat: '#,##0.00' },

  // Ekranda rozet gösteren bir kolonun Excel karşılığı
  {
    header: 'Durum',
    field: 'isActive',
    customTemplate: true,
    customExportValueFn: (data) => (data.isActive ? 'Aktif' : 'Pasif'),
  },
];

Hücre değeri şu öncelikle çözülür: customExportValueFn → customValueFn → field. customExportValueFn içinden Date, number veya boolean döndürmek, Excel'de metin yerine gerçek tipli hücre üretir — böylece sıralama ve formüller çalışır.

footerRow satırlarını da dosyaya eklemek için includeFooter: true verin; yalnızca isInFooter: true olan kolonlar doldurulur.

Butonu kendiniz konumlandırmak

hideButton: true ile hazır buton gizlenir ve dışa aktarım bileşenin exportExcel() metodu ile tetiklenir:

<prime-one-table
  #tablo
  [tableOptions]="tableOptions()"
  (exportDone)="onExportDone($event)"
  (exportError)="onExportError($event)"
>
  <ng-template customCaptionTemplate>
    <p-button
      label="Dışa Aktar"
      [loading]="tablo.exporting()"
      (onClick)="tablo.exportExcel()"
    />
  </ng-template>
</prime-one-table>

exporting() dışa aktarım sürerken true olur, exportProgress() ise parçalı çekimde { phase, loaded, total } bilgisini verir.

Farklı bir yazıcı kullanmak

Daha zengin bir çıktı (birden fazla sayfa, formül, resim vb.) gerekiyorsa writer ile kendi implementasyonunuzu verebilirsiniz. Kütüphane veriyi toplar, dosyayı sizin yazıcınız üretir:

excelExport: {
  writer: async (sheet) => {
    const ExcelJS = await import('exceljs');
    const workbook = new ExcelJS.Workbook();
    const worksheet = workbook.addWorksheet(sheet.name);

    worksheet.columns = sheet.columns.map((col) => ({
      header: col.header,
      width: col.width,
    }));
    sheet.rows.forEach((row) => worksheet.addRow(row));

    return new Blob([await workbook.xlsx.writeBuffer()]);
  },
}

Özellikler

| Özellik | Tip | Varsayılan | Açıklama | | ----------------- | ---------------------------------------------------------- | ---------- | ---------------------------------------------- | | tableOptions | PrimeOneTableOptions<T> | - | Tablo ayarlarını içeren konfigürasyon nesnesi. | | onLazyLoad | (lazyLoadEvent: TableLazyLoadEvent) => void | - | Lazy yükleme olayı. | | selectionChange | (selectEvent: any) => void | - | Seçim değişikliği olayı. | | exportStart | () => void | - | Excel dışa aktarımı başladığında tetiklenir. | | exportDone | (result: { fileName: string; rowCount: number }) => void | - | Dosya indirildiğinde tetiklenir. | | exportError | (error: unknown) => void | - | Dışa aktarım başarısız olduğunda tetiklenir. |

Types

PrimeOnePrimaryColumn<T>

| Alan | Tip | Açıklama | | --------------------- | ---------------------------------------------------------- | -------------------------------------------------------------------- | | header | string | Sütun başlığı. | | headerClass | string | Sütun Başlığına ait class | | sortField | string | Sıralama yapılacak alan. | | filter | FilterType<T> | Filtreleme ayarları. | | class | string | Sütuna ait class. | | customColClassFn | (data: T) => { [key: string]: boolean } | Sütuna ait koşullandırılabilir class. | | customValueFn | (data: T) => any | Sütuna ait kişiselleştirilebilir value | | exportable | boolean | false ise kolon Excel çıktısına dahil edilmez. Varsayılan true. | | exportHeader | string | Excel başlığı; verilmezse header kullanılır. | | exportWidth | number | Karakter cinsinden kolon genişliği; verilmezse içerikten hesaplanır. | | exportFormat | string | Excel sayı biçimi, ör. dd.mm.yyyy veya #,##0.00. | | customExportValueFn | (data: T) => string \| number \| boolean \| Date \| null | Excel hücre değeri. customValueFn'den önceliklidir. |

PrimeOnePagination<T>

| Alan | Tip | Açıklama | | -------------------------- | ---------- | ---------------------------------------- | | initialRows | number | Başlangıçtaki sayfa başına satır sayısı. | | totalRecords | number | Toplam kayıt sayısı. | | pagination | boolean | Sayfalama özelliği açık mı. | | paginationPerPageOptions | number[] | Sayfa başına gösterim seçenekleri. |

PrimeOneColumn<T>

| Alan | Tip | Açıklama | | ---------------- | --------- | ----------------------------- | | customTemplate | boolean | Özel hücre şablonu kullanımı. | | field | string | Kolon verisinin alanı. |

& PrimeOnePrimaryColumn<T>

PrimeOneTableOptions<T>

| Alan | Tip | Açıklama | | ------------------ | ------------------------------------------------- | ------------------------------------------------------------------ | | title? | string | Tablo Başlığı | | titleClass? | string | Tablo Başlığına ait class | | lazy | boolean | Lazy Loading özelliği. | | data | T[] | Tablo verileri. | | columns | PrimeOneColumn<T>[] | Tablo sütunları. | | dataKey | string | Verilerin anahtar alanı. | | sortMode | 'multiple' 'single' | Sıralama modu. | | resizable | boolean | Sütunların yeniden boyutlandırılabilirliği. | | reorderable | boolean | Sütunların sıralanabilirliği. | | expand | boolean | Satırların genişletilebilirliği | | size | 'small' 'normal' 'large' | Tablonun boyutu. | | filter | boolean | tabloda filtreleme özelliği açık mı. | | filterRowClass | string  | Tablodaki Filter satırına ait class | | headerRowClass | string | Tablo Başlık satırına ait class | | gridlines | boolean | Izgara çizgileri. | | stripedRows | boolean | Çizgili Satırlar. | | selectable | boolean | Satırların seçilebilirliği. | | lazyLoadEvent | (lazyLoadEvent: TableLazyLoadEvent) => void | Lazy yükleme olayı işleyicisi. | | pagination | PrimeOnePagination | Sayfalama ayarları. | | emptyMessage | string | Veri olmadığı durumda gösterilecek yazı | | hideColumnSelect | boolean | Sütun Filtereleme componenti gizlensin mi? | | excelExport | PrimeOneExcelExport<T> | Excel dışa aktarım ayarları. Verilmezse export butonu gösterilmez. |

CustomCellTemplateContext<T>

| Alan | Tip | Açıklama | | --------- | --------------------------------------- | ---------------- | | rowData | T | Satır verileri. | | col | PrimeOneColumn<T> | Kolon bilgileri. |

CustomFilterTemplateContext<T>

| Alan | Tip | Açıklama | | -------- | --------------------------------------- | ---------------------- | | filter | any | Filtreleme fonksiyonu. | | col | PrimeOneColumn<T> | Kolon bilgileri. | | value | any | Filtreleme değeri. |

FilterType<T>

| Alan | Tip | Açıklama | | ------------- | -------------------------------------------------------------------------------- | ------------------------------- | -------------------------- | | field | string | Objenin ilgili key değeri | Filtreleme yapılacak alan. | | placeholder | string | Filtreleme placeholder'ı. | | class | string | Filtreleme elemanına ait class. | | type | 'text' 'numeric' 'date' 'boolean' 'select' 'multi-select' 'custom' | Filtreleme türü. | | options | Signal<any> | Seçim seçenekleri (varsa). | | optionValue | string | Seçim değeri (varsa). | | optionLabel | string | Seçim etiketi (varsa). |

PrimeOneExcelExport<T>

| Alan | Tip | Varsayılan | Açıklama | | --------------- | ---------------------------------------------------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------- | | hideButton | boolean | false | Hazır export butonunu gizler; dışa aktarım yalnızca exportExcel() ile tetiklenir. | | fileName | string \| (() => string) | export_<tarih>_<saat> | Dosya adı (uzantısız). | | sheetName | string | Sayfa1 | Excel sayfa adı. | | buttonLabel | string | Excel | Buton metni. | | buttonIcon | string | pi pi-file-excel | Buton ikonu. | | buttonClass | string | - | Butona ait class. | | buttonTooltip | string | - | Buton tooltip'i. | | columns | 'visible' \| 'all' | 'visible' | visible: kullanıcının kolon seçiminden geçen kolonlar, all: tüm kolonlar. | | includeFooter | boolean | false | footerRow satırlarını da dosyaya ekler. | | freezeHeader | boolean | true | Başlık satırını dondurur. | | autoFilter | boolean | true | Başlık satırına Excel filtresi ekler. | | maxRows | number | - | Güvenlik sınırı; aşılırsa dosya üretilmeden hata verilir. | | fetchAll | (request: PrimeOneExportRequest) => Observable<R> \| Promise<R> \| R | - | lazy: true için zorunlu. Sayfalanmamış veriyi döndürür. R = T[] veya { data: T[]; totalRecords?: number }. | | chunkSize | number | - | Verilirse veri backend'den bu büyüklükte parçalar halinde çekilir. | | writer | (sheet: XlsxSheet) => Promise<Blob> \| Blob | dahili XLSX yazıcısı | Dosyayı üreten katmanı değiştirir. |

PrimeOneExportRequest

| Alan | Tip | Açıklama | | --------------- | -------------------- | ---------------------------------------------------------------------------------- | | lazyLoadEvent | TableLazyLoadEvent | Tablonun güncel sıralama/filtre durumu; first ve rows istenen dilimi belirtir. | | totalRecords | number | Tablonun export anında bildirdiği toplam kayıt sayısı. | | chunkIndex | number | Parçalı çekimde 0 tabanlı parça indeksi; tek istekte her zaman 0. |

PrimeOneExportProgress

| Alan | Tip | Açıklama | | -------- | -------------------------- | ----------------------------------------------- | | phase | 'fetching' \| 'building' | Veri çekiliyor / dosya hazırlanıyor. | | loaded | number | O ana kadar toplanan satır sayısı. | | total | number | Beklenen toplam satır sayısı; bilinmiyorsa 0. |