UNPKG

matrix-react-sdk

Version:
41 lines (37 loc) 4.68 kB
"use strict"; 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==