import React from 'react'; import {Plus, TrashBin} from '@gravity-ui/icons'; import {Button, HelpMark, Icon, TextInput} from '@gravity-ui/uikit'; import {Controller, useFieldArray, useFormContext, useWatch} from 'react-hook-form'; import {cn} from '../../../../utils/cn'; import {ColumnSelectorField} from '../components/ColumnSelectorField'; import {FormFieldError, FormSection} from '../components/layout'; import {YDB_PK_TYPES} from '../constants'; import i18n from '../i18n'; import type {Column, FormValues} from '../types'; const b = cn('ydb-table-form-dialog'); export function YdbIndexesSection() { const {control, formState} = useFormContext(); const { fields: newIndexFields, append, remove, } = useFieldArray({ control, name: 'secondaryIndexes', }); const formColumns = useWatch({control, name: 'columns'}); const availableColumns = React.useMemo(() => { return formColumns.filter(({name, type}) => Boolean(name) && YDB_PK_TYPES.has(type)); }, [formColumns]); const hasAnyIndex = newIndexFields.length > 0; const handleAddIndex = React.useCallback(() => { append({name: '', key: []}); }, [append]); return (
{hasAnyIndex ? (
{i18n('column_name')}
{i18n('column_index-key')} {i18n('tooltip_index-key')}
) : null} {newIndexFields.map((field, index) => { const nameError = formState.errors.secondaryIndexes?.[index]?.name?.message; const keyError = formState.errors.secondaryIndexes?.[index]?.key?.message; return (
( )} />
(
)} />
); })}
); }