a766c60aa5
* WIP * Text field * URL * Finished PhoneInput * Refactored input sub-folders * Boolean * Fix lint * Fix lint * Fix useOutsideClick --------- Co-authored-by: Charles Bochet <charles@twenty.com>
48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
import { useCurrentCellEditMode } from '../editable-cell/hooks/useCurrentCellEditMode';
|
|
import { useEditableCell } from '../editable-cell/hooks/useEditableCell';
|
|
|
|
import { useMoveSoftFocus } from './useMoveSoftFocus';
|
|
|
|
export function useCellInputEventHandlers<T>({
|
|
onSubmit,
|
|
onCancel,
|
|
}: {
|
|
onSubmit?: (newValue: T) => void;
|
|
onCancel?: () => void;
|
|
}) {
|
|
const { closeEditableCell } = useEditableCell();
|
|
const { isCurrentCellInEditMode } = useCurrentCellEditMode();
|
|
const { moveRight, moveLeft, moveDown } = useMoveSoftFocus();
|
|
|
|
return {
|
|
handleClickOutside: (event: MouseEvent | TouchEvent, newValue: T) => {
|
|
if (isCurrentCellInEditMode) {
|
|
event.stopImmediatePropagation();
|
|
|
|
onSubmit?.(newValue);
|
|
|
|
closeEditableCell();
|
|
}
|
|
},
|
|
handleEscape: () => {
|
|
closeEditableCell();
|
|
onCancel?.();
|
|
},
|
|
handleEnter: (newValue: T) => {
|
|
onSubmit?.(newValue);
|
|
closeEditableCell();
|
|
moveDown();
|
|
},
|
|
handleTab: (newValue: T) => {
|
|
onSubmit?.(newValue);
|
|
closeEditableCell();
|
|
moveRight();
|
|
},
|
|
handleShiftTab: (newValue: T) => {
|
|
onSubmit?.(newValue);
|
|
closeEditableCell();
|
|
moveLeft();
|
|
},
|
|
};
|
|
}
|