FormError
FormError can be used in partnership with inputs to provide feedback on validation errors.
The Basics
What it is
FormError is an alert that displays a message to draw attention to a particular error on an input. This should always be used with an input like component (ex. multi field) and should not be used as a standalone error.
How it works
-
FormError appears under the input that generated it
-
FormError should have a description of how to resolve the error
When to use
-
To add an error to an input like component that does not have an existing error prop
-
To request additional information from the user to resolve a validation conflict
When not to use
-
For components that already support errors with built in props (ex. Input)
-
For general alerts or banners
What to use instead
FormError is part of FormField by default
Use Banner for more visible, page level alerts.
Use InlineAlert for lower-level notifications or to draw attention to an element on the page.
How to use
FormError should only be used in conjunction with an input component and should follow the same locations as it is used in [FormField]. FormError takes an error message (see Content below for guidance) and an alert type. For deciding alert type please refer to [AlertTypes].
Style
Design details
Placement and hierarchy
FormError should always be placed immediately below or to the right of the generating input.
Content
Error message
FormField’s error message should be short, clear, specific, and easy to understand. The message should describe the problem. For example:
-
“Patient name is required”
-
“Email address should be in this format: name@domain.com”
-
“This file is too big to upload (maximum size is 25 MB)”
For help writing error messages, see Content Guide.
Demos
Coding
Developer tips
[“Developer tips” body text]
Repository
Implementation links
FormError directory in Bitbucket
Implementation details
It is strongly recommended to familiarize yourself with the Forge source code. While this documentation is a best effort to document the intent and usage of a component, sometimes some features only become clear when looking at the source code. Also, looking at Forge's source code may help identify and fix bugs in either your application or Forge itself.
Storybook files
Forge maintains at least one storybook file per component. While the primary audience for these files is typically the Forge team, these storybook files may cover usages of the component not covered by a demo. The storybook for the latest version of forge can be found at go/forge-storybook-lts.
Testing library
Forge strongly encourages using testing-library to write tests for your application.
"The more your tests resemble the way your software is used, the more confidence they can give you."
If you're having trouble testing a Forge component using testing-library, it would be a good idea to see how Forge tests its own components. For the most part, Forge tries to use screen.getByRole as much as it can, as that API provides the best feedback on a11y compliance. Forge discourages the use of document.querySelector and screen.getByTestId as both APIs encourage using implementation details to test your component, and discourage adding roles to your component.
With that being said, many of Forge's components were not built with accessibility in mind. These components do break the recommendations listed above.
Import statements
In Nimbus applications
athenaOne serves the Forge bundle independently from your application's bundle. Importing Forge components directly from '@athena/forge'
takes advantage of this feature.
import { FormError } from '@athena/forge'
In standalone applications
Importing components using the exact path to the module takes advantage of webpack's tree shaking feature. Webpack will include only that module and its dependencies.
import FormError from '@athena/forge/FormError';
To use this import guidance, Typescript applications must use typescript >= 4.7.3
, and should add this setting to their tsconfig.json file:
{"compilerOptions": {"moduleResolution": "Node16",}}
If this setting doesn't work for your application, use this import statement instead:
import FormError from '@athena/forge/dist/FormError';