Fix missing ObjectRecordId param (#11721)
# Introduction Fixes https://github.com/twentyhq/twenty/issues/11718 From having [noUncheckedIndexedAccess](https://www.typescriptlang.org/tsconfig/#noUncheckedIndexedAccess) set to false we have a flakiness resulting in a such bug right here as the below operation can return `undefined` but not type as it should: ```ts const recordId = allRecordIds[position.row]; ``` About to create a Tech project about the topic, activating the flag ends in 1500 typescript erros from the style solution compilation ( which means can contains several duplicated errors )
This commit is contained in:
@ -11,6 +11,7 @@ import { hiddenRecordGroupIdsComponentSelector } from '@/object-record/record-gr
|
|||||||
import { useHandleRecordGroupField } from '@/object-record/record-index/hooks/useHandleRecordGroupField';
|
import { useHandleRecordGroupField } from '@/object-record/record-index/hooks/useHandleRecordGroupField';
|
||||||
import { SettingsPath } from '@/types/SettingsPath';
|
import { SettingsPath } from '@/types/SettingsPath';
|
||||||
import { DropdownMenuHeader } from '@/ui/layout/dropdown/components/DropdownMenuHeader/DropdownMenuHeader';
|
import { DropdownMenuHeader } from '@/ui/layout/dropdown/components/DropdownMenuHeader/DropdownMenuHeader';
|
||||||
|
import { DropdownMenuHeaderLeftComponent } from '@/ui/layout/dropdown/components/DropdownMenuHeader/internal/DropdownMenuHeaderLeftComponent';
|
||||||
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
|
import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/DropdownMenuItemsContainer';
|
||||||
import { DropdownMenuSeparator } from '@/ui/layout/dropdown/components/DropdownMenuSeparator';
|
import { DropdownMenuSeparator } from '@/ui/layout/dropdown/components/DropdownMenuSeparator';
|
||||||
import { navigationMemorizedUrlState } from '@/ui/navigation/states/navigationMemorizedUrlState';
|
import { navigationMemorizedUrlState } from '@/ui/navigation/states/navigationMemorizedUrlState';
|
||||||
@ -19,9 +20,6 @@ import { ViewType } from '@/views/types/ViewType';
|
|||||||
import { useLingui } from '@lingui/react/macro';
|
import { useLingui } from '@lingui/react/macro';
|
||||||
import { useLocation } from 'react-router-dom';
|
import { useLocation } from 'react-router-dom';
|
||||||
import { useSetRecoilState } from 'recoil';
|
import { useSetRecoilState } from 'recoil';
|
||||||
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
|
||||||
import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
|
|
||||||
import { DropdownMenuHeaderLeftComponent } from '@/ui/layout/dropdown/components/DropdownMenuHeader/internal/DropdownMenuHeaderLeftComponent';
|
|
||||||
import { isDefined } from 'twenty-shared/utils';
|
import { isDefined } from 'twenty-shared/utils';
|
||||||
import { IconChevronLeft, IconSettings, useIcons } from 'twenty-ui/display';
|
import { IconChevronLeft, IconSettings, useIcons } from 'twenty-ui/display';
|
||||||
import {
|
import {
|
||||||
@ -29,6 +27,8 @@ import {
|
|||||||
MenuItemSelect,
|
MenuItemSelect,
|
||||||
UndecoratedLink,
|
UndecoratedLink,
|
||||||
} from 'twenty-ui/navigation';
|
} from 'twenty-ui/navigation';
|
||||||
|
import { FieldMetadataType } from '~/generated-metadata/graphql';
|
||||||
|
import { getSettingsPath } from '~/utils/navigation/getSettingsPath';
|
||||||
|
|
||||||
export const ObjectOptionsDropdownRecordGroupFieldsContent = () => {
|
export const ObjectOptionsDropdownRecordGroupFieldsContent = () => {
|
||||||
const { t } = useLingui();
|
const { t } = useLingui();
|
||||||
@ -116,7 +116,7 @@ export const ObjectOptionsDropdownRecordGroupFieldsContent = () => {
|
|||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
Group by
|
{t`Group by`}
|
||||||
</DropdownMenuHeader>
|
</DropdownMenuHeader>
|
||||||
<StyledInput
|
<StyledInput
|
||||||
autoFocus
|
autoFocus
|
||||||
|
|||||||
@ -134,7 +134,7 @@ export const useHandleRecordGroupField = () => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const view = await getViewFromPrefetchState(currentViewId);
|
const view = getViewFromPrefetchState(currentViewId);
|
||||||
|
|
||||||
if (isUndefinedOrNull(view)) {
|
if (isUndefinedOrNull(view)) {
|
||||||
return;
|
return;
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import { visibleTableColumnsComponentSelector } from '@/object-record/record-tab
|
|||||||
import { TableCellPosition } from '@/object-record/record-table/types/TableCellPosition';
|
import { TableCellPosition } from '@/object-record/record-table/types/TableCellPosition';
|
||||||
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
|
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValueV2';
|
||||||
import ReactDOM from 'react-dom';
|
import ReactDOM from 'react-dom';
|
||||||
|
import { isDefined } from 'twenty-shared/utils';
|
||||||
|
|
||||||
export const RecordTableCellPortalWrapper = ({
|
export const RecordTableCellPortalWrapper = ({
|
||||||
position,
|
position,
|
||||||
@ -16,9 +17,9 @@ export const RecordTableCellPortalWrapper = ({
|
|||||||
position: TableCellPosition;
|
position: TableCellPosition;
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
}) => {
|
}) => {
|
||||||
const anchorElement = document.body.querySelector(
|
const anchorElement = document.body.querySelector<HTMLAnchorElement>(
|
||||||
`#record-table-cell-${position.column}-${position.row}`,
|
`#record-table-cell-${position.column}-${position.row}`,
|
||||||
) as HTMLElement;
|
);
|
||||||
|
|
||||||
const allRecordIds = useRecoilComponentValueV2(
|
const allRecordIds = useRecoilComponentValueV2(
|
||||||
recordIndexAllRecordIdsComponentSelector,
|
recordIndexAllRecordIdsComponentSelector,
|
||||||
@ -30,12 +31,11 @@ export const RecordTableCellPortalWrapper = ({
|
|||||||
visibleTableColumnsComponentSelector,
|
visibleTableColumnsComponentSelector,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!anchorElement) {
|
const recordId = allRecordIds.at(position.row);
|
||||||
|
if (!isDefined(anchorElement) || !isDefined(recordId)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
const recordId = allRecordIds[position.row];
|
|
||||||
|
|
||||||
return ReactDOM.createPortal(
|
return ReactDOM.createPortal(
|
||||||
<RecordTableRowContextProvider
|
<RecordTableRowContextProvider
|
||||||
value={{
|
value={{
|
||||||
|
|||||||
Reference in New Issue
Block a user