/* * Copyright (c) 2021 - 2024, Ludvig Lundgren and the autobrr contributors. * SPDX-License-Identifier: GPL-2.0-or-later */ import { Field } from "formik"; import Select from "react-select"; import CreatableSelect from "react-select/creatable"; import type { FieldProps } from "formik"; import { OptionBasicTyped } from "@domain/constants"; import * as common from "@components/inputs/common"; import { DocsTooltip } from "@components/tooltips/DocsTooltip"; interface SelectFieldProps { name: string; label: string; help?: string; placeholder?: string; defaultValue?: OptionBasicTyped; tooltip?: JSX.Element; options: OptionBasicTyped[]; } export function SelectFieldCreatable({ name, label, help, placeholder, tooltip, options }: SelectFieldProps) { return (
{({ field, form: { setFieldValue } }: FieldProps) => ( ({ ...base, color: "unset" }) }} theme={(theme) => ({ ...theme, spacing: { ...theme.spacing, controlHeight: 30, baseUnit: 2 } })} // value={field?.value ? field.value : options.find(o => o.value == field?.value)} value={field?.value ? { value: field.value, label: field.value } : field.value} onChange={(option) => { if (option === null) { setFieldValue(field.name, ""); return; } else { setFieldValue(field.name, option.value ?? ""); } }} options={[...[...options, { value: field.value, label: field.value }].reduce((map, obj) => map.set(obj.value, obj), new Map()).values()]} /> )} {help && (

{help}

)}
); } export function SelectField({ name, label, help, placeholder, options }: SelectFieldProps) { return (
{({ field, form: { setFieldValue } }: FieldProps) => ( ({ ...base, color: "unset" }) }} theme={(theme) => ({ ...theme, spacing: { ...theme.spacing, controlHeight: 30, baseUnit: 2 } })} defaultValue={defaultValue} value={field?.value && options.find(o => o.value == field?.value)} onChange={(option) => { if (option === null) { setFieldValue(field.name, ""); return; } else { setFieldValue(field.name, option.value ?? ""); } }} options={options} /> )} {help && (

{help}

)}
); }