feat: подсправочник показывается целиком при выборе привязанной строки

This commit is contained in:
2026-07-21 12:01:07 +03:00
parent b086ff4513
commit 2e1652e7ee
3 changed files with 8 additions and 84 deletions

View File

@@ -200,7 +200,7 @@ export default function SubdirectoryFieldConfig({
</Select>
{selectedSubdirectory && (
<p className="text-xs text-muted-foreground mt-1">
Фильтр: «{selectedTable?.columns?.[selectedSubdirectory.parentColumnIndex ?? 0]?.name || '?'}» = «{selectedSubdirectory.childTable?.columns?.[selectedSubdirectory.childColumnIndex ?? 0]?.name || '?'}»
Подсправочник показывается при выборе привязанных строк родителя.
</p>
)}
</div>

View File

@@ -3,7 +3,7 @@ import { useQuery } from '@tanstack/react-query';
import { apiRequest } from '@/lib/queryClient';
import TableFieldSelect from '@/components/TableFieldSelect';
import TableFieldMultiSelect from '@/components/TableFieldMultiSelect';
import type { DataTableRow, DataTableSubdirectory } from '@shared/schema';
import type { DataTableSubdirectory } from '@shared/schema';
interface TableFieldValue {
parentId?: string | null;
@@ -67,23 +67,6 @@ export default function TableFieldWithSubdirectory({
const showSubdirectory = !!opts.showSubdirectory;
const subdirectoryId = opts.subdirectoryId as number | undefined;
const { data: tableData } = useQuery<{
table: {
rows: DataTableRow[];
columns: Array<{ name: string }>;
treeColumnIndex: number | null;
treeDisplayColumnIndex: number | null;
treeColumns: number[] | null;
treeDisplayColumns: number[] | null;
};
}>({
queryKey: ['/api/directories', tableId],
enabled: !!tableId,
staleTime: 5 * 60 * 1000,
gcTime: 10 * 60 * 1000,
retry: false,
});
const { data: subdirectoriesData } = useQuery<{ subdirectories: DataTableSubdirectory[] }>({
queryKey: ['/api/directories', tableId, 'subdirectories'],
queryFn: async () => {
@@ -100,24 +83,11 @@ export default function TableFieldWithSubdirectory({
const { parentId, childId } = parseTableValue(value);
const parentRow = useMemo(() => {
if (!parentId || !tableData?.table?.rows) return null;
return tableData.table.rows.find((r) => r.id.toString() === parentId) || null;
}, [parentId, tableData]);
const isParentLinked = useMemo(() => {
if (!subdirectory || !parentId) return false;
return subdirectory.parentRowIds?.includes(Number(parentId)) ?? false;
}, [subdirectory, parentId]);
const childFilter = useMemo(() => {
if (!subdirectory || !parentRow) return undefined;
const col = String(subdirectory.childColumnIndex ?? 0);
const parentValue = parentRow.values?.[subdirectory.parentColumnIndex ?? 0] ?? '';
if (!parentValue) return undefined;
return { [col]: parentValue };
}, [subdirectory, parentRow]);
const handleParentChange = (newParentId: string) => {
onChange(serializeTableValue(newParentId || null, null));
};
@@ -144,8 +114,6 @@ export default function TableFieldWithSubdirectory({
const childOptions = {
...opts,
tableId: subdirectory.childTableId,
displayColumn: subdirectory.childTable?.columns?.[subdirectory.childColumnIndex ?? 0]?.name || undefined,
filters: childFilter,
};
return (
@@ -158,7 +126,7 @@ export default function TableFieldWithSubdirectory({
value={parentId || ''}
onChange={handleParentChange}
/>
{isParentLinked && childFilter && (
{isParentLinked && (
<TableFieldSelect
fieldId={fieldId}
fieldCode={`${fieldCode}_sub`}