/*
* Copyright (c) 2021 - 2024, Ludvig Lundgren and the autobrr contributors.
* SPDX-License-Identifier: GPL-2.0-or-later
*/
import { JSX } from "react";
import { Field as FormikField } from "formik";
import Select from "react-select";
import { Field, Label, Description } from "@headlessui/react";
import type { FieldProps, FieldValidator } from "formik";
import { classNames } from "@utils";
import { useToggle } from "@hooks/hooks";
import { EyeIcon, EyeSlashIcon } from "@heroicons/react/24/solid";
import { SelectFieldProps } from "./select";
import { DocsTooltip } from "@components/tooltips/DocsTooltip";
import { Checkbox } from "@components/Checkbox";
import {
DropdownIndicator,
ErrorField, IndicatorSeparator,
RequiredField,
SelectControl,
SelectInput,
SelectMenu,
SelectOption
} from "@components/inputs/common.tsx";
interface TextFieldWideProps {
name: string;
label?: string;
help?: string;
placeholder?: string;
defaultValue?: string;
required?: boolean;
disabled?: boolean;
autoComplete?: string;
hidden?: boolean;
tooltip?: JSX.Element;
validate?: FieldValidator;
}
export const TextFieldWide = ({
name,
label,
help,
placeholder,
defaultValue,
required,
disabled,
autoComplete,
tooltip,
hidden,
validate
}: TextFieldWideProps) => (
{({ field, meta }: FieldProps) => (
)}
{help && (
{help}
)}
);
interface PasswordFieldWideProps {
name: string;
label?: string;
placeholder?: string;
defaultValue?: string;
help?: string;
required?: boolean;
autoComplete?: string;
defaultVisible?: boolean;
tooltip?: JSX.Element;
validate?: FieldValidator;
}
export const PasswordFieldWide = ({
name,
label,
placeholder,
defaultValue,
help,
required,
autoComplete,
defaultVisible,
tooltip,
validate
}: PasswordFieldWideProps) => {
const [isVisible, toggleVisibility] = useToggle(defaultVisible);
return (
{({ field, meta }: FieldProps) => (
)}
{help && (
{help}
)}
);
};
interface NumberFieldWideProps {
name: string;
label?: string;
help?: string;
placeholder?: string;
defaultValue?: number;
required?: boolean;
tooltip?: JSX.Element;
}
export const NumberFieldWide = ({
name,
label,
placeholder,
help,
defaultValue,
tooltip,
required
}: NumberFieldWideProps) => (
{({ field, meta, form }: FieldProps) => (
{ form.setFieldValue(field.name, parseInt(e.target.value)); }}
className={classNames(
meta.touched && meta.error
? "border-red-500 focus:ring-red-500 focus:border-red-500"
: "border-gray-300 dark:border-gray-700 focus:ring-blue-500 dark:focus:ring-blue-500 focus:border-blue-500 dark:focus:border-blue-500",
"block w-full shadow-sm sm:text-sm rounded-md border py-2.5 bg-gray-100 dark:bg-gray-850 dark:text-gray-100"
)}
onWheel={(event) => {
if (event.currentTarget === document.activeElement) {
event.currentTarget.blur();
setTimeout(() => event.currentTarget.focus(), 0);
}
}}
placeholder={placeholder}
/>
)}
{help && (
{help}
)}
);
interface SwitchGroupWideProps {
name: string;
label: string;
description?: string;
defaultValue?: boolean;
className?: string;
tooltip?: JSX.Element;
}
export const SwitchGroupWide = ({
name,
label,
description,
tooltip,
defaultValue
}: SwitchGroupWideProps) => (
{description && (
{description}
)}
{({
field,
form: { setFieldValue }
}: FieldProps) => (
{
setFieldValue(field?.name ?? "", value);
}}
/>
)}
);
export const SelectFieldWide = ({
name,
label,
optionDefaultText,
tooltip,
options
}: SelectFieldProps) => (
{({
field,
form: { setFieldValue }
}: FieldProps) => (
);