use-stomp
Version:
react provider, class decorator, and a hook for websockets using the stomp protocol
102 lines (97 loc) • 12.6 kB
JavaScript
import "core-js/modules/es.object.get-own-property-descriptor";
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
import _defineProperty from "@babel/runtime/helpers/defineProperty";
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
import { SnackbarProvider } from 'notistack';
import React, { useEffect, useMemo } from 'react';
import UseStompCtx from './context';
import useToggle from './useToggle';
import WebSocketWorker from './webSocketWorker';
var UseStompNotificationsProvider = /*#__PURE__*/React.memo(function (name, callable) {
callable.displayName = name;
Object.defineProperty(callable, "name", _objectSpread(_objectSpread({}, Object.getOwnPropertyDescriptor(callable, "name")), {}, {
value: name
}));
return callable;
}("UseStompNotificationsProvider", function (_ref) {
var authHeader = _ref.authHeader,
headers = _ref.headers,
reconnectInterval = _ref.reconnectInterval,
reconnectMaxAttempts = _ref.reconnectMaxAttempts,
testReconnect = _ref.testReconnect,
url = _ref.url,
props = _objectWithoutProperties(_ref, ["authHeader", "headers", "reconnectInterval", "reconnectMaxAttempts", "testReconnect", "url"]);
var _useToggle = useToggle(false),
_useToggle2 = _slicedToArray(_useToggle, 2),
connected = _useToggle2[0],
toggleConnected = _useToggle2[1];
var worker = useMemo(function (name, callable) {
callable.displayName = name;
Object.defineProperty(callable, "name", _objectSpread(_objectSpread({}, Object.getOwnPropertyDescriptor(callable, "name")), {}, {
value: name
}));
return callable;
}("worker", function () {
return new WebSocketWorker({
onConnected: toggleConnected,
onDisconnected: toggleConnected,
reconnectInterval: reconnectInterval,
reconnectMaxAttempts: reconnectMaxAttempts,
url: url
});
}), []);
useEffect(function () {
if (authHeader) {
worker.setAuthHeader(authHeader);
worker.connect();
}
}, [authHeader]);
useEffect(function () {
return function () {
worker.destroy();
};
}, []);
var ctx = useMemo(function (name, callable) {
callable.displayName = name;
Object.defineProperty(callable, "name", _objectSpread(_objectSpread({}, Object.getOwnPropertyDescriptor(callable, "name")), {}, {
value: name
}));
return callable;
}("ctx", function () {
return {
connected: connected,
dismiss: worker.dismiss,
send: worker.send,
subscribe: worker.subscribe,
subscribeSync: worker.subscribeSync
};
}), [connected, worker.dismiss, worker.send, worker.subscribe, worker.subscribeSync]);
useEffect(function () {
if (connected && testReconnect) {
var timeout = setTimeout(function (name, callable) {
callable.displayName = name;
Object.defineProperty(callable, "name", _objectSpread(_objectSpread({}, Object.getOwnPropertyDescriptor(callable, "name")), {}, {
value: name
}));
return callable;
}("timeout", function () {
worker.testDisconnect();
}), 10000);
return function () {
clearTimeout(timeout);
};
}
}, [connected, testReconnect]);
return /*#__PURE__*/React.createElement(UseStompCtx.Provider, {
value: ctx
}, /*#__PURE__*/React.createElement(SnackbarProvider, props, props.children));
}));
UseStompNotificationsProvider.defaultProps = {
maxSnack: 3,
reconnectInterval: 10000,
reconnectMaxAttempts: 10
};
export default UseStompNotificationsProvider;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91c2VTdG9tcE5vdGlmaWNhdGlvbnNQcm92aWRlci50c3giXSwibmFtZXMiOlsiU25hY2tiYXJQcm92aWRlciIsIlJlYWN0IiwidXNlRWZmZWN0IiwidXNlTWVtbyIsIlVzZVN0b21wQ3R4IiwidXNlVG9nZ2xlIiwiV2ViU29ja2V0V29ya2VyIiwiVXNlU3RvbXBOb3RpZmljYXRpb25zUHJvdmlkZXIiLCJtZW1vIiwiYXV0aEhlYWRlciIsImhlYWRlcnMiLCJyZWNvbm5lY3RJbnRlcnZhbCIsInJlY29ubmVjdE1heEF0dGVtcHRzIiwidGVzdFJlY29ubmVjdCIsInVybCIsInByb3BzIiwiY29ubmVjdGVkIiwidG9nZ2xlQ29ubmVjdGVkIiwid29ya2VyIiwib25Db25uZWN0ZWQiLCJvbkRpc2Nvbm5lY3RlZCIsInNldEF1dGhIZWFkZXIiLCJjb25uZWN0IiwiZGVzdHJveSIsImN0eCIsImRpc21pc3MiLCJzZW5kIiwic3Vic2NyaWJlIiwic3Vic2NyaWJlU3luYyIsInRpbWVvdXQiLCJzZXRUaW1lb3V0IiwidGVzdERpc2Nvbm5lY3QiLCJjbGVhclRpbWVvdXQiLCJjaGlsZHJlbiIsImRlZmF1bHRQcm9wcyIsIm1heFNuYWNrIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxTQUFRQSxnQkFBUixRQUErQixXQUEvQjtBQUVBLE9BQU9DLEtBQVAsSUFBZUMsU0FBZixFQUEwQkMsT0FBMUIsUUFBa0QsT0FBbEQ7QUFFQSxPQUFPQyxXQUFQLE1BQXdCLFdBQXhCO0FBQ0EsT0FBT0MsU0FBUCxNQUFzQixhQUF0QjtBQUNBLE9BQU9DLGVBQVAsTUFBNEIsbUJBQTVCO0FBNkJBLElBQU1DLDZCQUEyRSxnQkFBR04sS0FBSyxDQUFDTyxJQUFOO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1DQUNoRixnQkFRTTtBQUFBLE1BUEZDLFVBT0UsUUFQRkEsVUFPRTtBQUFBLE1BTkZDLE9BTUUsUUFORkEsT0FNRTtBQUFBLE1BTEZDLGlCQUtFLFFBTEZBLGlCQUtFO0FBQUEsTUFKRkMsb0JBSUUsUUFKRkEsb0JBSUU7QUFBQSxNQUhGQyxhQUdFLFFBSEZBLGFBR0U7QUFBQSxNQUZGQyxHQUVFLFFBRkZBLEdBRUU7QUFBQSxNQURDQyxLQUNEOztBQUFBLG1CQUNtQ1YsU0FBUyxDQUFDLEtBQUQsQ0FENUM7QUFBQTtBQUFBLE1BQ0tXLFNBREw7QUFBQSxNQUNnQkMsZUFEaEI7O0FBR0YsTUFBTUMsTUFBTSxHQUFHZixPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBQ2xCO0FBQUEsV0FDSSxJQUFJRyxlQUFKLENBQW9CO0FBQ2hCYSxNQUFBQSxXQUFXLEVBQUVGLGVBREc7QUFFaEJHLE1BQUFBLGNBQWMsRUFBRUgsZUFGQTtBQUdoQk4sTUFBQUEsaUJBQWlCLEVBQWpCQSxpQkFIZ0I7QUFJaEJDLE1BQUFBLG9CQUFvQixFQUFwQkEsb0JBSmdCO0FBS2hCRSxNQUFBQSxHQUFHLEVBQUVBO0FBTFcsS0FBcEIsQ0FESjtBQUFBLEdBRGtCLEdBU2xCLEVBVGtCLENBQXRCO0FBWUFaLEVBQUFBLFNBQVMsQ0FBQyxZQUFNO0FBQ1osUUFBSU8sVUFBSixFQUFnQjtBQUNaUyxNQUFBQSxNQUFNLENBQUNHLGFBQVAsQ0FBcUJaLFVBQXJCO0FBQ0FTLE1BQUFBLE1BQU0sQ0FBQ0ksT0FBUDtBQUNIO0FBQ0osR0FMUSxFQUtOLENBQUNiLFVBQUQsQ0FMTSxDQUFUO0FBT0FQLEVBQUFBLFNBQVMsQ0FBQyxZQUFNO0FBQ1osV0FBTyxZQUFNO0FBQ1RnQixNQUFBQSxNQUFNLENBQUNLLE9BQVA7QUFDSCxLQUZEO0FBR0gsR0FKUSxFQUlOLEVBSk0sQ0FBVDtBQU1BLE1BQU1DLEdBQUcsR0FBR3JCLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsV0FDZjtBQUFBLFdBQU87QUFDSGEsTUFBQUEsU0FBUyxFQUFUQSxTQURHO0FBRUhTLE1BQUFBLE9BQU8sRUFBRVAsTUFBTSxDQUFDTyxPQUZiO0FBR0hDLE1BQUFBLElBQUksRUFBRVIsTUFBTSxDQUFDUSxJQUhWO0FBSUhDLE1BQUFBLFNBQVMsRUFBRVQsTUFBTSxDQUFDUyxTQUpmO0FBS0hDLE1BQUFBLGFBQWEsRUFBRVYsTUFBTSxDQUFDVTtBQUxuQixLQUFQO0FBQUEsR0FEZSxHQVFmLENBQ0laLFNBREosRUFFSUUsTUFBTSxDQUFDTyxPQUZYLEVBR0lQLE1BQU0sQ0FBQ1EsSUFIWCxFQUlJUixNQUFNLENBQUNTLFNBSlgsRUFLSVQsTUFBTSxDQUFDVSxhQUxYLENBUmUsQ0FBbkI7QUFpQkExQixFQUFBQSxTQUFTLENBQUMsWUFBTTtBQUNaLFFBQUljLFNBQVMsSUFBSUgsYUFBakIsRUFBZ0M7QUFDNUIsVUFBTWdCLE9BQU8sR0FBR0MsVUFBVTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBQyxZQUFNO0FBQzdCWixRQUFBQSxNQUFNLENBQUNhLGNBQVA7QUFDSCxPQUZ5QixHQUV2QixLQUZ1QixDQUExQjtBQUlBLGFBQU8sWUFBTTtBQUNUQyxRQUFBQSxZQUFZLENBQUNILE9BQUQsQ0FBWjtBQUNILE9BRkQ7QUFHSDtBQUNKLEdBVlEsRUFVTixDQUFDYixTQUFELEVBQVlILGFBQVosQ0FWTSxDQUFUO0FBWUEsc0JBQ0ksb0JBQUMsV0FBRCxDQUFhLFFBQWI7QUFBc0IsSUFBQSxLQUFLLEVBQUVXO0FBQTdCLGtCQUNJLG9CQUFDLGdCQUFELEVBQXNCVCxLQUF0QixFQUE4QkEsS0FBSyxDQUFDa0IsUUFBcEMsQ0FESixDQURKO0FBS0gsQ0F2RStFLEVBQXBGO0FBMEVBMUIsNkJBQTZCLENBQUMyQixZQUE5QixHQUE2QztBQUN6Q0MsRUFBQUEsUUFBUSxFQUFFLENBRCtCO0FBRXpDeEIsRUFBQUEsaUJBQWlCLEVBQUUsS0FGc0I7QUFHekNDLEVBQUFBLG9CQUFvQixFQUFFO0FBSG1CLENBQTdDO0FBTUEsZUFBZUwsNkJBQWYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NuYWNrYmFyUHJvdmlkZXJ9IGZyb20gJ25vdGlzdGFjayc7XG5pbXBvcnQgdHlwZSB7U25hY2tiYXJQcm92aWRlclByb3BzfSBmcm9tICdub3Rpc3RhY2snO1xuaW1wb3J0IFJlYWN0LCB7dXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQgVXNlU3RvbXBDdHggZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB1c2VUb2dnbGUgZnJvbSAnLi91c2VUb2dnbGUnO1xuaW1wb3J0IFdlYlNvY2tldFdvcmtlciBmcm9tICcuL3dlYlNvY2tldFdvcmtlcic7XG5cbmV4cG9ydCB0eXBlIFVzZVN0b21wTm90aWZpY2F0aW9uc1Byb3ZpZGVyUHJvcHMgPSBTbmFja2JhclByb3ZpZGVyUHJvcHMgJiB7XG4gICAgLyoqXG4gICAgICogdXJsIHRvIGNvbm5lY3QgdG8gc3RvbXAgcHJvdG9jb2xcbiAgICAgKi9cbiAgICB1cmw6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiByZXF1ZXN0IGF1dGggaGVhZGVyIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBzZXJ2ZXIgb3IgYWdlbnQgdGhyb3VnaCB0aGUgU1RPTVAgY29ubmVjdGlvbiBmcmFtZVxuICAgICAqL1xuICAgIGF1dGhIZWFkZXI/OiBzdHJpbmc7XG4gICAgLyoqXG4gICAgICogcmVxdWVzdCBoZWFkZXIgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIHNlcnZlciBvciBhZ2VudCB0aHJvdWdoIHRoZSBTVE9NUCBjb25uZWN0aW9uIGZyYW1lXG4gICAgICovXG4gICAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIC8qKlxuICAgICAqIGludGVydmFsKG1zKSBvZiBhdHRlbXB0cyB0byByZWNvbm5lY3Qgd2hlbiB0aGUgd2Vic29ja2V0IGNvbm5lY3Rpb24gaXMgZHJvcHBlZDsgZGVmYXVsdCBpcyAxMCwwMDBtc1xuICAgICAqL1xuICAgIHJlY29ubmVjdEludGVydmFsPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIG1heCBudW1iZXIgb2YgYXR0ZW1wdHMgdG8gcmVjb25uZWN0IHdoZW4gd2Vic29ja2V0IGNvbm5lY3Rpb24gaXMgZHJvcHBlZDsgZGVmYXVsdCBpcyAxMFxuICAgICAqL1xuICAgIHJlY29ubmVjdE1heEF0dGVtcHRzPzogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIGVuYWJsZSB0ZXN0aW5nIG9mIHJlY29ubmVjdGlvblxuICAgICAqL1xuICAgIHRlc3RSZWNvbm5lY3Q/OiBib29sZWFuO1xufTtcblxuY29uc3QgVXNlU3RvbXBOb3RpZmljYXRpb25zUHJvdmlkZXI6IFJlYWN0LkZDPFVzZVN0b21wTm90aWZpY2F0aW9uc1Byb3ZpZGVyUHJvcHM+ID0gUmVhY3QubWVtbyhcbiAgICAoe1xuICAgICAgICBhdXRoSGVhZGVyLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICByZWNvbm5lY3RJbnRlcnZhbCxcbiAgICAgICAgcmVjb25uZWN0TWF4QXR0ZW1wdHMsXG4gICAgICAgIHRlc3RSZWNvbm5lY3QsXG4gICAgICAgIHVybCxcbiAgICAgICAgLi4ucHJvcHNcbiAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IFtjb25uZWN0ZWQsIHRvZ2dsZUNvbm5lY3RlZF0gPSB1c2VUb2dnbGUoZmFsc2UpO1xuXG4gICAgICAgIGNvbnN0IHdvcmtlciA9IHVzZU1lbW88V2ViU29ja2V0V29ya2VyPihcbiAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgbmV3IFdlYlNvY2tldFdvcmtlcih7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29ubmVjdGVkOiB0b2dnbGVDb25uZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgIG9uRGlzY29ubmVjdGVkOiB0b2dnbGVDb25uZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgIHJlY29ubmVjdEludGVydmFsLFxuICAgICAgICAgICAgICAgICAgICByZWNvbm5lY3RNYXhBdHRlbXB0cyxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICk7XG5cbiAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChhdXRoSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgd29ya2VyLnNldEF1dGhIZWFkZXIoYXV0aEhlYWRlcik7XG4gICAgICAgICAgICAgICAgd29ya2VyLmNvbm5lY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW2F1dGhIZWFkZXJdKTtcblxuICAgICAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICB3b3JrZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSwgW10pO1xuXG4gICAgICAgIGNvbnN0IGN0eCA9IHVzZU1lbW8oXG4gICAgICAgICAgICAoKSA9PiAoe1xuICAgICAgICAgICAgICAgIGNvbm5lY3RlZCxcbiAgICAgICAgICAgICAgICBkaXNtaXNzOiB3b3JrZXIuZGlzbWlzcyxcbiAgICAgICAgICAgICAgICBzZW5kOiB3b3JrZXIuc2VuZCxcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmU6IHdvcmtlci5zdWJzY3JpYmUsXG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlU3luYzogd29ya2VyLnN1YnNjcmliZVN5bmNcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIGNvbm5lY3RlZCxcbiAgICAgICAgICAgICAgICB3b3JrZXIuZGlzbWlzcyxcbiAgICAgICAgICAgICAgICB3b3JrZXIuc2VuZCxcbiAgICAgICAgICAgICAgICB3b3JrZXIuc3Vic2NyaWJlLFxuICAgICAgICAgICAgICAgIHdvcmtlci5zdWJzY3JpYmVTeW5jXG4gICAgICAgICAgICBdXG4gICAgICAgICk7XG5cbiAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChjb25uZWN0ZWQgJiYgdGVzdFJlY29ubmVjdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgd29ya2VyLnRlc3REaXNjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgfSwgMTAwMDApO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIFtjb25uZWN0ZWQsIHRlc3RSZWNvbm5lY3RdKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFVzZVN0b21wQ3R4LlByb3ZpZGVyIHZhbHVlPXtjdHh9PlxuICAgICAgICAgICAgICAgIDxTbmFja2JhclByb3ZpZGVyIHsuLi5wcm9wc30+e3Byb3BzLmNoaWxkcmVufTwvU25hY2tiYXJQcm92aWRlcj5cbiAgICAgICAgICAgIDwvVXNlU3RvbXBDdHguUHJvdmlkZXI+XG4gICAgICAgICk7XG4gICAgfVxuKTtcblxuVXNlU3RvbXBOb3RpZmljYXRpb25zUHJvdmlkZXIuZGVmYXVsdFByb3BzID0ge1xuICAgIG1heFNuYWNrOiAzLFxuICAgIHJlY29ubmVjdEludGVydmFsOiAxMDAwMCxcbiAgICByZWNvbm5lY3RNYXhBdHRlbXB0czogMTBcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFVzZVN0b21wTm90aWZpY2F0aW9uc1Byb3ZpZGVyO1xuIl19