import type { FieldProps, FieldValidator } from "formik";
import { Field } from "formik";
import { classNames } from "../../utils";
import { useToggle } from "../../hooks/hooks";
import { EyeIcon, EyeSlashIcon } from "@heroicons/react/24/solid";
import { Switch } from "@headlessui/react";
import { ErrorField, RequiredField } from "./common";
import Select, { components, ControlProps, InputProps, MenuProps, OptionProps } from "react-select";
import { SelectFieldProps } from "./select";
import { CustomTooltip } from "../tooltips/CustomTooltip";
interface TextFieldWideProps {
name: string;
label?: string;
help?: string;
placeholder?: string;
defaultValue?: string;
required?: boolean;
hidden?: boolean;
tooltip?: JSX.Element;
validate?: FieldValidator;
}
export const TextFieldWide = ({
name,
label,
help,
placeholder,
defaultValue,
required,
tooltip,
hidden,
validate
}: TextFieldWideProps) => (
{({ field, meta }: FieldProps) => (
)}
{help && (
{help}
)}
);
interface PasswordFieldWideProps {
name: string;
label?: string;
placeholder?: string;
defaultValue?: string;
help?: string;
required?: boolean;
defaultVisible?: boolean;
tooltip?: JSX.Element;
validate?: FieldValidator;
}
export const PasswordFieldWide = ({
name,
label,
placeholder,
defaultValue,
help,
required,
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
? "focus:ring-red-500 focus:border-red-500 border-red-500"
: "focus:ring-blue-500 dark:focus:ring-blue-500 focus:border-blue-500 dark:focus:border-blue-500 border-gray-300 dark:border-gray-700",
"block w-full shadow-sm dark:bg-gray-800 sm:text-sm dark:text-white rounded-md"
)}
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) => (
{label} {tooltip && ({tooltip})}
{description && (
{description}
)}
{({ field, form }: FieldProps) => (
{
form.setFieldValue(field?.name ?? "", value);
}}
className={classNames(
field.value ? "bg-blue-500 dark:bg-blue-500" : "bg-gray-200 dark:bg-gray-500",
"ml-4 relative inline-flex flex-shrink-0 h-6 w-11 border-2 border-transparent rounded-full cursor-pointer transition-colors ease-in-out duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500"
)}
>
Use setting
)}
);
interface SwitchGroupWideRedProps {
name: string;
label: string;
description?: string;
defaultValue?: boolean;
className?: string;
}
export const SwitchGroupWideRed = ({
name,
label,
description,
defaultValue
}: SwitchGroupWideRedProps) => (
);
const Input = (props: InputProps) => {
return (
);
};
const Control = (props: ControlProps) => {
return (
);
};
const Menu = (props: MenuProps) => {
return (
);
};
const Option = (props: OptionProps) => {
return (
);
};
export const SelectFieldWide = ({
name,
label,
optionDefaultText,
tooltip,
options
}: SelectFieldProps) => (
{({
field,
form: { setFieldValue }
}: FieldProps) => (
);