[common] added common notifications controller

This commit is contained in:
Maxim Kadushkin 2020-09-01 11:42:25 +03:00
parent 43bf279535
commit a77aa2fc91
3 changed files with 46 additions and 14 deletions

View file

@ -1,5 +1,6 @@
import React, { useState } from 'react'
import { resetUsers } from '../store/actions/actions.js'
import Notifications from '../../utils/notifications.js'
const Collaboration = () => {
const onChangeEditUsers = (users) => {
@ -7,18 +8,21 @@ const Collaboration = () => {
store.dispatch(resetUsers(Object.values(users)));
};
Common.Notifications.on('engineCreated', api => {
// this.api = api;
api.asc_registerCallback('asc_onAuthParticipantsChanged', onChangeEditUsers);
api.asc_registerCallback('asc_onParticipantsChanged', onChangeEditUsers);
// this.api.asc_registerCallback('asc_onAddComment', _.bind(this.onApiAddComment, this));
// this.api.asc_registerCallback('asc_onAddComments', _.bind(this.onApiAddComments, this));
// this.api.asc_registerCallback('asc_onChangeCommentData', _.bind(this.onApiChangeCommentData, this));
// this.api.asc_registerCallback('asc_onRemoveComment', _.bind(this.onApiRemoveComment, this));
// this.api.asc_registerCallback('asc_onRemoveComments', _.bind(this.onApiRemoveComments, this));
// this.api.asc_registerCallback('asc_onShowComment', _.bind(this.apiShowComments, this));
// this.api.asc_registerCallback('asc_onHideComment', _.bind(this.apiHideComments, this));
});
return {
setApi(api) {
this.api = api;
this.api.asc_registerCallback('asc_onAuthParticipantsChanged', onChangeEditUsers);
this.api.asc_registerCallback('asc_onParticipantsChanged', onChangeEditUsers);
// this.api.asc_registerCallback('asc_onAddComment', _.bind(this.onApiAddComment, this));
// this.api.asc_registerCallback('asc_onAddComments', _.bind(this.onApiAddComments, this));
// this.api.asc_registerCallback('asc_onChangeCommentData', _.bind(this.onApiChangeCommentData, this));
// this.api.asc_registerCallback('asc_onRemoveComment', _.bind(this.onApiRemoveComment, this));
// this.api.asc_registerCallback('asc_onRemoveComments', _.bind(this.onApiRemoveComments, this));
// this.api.asc_registerCallback('asc_onShowComment', _.bind(this.apiShowComments, this));
// this.api.asc_registerCallback('asc_onHideComment', _.bind(this.apiHideComments, this));
}
}
};

View file

@ -0,0 +1,25 @@
export default class Notifications {
constructor() {
this._events = {};
}
on(event, callback) {
!this._events[event] && (this._events[event] = []);
this._events[event].push(callback);
}
off(event, callback) {
if ( this._events[event] && this._events[event].includes(callback) ) {
this._events[event].splice(this._events[event].indexOf(callback), 1);
}
}
trigger(event/*, args*/) {
if ( this._events[event] ) {
this._events[event].forEach(callback => {
callback.apply(this, Array.prototype.slice.call(arguments, 1));
});
}
}
}

View file

@ -28,6 +28,7 @@ import routes from '../js/routes';
import '../../../../common/Gateway.js';
import '../../../../common/main/lib/util/utils.js';
import { CollaborationController } from '../../../../common/mobile/lib/controller/Collaboration.jsx';
import Notifications from '../../../../common/mobile/utils/notifications.js'
export default class extends React.Component {
constructor() {
@ -48,6 +49,11 @@ export default class extends React.Component {
username: '',
password: '',
}
Common.Notifications = new Notifications();
Common.Controllers = {};
Common.Controllers.Collaboration = new CollaborationController();
}
render() {
return (
@ -244,10 +250,7 @@ export default class extends React.Component {
Common.Gateway.on('opendocument', loadDocument);
Common.Gateway.appReady();
Common.Controllers = {};
Common.Controllers.Collaboration = new CollaborationController();
Common.Controllers.Collaboration.setApi(this.api, "");
Common.Notifications.trigger('engineCreated', this.api);
}, error => {
console.log('promise failed ' + error);
});