diff --git a/apps/documenteditor/mobile/locale/en.json b/apps/documenteditor/mobile/locale/en.json index 35aae25ff4..cbd0bb9d25 100644 --- a/apps/documenteditor/mobile/locale/en.json +++ b/apps/documenteditor/mobile/locale/en.json @@ -20,7 +20,16 @@ "textTop": "Top", "textBottom": "Bottom", "textLeft": "Left", - "textRight": "Right" + "textRight": "Right", + "textDocumentTitle": "Document Title", + "textOwner": "Owner", + "textUploaded": "Uploaded", + "textStatistic": "Statistic", + "textLastModifiedBy": "Last Modified By", + "textLastModified": "Last Modified", + "textApplication": "Application", + "textLoading": "Loading...", + "textAuthor": "Author" }, "Collaboration": { "textEditUser": "Users who are editing the file:" diff --git a/apps/documenteditor/mobile/src/controller/Main.jsx b/apps/documenteditor/mobile/src/controller/Main.jsx index 69871530ec..06c1d41643 100644 --- a/apps/documenteditor/mobile/src/controller/Main.jsx +++ b/apps/documenteditor/mobile/src/controller/Main.jsx @@ -3,7 +3,7 @@ import React, {Component} from 'react' import {inject} from "mobx-react"; import CollaborationController from '../../../../common/mobile/lib/controller/Collaboration.jsx' -@inject("storeDocumentSettings", "storeFocusObjects", "storeTextSettings", "storeParagraphSettings", "storeTableSettings") +@inject("storeDocumentSettings", "storeFocusObjects", "storeTextSettings", "storeParagraphSettings", "storeTableSettings", "storeDocumentInfo") class MainController extends Component { constructor(props) { super(props) @@ -87,6 +87,12 @@ class MainController extends Component { this.api.asc_setDocInfo(docInfo); this.api.asc_getEditorPermissions(this.editorConfig.licenseUrl, this.editorConfig.customerId); + // Document Info + + const storeDocumentInfo = this.props.storeDocumentInfo; + + storeDocumentInfo.setDataDoc(data.doc); + // Common.SharedSettings.set('document', data.doc); // if (data.doc) { @@ -238,6 +244,31 @@ class MainController extends Component { storeTableSettings.initTableTemplates(templates); }); + // Document Info + + const storeDocumentInfo = this.props.storeDocumentInfo; + + this.api.asc_registerCallback("asc_onGetDocInfoStart", () => { + console.log("Start"); + storeDocumentInfo.switchIsLoaded(false); + }); + + this.api.asc_registerCallback("asc_onGetDocInfoStop", () => { + console.log("Stop"); + storeDocumentInfo.switchIsLoaded(true); + }); + + this.api.asc_registerCallback("asc_onDocInfo", (obj) => { + storeDocumentInfo.changeCount(obj); + }); + + this.api.asc_registerCallback('asc_onGetDocInfoEnd', () => { + console.log('End'); + storeDocumentInfo.switchIsLoaded(true); + }); + + // me.api.asc_registerCallback('asc_onDocumentName', _.bind(me.onApiDocumentName, me)); + } render() { diff --git a/apps/documenteditor/mobile/src/controller/settings/DocumentInfo.jsx b/apps/documenteditor/mobile/src/controller/settings/DocumentInfo.jsx new file mode 100644 index 0000000000..3f75bdcc80 --- /dev/null +++ b/apps/documenteditor/mobile/src/controller/settings/DocumentInfo.jsx @@ -0,0 +1,77 @@ +import React, { Component } from "react"; +import DocumentInfo from "../../view/settings/DocumentInfo"; + +class DocumentInfoController extends Component { + constructor(props) { + super(props); + this.docProps = this.getDocProps(); + this.getModified = this.getModified(); + this.getModifiedBy = this.getModifiedBy(); + this.getCreators = this.getCreators(); + } + + getDocProps() { + const api = Common.EditorApi.get(); + return api.asc_getCoreProps(); + } + + getAppProps() { + const api = Common.EditorApi.get(); + const appProps = api.asc_getAppProps(); + + if (appProps) { + let appName = + (appProps.asc_getApplication() || "") + + (appProps.asc_getAppVersion() ? " " : "") + + (appProps.asc_getAppVersion() || ""); + return appName; + } + } + + getModified() { + let valueModified = this.docProps.asc_getModified(); + + if (valueModified) { + return ( + valueModified.toLocaleString('en', { + year: "numeric", + month: "2-digit", + day: "2-digit", + }) + + " " + + valueModified.toLocaleTimeString('en', { timeStyle: "short" }) + ); + } + } + + getModifiedBy() { + let valueModifiedBy = this.docProps.asc_getLastModifiedBy(); + + if (valueModifiedBy) { + return Common.Utils.UserInfoParser.getParsedName(valueModifiedBy); + } + } + + getCreators() { + return this.docProps.asc_getCreator(); + } + + componentDidMount() { + const api = Common.EditorApi.get(); + api.startGetDocInfo(); + } + + render() { + return ( + + ); + } +} + + +export default DocumentInfoController; \ No newline at end of file diff --git a/apps/documenteditor/mobile/src/store/documentInfo.js b/apps/documenteditor/mobile/src/store/documentInfo.js new file mode 100644 index 0000000000..4417029983 --- /dev/null +++ b/apps/documenteditor/mobile/src/store/documentInfo.js @@ -0,0 +1,36 @@ +import { action, observable } from "mobx"; + +export class storeDocumentInfo { + @observable infoObj = { + pageCount: 0, + wordsCount: 0, + paragraphCount: 0, + symbolsCount: 0, + symbolsWSCount: 0, + }; + @observable isLoaded = false; + @observable dataDoc; + + @action switchIsLoaded(value) { + this.isLoaded = value; + } + + @action changeCount(obj) { + if (obj) { + if (obj.get_PageCount() > -1) + this.infoObj.pageCount = obj.get_PageCount(); + if (obj.get_WordsCount() > -1) + this.infoObj.wordsCount = obj.get_WordsCount(); + if (obj.get_ParagraphCount() > -1) + this.infoObj.paragraphCount = obj.get_ParagraphCount(); + if (obj.get_SymbolsCount() > -1) + this.infoObj.symbolsCount = obj.get_SymbolsCount(); + if (obj.get_SymbolsWSCount() > -1) + this.infoObj.symbolsWSCount = obj.get_SymbolsWSCount(); + } + } + + @action setDataDoc(obj) { + this.dataDoc = obj; + } +} \ No newline at end of file diff --git a/apps/documenteditor/mobile/src/store/mainStore.js b/apps/documenteditor/mobile/src/store/mainStore.js index 84be5a1276..c6e323d758 100644 --- a/apps/documenteditor/mobile/src/store/mainStore.js +++ b/apps/documenteditor/mobile/src/store/mainStore.js @@ -8,6 +8,7 @@ import {storeShapeSettings} from "./shapeSettings"; import {storeImageSettings} from "./imageSettings"; import {storeTableSettings} from "./tableSettings"; import {storeChartSettings} from "./chartSettings"; +import {storeDocumentInfo} from "./documentInfo"; export const stores = { storeFocusObjects: new storeFocusObjects(), @@ -18,6 +19,7 @@ export const stores = { storeShapeSettings: new storeShapeSettings(), storeChartSettings: new storeChartSettings(), storeImageSettings: new storeImageSettings(), - storeTableSettings: new storeTableSettings() + storeTableSettings: new storeTableSettings(), + storeDocumentInfo: new storeDocumentInfo() }; diff --git a/apps/documenteditor/mobile/src/view/settings/DocumentInfo.jsx b/apps/documenteditor/mobile/src/view/settings/DocumentInfo.jsx new file mode 100644 index 0000000000..69ac1869b3 --- /dev/null +++ b/apps/documenteditor/mobile/src/view/settings/DocumentInfo.jsx @@ -0,0 +1,87 @@ +import React, {Fragment} from "react"; +import { observer, inject } from "mobx-react"; +import { Page, Navbar, List, ListItem, BlockTitle } from "framework7-react"; +import { useTranslation } from "react-i18next"; + +const PageDocumentInfo = (props) => { + const { t } = useTranslation(); + const _t = t("Settings", { returnObjects: true }); + const storeInfo = props.storeDocumentInfo; + const dataApp = props.getAppProps(); + const dataModified = props.getModified; + const dataModifiedBy = props.getModifiedBy; + const creators = props.getCreators; + // console.log(creators); + const { + pageCount, + paragraphCount, + symbolsCount, + symbolsWSCount, + wordsCount, + } = storeInfo.infoObj; + const dataDoc = JSON.parse(JSON.stringify(storeInfo.dataDoc)); + const isLoaded = storeInfo.isLoaded; + // console.log(pageCount, paragraphCount, symbolsCount, symbolsWSCount, wordsCount); + + return ( + + + {_t.textDocumentTitle} + + + + {_t.textOwner} + + + + {_t.textUploaded} + + + + {_t.textStatistic} + + + + + + + + {dataModified && dataModifiedBy ? ( + + {_t.textLastModified} + + + + {_t.textLastModifiedBy} + + + + + ) : null} + {dataApp ? ( + + {_t.textApplication} + + + + + ) : null} + {creators ? ( + + {_t.textAuthor} + + { + creators.split(/\s*[,;]\s*/).map(item => { + return + }) + } + + + ) : null} + + ); +}; + +const DocumentInfo = inject("storeDocumentInfo")(observer(PageDocumentInfo)); + +export default DocumentInfo; \ No newline at end of file diff --git a/apps/documenteditor/mobile/src/view/settings/Settings.jsx b/apps/documenteditor/mobile/src/view/settings/Settings.jsx index 5fb54ac8b6..4852b981f5 100644 --- a/apps/documenteditor/mobile/src/view/settings/Settings.jsx +++ b/apps/documenteditor/mobile/src/view/settings/Settings.jsx @@ -5,6 +5,7 @@ import {f7} from 'framework7-react'; import {Device} from '../../../../../common/mobile/utils/device'; import DocumentSettingsController from "../../controller/settings/DocumentSettings"; +import DocumentInfoController from "../../controller/settings/DocumentInfo"; import { DocumentFormats, DocumentMargins } from "./DocumentSettings"; const routes = [ @@ -24,6 +25,10 @@ const routes = [ path: '/document-formats/', component: DocumentFormats, }, + { + path: "/document-info/", + component: DocumentInfoController, + } ]; @@ -64,7 +69,7 @@ const SettingsList = withTranslation()(props => { - +