@atlaskit/inline-edit
Version:
An inline edit displays a custom input component that switches between reading and editing on the same page.
51 lines (50 loc) • 1.82 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = require("react");
var usePrevious = function usePrevious(value) {
var ref = (0, _react.useRef)();
(0, _react.useEffect)(function () {
ref.current = value;
}, [value]);
return ref.current;
};
var useButtonFocusHook = function useButtonFocusHook(isEditing, isEditingState) {
var editButtonRef = (0, _react.useRef)(null);
var editViewRef = (0, _react.useRef)();
var preventFocusOnEditButtonRef = (0, _react.useRef)(false);
var isControlled = typeof isEditing === 'undefined';
var shouldBeEditing = isControlled ? isEditingState : isEditing;
var prevIsEditing = usePrevious(shouldBeEditing);
(0, _react.useEffect)(function () {
if (isEditingState && editViewRef.current) {
editViewRef.current.focus();
}
}, [editViewRef, isEditingState]);
(0, _react.useEffect)(function () {
/**
* This logic puts the focus on the edit button after confirming using
* the confirm button or using the keyboard to confirm, but not when
* it is confirmed by wrapper blur
*/
if (prevIsEditing && !shouldBeEditing) {
if (preventFocusOnEditButtonRef && preventFocusOnEditButtonRef.current) {
preventFocusOnEditButtonRef.current = false;
} else if (editButtonRef && editButtonRef.current) {
editButtonRef.current.focus();
}
}
}, [prevIsEditing, shouldBeEditing]);
var doNotFocusOnEditButton = function doNotFocusOnEditButton() {
return preventFocusOnEditButtonRef.current = true;
};
return {
editButtonRef: editButtonRef,
editViewRef: editViewRef,
shouldBeEditing: shouldBeEditing,
doNotFocusOnEditButton: doNotFocusOnEditButton
};
};
var _default = exports.default = useButtonFocusHook;