matrix-react-sdk
Version:
SDK for matrix.org using React
64 lines (61 loc) • 6.66 kB
JavaScript
;
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==