mirror of
https://github.com/lingble/twenty.git
synced 2025-11-01 05:07:56 +00:00
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:
committed by
GitHub
parent
601e15f028
commit
72ab6bcf35
@@ -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,
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
import { createEventContext } from '~/utils/createEventContext';
|
|
||||||
|
|
||||||
export type RecordIndexEventContextProps = {
|
|
||||||
onIndexIdentifierClick: (recordId: string) => void;
|
|
||||||
onIndexRecordsLoaded: () => void;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const RecordIndexEventContext =
|
|
||||||
createEventContext<RecordIndexEventContextProps>();
|
|
||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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 };
|
||||||
|
};
|
||||||
@@ -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>
|
||||||
));
|
);
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user