import { SchemaFieldProps, StringField as StringFieldType } from '@vev/utils'; import React, { useRef, useState } from 'react'; import { SilkeTextField } from '../../silke-text-field'; import { getTitle } from './utils/schema-util'; import { SilkeBox } from '../../silke-box'; import { SilkeText, SilkeTextSmall } from '../../silke-text'; import { SilkeIconTooltip } from '../../silke-tooltip'; import { SilkeIcon } from '../../silke-icon'; import { SilkeButton } from '../../silke-button'; import { SilkePopover } from '../../silke-popover'; const StringField = ({ schema, value, disabled, readonly, onChange, }: SchemaFieldProps) => { const { options } = schema; const textFieldRef = useRef(null); const dropdownRef = useRef(null); const [showSuggestions, setShowSuggestions] = useState(false); const suggestion = schema.options?.suggestions?.find((suggestion) => { return suggestion.value === `${value}`; }); if (schema.options?.suggestions && schema.options?.suggestions.length) { if (suggestion) { return ( {getTitle(schema)} {schema.description && } {suggestion.label} { onChange(null); }} /> ); } } return ( { setShowSuggestions(true); }} onBlur={(e) => { if (!dropdownRef.current?.contains(e.relatedTarget as Node)) { setShowSuggestions(false); } }} /> {showSuggestions && schema.options?.suggestions && ( {schema.options?.suggestions.map((suggestion) => { return ( { setShowSuggestions(false); onChange(suggestion.value); }} > {suggestion.icon && (suggestion.icon as React.ReactNode)} {suggestion.label} ); })} )} ); }; export default StringField;