-
Notifications
You must be signed in to change notification settings - Fork 276
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(web-core): create usePagination composable #8267
base: master
Are you sure you want to change the base?
Conversation
const startIndex = useRouteQuery<number>(`${id}.idx`, { | ||
defaultQuery: '0', | ||
toData: value => toStartIndex(parseInt(value, 10)), | ||
toQuery: value => toStartIndex(value).toString(10), | ||
}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we put some string in url instead of numbers, it returns NaN
see : image
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In my opinion, special cases should be dealt with when they are legitimate 'for example, an invalid object ID in the URL would be legitimate if the object has been deleted meanwhile).
But replacing ?foo.idx=3
with ?foo.idx=whatever
in the URL by hand is not legitimate.
What I mean is that there will never be a case where it's possible for this to happen, other than by the voluntary action of the user.
It could be interesting to discuss this further with the rest of the team.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes I completely agree with you, but the problem for me is that visually it says NaN, so it's weird for user
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any thoughts on this @MathieuRA @pdonias @S3bastianCZ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In my opinion:
- validate/convert the query param (prefer
+n
instead ofparseInt(n, 10)
as its behavior is less surprising with strings like'42foo'
) - if the param is a valid number, use it. Otherwise behave as if the param hadn't been passed at all
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe something like this to have a fallback to 0 if the value is Nan
?
const startIndex = useRouteQuery<number>(`${id}.idx`, {
defaultQuery: '0',
toData: value => {
const parsed = parseInt(value, 10)
return isNaN(parsed) ? 0 : toStartIndex(parsed)
},
toQuery: value => toStartIndex(value).toString(10),
})
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I updated toStartIndex
to accept string | number
and to use +n
instead of using parseInt
Invalid values (NaN
) will become 0
52fada3
to
b77f0a2
Compare
Description
Introduces new
usePagination
composable allowing to separate the pagination logic from the component and allow full control over it.All the logic has been removed from the
UiTablePagination
which now only declares props, model and events.The composable takes an
id
which is used in URL and localStorage. This allows managing multiple pagination on the same page.The "show by" setting is stored in local storage. It accepts the value
-1
, which means "all records".The pagination system is based on the record index, not on "page". This allows sharing a link to a user using another "show by" value.
To simplify usage, the composable returns a
paginationBindings
object intended to be used withUiTablePagination
:The composable also returns a
seek
method, allowing to find a specific record and navigate to the page where it is.The
pageRecords
property of this composable will contain only the subset of records for the current page.Checklist
Fixes #007
,See xoa-support#42
,See https://...
)Introduced by
CHANGELOG.unreleased.md
Review process
Notes: