UNPKG

matrix-react-sdk

Version:
64 lines (61 loc) 6.66 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.asyncAction = asyncAction; var _payloads = require("../dispatcher/payloads"); /* Copyright 2024 New Vector Ltd. Copyright 2020 The Matrix.org Foundation C.I.C. Copyright 2017 New Vector Ltd SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ /** * Create an action thunk that will dispatch actions indicating the current * status of the Promise returned by fn. * * @param {string} id the id to give the dispatched actions. This is given a * suffix determining whether it is pending, successful or * a failure. * @param {function} fn a function that returns a Promise. * @param {function?} pendingFn a function that returns an object to assign * to the `request` key of the ${id}.pending * payload. * @returns {AsyncActionPayload} an async action payload. Includes a function * that uses its single argument as a dispatch function * to dispatch the following actions: * `${id}.pending` and either * `${id}.success` or * `${id}.failure`. * * The shape of each are: * { action: '${id}.pending', request } * { action: '${id}.success', result } * { action: '${id}.failure', err } * * where `request` is returned by `pendingFn` and * result is the result of the promise returned by * `fn`. */ function asyncAction(id, fn, pendingFn) { const helper = dispatch => { dispatch({ action: id + ".pending", request: typeof pendingFn === "function" ? pendingFn() : undefined }); fn().then(result => { dispatch({ action: id + ".success", result }); }).catch(err => { dispatch({ action: id + ".failure", err }); }); }; return new _payloads.AsyncActionPayload(helper); } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF5bG9hZHMiLCJyZXF1aXJlIiwiYXN5bmNBY3Rpb24iLCJpZCIsImZuIiwicGVuZGluZ0ZuIiwiaGVscGVyIiwiZGlzcGF0Y2giLCJhY3Rpb24iLCJyZXF1ZXN0IiwidW5kZWZpbmVkIiwidGhlbiIsInJlc3VsdCIsImNhdGNoIiwiZXJyIiwiQXN5bmNBY3Rpb25QYXlsb2FkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FjdGlvbnMvYWN0aW9uQ3JlYXRvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjAgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cbkNvcHlyaWdodCAyMDE3IE5ldyBWZWN0b3IgTHRkXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCB7IEFzeW5jQWN0aW9uRm4sIEFzeW5jQWN0aW9uUGF5bG9hZCB9IGZyb20gXCIuLi9kaXNwYXRjaGVyL3BheWxvYWRzXCI7XG5cbi8qKlxuICogQ3JlYXRlIGFuIGFjdGlvbiB0aHVuayB0aGF0IHdpbGwgZGlzcGF0Y2ggYWN0aW9ucyBpbmRpY2F0aW5nIHRoZSBjdXJyZW50XG4gKiBzdGF0dXMgb2YgdGhlIFByb21pc2UgcmV0dXJuZWQgYnkgZm4uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlkIHRoZSBpZCB0byBnaXZlIHRoZSBkaXNwYXRjaGVkIGFjdGlvbnMuIFRoaXMgaXMgZ2l2ZW4gYVxuICogICAgICAgICAgICAgICAgICAgIHN1ZmZpeCBkZXRlcm1pbmluZyB3aGV0aGVyIGl0IGlzIHBlbmRpbmcsIHN1Y2Nlc3NmdWwgb3JcbiAqICAgICAgICAgICAgICAgICAgICBhIGZhaWx1cmUuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhIFByb21pc2UuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uP30gcGVuZGluZ0ZuIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIG9iamVjdCB0byBhc3NpZ25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGByZXF1ZXN0YCBrZXkgb2YgdGhlICR7aWR9LnBlbmRpbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5cbiAqIEByZXR1cm5zIHtBc3luY0FjdGlvblBheWxvYWR9IGFuIGFzeW5jIGFjdGlvbiBwYXlsb2FkLiBJbmNsdWRlcyBhIGZ1bmN0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgIHRoYXQgdXNlcyBpdHMgc2luZ2xlIGFyZ3VtZW50IGFzIGEgZGlzcGF0Y2ggZnVuY3Rpb25cbiAqICAgICAgICAgICAgICAgICAgICAgdG8gZGlzcGF0Y2ggdGhlIGZvbGxvd2luZyBhY3Rpb25zOlxuICogICAgICAgICAgICAgICAgICAgICAgICAgYCR7aWR9LnBlbmRpbmdgIGFuZCBlaXRoZXJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgIGAke2lkfS5zdWNjZXNzYCBvclxuICogICAgICAgICAgICAgICAgICAgICAgICAgYCR7aWR9LmZhaWx1cmVgLlxuICpcbiAqICAgICAgICAgICAgICAgICAgICAgVGhlIHNoYXBlIG9mIGVhY2ggYXJlOlxuICogICAgICAgICAgICAgICAgICAgICB7IGFjdGlvbjogJyR7aWR9LnBlbmRpbmcnLCByZXF1ZXN0IH1cbiAqICAgICAgICAgICAgICAgICAgICAgeyBhY3Rpb246ICcke2lkfS5zdWNjZXNzJywgcmVzdWx0IH1cbiAqICAgICAgICAgICAgICAgICAgICAgeyBhY3Rpb246ICcke2lkfS5mYWlsdXJlJywgZXJyIH1cbiAqXG4gKiAgICAgICAgICAgICAgICAgICAgIHdoZXJlIGByZXF1ZXN0YCBpcyByZXR1cm5lZCBieSBgcGVuZGluZ0ZuYCBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IGlzIHRoZSByZXN1bHQgb2YgdGhlIHByb21pc2UgcmV0dXJuZWQgYnlcbiAqICAgICAgICAgICAgICAgICAgICAgYGZuYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzeW5jQWN0aW9uKGlkOiBzdHJpbmcsIGZuOiAoKSA9PiBQcm9taXNlPGFueT4sIHBlbmRpbmdGbjogKCkgPT4gYW55IHwgbnVsbCk6IEFzeW5jQWN0aW9uUGF5bG9hZCB7XG4gICAgY29uc3QgaGVscGVyOiBBc3luY0FjdGlvbkZuID0gKGRpc3BhdGNoKSA9PiB7XG4gICAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgICAgIGFjdGlvbjogaWQgKyBcIi5wZW5kaW5nXCIsXG4gICAgICAgICAgICByZXF1ZXN0OiB0eXBlb2YgcGVuZGluZ0ZuID09PSBcImZ1bmN0aW9uXCIgPyBwZW5kaW5nRm4oKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGZuKClcbiAgICAgICAgICAgIC50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBkaXNwYXRjaCh7IGFjdGlvbjogaWQgKyBcIi5zdWNjZXNzXCIsIHJlc3VsdCB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGRpc3BhdGNoKHsgYWN0aW9uOiBpZCArIFwiLmZhaWx1cmVcIiwgZXJyIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gbmV3IEFzeW5jQWN0aW9uUGF5bG9hZChoZWxwZXIpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFTQSxJQUFBQSxTQUFBLEdBQUFDLE9BQUE7QUFUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLFdBQVdBLENBQUNDLEVBQVUsRUFBRUMsRUFBc0IsRUFBRUMsU0FBMkIsRUFBc0I7RUFDN0csTUFBTUMsTUFBcUIsR0FBSUMsUUFBUSxJQUFLO0lBQ3hDQSxRQUFRLENBQUM7TUFDTEMsTUFBTSxFQUFFTCxFQUFFLEdBQUcsVUFBVTtNQUN2Qk0sT0FBTyxFQUFFLE9BQU9KLFNBQVMsS0FBSyxVQUFVLEdBQUdBLFNBQVMsQ0FBQyxDQUFDLEdBQUdLO0lBQzdELENBQUMsQ0FBQztJQUNGTixFQUFFLENBQUMsQ0FBQyxDQUNDTyxJQUFJLENBQUVDLE1BQU0sSUFBSztNQUNkTCxRQUFRLENBQUM7UUFBRUMsTUFBTSxFQUFFTCxFQUFFLEdBQUcsVUFBVTtRQUFFUztNQUFPLENBQUMsQ0FBQztJQUNqRCxDQUFDLENBQUMsQ0FDREMsS0FBSyxDQUFFQyxHQUFHLElBQUs7TUFDWlAsUUFBUSxDQUFDO1FBQUVDLE1BQU0sRUFBRUwsRUFBRSxHQUFHLFVBQVU7UUFBRVc7TUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDO0VBQ1YsQ0FBQztFQUNELE9BQU8sSUFBSUMsNEJBQWtCLENBQUNULE1BQU0sQ0FBQztBQUN6QyIsImlnbm9yZUxpc3QiOltdfQ==