Ensure record fields uniqueness across widgets (#16781)

This PR dissociates record inputs so that several inputs for the same
record field can live on the same page.

## Simple values demo


https://github.com/user-attachments/assets/a8c224d8-4cd6-4fe3-9cf8-01f6bdd2fca9

## Relations demo


https://github.com/user-attachments/assets/87267a8b-8ce5-41ce-8a78-cba2384828bb

## Doesn't break Record Table


https://github.com/user-attachments/assets/bcdd2b05-7cb4-4ed2-9093-58be3e04e43e

## Doesn't break Show Page


https://github.com/user-attachments/assets/f9ab9e14-012c-451e-a35f-01a165523f95
This commit is contained in:
Baptiste Devessier
2025-12-24 17:01:10 +01:00
committed by GitHub
parent 6a4974e285
commit 06d0ac13c4
37 changed files with 620 additions and 436 deletions
@@ -1,3 +1,4 @@
import { useRecordFieldsScopeContextOrThrow } from '@/object-record/record-field-list/contexts/RecordFieldsScopeContext';
import { FieldContext } from '@/object-record/record-field/ui/contexts/FieldContext';
import { getDropdownFocusIdForRecordField } from '@/object-record/utils/getDropdownFocusIdForRecordField';
import { useSetActiveDropdownFocusIdAndMemorizePrevious } from '@/ui/layout/dropdown/hooks/useSetFocusedDropdownIdAndMemorizePrevious';
@@ -5,15 +6,17 @@ import { useContext, useEffect } from 'react';
export const StorybookFieldInputDropdownFocusIdSetterEffect = () => {
const { recordId, fieldDefinition } = useContext(FieldContext);
const { scopeInstanceId } = useRecordFieldsScopeContextOrThrow();
const { setActiveDropdownFocusIdAndMemorizePrevious } =
useSetActiveDropdownFocusIdAndMemorizePrevious();
const fieldDropdownFocusIdTableCell = getDropdownFocusIdForRecordField(
const fieldDropdownFocusIdTableCell = getDropdownFocusIdForRecordField({
recordId,
fieldDefinition.fieldMetadataId,
'table-cell',
);
fieldMetadataId: fieldDefinition.fieldMetadataId,
componentType: 'table-cell',
instanceId: scopeInstanceId,
});
useEffect(() => {
setActiveDropdownFocusIdAndMemorizePrevious(fieldDropdownFocusIdTableCell);