Fix/record board keyboard navigation empty columns (#12103)
https://github.com/user-attachments/assets/6830217b-28a9-46e6-a9f5-40d508cd262b Closes #12077
This commit is contained in:
@ -28,6 +28,34 @@ export const useRecordBoardCardNavigation = (recordBoardId?: string) => {
|
|||||||
recordIndexRecordIdsByGroupComponentFamilyState,
|
recordIndexRecordIdsByGroupComponentFamilyState,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const focusFirstAvailableRecord = useRecoilCallback(
|
||||||
|
({ snapshot }) =>
|
||||||
|
() => {
|
||||||
|
if (visibleRecordGroupIds.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const firstColumnWithRecords = visibleRecordGroupIds.findIndex(
|
||||||
|
(groupId) => {
|
||||||
|
const recordIdsInGroup = snapshot
|
||||||
|
.getLoadable(recordIdsByGroupState(groupId))
|
||||||
|
.getValue();
|
||||||
|
return (
|
||||||
|
Array.isArray(recordIdsInGroup) && recordIdsInGroup.length > 0
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
if (firstColumnWithRecords !== -1) {
|
||||||
|
focusBoardCard({
|
||||||
|
columnIndex: firstColumnWithRecords,
|
||||||
|
rowIndex: 0,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
[visibleRecordGroupIds, recordIdsByGroupState, focusBoardCard],
|
||||||
|
);
|
||||||
|
|
||||||
const moveHorizontally = useRecoilCallback(
|
const moveHorizontally = useRecoilCallback(
|
||||||
({ snapshot }) =>
|
({ snapshot }) =>
|
||||||
(direction: 'left' | 'right') => {
|
(direction: 'left' | 'right') => {
|
||||||
@ -36,26 +64,7 @@ export const useRecordBoardCardNavigation = (recordBoardId?: string) => {
|
|||||||
.getValue();
|
.getValue();
|
||||||
|
|
||||||
if (!isDefined(focusedBoardCardIndexes)) {
|
if (!isDefined(focusedBoardCardIndexes)) {
|
||||||
if (visibleRecordGroupIds.length === 0) {
|
focusFirstAvailableRecord();
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const firstGroupId = visibleRecordGroupIds[0];
|
|
||||||
const recordIdsInFirstGroup = snapshot
|
|
||||||
.getLoadable(recordIdsByGroupState(firstGroupId))
|
|
||||||
.getValue();
|
|
||||||
|
|
||||||
if (
|
|
||||||
!Array.isArray(recordIdsInFirstGroup) ||
|
|
||||||
recordIdsInFirstGroup.length === 0
|
|
||||||
) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
focusBoardCard({
|
|
||||||
columnIndex: 0,
|
|
||||||
rowIndex: 0,
|
|
||||||
});
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,6 +106,7 @@ export const useRecordBoardCardNavigation = (recordBoardId?: string) => {
|
|||||||
newColumnIndex < 0 ||
|
newColumnIndex < 0 ||
|
||||||
newColumnIndex >= visibleRecordGroupIds.length
|
newColumnIndex >= visibleRecordGroupIds.length
|
||||||
) {
|
) {
|
||||||
|
focusFirstAvailableRecord();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,6 +139,7 @@ export const useRecordBoardCardNavigation = (recordBoardId?: string) => {
|
|||||||
visibleRecordGroupIds,
|
visibleRecordGroupIds,
|
||||||
recordIdsByGroupState,
|
recordIdsByGroupState,
|
||||||
focusBoardCard,
|
focusBoardCard,
|
||||||
|
focusFirstAvailableRecord,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -140,25 +151,7 @@ export const useRecordBoardCardNavigation = (recordBoardId?: string) => {
|
|||||||
.getValue();
|
.getValue();
|
||||||
|
|
||||||
if (!isDefined(focusedBoardCardIndexes)) {
|
if (!isDefined(focusedBoardCardIndexes)) {
|
||||||
if (visibleRecordGroupIds.length === 0) return;
|
focusFirstAvailableRecord();
|
||||||
|
|
||||||
const firstGroupId = visibleRecordGroupIds[0];
|
|
||||||
const recordIdsInFirstGroup = snapshot
|
|
||||||
.getLoadable(recordIdsByGroupState(firstGroupId))
|
|
||||||
.getValue();
|
|
||||||
|
|
||||||
if (
|
|
||||||
!Array.isArray(recordIdsInFirstGroup) ||
|
|
||||||
recordIdsInFirstGroup.length === 0
|
|
||||||
) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
focusBoardCard({
|
|
||||||
columnIndex: 0,
|
|
||||||
rowIndex: 0,
|
|
||||||
});
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,6 +164,7 @@ export const useRecordBoardCardNavigation = (recordBoardId?: string) => {
|
|||||||
.getValue();
|
.getValue();
|
||||||
|
|
||||||
if (!Array.isArray(recordIdsInGroup) || recordIdsInGroup.length === 0) {
|
if (!Array.isArray(recordIdsInGroup) || recordIdsInGroup.length === 0) {
|
||||||
|
focusFirstAvailableRecord();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,6 +193,7 @@ export const useRecordBoardCardNavigation = (recordBoardId?: string) => {
|
|||||||
visibleRecordGroupIds,
|
visibleRecordGroupIds,
|
||||||
recordIdsByGroupState,
|
recordIdsByGroupState,
|
||||||
focusBoardCard,
|
focusBoardCard,
|
||||||
|
focusFirstAvailableRecord,
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user