Fixes resetting of scroll position in RecordShowPage due to opening of some dropdowns (#6890) (#6906)

fixes #6890

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
This commit is contained in:
Faisal-imtiyaz123
2024-09-18 14:05:13 +05:30
committed by GitHub
parent 601e15f028
commit 72ab6bcf35
6 changed files with 35 additions and 25 deletions

View File

@@ -1,7 +1,7 @@
import { AvatarChip, AvatarChipVariant } from 'twenty-ui'; import { AvatarChip, AvatarChipVariant } from 'twenty-ui';
import { useRecordChipData } from '@/object-record/hooks/useRecordChipData'; import { useRecordChipData } from '@/object-record/hooks/useRecordChipData';
import { RecordIndexEventContext } from '@/object-record/record-index/contexts/RecordIndexEventContext'; import { RecordIndexRootPropsContext } from '@/object-record/record-index/contexts/RecordIndexRootPropsContext';
import { ObjectRecord } from '@/object-record/types/ObjectRecord'; import { ObjectRecord } from '@/object-record/types/ObjectRecord';
import { useContext } from 'react'; import { useContext } from 'react';
@@ -16,7 +16,7 @@ export const RecordIdentifierChip = ({
record, record,
variant, variant,
}: RecordIdentifierChipProps) => { }: RecordIdentifierChipProps) => {
const { onIndexIdentifierClick } = useContext(RecordIndexEventContext); const { onIndexIdentifierClick } = useContext(RecordIndexRootPropsContext);
const { recordChipData } = useRecordChipData({ const { recordChipData } = useRecordChipData({
objectNameSingular, objectNameSingular,

View File

@@ -1,9 +0,0 @@
import { createEventContext } from '~/utils/createEventContext';
export type RecordIndexEventContextProps = {
onIndexIdentifierClick: (recordId: string) => void;
onIndexRecordsLoaded: () => void;
};
export const RecordIndexEventContext =
createEventContext<RecordIndexEventContextProps>();

View File

@@ -20,7 +20,7 @@ import { useClickOutsideListener } from '@/ui/utilities/pointer-event/hooks/useC
import { getSnapshotValue } from '@/ui/utilities/state/utils/getSnapshotValue'; import { getSnapshotValue } from '@/ui/utilities/state/utils/getSnapshotValue';
import { isDefined } from '~/utils/isDefined'; import { isDefined } from '~/utils/isDefined';
import { RecordIndexEventContext } from '@/object-record/record-index/contexts/RecordIndexEventContext'; import { RecordIndexRootPropsContext } from '@/object-record/record-index/contexts/RecordIndexRootPropsContext';
import { useContext } from 'react'; import { useContext } from 'react';
import { TableHotkeyScope } from '../../types/TableHotkeyScope'; import { TableHotkeyScope } from '../../types/TableHotkeyScope';
@@ -41,7 +41,7 @@ export type OpenTableCellArgs = {
}; };
export const useOpenRecordTableCellV2 = (tableScopeId: string) => { export const useOpenRecordTableCellV2 = (tableScopeId: string) => {
const { onIndexIdentifierClick } = useContext(RecordIndexEventContext); const { onIndexIdentifierClick } = useContext(RecordIndexRootPropsContext);
const moveEditModeToTableCellPosition = const moveEditModeToTableCellPosition =
useMoveEditModeToTableCellPosition(tableScopeId); useMoveEditModeToTableCellPosition(tableScopeId);

View File

@@ -5,7 +5,7 @@ import { useInView } from 'react-intersection-observer';
import { useRecoilValue } from 'recoil'; import { useRecoilValue } from 'recoil';
import { getBasePathToShowPage } from '@/object-metadata/utils/getBasePathToShowPage'; import { getBasePathToShowPage } from '@/object-metadata/utils/getBasePathToShowPage';
import { RecordIndexEventContext } from '@/object-record/record-index/contexts/RecordIndexEventContext'; import { RecordIndexRootPropsContext } from '@/object-record/record-index/contexts/RecordIndexRootPropsContext';
import { RecordTableContext } from '@/object-record/record-table/contexts/RecordTableContext'; import { RecordTableContext } from '@/object-record/record-table/contexts/RecordTableContext';
import { RecordTableRowContext } from '@/object-record/record-table/contexts/RecordTableRowContext'; import { RecordTableRowContext } from '@/object-record/record-table/contexts/RecordTableRowContext';
import { useRecordTableStates } from '@/object-record/record-table/hooks/internal/useRecordTableStates'; import { useRecordTableStates } from '@/object-record/record-table/hooks/internal/useRecordTableStates';
@@ -24,7 +24,7 @@ export const RecordTableRowWrapper = ({
children: ReactNode; children: ReactNode;
}) => { }) => {
const { objectMetadataItem } = useContext(RecordTableContext); const { objectMetadataItem } = useContext(RecordTableContext);
const { onIndexRecordsLoaded } = useContext(RecordIndexEventContext); const { onIndexRecordsLoaded } = useContext(RecordIndexRootPropsContext);
const theme = useTheme(); const theme = useTheme();

View File

@@ -0,0 +1,14 @@
import { useEffect, useRef } from 'react';
import { isDefined } from 'twenty-ui';
export const useInputFocusWithoutScrollOnMount = () => {
const inputRef = useRef<HTMLInputElement>(null);
useEffect(() => {
if (isDefined(inputRef.current)) {
inputRef.current.focus({ preventScroll: true });
}
});
return { inputRef };
};

View File

@@ -1,5 +1,6 @@
import { forwardRef, InputHTMLAttributes } from 'react'; import { useInputFocusWithoutScrollOnMount } from '@/ui/input/hooks/useInputFocusWithoutScrollOnMount';
import styled from '@emotion/styled'; import styled from '@emotion/styled';
import { forwardRef, InputHTMLAttributes } from 'react';
import { TEXT_INPUT_STYLE } from 'twenty-ui'; import { TEXT_INPUT_STYLE } from 'twenty-ui';
const StyledDropdownMenuSearchInputContainer = styled.div` const StyledDropdownMenuSearchInputContainer = styled.div`
@@ -35,12 +36,16 @@ const StyledInput = styled.input`
export const DropdownMenuSearchInput = forwardRef< export const DropdownMenuSearchInput = forwardRef<
HTMLInputElement, HTMLInputElement,
InputHTMLAttributes<HTMLInputElement> InputHTMLAttributes<HTMLInputElement>
>(({ value, onChange, autoFocus, placeholder = 'Search', type }, ref) => ( >(({ value, onChange, placeholder = 'Search', type }) => {
const { inputRef } = useInputFocusWithoutScrollOnMount();
return (
<StyledDropdownMenuSearchInputContainer> <StyledDropdownMenuSearchInputContainer>
<StyledInput <StyledInput
autoComplete="off" autoComplete="off"
{...{ autoFocus, onChange, placeholder, type, value }} {...{ onChange, placeholder, type, value }}
ref={ref} ref={inputRef}
/> />
</StyledDropdownMenuSearchInputContainer> </StyledDropdownMenuSearchInputContainer>
)); );
});