Skip to content

Import

import { GlobalStatus } from '@dnb/eufemia'

Description

The GlobalStatus is a complex component meant for displaying global application notifications or a summary of a form (displaying form errors, messages, etc.).

By default, the GlobalStatus is automatically connected together with the FormStatus component. This means that every form component showing a status will send the status message along to the GlobalStatus.

Relevant links

FormStatus default behavior

  1. Once a FormStatus is shown, the main GlobalStatus will show up.
  2. The page will scroll (if needed) to the dedicated GlobalStatus.
  3. Form components will send along both the status text and its label to show a good and accessible summary.
  4. Screen reader users will automatically hear the entire content of the GlobalStatus once it shows up.

Several GlobalStatus instances

Normally, you only want to have one GlobalStatus inside your application. But you can have several in parallel. Make sure you give every other one a new ID:

Code Editor
<GlobalStatus id="other-global-status" />

Where to put it

  • The GlobalStatus component should be positioned right under the header. By default, it uses main as the ID.
  • Or as a secondary summary of errors in a submit form. Keep in mind that, by default, form components like Input use the ID main. To make sure the built-in FormStatus sends the message to another GlobalStatus, you have to set the globalStatus, like:
Code Editor
<GlobalStatus id="other-global-status" />
<Input
  globalStatus={{
    id: 'other-global-status',
  }}
/>

But you can also make use of the Eufemia Provider where you can send the globalStatus to the underlying/wrapped components, like:

Code Editor
<GlobalStatus id="other-global-status" />
<Provider
  formElement={{
    globalStatus: {
      id: 'other-global-status',
    },
  }}
>
  <Input status="Message" />
</Provider>

Manual updates

Besides the automated connection between the error states of form components (FormStatus), you can update messages from anywhere in your application at any time:

NB: The GlobalStatus will autoclose by default once all messages are removed.

JavaScript (interceptor situation)

You can access and manipulate an existing GlobalStatus from outside of the React render tree.

  1. Given you have already defined a GlobalStatus in JSX:
Code Editor
<GlobalStatus id="other-global-status" />
  1. Then you can control it from within a JavaScript context whenever you need to:
Code Editor
// 1. Update / extend the status like so:

const statusOne = GlobalStatus.create({
  id: 'other-global-status',
  // or main
  status_id: 'custom-id-1',
  text: 'New Text',
  item: 'Item from status #1',
  title: 'New Title',
  show: true,
})

// 2. and removes "custom-id-1" again if needed

statusOne.update({
  text: 'Updated Text',
})

// 3. and removes "custom-id-1" again if needed
statusOne.remove()
render(<GlobalStatus id="other-global-status" />)

JSX

Code Editor
{/* 1. Place it under the header bar */}
<GlobalStatus text="Optional default text" />
{/* 2. later on, you can show a message */}
<GlobalStatus.Add
  id="custom-id"
  status_id="custom-id-1"
  title="New title"
  text="First long info text ..."
  item="Item from status #1"
  on_close={({ status_id }) => {
    console.log('on_close', status_id)
  }}
/>
{/* 3. and remove it again */}
<GlobalStatus.Remove id="custom-id" status_id="custom-id-1" />

If you need an additional GlobalStatus, define a custom ID (custom-status):

Code Editor
{/* 1. Place it somewhere in your application */}
<GlobalStatus id="custom-status" />
{/* 2. later on, you can show a message */}
<GlobalStatus.Add
  id="custom-status"
  status_id="custom-id-1"
  title="New title"
  text="First long info text ..."
  item="Item from status #1"
  on_close={({ status_id }) => {
    console.log('on_close', status_id)
  }}
/>
{/* 3. and remove it again */}
<GlobalStatus.Remove id="custom-status" status_id="custom-id-1" />