buuntu / react-final-table Goto Github PK
View Code? Open in Web Editor NEWReact hooks for headless table components
License: MIT License
React hooks for headless table components
License: MIT License
Hi,
Can I use this library for manual pagination with async data ?
It would be useful to be able to define which direction you want to sort the column by.
toggleSort('columnName') // Sort flip flip
toggleSort('columnName', false) // Sort DESC
toggleSort('columnName', true) // Sort ASC
Great library, I definitely appreciate that this has been fully written in TypeScript.
I recently tried adding an actions column to my table but was unable because the row data must have the column name present. My workaround for this involves passing a null
value to the column name. While this isn't a show-stopper by any means, I think it would be more appropriate to allow column fields to not be present.
I noticed that this line is where the check for the column name is present.
react-final-table/src/hooks.tsx
Line 384 in 3bb860f
Another solution I would like to propose would involve adding a excludedColumns
field that would allow us to explicitly define which columns we would like to pass the check.
const sortDataInOrder = <T extends DataType>(
data: T[],
columns: ColumnType<T>[],
excludedColumns: string[],
): T[] => {
return data.map((row: any) => {
const newRow: any = {};
columns.forEach(column => {
if (!(column.name in row) && excludedColumns.indexOf(column.name) === -1) {
throw new Error(`Invalid row data, ${column.name} not found or was not defined in excludedColumns`);
}
newRow[column.name] = row[column.name];
});
return newRow;
});
};
I am more than happy to contribute a PR to add this functionality.
Please enable the Discussions feature for more free form discussions/ideas without cluttering the Issues Tab with questions/comments/ideas/discussions.
Hello! ๐๐ผ
Just started to look into this lib and noticed some various low-hanging fruit for improvements. The first of which would be sorting.
Currently, you allow for a custom sort(compare) function to be passed in via the column. This is a great first step for allowing customization in sorting.
There are 2 things that I see that could be improved.
const columnCompareFn = column.sort || byTextAscending((object) => object.original[action.columnName]);
.sort(column.sort).reverse()
. This could be implemented in a single pass by inverting the returned number. ie:data.sort((a, b) => {
const result = compareFn(a, b);
return isAscending ? result : result * -1;
})
Perf test: https://jsbench.me/45kmfbx99h/1
Another thing I had thought about was providing isAscending
as an option to the compareFn to allow the user to handle that as they please.
data.sort((a, b) => compareFn(a, b, isAscending))
Look forward to discussing this further and hearing your feedback @Buuntu! I'm more than happy to submit PRs for any of the changes.
/cc @cfsdfields
Seems like the package.json
version is not updating properly.
Currently released version is v1.5.1
package.json
version is v1.4.2
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.