();
export default function EmployeeList() {
const employeeColumns = employeeTableLoader.useColumns([
employeeTableLoader.createColumn({
label: 'Name',
dependencies: ["firstName", "lastName"],
renderCell: (employee) => {
return {employee.firstName} {employee.lastName}
},
}), employeeTableLoader.createColumn({
label: 'Salary',
dependencies: ["salary"],
renderCell: (employee) => employee.salary,
}), employeeTableLoader.createColumn({
label: 'Start Date',
dependencies: ["startDate"],
renderCell: (employee) => employee.startDate,
}), employeeTableLoader.createColumn({
label: 'Company',
dependencies: ["company"],
renderCell: (employee) => employee.company,
})
]);
const pagination = employeeTableLoader.useVariables();
const { data, isLoading } = trpc.employees.getPaginated.useQuery({
take: 100,
...pagination,
});
if (!data) return null;
return (
<>
>
);
}
```
--------------------------------
### Defining Sortable Columns for Query Loader (TypeScript)
Source: https://github.com/ardsh/slonik-trpc/blob/main/README.md
Explains how to define `sortableColumns` within `makeQueryLoader` using various formats (string, SQL fragment, or array) to enable sorting capabilities. It also demonstrates how to execute queries with single or multiple `orderBy` conditions.
```TypeScript
const sortableLoader = makeQueryLoader({
query,
sortableColumns: {
id: sql.fragment`users.id`,
name: "name",
// All 3 methods are acceptable as long as the specified column is accessible from the FROM query and non-ambiguous
createdAt: ["users", "created_at"]
}
});
const sortedByName = await db.any(await sortableLoader.getQuery({
orderBy: ["name", "ASC"]
}));
const sortedByNameAndDate = await db.any(await sortableLoader.getQuery({
orderBy: [["name", "DESC"], ["id", "ASC"]],
take: 5
}))
```
--------------------------------
### Using Slow Query Plugin with slonik-trpc
Source: https://github.com/ardsh/slonik-trpc/blob/main/docs/docs/usage-main-features/plugins.md
This snippet demonstrates how to integrate the `useSlowQueryPlugin` with a `makeQueryLoader` to log queries that exceed a specified `slowQueryThreshold`. It logs the query's SQL, values, and execution duration to the console.
```typescript
import { useSlowQueryPlugin } from 'slonik-trpc/utils';
const postsLoader = makeQueryLoader({
db,
plugins: [
useSlowQueryPlugin({
slowQueryThreshold: 500,
callback({ query, args, duration }) {
console.log(`Slow query executed in ${duration}ms`);
console.log(query.sql, query.values);
}
})
]
filters: postsFilter,
});
```