Fix: hotkey scope not correctly set (#2094)

* technical input fix

* use previous hotkey instead for onblur
This commit is contained in:
Arijit
2023-10-18 19:46:21 +02:00
committed by GitHub
parent c590300bf1
commit e90301098a
3 changed files with 67 additions and 29 deletions

View File

@ -2,9 +2,12 @@ import { useEffect, useState } from 'react';
import styled from '@emotion/styled'; import styled from '@emotion/styled';
import { FieldRecoilScopeContext } from '@/ui/data/inline-cell/states/recoil-scope-contexts/FieldRecoilScopeContext'; import { FieldRecoilScopeContext } from '@/ui/data/inline-cell/states/recoil-scope-contexts/FieldRecoilScopeContext';
import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope';
import { RecoilScope } from '@/ui/utilities/recoil-scope/components/RecoilScope'; import { RecoilScope } from '@/ui/utilities/recoil-scope/components/RecoilScope';
import { Company, useUpdateOneCompanyMutation } from '~/generated/graphql'; import { Company, useUpdateOneCompanyMutation } from '~/generated/graphql';
import { EditableFieldHotkeyScope } from '../types/EditableFieldHotkeyScope';
type CompanyNameEditableFieldProps = { type CompanyNameEditableFieldProps = {
company: Pick<Company, 'id' | 'name'>; company: Pick<Company, 'id' | 'name'>;
}; };
@ -40,6 +43,11 @@ export const CompanyNameEditableField = ({
const [updateCompany] = useUpdateOneCompanyMutation(); const [updateCompany] = useUpdateOneCompanyMutation();
const {
goBackToPreviousHotkeyScope,
setHotkeyScopeAndMemorizePreviousScope,
} = usePreviousHotkeyScope();
useEffect(() => { useEffect(() => {
setInternalValue(company.name); setInternalValue(company.name);
}, [company.name]); }, [company.name]);
@ -49,6 +57,7 @@ export const CompanyNameEditableField = ({
}; };
const handleSubmit = async () => { const handleSubmit = async () => {
goBackToPreviousHotkeyScope();
await updateCompany({ await updateCompany({
variables: { variables: {
where: { where: {
@ -61,12 +70,19 @@ export const CompanyNameEditableField = ({
}); });
}; };
const handleFocus = async () => {
setHotkeyScopeAndMemorizePreviousScope(
EditableFieldHotkeyScope.EditableField,
);
};
return ( return (
<RecoilScope CustomRecoilScopeContext={FieldRecoilScopeContext}> <RecoilScope CustomRecoilScopeContext={FieldRecoilScopeContext}>
<StyledEditableTitleInput <StyledEditableTitleInput
autoComplete="off" autoComplete="off"
onChange={(event) => handleChange(event.target.value)} onChange={(event) => handleChange(event.target.value)}
onBlur={handleSubmit} onBlur={handleSubmit}
onFocus={handleFocus}
value={internalValue} value={internalValue}
/> />
</RecoilScope> </RecoilScope>

View File

@ -0,0 +1,3 @@
export enum EditableFieldHotkeyScope {
EditableField = 'editable-field',
}

View File

@ -3,6 +3,9 @@ import styled from '@emotion/styled';
import { StyledInput } from '@/ui/data/field/meta-types/input/components/internal/TextInput'; import { StyledInput } from '@/ui/data/field/meta-types/input/components/internal/TextInput';
import { ComputeNodeDimensions } from '@/ui/utilities/dimensions/components/ComputeNodeDimensions'; import { ComputeNodeDimensions } from '@/ui/utilities/dimensions/components/ComputeNodeDimensions';
import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope';
import { InputHotkeyScope } from '../types/InputHotkeyScope';
export type EntityTitleDoubleTextInputProps = { export type EntityTitleDoubleTextInputProps = {
firstValue: string; firstValue: string;
@ -38,32 +41,48 @@ export const EntityTitleDoubleTextInput = ({
firstValuePlaceholder, firstValuePlaceholder,
secondValuePlaceholder, secondValuePlaceholder,
onChange, onChange,
}: EntityTitleDoubleTextInputProps) => ( }: EntityTitleDoubleTextInputProps) => {
<StyledDoubleTextContainer> const {
<ComputeNodeDimensions node={firstValue || firstValuePlaceholder}> goBackToPreviousHotkeyScope,
{(nodeDimensions) => ( setHotkeyScopeAndMemorizePreviousScope,
<StyledTextInput } = usePreviousHotkeyScope();
width={nodeDimensions?.width} const handleFocus = () => {
placeholder={firstValuePlaceholder} setHotkeyScopeAndMemorizePreviousScope(InputHotkeyScope.TextInput);
value={firstValue} };
onChange={(event: ChangeEvent<HTMLInputElement>) => { const handleBlur = () => {
onChange(event.target.value, secondValue); goBackToPreviousHotkeyScope();
}} };
/>
)} return (
</ComputeNodeDimensions> <StyledDoubleTextContainer>
<ComputeNodeDimensions node={secondValue || secondValuePlaceholder}> <ComputeNodeDimensions node={firstValue || firstValuePlaceholder}>
{(nodeDimensions) => ( {(nodeDimensions) => (
<StyledTextInput <StyledTextInput
width={nodeDimensions?.width} width={nodeDimensions?.width}
autoComplete="off" placeholder={firstValuePlaceholder}
placeholder={secondValuePlaceholder} value={firstValue}
value={secondValue} onFocus={handleFocus}
onChange={(event: ChangeEvent<HTMLInputElement>) => { onBlur={handleBlur}
onChange(firstValue, event.target.value); onChange={(event: ChangeEvent<HTMLInputElement>) => {
}} onChange(event.target.value, secondValue);
/> }}
)} />
</ComputeNodeDimensions> )}
</StyledDoubleTextContainer> </ComputeNodeDimensions>
); <ComputeNodeDimensions node={secondValue || secondValuePlaceholder}>
{(nodeDimensions) => (
<StyledTextInput
width={nodeDimensions?.width}
autoComplete="off"
placeholder={secondValuePlaceholder}
value={secondValue}
onFocus={handleFocus}
onChange={(event: ChangeEvent<HTMLInputElement>) => {
onChange(firstValue, event.target.value);
}}
/>
)}
</ComputeNodeDimensions>
</StyledDoubleTextContainer>
);
};