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: add validity property to form components #9210

Merged
merged 28 commits into from
Apr 30, 2024

Conversation

benelan
Copy link
Member

@benelan benelan commented Apr 27, 2024

Related issue: #9229

Summary

Add the readonly validity property to form components, which exposes the ValidityState. This allows users to set custom validation messages based on the invalid constraint. See the new validation demo for a usage example.

…lidation-apis

* origin/main: (26 commits)
  chore: release next
  fix: fix memory leak affecting components using conditionally-rendered slots (#9208)
  test(segmented-control): enable form validation tests (#9206)
  build(deps): update storybook monorepo to v8.0.9 (#9198)
  build(deps): update dependency rollup to v4.16.4 (#9190)
  build(deps): update dependency @stencil/core to v4.17.1 (#9199)
  build(deps): update typescript-eslint monorepo to v7.7.1 (#9201)
  build(deps): update amannn/action-semantic-pull-request action to v5.5.2 (#9189)
  build(deps): update dependency type-fest to v4.16.0 (#9200)
  chore: release next
  feat: ensure all components inherit font-family (#8388)
  chore: release next
  fix(slider): fix fill placement and tick styling when ranged (#9204)
  fix(combobox): update the focused chevron icon color (#9202)
  docs: add convention for property values (#9185)
  chore: restore Stencil build step prior `screenshot-tests:preview` (#9180)
  chore: release next
  fix(tree-item): do not select when chevron clicked (#9115)
  chore: release next
  fix(slider): style ticks according to the fill placement (#9196)
  ...
@benelan benelan requested a review from a team as a code owner April 27, 2024 00:49
@github-actions github-actions bot added the enhancement Issues tied to a new feature or request. label Apr 27, 2024
…onstraint-validation-apis

* benelan/radio-button-validation-message:
  chore: add form validation demo
  test(radio-button): add validation tests [WIP]
  fix(radio-button): display validation message in parent group
@benelan benelan marked this pull request as draft April 29, 2024 21:04
…lidation-apis

* origin/main:
  fix(radio-button): display validation message in parent group (#9218)
  chore: release next
  fix(chip-group): Improve programmatic Chip selection behavior (#9213)
@benelan benelan force-pushed the benelan/constraint-validation-apis branch from fddb76e to 3f2cf3c Compare April 29, 2024 21:49
@benelan benelan marked this pull request as ready for review April 30, 2024 04:06
benelan added a commit that referenced this pull request Apr 30, 2024
**Related Issue:** #9210

## Summary

Add a `calciteInvalid` event (like
[`invalid`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/invalid_event)),
which fires if a component's validation constraints aren't met during
form submission. This will make it easier to set custom validation
messages on form submission. Once #9210 lands, I'll update the new
validation demo it adds to use `calciteInvalid`.
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.

Once comments are addressed, this is good for merging! 🛬

packages/calcite-components/src/utils/form.tsx Outdated Show resolved Hide resolved
packages/calcite-components/src/utils/form.tsx Outdated Show resolved Hide resolved
packages/calcite-components/src/utils/form.tsx Outdated Show resolved Hide resolved
packages/calcite-components/src/utils/form.tsx Outdated Show resolved Hide resolved
}

// puppeteer wasn't properly serializing the validity object, so we have to do it manually
async function serializeValidityProperty(page: E2EPage, tag: string): Promise<MutableValidityState> {
Copy link
Member

Choose a reason for hiding this comment

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

Sidebar: we could extract a test util for this. 🤔💭😮❗

packages/calcite-components/src/demos/validation.html Outdated Show resolved Hide resolved
* @mdn [ValidityState](https://developer.mozilla.org/en-US/docs/Web/API/ValidityState)
*/
// eslint-disable-next-line @stencil-community/strict-mutable -- updated in form util when syncing hidden input
@Prop({ mutable: true }) validity = {
Copy link
Member

Choose a reason for hiding this comment

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

Can you define a type for this in src/components/interfaces.ts and update props?

Copy link
Member Author

Choose a reason for hiding this comment

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

Note: I used the MutableValidtyState from the form util instead of creating another one in interfaces, if that's okay

@benelan benelan requested a review from jcfranco April 30, 2024 19:09
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.

🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊
🌊🌊🛳️🛳️🛳️🌊🛳️🌊🌊🛳️🌊🛳️🛳️🛳️🌊🛳️🛳️🛳️🌊🌊🌊🌊🛳️🛳️🛳️🌊🛳️🛳️🛳️🛳️🛳️🌊🛳️🌊
🌊🛳️🌊🌊🌊🌊🛳️🌊🌊🛳️🌊🌊🛳️🌊🌊🛳️🌊🌊🛳️🌊🌊🌊🌊🛳️🌊🌊🌊🌊🛳️🌊🌊🌊🛳️🌊
🌊🌊🛳️🛳️🌊🌊🛳️🛳️🛳️🛳️🌊🌊🛳️🌊🌊🛳️🛳️🛳️🌊🌊🌊🌊🌊🛳️🌊🌊🌊🌊🛳️🌊🌊🌊🛳️🌊
🌊🌊🌊🌊🛳️🌊🛳️🌊🌊🛳️🌊🌊🛳️🌊🌊🛳️🌊🌊🌊🌊🌊🌊🌊🛳️🌊🌊🌊🌊🛳️🌊🌊🌊🌊🌊
🌊🛳️🛳️🛳️🌊🌊🛳️🌊🌊🛳️🌊🛳️🛳️🛳️🌊🛳️🌊🌊🌊🌊🌊🌊🛳️🛳️🛳️🌊🌊🌊🛳️🌊🌊🌊🛳️🌊
🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊🌊

@benelan benelan added the pr ready for visual snapshots Adding this label will run visual snapshot testing. label Apr 30, 2024
…lidation-apis

* origin/main:
  build(deps): update dependency @esri/calcite-ui-icons to v3.27.9 (#9216)
  fix(combobox, input-time-zone): improve readOnly behavior and styling (#9222)
  feat(carousel): Add Carousel and Carousel Item components (#8995)
@benelan benelan added pr ready for visual snapshots Adding this label will run visual snapshot testing. and removed pr ready for visual snapshots Adding this label will run visual snapshot testing. labels Apr 30, 2024
@benelan benelan merged commit e49902b into main Apr 30, 2024
17 checks passed
@benelan benelan deleted the benelan/constraint-validation-apis branch April 30, 2024 20:38
@github-actions github-actions bot added this to the 2024-04-30 - Apr Release milestone Apr 30, 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/calcite-design-tokens@2.1.2...@esri/calcite-design-tokens@2.2.0)
(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/eslint-plugin-calcite-components@1.1.0...@esri/eslint-plugin-calcite-components@1.2.0)
(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/calcite-components@2.7.1...@esri/calcite-components@2.8.0)
(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/calcite-components-angular@2.7.1...@esri/calcite-components-angular@2.8.0)
(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/calcite-components-react@2.7.1...@esri/calcite-components-react@2.8.0)
(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. pr ready for visual snapshots Adding this label will run visual snapshot testing.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants