[DE mobile] Add preloader for long actions
This commit is contained in:
parent
45bbe12dda
commit
bc7713368a
50
apps/common/mobile/utils/IrregularStack.js
Normal file
50
apps/common/mobile/utils/IrregularStack.js
Normal file
|
@ -0,0 +1,50 @@
|
|||
|
||||
export default class IrregularStack {
|
||||
constructor (config) {
|
||||
this._stack = [];
|
||||
|
||||
const _config = config || {};
|
||||
this._strongCompare = _config.strongCompare || this._compare;
|
||||
this._weakCompare = _config.weakCompare || this._compare;
|
||||
}
|
||||
|
||||
_compare (obj1, obj2) {
|
||||
if (typeof obj1 === 'object' && typeof obj2 === 'object' && window.JSON)
|
||||
return window.JSON.stringify(obj1) === window.JSON.stringify(obj2);
|
||||
return obj1 === obj2;
|
||||
};
|
||||
|
||||
_indexOf (obj, compare) {
|
||||
for (let i = this._stack.length - 1; i >= 0; i--) {
|
||||
if (compare(this._stack[i], obj))
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
push (obj) {
|
||||
this._stack.push(obj);
|
||||
}
|
||||
|
||||
pop (obj) {
|
||||
const index = this._indexOf(obj, this._strongCompare);
|
||||
if (index !== -1) {
|
||||
const removed = this._stack.splice(index, 1);
|
||||
return removed[0];
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
get (obj) {
|
||||
const index = this._indexOf(obj, this._weakCompare);
|
||||
if (index !== -1) {
|
||||
return this._stack[index];
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
exist (obj) {
|
||||
return !(this._indexOf(obj, this._strongCompare) < 0);
|
||||
}
|
||||
|
||||
}
|
|
@ -44,7 +44,41 @@
|
|||
"textNoLicenseTitle": "License limit reached",
|
||||
"textPaidFeature": "Paid feature",
|
||||
"textCustomLoader": "Please note that according to the terms of the license you are not entitled to change the loader. Please contact our Sales Department to get a quote.",
|
||||
"textClose": "Close"
|
||||
"textClose": "Close",
|
||||
|
||||
"openTitleText": "Opening Document",
|
||||
"openTextText": "Opening document...",
|
||||
"saveTitleText": "Saving Document",
|
||||
"saveTextText": "Saving document...",
|
||||
"loadFontsTitleText": "Loading Data",
|
||||
"loadFontsTextText": "Loading data...",
|
||||
"loadImagesTitleText": "Loading Images",
|
||||
"loadImagesTextText": "Loading images...",
|
||||
"loadFontTitleText": "Loading Data",
|
||||
"loadFontTextText": "Loading data...",
|
||||
"loadImageTitleText": "Loading Image",
|
||||
"loadImageTextText": "Loading image...",
|
||||
"downloadTitleText": "Downloading Document",
|
||||
"downloadTextText": "Downloading document...",
|
||||
"printTitleText": "Printing Document",
|
||||
"printTextText": "Printing document...",
|
||||
"uploadImageTitleText": "Uploading Image",
|
||||
"uploadImageTextText": "Uploading image...",
|
||||
"applyChangesTitleText": "Loading Data",
|
||||
"applyChangesTextText": "Loading data...",
|
||||
"savePreparingText": "Preparing to save",
|
||||
"savePreparingTitle": "Preparing to save. Please wait...",
|
||||
"mailMergeLoadFileText": "Loading Data Source...",
|
||||
"mailMergeLoadFileTitle": "Loading Data Source",
|
||||
"downloadMergeTitle": "Downloading",
|
||||
"downloadMergeText": "Downloading...",
|
||||
"sendMergeTitle": "Sending Merge",
|
||||
"sendMergeText": "Sending Merge...",
|
||||
"waitText": "Please, wait...",
|
||||
"txtEditingMode": "Set editing mode...",
|
||||
"loadingDocumentTitleText": "Loading document",
|
||||
"loadingDocumentTextText": "Loading document...",
|
||||
"textLoadingDocument": "Loading document"
|
||||
},
|
||||
"Toolbar": {
|
||||
"dlgLeaveTitleText": "You leave the application",
|
||||
|
|
|
@ -4,6 +4,7 @@ import {inject} from "mobx-react";
|
|||
import { f7 } from "framework7-react";
|
||||
import { withTranslation } from 'react-i18next';
|
||||
import { LocalStorage } from '../../../../common/mobile/utils/LocalStorage';
|
||||
import IrregularStack from '../../../../common/mobile/utils/IrregularStack';
|
||||
import CollaborationController from '../../../../common/mobile/lib/controller/collaboration/Collaboration.jsx';
|
||||
import {InitReviewController as ReviewController} from '../../../../common/mobile/lib/controller/collaboration/Review.jsx';
|
||||
import { onAdvancedOptions } from './settings/Download.jsx';
|
||||
|
@ -35,8 +36,15 @@ class MainController extends Component {
|
|||
licenseType: false
|
||||
};
|
||||
|
||||
this.stackLongActions = new IrregularStack({
|
||||
strongCompare : function(obj1, obj2){return obj1.id === obj2.id && obj1.type === obj2.type;},
|
||||
weakCompare : function(obj1, obj2){return obj1.type === obj2.type;}
|
||||
});
|
||||
|
||||
const { t } = this.props;
|
||||
this._t = t('Main', {returnObjects:true});
|
||||
|
||||
this.LoadingDocument = -256;
|
||||
}
|
||||
|
||||
initSdk() {
|
||||
|
@ -181,6 +189,9 @@ class MainController extends Component {
|
|||
Common.Notifications.trigger('document:ready');
|
||||
|
||||
this._isDocReady = true;
|
||||
|
||||
f7.dialog.close(this.loadMask.el);
|
||||
this.onLongActionEnd(Asc.c_oAscAsyncActionType['BlockInteraction'], this.LoadingDocument);
|
||||
};
|
||||
|
||||
const _process_array = (array, fn) => {
|
||||
|
@ -388,6 +399,10 @@ class MainController extends Component {
|
|||
}
|
||||
|
||||
bindEvents() {
|
||||
this.api.asc_registerCallback('asc_onStartAction', this.onLongActionBegin.bind(this));
|
||||
this.api.asc_registerCallback('asc_onEndAction', this.onLongActionEnd.bind(this));
|
||||
this.api.asc_registerCallback('asc_onOpenDocumentProgress', this.onOpenDocument.bind(this));
|
||||
|
||||
this.api.asc_registerCallback('asc_onSendThemeColors', (colors, standart_colors) => {
|
||||
Common.Utils.ThemeColor.setColors(colors, standart_colors);
|
||||
});
|
||||
|
@ -519,6 +534,153 @@ class MainController extends Component {
|
|||
});
|
||||
}
|
||||
|
||||
onLongActionBegin (type, id) {
|
||||
const action = {id: id, type: type};
|
||||
this.stackLongActions.push(action);
|
||||
this.setLongActionView(action);
|
||||
}
|
||||
|
||||
onLongActionEnd (type, id) {
|
||||
let action = {id: id, type: type};
|
||||
this.stackLongActions.pop(action);
|
||||
|
||||
//this.updateWindowTitle(true);
|
||||
|
||||
action = this.stackLongActions.get({type: Asc.c_oAscAsyncActionType.Information});
|
||||
|
||||
if (action) {
|
||||
this.setLongActionView(action)
|
||||
}
|
||||
|
||||
action = this.stackLongActions.get({type: Asc.c_oAscAsyncActionType.BlockInteraction});
|
||||
|
||||
if (action) {
|
||||
this.setLongActionView(action)
|
||||
} else {
|
||||
this.loadMask.el && this.loadMask.el.classList.contains('modal-in') && f7.dialog.close(this.loadMask.el);
|
||||
}
|
||||
}
|
||||
|
||||
setLongActionView (action) {
|
||||
const _t = this._t;
|
||||
let title = '';
|
||||
let text = '';
|
||||
switch (action.id) {
|
||||
case Asc.c_oAscAsyncAction['Open']:
|
||||
title = _t.openTitleText;
|
||||
text = _t.openTextText;
|
||||
break;
|
||||
|
||||
case Asc.c_oAscAsyncAction['Save']:
|
||||
title = _t.saveTitleText;
|
||||
text = _t.saveTextText;
|
||||
break;
|
||||
|
||||
case Asc.c_oAscAsyncAction['LoadDocumentFonts']:
|
||||
title = _t.loadFontsTitleText;
|
||||
text = _t.loadFontsTextText;
|
||||
break;
|
||||
|
||||
case Asc.c_oAscAsyncAction['LoadDocumentImages']:
|
||||
title = _t.loadImagesTitleText;
|
||||
text = _t.loadImagesTextText;
|
||||
break;
|
||||
|
||||
case Asc.c_oAscAsyncAction['LoadFont']:
|
||||
title = _t.loadFontTitleText;
|
||||
text = _t.loadFontTextText;
|
||||
break;
|
||||
|
||||
case Asc.c_oAscAsyncAction['LoadImage']:
|
||||
title = _t.loadImageTitleText;
|
||||
text = _t.loadImageTextText;
|
||||
break;
|
||||
|
||||
case Asc.c_oAscAsyncAction['DownloadAs']:
|
||||
title = _t.downloadTitleText;
|
||||
text = _t.downloadTextText;
|
||||
break;
|
||||
|
||||
case Asc.c_oAscAsyncAction['Print']:
|
||||
title = _t.printTitleText;
|
||||
text = _t.printTextText;
|
||||
break;
|
||||
|
||||
case Asc.c_oAscAsyncAction['UploadImage']:
|
||||
title = _t.uploadImageTitleText;
|
||||
text = _t.uploadImageTextText;
|
||||
break;
|
||||
|
||||
case Asc.c_oAscAsyncAction['ApplyChanges']:
|
||||
title = _t.applyChangesTitleText;
|
||||
text = _t.applyChangesTextText;
|
||||
break;
|
||||
|
||||
case Asc.c_oAscAsyncAction['PrepareToSave']:
|
||||
title = _t.savePreparingText;
|
||||
text = _t.savePreparingTitle;
|
||||
break;
|
||||
|
||||
case Asc.c_oAscAsyncAction['MailMergeLoadFile']:
|
||||
title = _t.mailMergeLoadFileText;
|
||||
text = _t.mailMergeLoadFileTitle;
|
||||
break;
|
||||
|
||||
case Asc.c_oAscAsyncAction['DownloadMerge']:
|
||||
title = _t.downloadMergeTitle;
|
||||
text = _t.downloadMergeText;
|
||||
break;
|
||||
|
||||
case Asc.c_oAscAsyncAction['SendMailMerge']:
|
||||
title = _t.sendMergeTitle;
|
||||
text = _t.sendMergeText;
|
||||
break;
|
||||
|
||||
case Asc.c_oAscAsyncAction['Waiting']:
|
||||
title = _t.waitText;
|
||||
text = _t.waitText;
|
||||
break;
|
||||
|
||||
case ApplyEditRights:
|
||||
title = _t.txtEditingMode;
|
||||
text = _t.txtEditingMode;
|
||||
break;
|
||||
|
||||
case LoadingDocument:
|
||||
title = _t.loadingDocumentTitleText;
|
||||
text = _t.loadingDocumentTextText;
|
||||
break;
|
||||
default:
|
||||
if (typeof action.id == 'string'){
|
||||
title = action.id;
|
||||
text = action.id;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (action.type === Asc.c_oAscAsyncActionType['BlockInteraction']) {
|
||||
if (action.id === Asc.c_oAscAsyncAction['ApplyChanges']) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.loadMask && this.loadMask.el && this.loadMask.el.classList.contains('modal-in')) {
|
||||
this.loadMask.el.getElementsByClassName('dialog-title')[0].innerHTML = title;
|
||||
} else {
|
||||
this.loadMask = f7.dialog.preloader(title);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
onOpenDocument (progress) {
|
||||
if (this.loadMask && this.loadMask.el) {
|
||||
const $title = this.loadMask.el.getElementsByClassName('dialog-title')[0];
|
||||
const proc = (progress.asc_getCurrentFont() + progress.asc_getCurrentImage())/(progress.asc_getFontsCount() + progress.asc_getImagesCount());
|
||||
|
||||
$title.innerHTML = `${this._t.textLoadingDocument}: ${Math.min(Math.round(proc * 100), 100)}%`;
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<Fragment>
|
||||
|
|
Loading…
Reference in a new issue