Skip to content
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(pagination): add navigation methods #9154

Merged
merged 14 commits into from
Apr 24, 2024

Conversation

josercarcamo
Copy link
Contributor

Related Issue: #6344

Summary

Add methods to navigate to the first, last, and an arbitrary page.

@josercarcamo josercarcamo requested a review from a team as a code owner April 18, 2024 23:22
@github-actions github-actions bot added the enhancement Issues tied to a new feature or request. label Apr 18, 2024
…com:Esri/calcite-design-system into josercarcamo/6344-additional-nav-pagination
@jcfranco
Copy link
Member

For consistency, can we use navigation vs seek in the PR title?

@josercarcamo josercarcamo changed the title feat(pagination): add seek methods feat(pagination): add navigation methods Apr 19, 2024

/** Set the first page as active. */
@Method()
async startPage(): Promise<void> {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should these be goToStartPage and goToEndPage to match goToPage ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

stepper.tsx has them as "goToStep", "startStep", and "endStep", but I'll change them if desired.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know we don't have a ton of public methods in general so we could probably update those if needed for consistency (if we want to go that direction). cc @jcfranco (I know we had also mentioned removing the Stepper ones, so maybe that needs to be reconsidered as well).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good discussion. We should definitely be consistent, but from an API-perspective, we should use verbs for methods and nouns for properties. I see the following options:

  1. use the same name for consistency (following existing stepper ones)
  2. consolidate these into a single method with the following signature:
    goToPage(page: number | "start" |"end"): void;

We'd create a follow-up issue to revisit APIs for consistency regardless.

I'm kind of leaning towards 2 since it introduces a single method, it is named as a verb, it is concise, and is flexible.

Sidebar, I think we can close #6134. I don't see anything wrong with the convenience methods.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we really even need Page? The component is pagination. Seems kind of repetitive to have Page in there.

pagination.goTo("start") seems sufficient, no?

or pagination.page("start")??? Since the act of using the component is paging?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do prefer a single method vs end(), start(), etc.

Copy link
Contributor Author

@josercarcamo josercarcamo Apr 22, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jcfranco what should I do regarding the following:

  1. What @driskull commented above
  2. Should the method return something when the page requested is out of range? I was thinking "true" when successful and "false" if not?
  3. Also, @macandcheese asked "what if the last / first item is already active and a goToPage call is made to the same item?"

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Good idea. We can drop Page.
  2. What's the use case? Alternatively, we can clamp to the closest if the requested page is beyond the range.
  3. That'd be a noop, methinks.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For 2, it would be, for example, if there are only 10 pages but the caller requests page 12. Similarly, if somehow the user requests page 0.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it should throw an error or log a warning and clamp the value to its limits?

@josercarcamo
Copy link
Contributor Author

@driskull @jcfranco @macandcheese one more review please.

Copy link
Member

@driskull driskull left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🌞 Awesome! 👏

@driskull
Copy link
Member

@josercarcamo since this PR doesn't affect styles, we can add the label "skip visual snapshots" and the screener tests won't be required.

Copy link
Member

@jcfranco jcfranco left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢
🔢📄📄📄📄🔢📄🔢🔢🔢🔢🔢📄🔢📄📄📄📄🔢🔢📄📄📄🔢🔢📄📄🔢🔢📄🔢🔢🔢📄🔢📄📄📄📄🔢📄🔢
🔢📄🔢🔢📄🔢📄🔢🔢🔢🔢🔢📄🔢📄🔢🔢🔢🔢📄🔢🔢🔢🔢📄🔢🔢📄🔢📄📄🔢📄📄🔢📄🔢🔢🔢🔢📄🔢
🔢📄📄📄📄🔢📄🔢🔢📄🔢🔢📄🔢📄📄📄🔢🔢🔢📄📄🔢🔢📄🔢🔢📄🔢📄🔢📄🔢📄🔢📄📄📄🔢🔢📄🔢
🔢📄🔢🔢📄🔢📄🔢📄🔢📄🔢📄🔢📄🔢🔢🔢🔢🔢🔢🔢📄🔢📄🔢🔢📄🔢📄🔢🔢🔢📄🔢📄🔢🔢🔢🔢🔢🔢
🔢📄🔢🔢📄🔢🔢📄🔢🔢🔢📄🔢🔢📄📄📄📄🔢📄📄📄🔢🔢🔢📄📄🔢🔢📄🔢🔢🔢📄🔢📄📄📄📄🔢📄🔢
🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢🔢

@geospatialem
Copy link
Member

The doc addition LGTM 👍🏻 and it is in alignment with other similar methods, such as stepper. 🚀

/**
* Set a specified `calcite-stepper-item` as active.
*

@josercarcamo josercarcamo added the skip visual snapshots Pull requests that do not need visual regression testing. label Apr 24, 2024
@josercarcamo josercarcamo merged commit 5ca6a5f into main Apr 24, 2024
14 checks passed
@josercarcamo josercarcamo deleted the josercarcamo/6344-additional-nav-pagination branch April 24, 2024 20:10
@github-actions github-actions bot added this to the 2024-04-30 - Apr Release milestone Apr 24, 2024
geospatialem pushed a commit that referenced this pull request May 1, 2024
🤖 I have created a release *beep* *boop*
---


<details><summary>@esri/calcite-design-tokens: 2.2.0</summary>

##
[2.2.0](https://github.com/Esri/calcite-design-system/compare/@esri/[email protected]...@esri/[email protected])
(2024-04-30)


### Features

* Ensure all components inherit font-family
([#8388](#8388))
([90f8923](90f8923))
</details>

<details><summary>@esri/eslint-plugin-calcite-components:
1.2.0</summary>

##
[1.2.0](https://github.com/Esri/calcite-design-system/compare/@esri/[email protected]...@esri/[email protected])
(2024-04-30)


### Features

* **enforce-ref-last-prop:** Add fixer
([#8671](#8671))
([688bc51](688bc51))


### Bug Fixes

* **slider:** Improve snapping + step logic
([#8169](#8169))
([8b83042](8b83042))
</details>

<details><summary>@esri/calcite-components: 2.8.0</summary>

##
[2.8.0](https://github.com/Esri/calcite-design-system/compare/@esri/[email protected]...@esri/[email protected])
(2024-04-30)


### Features

* Add calciteInvalid event for form validation
([#9211](#9211))
([a504508](a504508))
* Add validity property to form components
([#9210](#9210))
([e49902b](e49902b))
* **carousel:** Add Carousel and Carousel Item components
([#8995](#8995))
([b1ba428](b1ba428))
* **enforce-ref-last-prop:** Add fixer
([#8671](#8671))
([688bc51](688bc51))
* Ensure all components inherit font-family
([#8388](#8388))
([90f8923](90f8923))
* **input-time-zone:** Add readonly support
([#9111](#9111))
([153a122](153a122))
* **input-time-zone:** Allow clearing value
([#9168](#9168))
([193bb7d](193bb7d))
* **list-item-group:** Update list item group styles
([#9072](#9072))
([c734849](c734849))
* **navigation-logo:** Add heading level
([#9054](#9054))
([c2beba8](c2beba8))
* **pagination:** Add navigation methods
([#9154](#9154))
([5ca6a5f](5ca6a5f))
* **slider:** Add support for custom label formatting
([#9179](#9179))
([710d1ee](710d1ee))
* **slider:** Allow configuring fill behavior
([#9170](#9170))
([1b2cdbf](1b2cdbf))
* **tile, tile-group:** Support single, multi, single-persist, none
selection modes and icon and border selection appearances
([#9159](#9159))
([2d77470](2d77470))


### Bug Fixes

* **action:** Maintain equal height when text is not enabled in a small
scale
([#9051](#9051))
([407824a](407824a))
* **chip-group:** Improve programmatic Chip selection behavior
([#9213](#9213))
([b7a4c77](b7a4c77))
* **combobox:** Update the focus and hover chevron icon color
([#9187](#9187))
([a1317da](a1317da))
* **combobox, input-time-zone:** Improve readOnly behavior and styling
([#9222](#9222))
([606d80f](606d80f))
* **combobox:** Fix aria-role for proper voiceover support
([#9039](#9039))
([eebe8ca](eebe8ca))
* **combobox:** Update the focused chevron icon color
([#9202](#9202))
([27ac02d](27ac02d))
* **date-picker:** Ensure `proximitySelectionDisabled` resets range on
post-range-commit selection
([#9171](#9171))
([f466b14](f466b14))
* **date-picker:** Restore focus on date when navigating month with
arrow/page keys
([#9063](#9063))
([db109e0](db109e0))
* Fix memory leak affecting components using conditionally-rendered
slots
([#9208](#9208))
([28701b6](28701b6))
* **input-date-picker:** Update the focus and hover chevron icon color
([#9146](#9146))
([ca895e9](ca895e9))
* **input-time-zone:** Ensure selected item is properly displayed when
there are other items with the same offset
([#9134](#9134))
([1f94903](1f94903))
* **input, input-number, input-text, input-date-picker,
input-time-picker, filter, menu-item:** Ignore canceled events and
enforce cancellations where needed
([#8952](#8952))
([d0fa977](d0fa977))
* **list, list-item, list-item-group:** Improve drag experience by
indenting items
([#9169](#9169))
([88aab49](88aab49))
* **list, list-item:** Support keyboard sorting in screen readers
([#9038](#9038))
([b2e1b9b](b2e1b9b))
* **list:** Closed list-items no longer render extra space
([#9031](#9031))
([3985004](3985004))
* **panel:** Support cancelling the esc key event to prevent closing a
panel
([#9032](#9032))
([ecfa5f1](ecfa5f1))
* **preset:** Update the focus outline color
([#9098](#9098))
([725f47c](725f47c))
* **radio-button:** Display validation message in parent group
([#9218](#9218))
([b1e869f](b1e869f))
* **select:** Update the focus and hover chevron icon color and select
focus and hover background color
([#9160](#9160))
([b187340](b187340))
* **slider:** Fix fill placement and tick styling when ranged
([#9204](#9204))
([a84d831](a84d831))
* **slider:** Improve snapping + step logic
([#8169](#8169))
([8b83042](8b83042))
* **slider:** Rename `highlightPlacement` to `fillPlacement`
([#9195](#9195))
([9e5a713](9e5a713))
* **slider:** Style ticks according to the fill placement
([#9196](#9196))
([5eb4e10](5eb4e10))
* **stepper-item:** Remove delay in highlighting item
([#8996](#8996))
([bcf23dd](bcf23dd))
* **tree-item:** Do not select when chevron clicked
([#9115](#9115))
([99ad8f1](99ad8f1))


### Dependencies

* The following workspace dependencies were updated
  * devDependencies
    * @esri/calcite-design-tokens bumped from ^2.2.0-next.0 to ^2.2.0
* @esri/eslint-plugin-calcite-components bumped from ^1.2.0-next.1 to
^1.2.0
</details>

<details><summary>@esri/calcite-components-angular: 2.8.0</summary>

##
[2.8.0](https://github.com/Esri/calcite-design-system/compare/@esri/[email protected]...@esri/[email protected])
(2024-04-30)


### Miscellaneous Chores

* **@esri/calcite-components-angular:** Synchronize components versions


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @esri/calcite-components bumped from ^2.8.0-next.20 to ^2.8.0
</details>

<details><summary>@esri/calcite-components-react: 2.8.0</summary>

##
[2.8.0](https://github.com/Esri/calcite-design-system/compare/@esri/[email protected]...@esri/[email protected])
(2024-04-30)


### Miscellaneous Chores

* **@esri/calcite-components-react:** Synchronize components versions


### Dependencies

* The following workspace dependencies were updated
  * dependencies
    * @esri/calcite-components bumped from ^2.8.0-next.20 to ^2.8.0
</details>

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement Issues tied to a new feature or request. skip visual snapshots Pull requests that do not need visual regression testing.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants