* Change to using arrow functions Co-authored-by: v1b3m <vibenjamin6@gmail.com> Co-authored-by: Matheus <matheus_benini@hotmail.com> * Add lint rule --------- Co-authored-by: v1b3m <vibenjamin6@gmail.com> Co-authored-by: Matheus <matheus_benini@hotmail.com> Co-authored-by: Charles Bochet <charles@twenty.com>
45 lines
1.1 KiB
TypeScript
45 lines
1.1 KiB
TypeScript
import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys';
|
|
import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useListenClickOutside';
|
|
|
|
import { EditableFieldHotkeyScope } from '../types/EditableFieldHotkeyScope';
|
|
|
|
import { useEditableField } from './useEditableField';
|
|
|
|
export const useRegisterCloseFieldHandlers = (
|
|
wrapperRef: React.RefObject<HTMLDivElement>,
|
|
onSubmit?: () => void,
|
|
onCancel?: () => void,
|
|
) => {
|
|
const { closeEditableField, isFieldInEditMode } = useEditableField();
|
|
|
|
useListenClickOutside({
|
|
refs: [wrapperRef],
|
|
callback: () => {
|
|
if (isFieldInEditMode) {
|
|
onSubmit?.();
|
|
closeEditableField();
|
|
}
|
|
},
|
|
});
|
|
|
|
useScopedHotkeys(
|
|
'enter',
|
|
() => {
|
|
onSubmit?.();
|
|
closeEditableField();
|
|
},
|
|
EditableFieldHotkeyScope.EditableField,
|
|
[closeEditableField, onSubmit],
|
|
);
|
|
|
|
useScopedHotkeys(
|
|
'esc',
|
|
() => {
|
|
closeEditableField();
|
|
onCancel?.();
|
|
},
|
|
EditableFieldHotkeyScope.EditableField,
|
|
[closeEditableField, onCancel],
|
|
);
|
|
};
|