src/renderers/react/customFieldViewComponents/CustomDropdownView.tsx (32 lines of code) (raw):
import { CustomDropdown } from "../../../editorial-source-components/CustomDropdown";
import type { Options } from "../../../plugin/fieldViews/DropdownFieldView";
import type { CustomField } from "../../../plugin/types/Element";
import { getFieldViewTestId } from "../FieldComponent";
import { useCustomFieldState } from "../useCustomFieldViewState";
type CustomDropdownViewProps = {
field: CustomField<string, Options>;
options?: Options;
label: string;
display?: "inline" | "block";
onChange?: (event: string) => void;
};
export const CustomDropdownView = ({
field,
options,
label,
display = "block",
onChange,
}: CustomDropdownViewProps) => {
const [selectedElement, setSelectedElement] = useCustomFieldState(field);
return (
<CustomDropdown
display={display}
options={options ?? field.description.props}
selected={selectedElement}
label={label}
onChange={(event) => {
if (onChange) onChange(event.target.value);
setSelectedElement(event.target.value);
}}
error={field.errors.map((e) => e.error).join(", ")}
dataCy={getFieldViewTestId(field.name)}
/>
);
};