85 lines
2.3 KiB
JavaScript
85 lines
2.3 KiB
JavaScript
import { ParseCloudCodePublisher } from '../LiveQuery/ParseCloudCodePublisher';
|
|
import { LiveQueryOptions } from '../Options';
|
|
import { getClassName } from './../triggers';
|
|
export class LiveQueryController {
|
|
classNames: any;
|
|
liveQueryPublisher: any;
|
|
|
|
constructor(config: ?LiveQueryOptions) {
|
|
// If config is empty, we just assume no classs needs to be registered as LiveQuery
|
|
if (!config || !config.classNames) {
|
|
this.classNames = new Set();
|
|
} else if (config.classNames instanceof Array) {
|
|
const classNames = config.classNames.map(name => {
|
|
const _name = getClassName(name);
|
|
return new RegExp(`^${_name}$`);
|
|
});
|
|
this.classNames = new Set(classNames);
|
|
} else {
|
|
throw 'liveQuery.classes should be an array of string';
|
|
}
|
|
this.liveQueryPublisher = new ParseCloudCodePublisher(config);
|
|
}
|
|
|
|
connect() {
|
|
return this.liveQueryPublisher.connect();
|
|
}
|
|
|
|
onAfterSave(
|
|
className: string,
|
|
currentObject: any,
|
|
originalObject: any,
|
|
classLevelPermissions: ?any
|
|
) {
|
|
if (!this.hasLiveQuery(className)) {
|
|
return;
|
|
}
|
|
const req = this._makePublisherRequest(currentObject, originalObject, classLevelPermissions);
|
|
this.liveQueryPublisher.onCloudCodeAfterSave(req);
|
|
}
|
|
|
|
onAfterDelete(
|
|
className: string,
|
|
currentObject: any,
|
|
originalObject: any,
|
|
classLevelPermissions: any
|
|
) {
|
|
if (!this.hasLiveQuery(className)) {
|
|
return;
|
|
}
|
|
const req = this._makePublisherRequest(currentObject, originalObject, classLevelPermissions);
|
|
this.liveQueryPublisher.onCloudCodeAfterDelete(req);
|
|
}
|
|
|
|
hasLiveQuery(className: string): boolean {
|
|
for (const name of this.classNames) {
|
|
if (name.test(className)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
clearCachedRoles(user: any) {
|
|
if (!user) {
|
|
return;
|
|
}
|
|
return this.liveQueryPublisher.onClearCachedRoles(user);
|
|
}
|
|
|
|
_makePublisherRequest(currentObject: any, originalObject: any, classLevelPermissions: ?any): any {
|
|
const req = {
|
|
object: currentObject,
|
|
};
|
|
if (currentObject) {
|
|
req.original = originalObject;
|
|
}
|
|
if (classLevelPermissions) {
|
|
req.classLevelPermissions = classLevelPermissions;
|
|
}
|
|
return req;
|
|
}
|
|
}
|
|
|
|
export default LiveQueryController;
|