react-native-firebase/lib/modules/messaging/RemoteMessage.js

156 lines
3.2 KiB
JavaScript

/**
* @flow
* RemoteMessage representation wrapper
*/
import { isObject, generatePushID } from './../../utils';
import type {
NativeInboundRemoteMessage,
NativeOutboundRemoteMessage,
} from './types';
export default class RemoteMessage {
_collapseKey: string | void;
_data: { [string]: string };
_from: string | void;
_messageId: string;
_messageType: string | void;
_sentTime: number | void;
_to: string;
_ttl: number;
constructor(inboundMessage?: NativeInboundRemoteMessage) {
if (inboundMessage) {
this._collapseKey = inboundMessage.collapseKey;
this._data = inboundMessage.data;
this._from = inboundMessage.from;
this._messageId = inboundMessage.messageId;
this._messageType = inboundMessage.messageType;
this._sentTime = inboundMessage.sentTime;
}
// defaults
this._data = this._data || {};
// TODO: Is this the best way to generate an ID?
this._messageId = this._messageId || generatePushID();
this._ttl = 3600;
}
get collapseKey(): ?string {
return this._collapseKey;
}
get data(): { [string]: string } {
return this._data;
}
get from(): ?string {
return this._from;
}
get messageId(): ?string {
return this._messageId;
}
get messageType(): ?string {
return this._messageType;
}
get sentTime(): ?number {
return this._sentTime;
}
get to(): ?string {
return this._to;
}
get ttl(): ?number {
return this._ttl;
}
/**
*
* @param collapseKey
* @returns {RemoteMessage}
*/
setCollapseKey(collapseKey: string): RemoteMessage {
this._collapseKey = collapseKey;
return this;
}
/**
*
* @param data
* @returns {RemoteMessage}
*/
setData(data: { [string]: string } = {}) {
if (!isObject(data)) {
throw new Error(
`RemoteMessage:setData expects an object but got type '${typeof data}'.`
);
}
this._data = data;
return this;
}
/**
*
* @param messageId
* @returns {RemoteMessage}
*/
setMessageId(messageId: string): RemoteMessage {
this._messageId = messageId;
return this;
}
/**
*
* @param messageType
* @returns {RemoteMessage}
*/
setMessageType(messageType: string): RemoteMessage {
this._messageType = messageType;
return this;
}
/**
*
* @param to
* @returns {RemoteMessage}
*/
setTo(to: string): RemoteMessage {
this._to = to;
return this;
}
/**
*
* @param ttl
* @returns {RemoteMessage}
*/
setTtl(ttl: number): RemoteMessage {
this._ttl = ttl;
return this;
}
build(): NativeOutboundRemoteMessage {
if (!this.data) {
throw new Error('RemoteMessage: Missing required `data` property');
} else if (!this.messageId) {
throw new Error('RemoteMessage: Missing required `messageId` property');
} else if (!this.to) {
throw new Error('RemoteMessage: Missing required `to` property');
} else if (!this.ttl) {
throw new Error('RemoteMessage: Missing required `ttl` property');
}
return {
collapseKey: this._collapseKey,
data: this._data,
messageId: this._messageId,
messageType: this._messageType,
to: this._to,
ttl: this._ttl,
};
}
}