mirror of
https://github.com/ajnart/homarr.git
synced 2026-01-31 03:39:21 +01:00
* chore(deps): update dependency eslint to v9 * chore: migrate eslint to v9 * fix: dependency issues * fix: unit tests not working * chore: disable lint check for Image component that does not work in ci * fix: lint issue --------- Co-authored-by: homarr-renovate[bot] <158783068+homarr-renovate[bot]@users.noreply.github.com> Co-authored-by: Meier Lukas <meierschlumpf@gmail.com>
48 lines
1.3 KiB
TypeScript
48 lines
1.3 KiB
TypeScript
"use client";
|
|
|
|
import { Select } from "@mantine/core";
|
|
|
|
import { translateIfNecessary } from "@homarr/translation";
|
|
import type { stringOrTranslation } from "@homarr/translation";
|
|
import { useI18n } from "@homarr/translation/client";
|
|
|
|
import type { CommonWidgetInputProps } from "./common";
|
|
import { useWidgetInputTranslation } from "./common";
|
|
import { useFormContext } from "./form";
|
|
|
|
export type SelectOption =
|
|
| {
|
|
value: string;
|
|
label: stringOrTranslation;
|
|
}
|
|
| string;
|
|
|
|
export type inferSelectOptionValue<TOption extends SelectOption> = TOption extends {
|
|
value: infer TValue;
|
|
}
|
|
? TValue
|
|
: TOption;
|
|
|
|
export const WidgetSelectInput = ({ property, kind, options }: CommonWidgetInputProps<"select">) => {
|
|
const t = useI18n();
|
|
const tWidget = useWidgetInputTranslation(kind, property);
|
|
const form = useFormContext();
|
|
|
|
return (
|
|
<Select
|
|
label={tWidget("label")}
|
|
data={options.options.map((option) =>
|
|
typeof option === "string"
|
|
? option
|
|
: {
|
|
value: option.value,
|
|
label: translateIfNecessary(t, option.label) ?? option.value,
|
|
},
|
|
)}
|
|
description={options.withDescription ? tWidget("description") : undefined}
|
|
searchable={options.searchable}
|
|
{...form.getInputProps(`options.${property}`)}
|
|
/>
|
|
);
|
|
};
|