From 06e803d18b9f77b752387202963e3f323af7fcd6 Mon Sep 17 00:00:00 2001 From: Marie <51697796+ijreilly@users.noreply.github.com> Date: Thu, 29 Jan 2026 11:50:28 +0100 Subject: [PATCH] [Fix] Various typeError fixes (#17508) Fixes [sentry](https://twenty-v7.sentry.io/issues/6539621673/?environment=prod&environment=prod-eu&project=4507072563183616&query=is%3Aunresolved%20issue.priority%3A%5Bhigh%2C%20medium%5D%20timesSeen%3A%3E3%20TypeError&referrer=issue-stream&sort=date): fieldValue.map on potentially null fieldValue Fixes [sentry](https://twenty-v7.sentry.io/issues/6996079360/?environment=prod&environment=prod-eu&project=4507072563183616&query=is%3Aunresolved%20issue.priority%3A%5Bhigh%2C%20medium%5D%20timesSeen%3A%3E3%20TypeError&referrer=issue-stream&sort=date): note.id on potentially null note due to recent useActivities change Fixes sentry ([1](https://twenty-v7.sentry.io/issues/6707703562/?environment=prod&environment=prod-eu&project=4507072563183616&query=is%3Aunresolved%20issue.priority%3A%5Bhigh%2C%20medium%5D%20timesSeen%3A%3E3%20TypeError&referrer=issue-stream&sort=date), [2](https://twenty-v7.sentry.io/issues/6707703563/?environment=prod&environment=prod-eu&project=4507072563183616&query=is%3Aunresolved%20issue.priority%3A%5Bhigh%2C%20medium%5D%20timesSeen%3A%3E3%20TypeError&referrer=issue-stream&sort=date) - same issue): selectableListHotKey issue Fixes [sentry](https://twenty-v7.sentry.io/issues/7087281049/?environment=prod&environment=prod-eu&project=4507072563183616&query=is%3Aunresolved%20issue.priority%3A%5Bhigh%2C%20medium%5D%20timesSeen%3A%3E3%20TypeError&referrer=issue-stream&sort=date): issue when reordering fields (putting field in last position) --- .../modules/activities/hooks/useActivities.ts | 18 +++++++++++------- .../useOpenRelationFromManyFieldInput.tsx | 17 +++++++++-------- .../utils/computeNewPositionOfDraggedRecord.ts | 8 ++++++++ .../hooks/internal/useSelectableListHotKeys.ts | 11 +++++++---- 4 files changed, 35 insertions(+), 19 deletions(-) diff --git a/packages/twenty-front/src/modules/activities/hooks/useActivities.ts b/packages/twenty-front/src/modules/activities/hooks/useActivities.ts index a2a1bf4cfd..4e61d3b3ff 100644 --- a/packages/twenty-front/src/modules/activities/hooks/useActivities.ts +++ b/packages/twenty-front/src/modules/activities/hooks/useActivities.ts @@ -6,9 +6,9 @@ import { type Task } from '@/activities/types/Task'; import { type TaskTarget } from '@/activities/types/TaskTarget'; import { type CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular'; import { getRecordsFromRecordConnection } from '@/object-record/cache/utils/getRecordsFromRecordConnection'; -import { type RecordGqlOperationOrderBy } from 'twenty-shared/types'; import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState'; import { useRecoilCallback } from 'recoil'; +import { type RecordGqlOperationOrderBy } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; export const useActivities = ({ @@ -50,9 +50,11 @@ export const useActivities = ({ limit, }); - const activities = activityTargets.map((activityTarget) => { - return activityTarget[objectNameSingular]; - }) as T[]; + const activities = activityTargets + .map((activityTarget) => { + return activityTarget[objectNameSingular]; + }) + .filter(isDefined) as T[]; const fetchMoreActivities = async () => { const result = await fetchMoreActivityTargets(); @@ -69,9 +71,11 @@ export const useActivities = ({ updateActivitiesInStore(activityTargets); - return activityTargets.map((activityTarget) => { - return activityTarget[objectNameSingular]; - }) as T[]; + return activityTargets + .map((activityTarget) => { + return activityTarget[objectNameSingular]; + }) + .filter(isDefined) as T[]; }; return { diff --git a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenRelationFromManyFieldInput.tsx b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenRelationFromManyFieldInput.tsx index 8154b63770..540390e64e 100644 --- a/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenRelationFromManyFieldInput.tsx +++ b/packages/twenty-front/src/modules/object-record/record-field/ui/meta-types/input/hooks/useOpenRelationFromManyFieldInput.tsx @@ -40,14 +40,15 @@ export const useOpenRelationFromManyFieldInput = () => { prefix, }); - const fieldValue = snapshot - .getLoadable>( - recordStoreFamilySelector({ - recordId, - fieldName, - }), - ) - .getValue(); + const fieldValue = + snapshot + .getLoadable>( + recordStoreFamilySelector({ + recordId, + fieldName, + }), + ) + .getValue() ?? []; const objectMetadataItems = snapshot .getLoadable(objectMetadataItemsState) diff --git a/packages/twenty-front/src/modules/object-record/utils/computeNewPositionOfDraggedRecord.ts b/packages/twenty-front/src/modules/object-record/utils/computeNewPositionOfDraggedRecord.ts index 716ab612a7..155f68ceeb 100644 --- a/packages/twenty-front/src/modules/object-record/utils/computeNewPositionOfDraggedRecord.ts +++ b/packages/twenty-front/src/modules/object-record/utils/computeNewPositionOfDraggedRecord.ts @@ -71,6 +71,10 @@ export const computeNewPositionOfDraggedRecord = ({ const itemAfterTargetItem = sortedRecordsByAscendingPosition[indexOfTargetItem + 1]; + if (!isDefined(itemAfterTargetItem)) { + return targetItem.position + 1; + } + const intermediaryPosition = targetItem.position + (itemAfterTargetItem.position - targetItem.position) / 2; @@ -80,6 +84,10 @@ export const computeNewPositionOfDraggedRecord = ({ const itemBeforeTargetItem = sortedRecordsByAscendingPosition[indexOfTargetItem - 1]; + if (!isDefined(itemBeforeTargetItem)) { + return targetItem.position - 1; + } + const intermediaryPosition = targetItem.position - (targetItem.position - itemBeforeTargetItem.position) / 2; diff --git a/packages/twenty-front/src/modules/ui/layout/selectable-list/hooks/internal/useSelectableListHotKeys.ts b/packages/twenty-front/src/modules/ui/layout/selectable-list/hooks/internal/useSelectableListHotKeys.ts index 0fc3f1edcd..f96a415931 100644 --- a/packages/twenty-front/src/modules/ui/layout/selectable-list/hooks/internal/useSelectableListHotKeys.ts +++ b/packages/twenty-front/src/modules/ui/layout/selectable-list/hooks/internal/useSelectableListHotKeys.ts @@ -50,16 +50,19 @@ export const useSelectableListHotKeys = ( const currentPosition = findPosition(selectableItemIds, selectedItemId); const computeNextId = (direction: Direction) => { + if ( + selectableItemIds.length === 0 || + selectableItemIds[0]?.length === 0 + ) { + return; + } + if (!selectedItemId || !currentPosition) { return selectableItemIds[0][0]; } const { row: currentRow, col: currentCol } = currentPosition; - if (selectableItemIds.length === 0) { - return; - } - const isSingleRow = selectableItemIds.length === 1; let nextRow: number;