/* * Copyright (c) 2021 - 2024, Ludvig Lundgren and the autobrr contributors. * SPDX-License-Identifier: GPL-2.0-or-later */ import { JSX } from "react"; 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"; import { MultiSelect as RMSC } from "react-multi-select-component"; import { MultiSelectOption } from "@components/inputs/select.tsx"; interface SelectFieldProps { name: string; label: string; help?: string; placeholder?: string; required?: boolean; 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={(newValue: unknown) => { if (newValue) { setFieldValue(field.name, (newValue as { value: string }).value); } else { setFieldValue(field.name, "") } }} 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={(newValue: unknown) => { if (newValue) { setFieldValue(field.name, (newValue as { value: string }).value); } else { setFieldValue(field.name, "") } }} options={options} /> )} {help && (

{help}

)}
); } export interface MultiSelectFieldProps { name: string; label: string; help?: string; placeholder?: string; required?: boolean; tooltip?: JSX.Element; options: OptionBasicTyped[]; } interface ListFilterMultiSelectOption { id: number; name: string; } export function ListFilterMultiSelectField({ name, label, help, tooltip, options }: MultiSelectFieldProps) { return (
{({ field, form: { setFieldValue } }: FieldProps) => ( <> ({ value: item.id, label: item.name }))} onChange={(values: MultiSelectOption[]) => { const item = values && values.map((i) => ({ id: i.value, name: i.label })); setFieldValue(field.name, item); }} /> )} {help && (

{help}

)}
); }