lib/hooks/useStoreState.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.useStoreState = void 0;
var react_1 = require("react");
/**
*
* @param store Store to subscribe to
* @param valueName Name of the state value to subscribe to
* @returns [Selected value, setter]
*/
function useStoreState(store, valueName) {
// Make sure store is passed in
if (!store) {
console.error("Store passed in is undefined, failed to bind to ".concat(valueName.toString()));
}
var currentValue = store.state[valueName];
// Setup state to trigger updates when changes happen
var _a = (0, react_1.useState)(currentValue), value = _a[0], setValue = _a[1];
//
var storeSetter = (0, react_1.useCallback)(function (newValue) {
var newState = {};
newState[valueName] = newValue;
store.setState(newState);
}, [store, valueName]);
// Use effect to subscribe to the store's selected value's changes
(0, react_1.useEffect)(function () {
// Store or valueName has changed, update state
setValue(currentValue);
//
store.subscribeToChanges(setValue, valueName.toString());
return function () {
//
store.unSubscribeToChanges(setValue, valueName.toString());
};
}, [setValue, valueName, store]);
return [value, storeSetter];
}
exports.useStoreState = useStoreState;
//# sourceMappingURL=useStoreState.js.map