use-stomp
Version:
react provider, class decorator, and a hook for websockets using the stomp protocol
87 lines (71 loc) • 11.5 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
require("core-js/modules/es.array.for-each");
require("core-js/modules/es.object.get-own-property-descriptor");
require("core-js/modules/web.dom-collections.for-each");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useStompNotifications;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _notistack = require("notistack");
var _react = require("react");
var _useStompCtx = require("./useStompCtx");
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) { (0, _defineProperty2.default)(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; }
function useStompNotifications(channel, options) {
var context = (0, _useStompCtx.useStompCtx)();
var _useSnackbar = (0, _notistack.useSnackbar)(),
closeSnackbar = _useSnackbar.closeSnackbar,
enqueueSnackbar = _useSnackbar.enqueueSnackbar;
var _useState = (0, _react.useState)([]),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
messages = _useState2[0],
setMessages = _useState2[1];
var send = (0, _react.useCallback)(function (name, callable) {
callable.displayName = name;
Object.defineProperty(callable, "name", _objectSpread(_objectSpread({}, Object.getOwnPropertyDescriptor(callable, "name")), {}, {
value: name
}));
return callable;
}("send", function (otherChannelOrMessage, message) {
context.send(otherChannelOrMessage && message ? otherChannelOrMessage : channel, message);
}), [channel, context.send]);
(0, _react.useEffect)(function () {
if (context.connected) {
var subscription = context.subscribeSync(channel, function (messages, added, removed) {
added.forEach(function (item) {
enqueueSnackbar(options.parseMessage ? options.parseMessage(item) : item.content, _objectSpread(_objectSpread(_objectSpread({
key: item.id,
disableWindowBlurListener: true,
ClickAwayListenerProps: {
mouseEvent: false,
touchEvent: false
}
}, options), options.action ? {
action: options.action(function () {
closeSnackbar(item.id);
})
} : {}), {}, {
onClose: function onClose() {
item.dismiss();
},
variant: options.parseVariant ? options.parseVariant(item) : item.variant || 'info'
}));
});
removed.forEach(function (item) {
closeSnackbar(item.id);
});
setMessages(function () {
return messages;
});
});
return function () {
subscription();
};
}
}, [channel, context.connected]);
return [messages, send, context.connected];
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91c2VTdG9tcE5vdGlmaWNhdGlvbnMudHN4Il0sIm5hbWVzIjpbInVzZVN0b21wTm90aWZpY2F0aW9ucyIsImNoYW5uZWwiLCJvcHRpb25zIiwiY29udGV4dCIsImNsb3NlU25hY2tiYXIiLCJlbnF1ZXVlU25hY2tiYXIiLCJtZXNzYWdlcyIsInNldE1lc3NhZ2VzIiwic2VuZCIsIm90aGVyQ2hhbm5lbE9yTWVzc2FnZSIsIm1lc3NhZ2UiLCJjb25uZWN0ZWQiLCJzdWJzY3JpcHRpb24iLCJzdWJzY3JpYmVTeW5jIiwiYWRkZWQiLCJyZW1vdmVkIiwiZm9yRWFjaCIsIml0ZW0iLCJwYXJzZU1lc3NhZ2UiLCJjb250ZW50Iiwia2V5IiwiaWQiLCJkaXNhYmxlV2luZG93Qmx1ckxpc3RlbmVyIiwiQ2xpY2tBd2F5TGlzdGVuZXJQcm9wcyIsIm1vdXNlRXZlbnQiLCJ0b3VjaEV2ZW50IiwiYWN0aW9uIiwib25DbG9zZSIsImRpc21pc3MiLCJ2YXJpYW50IiwicGFyc2VWYXJpYW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBRUE7O0FBR0E7Ozs7OztBQXFCZSxTQUFTQSxxQkFBVCxDQUlYQyxPQUpXLEVBS1hDLE9BTFcsRUFNK0Q7QUFDMUUsTUFBTUMsT0FBTyxHQUFHLCtCQUFoQjs7QUFEMEUscUJBRWpDLDZCQUZpQztBQUFBLE1BRW5FQyxhQUZtRSxnQkFFbkVBLGFBRm1FO0FBQUEsTUFFcERDLGVBRm9ELGdCQUVwREEsZUFGb0Q7O0FBQUEsa0JBRzFDLHFCQUU5QixFQUY4QixDQUgwQztBQUFBO0FBQUEsTUFHbkVDLFFBSG1FO0FBQUEsTUFHekRDLFdBSHlEOztBQU8xRSxNQUFNQyxJQUFJLEdBQUc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUFDVCxVQUFDQyxxQkFBRCxFQUF3QkMsT0FBeEIsRUFBb0M7QUFDaENQLElBQUFBLE9BQU8sQ0FBQ0ssSUFBUixDQUNJQyxxQkFBcUIsSUFBSUMsT0FBekIsR0FDTUQscUJBRE4sR0FFTVIsT0FIVixFQUlJUyxPQUpKO0FBTUgsR0FSUSxHQVNULENBQUNULE9BQUQsRUFBVUUsT0FBTyxDQUFDSyxJQUFsQixDQVRTLENBQWI7QUFZQSx3QkFBVSxZQUFNO0FBQ1osUUFBSUwsT0FBTyxDQUFDUSxTQUFaLEVBQXVCO0FBQ25CLFVBQU1DLFlBQVksR0FBR1QsT0FBTyxDQUFDVSxhQUFSLENBQ2pCWixPQURpQixFQUVqQixVQUFDSyxRQUFELEVBQVdRLEtBQVgsRUFBa0JDLE9BQWxCLEVBQThCO0FBQzFCRCxRQUFBQSxLQUFLLENBQUNFLE9BQU4sQ0FBYyxVQUFDQyxJQUFELEVBQVU7QUFDcEJaLFVBQUFBLGVBQWUsQ0FDWEgsT0FBTyxDQUFDZ0IsWUFBUixHQUNNaEIsT0FBTyxDQUFDZ0IsWUFBUixDQUFxQkQsSUFBckIsQ0FETixHQUVNQSxJQUFJLENBQUNFLE9BSEE7QUFLUEMsWUFBQUEsR0FBRyxFQUFFSCxJQUFJLENBQUNJLEVBTEg7QUFNUEMsWUFBQUEseUJBQXlCLEVBQUUsSUFOcEI7QUFPUEMsWUFBQUEsc0JBQXNCLEVBQUU7QUFDcEJDLGNBQUFBLFVBQVUsRUFBRSxLQURRO0FBRXBCQyxjQUFBQSxVQUFVLEVBQUU7QUFGUTtBQVBqQixhQVdKdkIsT0FYSSxHQVlIQSxPQUFPLENBQUN3QixNQUFSLEdBQ0U7QUFDSUEsWUFBQUEsTUFBTSxFQUFFeEIsT0FBTyxDQUFDd0IsTUFBUixDQUFlLFlBQU07QUFDekJ0QixjQUFBQSxhQUFhLENBQUNhLElBQUksQ0FBQ0ksRUFBTixDQUFiO0FBQ0gsYUFGTztBQURaLFdBREYsR0FNRSxFQWxCQztBQW1CUE0sWUFBQUEsT0FBTyxFQUFFLG1CQUFNO0FBQ1hWLGNBQUFBLElBQUksQ0FBQ1csT0FBTDtBQUNILGFBckJNO0FBc0JQQyxZQUFBQSxPQUFPLEVBQUUzQixPQUFPLENBQUM0QixZQUFSLEdBQ0g1QixPQUFPLENBQUM0QixZQUFSLENBQXFCYixJQUFyQixDQURHLEdBRUhBLElBQUksQ0FBQ1ksT0FBTCxJQUFnQjtBQXhCZixhQUFmO0FBMkJILFNBNUJEO0FBOEJBZCxRQUFBQSxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsVUFBQ0MsSUFBRCxFQUFVO0FBQ3RCYixVQUFBQSxhQUFhLENBQUNhLElBQUksQ0FBQ0ksRUFBTixDQUFiO0FBQ0gsU0FGRDtBQUlBZCxRQUFBQSxXQUFXLENBQUM7QUFBQSxpQkFBTUQsUUFBTjtBQUFBLFNBQUQsQ0FBWDtBQUNILE9BdENnQixDQUFyQjtBQXlDQSxhQUFPLFlBQU07QUFDVE0sUUFBQUEsWUFBWTtBQUNmLE9BRkQ7QUFHSDtBQUNKLEdBL0NELEVBK0NHLENBQUNYLE9BQUQsRUFBVUUsT0FBTyxDQUFDUSxTQUFsQixDQS9DSDtBQWlEQSxTQUFPLENBQUNMLFFBQUQsRUFBV0UsSUFBWCxFQUFpQkwsT0FBTyxDQUFDUSxTQUF6QixDQUFQO0FBQ0giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3VzZVNuYWNrYmFyfSBmcm9tICdub3Rpc3RhY2snO1xuaW1wb3J0IHR5cGUge09wdGlvbnNPYmplY3QsIFZhcmlhbnRUeXBlfSBmcm9tICdub3Rpc3RhY2snO1xuaW1wb3J0IHt1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG5pbXBvcnQge3VzZVN0b21wQ3R4fSBmcm9tICcuL3VzZVN0b21wQ3R4JztcblxuZXhwb3J0IHR5cGUgVXNlU3RvbXBOb3RpZmljYXRpb25zUHJvcHM8VCwgTT4gPSBbXG4gICAgVFtdLFxuICAgIChvdGhlckNoYW5uZWxPck1lc3NhZ2U6IHN0cmluZyB8IFQsIG1lc3NhZ2U/OiBNKSA9PiB2b2lkLFxuICAgIGJvb2xlYW5cbl07XG5cbmV4cG9ydCB0eXBlIFN0b21wTm90aWZpY2F0aW9uPFQ+ID0ge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY29udGVudDogVDtcbiAgICBkaXNtaXNzOiAoKSA9PiB2b2lkO1xuICAgIHZhcmlhbnQ/OiBWYXJpYW50VHlwZTtcbn07XG5cbmV4cG9ydCB0eXBlIFN0b21wTm90aXN0YWNrT3B0aW9uczxUPiA9IE9taXQ8T3B0aW9uc09iamVjdCwgJ2FjdGlvbicgfCAna2V5Jz4gJiB7XG4gICAgYWN0aW9uOiAoZGlzbWlzczogKCkgPT4gdm9pZCkgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICAgIHBhcnNlTWVzc2FnZT86IChtZXNzYWdlOiBTdG9tcE5vdGlmaWNhdGlvbjxUPikgPT4gUmVhY3QuUmVhY3ROb2RlO1xuICAgIHBhcnNlVmFyaWFudD86IChtZXNzYWdlOiBTdG9tcE5vdGlmaWNhdGlvbjxUPikgPT4gVmFyaWFudFR5cGU7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTdG9tcE5vdGlmaWNhdGlvbnM8XG4gICAgUmVjZWl2ZU1lc3NhZ2UsXG4gICAgU2VuZE1lc3NhZ2UgPSBhbnlcbj4oXG4gICAgY2hhbm5lbDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBTdG9tcE5vdGlzdGFja09wdGlvbnM8UmVjZWl2ZU1lc3NhZ2U+XG4pOiBVc2VTdG9tcE5vdGlmaWNhdGlvbnNQcm9wczxTdG9tcE5vdGlmaWNhdGlvbjxSZWNlaXZlTWVzc2FnZT4sIFNlbmRNZXNzYWdlPiB7XG4gICAgY29uc3QgY29udGV4dCA9IHVzZVN0b21wQ3R4KCk7XG4gICAgY29uc3Qge2Nsb3NlU25hY2tiYXIsIGVucXVldWVTbmFja2Jhcn0gPSB1c2VTbmFja2JhcigpO1xuICAgIGNvbnN0IFttZXNzYWdlcywgc2V0TWVzc2FnZXNdID0gdXNlU3RhdGU8XG4gICAgICAgIFN0b21wTm90aWZpY2F0aW9uPFJlY2VpdmVNZXNzYWdlPltdXG4gICAgPihbXSk7XG5cbiAgICBjb25zdCBzZW5kID0gdXNlQ2FsbGJhY2soXG4gICAgICAgIChvdGhlckNoYW5uZWxPck1lc3NhZ2UsIG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGNvbnRleHQuc2VuZChcbiAgICAgICAgICAgICAgICBvdGhlckNoYW5uZWxPck1lc3NhZ2UgJiYgbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICA/IG90aGVyQ2hhbm5lbE9yTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICA6IGNoYW5uZWwsXG4gICAgICAgICAgICAgICAgbWVzc2FnZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgW2NoYW5uZWwsIGNvbnRleHQuc2VuZF1cbiAgICApO1xuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGNvbnRleHQuY29ubmVjdGVkKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBjb250ZXh0LnN1YnNjcmliZVN5bmMoXG4gICAgICAgICAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgICAgICAgICAobWVzc2FnZXMsIGFkZGVkLCByZW1vdmVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGFkZGVkLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVucXVldWVTbmFja2JhcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnBhcnNlTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG9wdGlvbnMucGFyc2VNZXNzYWdlKGl0ZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlbS5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlV2luZG93Qmx1ckxpc3RlbmVyOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGlja0F3YXlMaXN0ZW5lclByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUV2ZW50OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdWNoRXZlbnQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLihvcHRpb25zLmFjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246IG9wdGlvbnMuYWN0aW9uKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVNuYWNrYmFyKGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzbWlzcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50OiBvcHRpb25zLnBhcnNlVmFyaWFudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvcHRpb25zLnBhcnNlVmFyaWFudChpdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtLnZhcmlhbnQgfHwgJ2luZm8nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVNuYWNrYmFyKGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBzZXRNZXNzYWdlcygoKSA9PiBtZXNzYWdlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9LCBbY2hhbm5lbCwgY29udGV4dC5jb25uZWN0ZWRdKTtcblxuICAgIHJldHVybiBbbWVzc2FnZXMsIHNlbmQsIGNvbnRleHQuY29ubmVjdGVkXTtcbn1cbiJdfQ==