Terra Application Utility
The Terra Application Utility library, currently at version 2.60.1, provides React components specifically designed for disclosing utility menus within applications built using the Cerner Terra design system. It offers two distinct versions: a 'header' variant for integration with `terra-application-header-layout` and a 'menu' variant for use with `terra-application-menu-layout`. This structured approach ensures consistent UI patterns and behaviors for common application functionalities such as user settings, help, notifications, or profile management. While a specific release cadence is not detailed in the provided documentation, the package's versioning indicates active development and maintenance within the broader Terra framework. Its key differentiator is its tight integration into the Terra ecosystem, providing pre-styled and functional components that adhere to Cerner's established design language and accessibility standards, reducing development overhead for Terra-based applications.
Common errors
-
Module not found: Can't resolve 'terra-application-utility'
cause The package `terra-application-utility` has not been installed or is misspelled.fixRun `npm install terra-application-utility` or `yarn add terra-application-utility` to install the package. -
TypeError: Cannot read properties of undefined (reading 'Header')
cause The default import for `terra-application-utility` is undefined, likely due to an incorrect import statement, or the package failed to load.fixEnsure you are importing `ApplicationUtility` as a default import: `import ApplicationUtility from 'terra-application-utility';` and that the package is correctly installed. -
Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: undefined.
cause This often occurs in React if a component is imported incorrectly or is undefined at runtime. For `terra-application-utility`, it could mean `ApplicationUtility` itself or its sub-components (`.Header`, `.Menu`) are not correctly resolved.fixVerify that `terra-application-utility` is installed, and your import statement for `ApplicationUtility` is correct. Also, ensure you are accessing `.Header` or `.Menu` as properties of the default `ApplicationUtility` import, not as named exports.
Warnings
- gotcha Terra components, including Application Utility, are designed to work within the broader Terra Framework. Using them in isolation without the correct layout components (e.g., `terra-application-header-layout` or `terra-application-menu-layout`) may lead to unexpected styling or functional issues.
- breaking As a component within the Terra Framework, major version updates of `terra-application-utility` or its peer dependencies (like React or `react-intl`) may introduce breaking changes. Always review the release notes for the Terra Framework and individual component packages when upgrading major versions.
Install
-
npm install terra-application-utility -
yarn add terra-application-utility -
pnpm add terra-application-utility
Imports
- ApplicationUtility
const ApplicationUtility = require('terra-application-utility');import ApplicationUtility from 'terra-application-utility';
- ApplicationUtility.Header
import { Header } from 'terra-application-utility';import ApplicationUtility from 'terra-application-utility'; // ... inside JSX: <ApplicationUtility.Header />
- ApplicationUtility.Menu
import { Menu } from 'terra-application-utility';import ApplicationUtility from 'terra-application-utility'; // ... inside JSX: <ApplicationUtility.Menu />
Quickstart
import React, { useState } from 'react';
import ApplicationUtility from 'terra-application-utility';
import Button from 'terra-button'; // Assuming terra-button for demonstration
const MyUtilityMenu = () => {
const [isOpen, setIsOpen] = useState(false);
const handleToggle = () => {
setIsOpen(!isOpen);
};
const handleClose = () => {
setIsOpen(false);
};
return (
<ApplicationUtility.Menu
id="my-app-utility-menu"
variant="menu"
isOpen={isOpen}
title="User Menu"
onChange={handleToggle}
onClose={handleClose}
button={(<Button onClick={handleToggle} text="Open User Menu" />)}
>
{/* Example utility items */}
<div style={{ padding: '15px' }}>
<div>Settings</div>
<div>Help</div>
<div onClick={() => alert('Logged out!')}>Logout</div>
</div>
</ApplicationUtility.Menu>
);
};
export default MyUtilityMenu;