@blocklet/ui-react
Version:
Some useful front-end web components that can be used in Blocklets.
136 lines (99 loc) • 5.29 kB
Markdown
# Utilities
This section provides documentation for a collection of helper components, Higher-Order Components (HOCs), and utility functions. These tools are designed to simplify common development tasks, manage application themes, and handle complex data structures.
The primary utilities available are:
<x-cards data-columns="2">
<x-card data-title="Icon Component" data-icon="lucide:image" data-href="/components/utilities/icon">
A versatile component for displaying icons from various sources, including Iconify, image URLs, or as letter avatars.
</x-card>
<x-card data-title="OverridableThemeProvider" data-icon="lucide:palette">
A theme provider that allows developers to supply their own theme object to override the default Blocklet UI theme.
</x-card>
<x-card data-title="withHideWhenEmbed HOC" data-icon="lucide:eye-off">
A Higher-Order Component that conditionally renders a component, hiding it when the application is in an embedded mode.
</x-card>
<x-card data-title="JavaScript Helpers" data-icon="lucide:function-square">
A suite of standalone functions for tasks such as recursive array manipulation, URL validation, and path matching.
</x-card>
</x-cards>
For a detailed guide on the `Icon` component, please see its dedicated documentation page. The other utilities are documented below.
## OverridableThemeProvider
This component is a wrapper around Material-UI's `ThemeProvider`. It allows you to apply a consistent theme to its child components. By default, it uses the standard Blocklet UI theme, but you can provide a custom theme object via the `theme` prop to override the default styles.
### Usage
To apply a custom theme, pass a theme object to the `theme` prop. The component will merge your overrides with the default theme.
```javascript Theme Provider Example icon=logos:javascript
import OverridableThemeProvider from '@blocklet/ui-react/lib/common/overridable-theme-provider';
import { Button } from '@mui/material';
const customTheme = {
palette: {
primary: {
main: '#ff5722',
},
},
};
function App() {
return (
<OverridableThemeProvider theme={customTheme}>
<Button color="primary" variant="contained">
Custom Themed Button
</Button>
</OverridableThemeProvider>
);
}
```
## withHideWhenEmbed
`withHideWhenEmbed` is a Higher-Order Component (HOC) that prevents a component from rendering if the application is in "embed mode." It checks a session storage key (`EMBED_MODE_KEY`) to determine the current mode. If the value is `1`, the wrapped component will return `null`.
This is useful for hiding elements like headers or footers in an embedded context where they are not needed.
### Usage
Wrap the component you wish to conditionally hide with the `withHideWhenEmbed` HOC.
```javascript HOC Example icon=logos:javascript
import withHideWhenEmbed from '@blocklet/ui-react/lib/libs/with-hide-when-embed';
function PageHeader() {
return (
<header>
<h1>My Application</h1>
</header>
);
}
const MaybeHiddenHeader = withHideWhenEmbed(PageHeader);
function App() {
return (
<div>
<MaybeHiddenHeader />
<main>
{/* Main content goes here */}
</main>
</div>
);
}
```
## Helper Functions
A set of pure JavaScript functions are available for common data manipulation and validation tasks. These can be imported directly from the library's utility module.
### Array Manipulation
These functions are designed to work with arrays of nested objects, such as navigation menus or file trees.
| Function | Description |
| --- | --- |
| `mapRecursive(array, fn, childrenKey = 'children')` | Recursively applies a function to each item in a nested array. |
| `flatRecursive(array, childrenKey = 'children')` | Flattens a nested array into a single-level array. |
| `countRecursive(array, childrenKey = 'children')` | Counts the total number of items in a nested array. |
| `filterRecursive(array, predicate, childrenKey = 'children')` | Recursively filters a nested array based on a predicate function, preserving parent structure if children match. |
### String & URL Validation
Simple helpers for checking string formats.
| Function | Description |
| --- | --- |
| `isUrl(str)` | Returns `true` if the string starts with `http://` or `https://`. |
| `isMailProtocol(str)` | Returns `true` if the string starts with `mailto:`. |
### Routing
Utilities to assist with client-side routing logic.
| Function | Description |
| --- | --- |
| `matchPath(path)` | Checks if a given path matches the current `window.location.pathname`. |
| `matchPaths(paths)` | Finds the best matching path from an array of paths against the current location. |
### Layout
| Function | Description |
| --- | --- |
| `splitNavColumns(items, options)` | Splits a list of navigation items into a specified number of columns, useful for creating mega menus. |
---
### Summary
This section provided an overview of the general-purpose utilities included in the library. For more powerful, specialized functionality, proceed to the detailed documentation for individual components.
For a comprehensive guide on using the flexible `Icon` component, please refer to the next section.
- **[Icon](./components-utilities-icon.md)**