@atlaskit/editor-plugin-find-replace
Version:
find replace plugin for @atlaskit/editor-core
35 lines (34 loc) • 1.63 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useFindReplacePluginStateSelector = useFindReplacePluginStateSelector;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = require("react");
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
// custom non-debounced hook for the find-replace plugin shared state
function useFindReplacePluginStateSelector(api, key) {
var _useState = (0, _react.useState)(function () {
var currentState = api === null || api === void 0 ? void 0 : api.findReplace.sharedState.currentState();
return currentState === null || currentState === void 0 ? void 0 : currentState[key];
}),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
selectedState = _useState2[0],
setSelectedState = _useState2[1];
var previousStateRef = (0, _react.useRef)(selectedState);
(0, _react.useEffect)(function () {
var unsub = api === null || api === void 0 ? void 0 : api.findReplace.sharedState.onChange(function (_ref) {
var nextSharedState = _ref.nextSharedState;
var newState = nextSharedState === null || nextSharedState === void 0 ? void 0 : nextSharedState[key];
if (!(0, _isEqual.default)(previousStateRef.current, newState)) {
previousStateRef.current = newState;
setSelectedState(newState);
}
});
return function () {
unsub === null || unsub === void 0 || unsub();
};
}, [api, key]);
return selectedState;
}