mirror of
https://github.com/ajnart/homarr.git
synced 2026-01-31 11:49:14 +01:00
* fix(deps): update dependency @tabler/icons-react to v3 * fix: type issues caused by removal of TablerIconProps --------- Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com> Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
147 lines
5.4 KiB
Markdown
147 lines
5.4 KiB
Markdown
# Spotlight
|
|
|
|
Spotlight is the search functionality of Homarr. It can be opened by pressing `Ctrl + K` or `Cmd + K` on Mac. It is a quick way to search for anything in Homarr.
|
|
|
|
## API
|
|
|
|
### SpotlightActionData
|
|
|
|
The [SpotlightActionData](./src/type.ts) is the data structure that is used to define the actions that are shown in the spotlight.
|
|
|
|
#### Common properties
|
|
|
|
| Name | Type | Description |
|
|
| ------------------------------ | ------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
|
|
| id | `string` | The id of the action. |
|
|
| title | `string \| (t: TranslationFunction) => string` | The title of the action. Either static or generated with translation function |
|
|
| description | `string \| (t: TranslationFunction) => string` | The description of the action. Either static or generated with translation function |
|
|
| icon | `string \| TablerIcon` | The icon of the action. Either a url to an image or a TablerIcon |
|
|
| group | `string` | The group of the action. By default the groups all, web and action exist. |
|
|
| ignoreSearchAndOnlyShowInGroup | `boolean` | If true, the action will only be shown in the group and not in the search results. |
|
|
| type | `'link' \| 'button'` | The type of the action. Either link or button |
|
|
|
|
#### Properties for links
|
|
|
|
| Name | Type | Description |
|
|
| ---- | -------- | ---------------------------------------------------------------------------------------------------------- |
|
|
| href | `string` | The url the link should navigate to. If %s is contained it will be replaced with the current search query. |
|
|
|
|
#### Properties for buttons
|
|
|
|
| Name | Type | Description |
|
|
| ------- | -------------------------- | ----------------------------------------------------------------------------------------- |
|
|
| onClick | `() => MaybePromise<void>` | The function that should be called when the button is clicked. It can be async if needed. |
|
|
|
|
### useRegisterSpotlightActions
|
|
|
|
The [useRegisterSpotlightActions](./src/data-store.ts) hook is used to register actions to the spotlight. It takes an unique key and the array of [SpotlightActionData](#SpotlightActionData).
|
|
|
|
#### Usage
|
|
|
|
The following example shows how to use the `useRegisterSpotlightActions` hook to register an action to the spotlight.
|
|
|
|
```tsx
|
|
"use client";
|
|
|
|
import { useRegisterSpotlightActions } from "@homarr/spotlight";
|
|
|
|
const MyComponent = () => {
|
|
useRegisterSpotlightActions("my-component", [
|
|
{
|
|
id: "my-action",
|
|
title: "My Action",
|
|
description: "This is my action",
|
|
icon: "https://example.com/icon.png",
|
|
group: "web",
|
|
type: "link",
|
|
href: "https://example.com",
|
|
},
|
|
]);
|
|
|
|
return <div>My Component</div>;
|
|
};
|
|
```
|
|
|
|
##### Using translation function
|
|
|
|
```tsx
|
|
"use client";
|
|
|
|
import { useRegisterSpotlightActions } from "@homarr/spotlight";
|
|
|
|
const MyComponent = () => {
|
|
useRegisterSpotlightActions("my-component", [
|
|
{
|
|
id: "my-action",
|
|
title: (t) => t("some.path.to.translation.key"),
|
|
description: (t) => t("some.other.path.to.translation.key"),
|
|
icon: "https://example.com/icon.png",
|
|
group: "web",
|
|
type: "link",
|
|
href: "https://example.com",
|
|
},
|
|
]);
|
|
|
|
return <div>Component implementation</div>;
|
|
};
|
|
```
|
|
|
|
##### Using TablerIcon
|
|
|
|
```tsx
|
|
"use client";
|
|
|
|
import { IconUserCog } from "tabler-react";
|
|
|
|
import { useRegisterSpotlightActions } from "@homarr/spotlight";
|
|
|
|
const UserMenu = () => {
|
|
useRegisterSpotlightActions("header-user-menu", [
|
|
{
|
|
id: "user-preferences",
|
|
title: (t) => t("user.preferences.title"),
|
|
description: (t) => t("user.preferences.description"),
|
|
icon: IconUserCog,
|
|
group: "action",
|
|
type: "link",
|
|
href: "/user/preferences",
|
|
},
|
|
]);
|
|
|
|
return <div>Component implementation</div>;
|
|
};
|
|
```
|
|
|
|
##### Using dependency array
|
|
|
|
```tsx
|
|
"use client";
|
|
|
|
import { IconUserCog } from "tabler-react";
|
|
|
|
import { useRegisterSpotlightActions } from "@homarr/spotlight";
|
|
|
|
const ColorSchemeButton = () => {
|
|
const { colorScheme, toggleColorScheme } = useColorScheme();
|
|
|
|
useRegisterSpotlightActions(
|
|
"toggle-color-scheme",
|
|
[
|
|
{
|
|
id: "toggle-color-scheme",
|
|
title: (t) => t("common.colorScheme.toggle.title"),
|
|
description: (t) =>
|
|
t(`common.colorScheme.toggle.${colorScheme}.description`),
|
|
icon: colorScheme === "light" ? IconSun : IconMoon,
|
|
group: "action",
|
|
type: "button",
|
|
onClick: toggleColorScheme,
|
|
},
|
|
],
|
|
[colorScheme],
|
|
);
|
|
|
|
return <div>Component implementation</div>;
|
|
};
|
|
```
|