Fix: hotkey scope not correctly set (#2094)
* technical input fix * use previous hotkey instead for onblur
This commit is contained in:
@ -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>
|
||||||
|
|||||||
@ -0,0 +1,3 @@
|
|||||||
|
export enum EditableFieldHotkeyScope {
|
||||||
|
EditableField = 'editable-field',
|
||||||
|
}
|
||||||
@ -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>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user