use-stomp
Version:
react provider, class decorator, and a hook for websockets using the stomp protocol
71 lines (65 loc) • 11.4 kB
JavaScript
import "core-js/modules/es.array.for-each";
import "core-js/modules/es.object.get-own-property-descriptor";
import "core-js/modules/web.dom-collections.for-each";
import _defineProperty from "@babel/runtime/helpers/defineProperty";
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
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 { useSnackbar } from 'notistack';
import { useCallback, useEffect, useState } from 'react';
import { useStompCtx } from './useStompCtx';
export default function useStompNotifications(channel, options) {
var context = useStompCtx();
var _useSnackbar = useSnackbar(),
closeSnackbar = _useSnackbar.closeSnackbar,
enqueueSnackbar = _useSnackbar.enqueueSnackbar;
var _useState = useState([]),
_useState2 = _slicedToArray(_useState, 2),
messages = _useState2[0],
setMessages = _useState2[1];
var send = 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]);
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91c2VTdG9tcE5vdGlmaWNhdGlvbnMudHN4Il0sIm5hbWVzIjpbInVzZVNuYWNrYmFyIiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJ1c2VTdGF0ZSIsInVzZVN0b21wQ3R4IiwidXNlU3RvbXBOb3RpZmljYXRpb25zIiwiY2hhbm5lbCIsIm9wdGlvbnMiLCJjb250ZXh0IiwiY2xvc2VTbmFja2JhciIsImVucXVldWVTbmFja2JhciIsIm1lc3NhZ2VzIiwic2V0TWVzc2FnZXMiLCJzZW5kIiwib3RoZXJDaGFubmVsT3JNZXNzYWdlIiwibWVzc2FnZSIsImNvbm5lY3RlZCIsInN1YnNjcmlwdGlvbiIsInN1YnNjcmliZVN5bmMiLCJhZGRlZCIsInJlbW92ZWQiLCJmb3JFYWNoIiwiaXRlbSIsInBhcnNlTWVzc2FnZSIsImNvbnRlbnQiLCJrZXkiLCJpZCIsImRpc2FibGVXaW5kb3dCbHVyTGlzdGVuZXIiLCJDbGlja0F3YXlMaXN0ZW5lclByb3BzIiwibW91c2VFdmVudCIsInRvdWNoRXZlbnQiLCJhY3Rpb24iLCJvbkNsb3NlIiwiZGlzbWlzcyIsInZhcmlhbnQiLCJwYXJzZVZhcmlhbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxTQUFRQSxXQUFSLFFBQTBCLFdBQTFCO0FBRUEsU0FBUUMsV0FBUixFQUFxQkMsU0FBckIsRUFBZ0NDLFFBQWhDLFFBQStDLE9BQS9DO0FBR0EsU0FBUUMsV0FBUixRQUEwQixlQUExQjtBQXFCQSxlQUFlLFNBQVNDLHFCQUFULENBSVhDLE9BSlcsRUFLWEMsT0FMVyxFQU0rRDtBQUMxRSxNQUFNQyxPQUFPLEdBQUdKLFdBQVcsRUFBM0I7O0FBRDBFLHFCQUVqQ0osV0FBVyxFQUZzQjtBQUFBLE1BRW5FUyxhQUZtRSxnQkFFbkVBLGFBRm1FO0FBQUEsTUFFcERDLGVBRm9ELGdCQUVwREEsZUFGb0Q7O0FBQUEsa0JBRzFDUCxRQUFRLENBRXRDLEVBRnNDLENBSGtDO0FBQUE7QUFBQSxNQUduRVEsUUFIbUU7QUFBQSxNQUd6REMsV0FIeUQ7O0FBTzFFLE1BQU1DLElBQUksR0FBR1osV0FBVztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxZQUNwQixVQUFDYSxxQkFBRCxFQUF3QkMsT0FBeEIsRUFBb0M7QUFDaENQLElBQUFBLE9BQU8sQ0FBQ0ssSUFBUixDQUNJQyxxQkFBcUIsSUFBSUMsT0FBekIsR0FDTUQscUJBRE4sR0FFTVIsT0FIVixFQUlJUyxPQUpKO0FBTUgsR0FSbUIsR0FTcEIsQ0FBQ1QsT0FBRCxFQUFVRSxPQUFPLENBQUNLLElBQWxCLENBVG9CLENBQXhCO0FBWUFYLEVBQUFBLFNBQVMsQ0FBQyxZQUFNO0FBQ1osUUFBSU0sT0FBTyxDQUFDUSxTQUFaLEVBQXVCO0FBQ25CLFVBQU1DLFlBQVksR0FBR1QsT0FBTyxDQUFDVSxhQUFSLENBQ2pCWixPQURpQixFQUVqQixVQUFDSyxRQUFELEVBQVdRLEtBQVgsRUFBa0JDLE9BQWxCLEVBQThCO0FBQzFCRCxRQUFBQSxLQUFLLENBQUNFLE9BQU4sQ0FBYyxVQUFDQyxJQUFELEVBQVU7QUFDcEJaLFVBQUFBLGVBQWUsQ0FDWEgsT0FBTyxDQUFDZ0IsWUFBUixHQUNNaEIsT0FBTyxDQUFDZ0IsWUFBUixDQUFxQkQsSUFBckIsQ0FETixHQUVNQSxJQUFJLENBQUNFLE9BSEE7QUFLUEMsWUFBQUEsR0FBRyxFQUFFSCxJQUFJLENBQUNJLEVBTEg7QUFNUEMsWUFBQUEseUJBQXlCLEVBQUUsSUFOcEI7QUFPUEMsWUFBQUEsc0JBQXNCLEVBQUU7QUFDcEJDLGNBQUFBLFVBQVUsRUFBRSxLQURRO0FBRXBCQyxjQUFBQSxVQUFVLEVBQUU7QUFGUTtBQVBqQixhQVdKdkIsT0FYSSxHQVlIQSxPQUFPLENBQUN3QixNQUFSLEdBQ0U7QUFDSUEsWUFBQUEsTUFBTSxFQUFFeEIsT0FBTyxDQUFDd0IsTUFBUixDQUFlLFlBQU07QUFDekJ0QixjQUFBQSxhQUFhLENBQUNhLElBQUksQ0FBQ0ksRUFBTixDQUFiO0FBQ0gsYUFGTztBQURaLFdBREYsR0FNRSxFQWxCQztBQW1CUE0sWUFBQUEsT0FBTyxFQUFFLG1CQUFNO0FBQ1hWLGNBQUFBLElBQUksQ0FBQ1csT0FBTDtBQUNILGFBckJNO0FBc0JQQyxZQUFBQSxPQUFPLEVBQUUzQixPQUFPLENBQUM0QixZQUFSLEdBQ0g1QixPQUFPLENBQUM0QixZQUFSLENBQXFCYixJQUFyQixDQURHLEdBRUhBLElBQUksQ0FBQ1ksT0FBTCxJQUFnQjtBQXhCZixhQUFmO0FBMkJILFNBNUJEO0FBOEJBZCxRQUFBQSxPQUFPLENBQUNDLE9BQVIsQ0FBZ0IsVUFBQ0MsSUFBRCxFQUFVO0FBQ3RCYixVQUFBQSxhQUFhLENBQUNhLElBQUksQ0FBQ0ksRUFBTixDQUFiO0FBQ0gsU0FGRDtBQUlBZCxRQUFBQSxXQUFXLENBQUM7QUFBQSxpQkFBTUQsUUFBTjtBQUFBLFNBQUQsQ0FBWDtBQUNILE9BdENnQixDQUFyQjtBQXlDQSxhQUFPLFlBQU07QUFDVE0sUUFBQUEsWUFBWTtBQUNmLE9BRkQ7QUFHSDtBQUNKLEdBL0NRLEVBK0NOLENBQUNYLE9BQUQsRUFBVUUsT0FBTyxDQUFDUSxTQUFsQixDQS9DTSxDQUFUO0FBaURBLFNBQU8sQ0FBQ0wsUUFBRCxFQUFXRSxJQUFYLEVBQWlCTCxPQUFPLENBQUNRLFNBQXpCLENBQVA7QUFDSCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dXNlU25hY2tiYXJ9IGZyb20gJ25vdGlzdGFjayc7XG5pbXBvcnQgdHlwZSB7T3B0aW9uc09iamVjdCwgVmFyaWFudFR5cGV9IGZyb20gJ25vdGlzdGFjayc7XG5pbXBvcnQge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCB7dXNlU3RvbXBDdHh9IGZyb20gJy4vdXNlU3RvbXBDdHgnO1xuXG5leHBvcnQgdHlwZSBVc2VTdG9tcE5vdGlmaWNhdGlvbnNQcm9wczxULCBNPiA9IFtcbiAgICBUW10sXG4gICAgKG90aGVyQ2hhbm5lbE9yTWVzc2FnZTogc3RyaW5nIHwgVCwgbWVzc2FnZT86IE0pID0+IHZvaWQsXG4gICAgYm9vbGVhblxuXTtcblxuZXhwb3J0IHR5cGUgU3RvbXBOb3RpZmljYXRpb248VD4gPSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb250ZW50OiBUO1xuICAgIGRpc21pc3M6ICgpID0+IHZvaWQ7XG4gICAgdmFyaWFudD86IFZhcmlhbnRUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgU3RvbXBOb3Rpc3RhY2tPcHRpb25zPFQ+ID0gT21pdDxPcHRpb25zT2JqZWN0LCAnYWN0aW9uJyB8ICdrZXknPiAmIHtcbiAgICBhY3Rpb246IChkaXNtaXNzOiAoKSA9PiB2b2lkKSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgcGFyc2VNZXNzYWdlPzogKG1lc3NhZ2U6IFN0b21wTm90aWZpY2F0aW9uPFQ+KSA9PiBSZWFjdC5SZWFjdE5vZGU7XG4gICAgcGFyc2VWYXJpYW50PzogKG1lc3NhZ2U6IFN0b21wTm90aWZpY2F0aW9uPFQ+KSA9PiBWYXJpYW50VHlwZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVN0b21wTm90aWZpY2F0aW9uczxcbiAgICBSZWNlaXZlTWVzc2FnZSxcbiAgICBTZW5kTWVzc2FnZSA9IGFueVxuPihcbiAgICBjaGFubmVsOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IFN0b21wTm90aXN0YWNrT3B0aW9uczxSZWNlaXZlTWVzc2FnZT5cbik6IFVzZVN0b21wTm90aWZpY2F0aW9uc1Byb3BzPFN0b21wTm90aWZpY2F0aW9uPFJlY2VpdmVNZXNzYWdlPiwgU2VuZE1lc3NhZ2U+IHtcbiAgICBjb25zdCBjb250ZXh0ID0gdXNlU3RvbXBDdHgoKTtcbiAgICBjb25zdCB7Y2xvc2VTbmFja2JhciwgZW5xdWV1ZVNuYWNrYmFyfSA9IHVzZVNuYWNrYmFyKCk7XG4gICAgY29uc3QgW21lc3NhZ2VzLCBzZXRNZXNzYWdlc10gPSB1c2VTdGF0ZTxcbiAgICAgICAgU3RvbXBOb3RpZmljYXRpb248UmVjZWl2ZU1lc3NhZ2U+W11cbiAgICA+KFtdKTtcblxuICAgIGNvbnN0IHNlbmQgPSB1c2VDYWxsYmFjayhcbiAgICAgICAgKG90aGVyQ2hhbm5lbE9yTWVzc2FnZSwgbWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgY29udGV4dC5zZW5kKFxuICAgICAgICAgICAgICAgIG90aGVyQ2hhbm5lbE9yTWVzc2FnZSAmJiBtZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgID8gb3RoZXJDaGFubmVsT3JNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgIDogY2hhbm5lbCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBbY2hhbm5lbCwgY29udGV4dC5zZW5kXVxuICAgICk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoY29udGV4dC5jb25uZWN0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGNvbnRleHQuc3Vic2NyaWJlU3luYyhcbiAgICAgICAgICAgICAgICBjaGFubmVsLFxuICAgICAgICAgICAgICAgIChtZXNzYWdlcywgYWRkZWQsIHJlbW92ZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkZWQuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5xdWV1ZVNuYWNrYmFyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyc2VNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5wYXJzZU1lc3NhZ2UoaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVtLmNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVXaW5kb3dCbHVyTGlzdGVuZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsaWNrQXdheUxpc3RlbmVyUHJvcHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG91Y2hFdmVudDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKG9wdGlvbnMuYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogb3B0aW9ucy5hY3Rpb24oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlU25hY2tiYXIoaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kaXNtaXNzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ6IG9wdGlvbnMucGFyc2VWYXJpYW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG9wdGlvbnMucGFyc2VWYXJpYW50KGl0ZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGl0ZW0udmFyaWFudCB8fCAnaW5mbydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZW1vdmVkLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlU25hY2tiYXIoaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHNldE1lc3NhZ2VzKCgpID0+IG1lc3NhZ2VzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0sIFtjaGFubmVsLCBjb250ZXh0LmNvbm5lY3RlZF0pO1xuXG4gICAgcmV0dXJuIFttZXNzYWdlcywgc2VuZCwgY29udGV4dC5jb25uZWN0ZWRdO1xufVxuIl19