78 lines
1.7 KiB
JavaScript
78 lines
1.7 KiB
JavaScript
import Postis from 'postis';
|
|
|
|
/**
|
|
* The default options for postis.
|
|
*
|
|
* @type {Object}
|
|
*/
|
|
const DEFAULT_POSTIS_OPTIONS = {
|
|
window: window.opener || window.parent
|
|
};
|
|
|
|
/**
|
|
* The postis method used for all messages.
|
|
*
|
|
* @type {string}
|
|
*/
|
|
const POSTIS_METHOD_NAME = 'message';
|
|
|
|
/**
|
|
* Implements message transport using the postMessage API.
|
|
*/
|
|
export default class PostMessageTransportBackend {
|
|
/**
|
|
* Creates new PostMessageTransportBackend instance.
|
|
*
|
|
* @param {Object} options - Optional parameters for configuration of the
|
|
* transport.
|
|
*/
|
|
constructor({ postisOptions } = {}) {
|
|
// eslint-disable-next-line new-cap
|
|
this.postis = Postis({
|
|
...DEFAULT_POSTIS_OPTIONS,
|
|
...postisOptions
|
|
});
|
|
|
|
this._receiveCallback = () => {
|
|
// Do nothing until a callback is set by the consumer of
|
|
// PostMessageTransportBackend via setReceiveCallback.
|
|
};
|
|
|
|
this.postis.listen(
|
|
POSTIS_METHOD_NAME,
|
|
message => this._receiveCallback(message));
|
|
}
|
|
|
|
/**
|
|
* Disposes the allocated resources.
|
|
*
|
|
* @returns {void}
|
|
*/
|
|
dispose() {
|
|
this.postis.destroy();
|
|
}
|
|
|
|
/**
|
|
* Sends the passed message.
|
|
*
|
|
* @param {Object} message - The message to be sent.
|
|
* @returns {void}
|
|
*/
|
|
send(message) {
|
|
this.postis.send({
|
|
method: POSTIS_METHOD_NAME,
|
|
params: message
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Sets the callback for receiving data.
|
|
*
|
|
* @param {Function} callback - The new callback.
|
|
* @returns {void}
|
|
*/
|
|
setReceiveCallback(callback) {
|
|
this._receiveCallback = callback;
|
|
}
|
|
}
|