Home Reference Source

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