import { ChangeDetectionStrategy, Component, signal } from '@angular/core';
import {
OrbitTableDirective,
createDefaultOrbitTableQuery,
type OrbitTableColumn,
type OrbitTableQuery
} from '@ng-orbit/table';
import { OrbitTableRenderPlainComponent } from '@ng-orbit/table-render-plain';
interface UserRow {
id: number;
fullName: string;
email: string;
}
@Component({
standalone: true,
imports: [OrbitTableDirective, OrbitTableRenderPlainComponent],
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
<section
orbitTable
#table="orbitTable"
[rows]="rows()"
[columns]="columns"
[total]="total()"
[loading]="loading()"
[error]="error()"
[query]="query()"
[getRowId]="getRowId"
(orbitTableQueryChange)="onQueryChange($event)"
>
<orbit-table-render-plain [table]="table" />
</section>
`
})
export class UsersTableComponent {
readonly query = signal(createDefaultOrbitTableQuery());
readonly rows = signal<readonly UserRow[]>([]);
readonly total = signal(0);
readonly loading = signal(false);
readonly error = signal<unknown | null>(null);
readonly columns: readonly OrbitTableColumn<UserRow>[] = [
{ id: 'fullName', header: 'Name', accessor: (row) => row.fullName, sortable: true },
{ id: 'email', header: 'Email', accessor: (row) => row.email, sortable: true }
];
readonly getRowId = (row: UserRow) => row.id;
onQueryChange(query: OrbitTableQuery): void {
this.query.set(query);
this.fetchUsers(query);
}
private fetchUsers(query: OrbitTableQuery): void {
}
}