matrix-react-sdk
Version:
SDK for matrix.org using React
41 lines (37 loc) • 4.68 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useAsyncRefreshMemo = useAsyncRefreshMemo;
var _react = require("react");
/*
Copyright 2024 New Vector Ltd.
Copyright 2023 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
/**
* Works just like useMemo or our own useAsyncMemo, but additionally exposes a method to refresh the cached value
* as if the dependency had changed
* @param fn function to memoize
* @param deps React hooks dependencies for the function
* @param initialValue initial value
* @return tuple of cached value and refresh callback
*/
function useAsyncRefreshMemo(fn, deps, initialValue) {
const [value, setValue] = (0, _react.useState)(initialValue);
const refresh = (0, _react.useCallback)(() => {
let discard = false;
fn().then(v => {
if (!discard) {
setValue(v);
}
}).catch(err => console.error(err));
return () => {
discard = true;
};
}, deps); // eslint-disable-line react-hooks/exhaustive-deps
(0, _react.useEffect)(refresh, [refresh]);
return [value, refresh];
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwidXNlQXN5bmNSZWZyZXNoTWVtbyIsImZuIiwiZGVwcyIsImluaXRpYWxWYWx1ZSIsInZhbHVlIiwic2V0VmFsdWUiLCJ1c2VTdGF0ZSIsInJlZnJlc2giLCJ1c2VDYWxsYmFjayIsImRpc2NhcmQiLCJ0aGVuIiwidiIsImNhdGNoIiwiZXJyIiwiY29uc29sZSIsImVycm9yIiwidXNlRWZmZWN0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hvb2tzL3VzZUFzeW5jUmVmcmVzaE1lbW8udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjMgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgRGVwZW5kZW5jeUxpc3QsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5cbnR5cGUgRm48VD4gPSAoKSA9PiBQcm9taXNlPFQ+O1xuXG4vKipcbiAqIFdvcmtzIGp1c3QgbGlrZSB1c2VNZW1vIG9yIG91ciBvd24gdXNlQXN5bmNNZW1vLCBidXQgYWRkaXRpb25hbGx5IGV4cG9zZXMgYSBtZXRob2QgdG8gcmVmcmVzaCB0aGUgY2FjaGVkIHZhbHVlXG4gKiBhcyBpZiB0aGUgZGVwZW5kZW5jeSBoYWQgY2hhbmdlZFxuICogQHBhcmFtIGZuIGZ1bmN0aW9uIHRvIG1lbW9pemVcbiAqIEBwYXJhbSBkZXBzIFJlYWN0IGhvb2tzIGRlcGVuZGVuY2llcyBmb3IgdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gaW5pdGlhbFZhbHVlIGluaXRpYWwgdmFsdWVcbiAqIEByZXR1cm4gdHVwbGUgb2YgY2FjaGVkIHZhbHVlIGFuZCByZWZyZXNoIGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VBc3luY1JlZnJlc2hNZW1vPFQ+KGZuOiBGbjxUPiwgZGVwczogRGVwZW5kZW5jeUxpc3QsIGluaXRpYWxWYWx1ZTogVCk6IFtULCAoKSA9PiB2b2lkXTtcbmV4cG9ydCBmdW5jdGlvbiB1c2VBc3luY1JlZnJlc2hNZW1vPFQ+KGZuOiBGbjxUPiwgZGVwczogRGVwZW5kZW5jeUxpc3QsIGluaXRpYWxWYWx1ZT86IFQpOiBbVCB8IHVuZGVmaW5lZCwgKCkgPT4gdm9pZF07XG5leHBvcnQgZnVuY3Rpb24gdXNlQXN5bmNSZWZyZXNoTWVtbzxUPihmbjogRm48VD4sIGRlcHM6IERlcGVuZGVuY3lMaXN0LCBpbml0aWFsVmFsdWU/OiBUKTogW1QgfCB1bmRlZmluZWQsICgpID0+IHZvaWRdIHtcbiAgICBjb25zdCBbdmFsdWUsIHNldFZhbHVlXSA9IHVzZVN0YXRlPFQgfCB1bmRlZmluZWQ+KGluaXRpYWxWYWx1ZSk7XG4gICAgY29uc3QgcmVmcmVzaCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgbGV0IGRpc2NhcmQgPSBmYWxzZTtcbiAgICAgICAgZm4oKVxuICAgICAgICAgICAgLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWRpc2NhcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWUodik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyKSA9PiBjb25zb2xlLmVycm9yKGVycikpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgZGlzY2FyZCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSwgZGVwcyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgdXNlRWZmZWN0KHJlZnJlc2gsIFtyZWZyZXNoXSk7XG4gICAgcmV0dXJuIFt2YWx1ZSwgcmVmcmVzaF07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQVJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR08sU0FBU0MsbUJBQW1CQSxDQUFJQyxFQUFTLEVBQUVDLElBQW9CLEVBQUVDLFlBQWdCLEVBQStCO0VBQ25ILE1BQU0sQ0FBQ0MsS0FBSyxFQUFFQyxRQUFRLENBQUMsR0FBRyxJQUFBQyxlQUFRLEVBQWdCSCxZQUFZLENBQUM7RUFDL0QsTUFBTUksT0FBTyxHQUFHLElBQUFDLGtCQUFXLEVBQUMsTUFBTTtJQUM5QixJQUFJQyxPQUFPLEdBQUcsS0FBSztJQUNuQlIsRUFBRSxDQUFDLENBQUMsQ0FDQ1MsSUFBSSxDQUFFQyxDQUFDLElBQUs7TUFDVCxJQUFJLENBQUNGLE9BQU8sRUFBRTtRQUNWSixRQUFRLENBQUNNLENBQUMsQ0FBQztNQUNmO0lBQ0osQ0FBQyxDQUFDLENBQ0RDLEtBQUssQ0FBRUMsR0FBRyxJQUFLQyxPQUFPLENBQUNDLEtBQUssQ0FBQ0YsR0FBRyxDQUFDLENBQUM7SUFDdkMsT0FBTyxNQUFNO01BQ1RKLE9BQU8sR0FBRyxJQUFJO0lBQ2xCLENBQUM7RUFDTCxDQUFDLEVBQUVQLElBQUksQ0FBQyxDQUFDLENBQUM7RUFDVixJQUFBYyxnQkFBUyxFQUFDVCxPQUFPLEVBQUUsQ0FBQ0EsT0FBTyxDQUFDLENBQUM7RUFDN0IsT0FBTyxDQUFDSCxLQUFLLEVBQUVHLE9BQU8sQ0FBQztBQUMzQiIsImlnbm9yZUxpc3QiOltdfQ==