diff --git a/apps/spreadsheeteditor/mobile/src/controller/Toolbar.jsx b/apps/spreadsheeteditor/mobile/src/controller/Toolbar.jsx index 8db15a70a..c778040af 100644 --- a/apps/spreadsheeteditor/mobile/src/controller/Toolbar.jsx +++ b/apps/spreadsheeteditor/mobile/src/controller/Toolbar.jsx @@ -4,12 +4,13 @@ import { f7 } from 'framework7-react'; import { useTranslation } from 'react-i18next'; import ToolbarView from "../view/Toolbar"; -const ToolbarController = inject('storeAppOptions', 'users', 'storeSpreadsheetInfo')(observer(props => { +const ToolbarController = inject('storeAppOptions', 'users', 'storeSpreadsheetInfo', 'storeFocusObjects')(observer(props => { const {t} = useTranslation(); const _t = t("Toolbar", { returnObjects: true }); const appOptions = props.storeAppOptions; const isDisconnected = props.users.isDisconnected; + const isObjectLocked = props.storeFocusObjects.isLocked; const displayCollaboration = props.users.hasEditUsers || appOptions.canViewComments; const docTitle = props.storeSpreadsheetInfo.dataDoc ? props.storeSpreadsheetInfo.dataDoc.title : ''; @@ -20,9 +21,8 @@ const ToolbarController = inject('storeAppOptions', 'users', 'storeSpreadsheetIn const api = Common.EditorApi.get(); api.asc_registerCallback('asc_onCanUndoChanged', onApiCanUndo); api.asc_registerCallback('asc_onCanRedoChanged', onApiCanRedo); - api.asc_registerCallback('asc_onSelectionChanged', onApiSelectionChanged); - api.asc_registerCallback('asc_onWorkbookLocked', onApiSelectionChanged); - api.asc_registerCallback('asc_onWorksheetLocked', onApiSelectionChanged); + api.asc_registerCallback('asc_onWorkbookLocked', onApiLocked); + api.asc_registerCallback('asc_onWorksheetLocked', onApiLocked); api.asc_registerCallback('asc_onActiveSheetChanged', onApiActiveSheetChanged); Common.Notifications.on('toolbar:activatecontrols', activateControls); @@ -53,9 +53,8 @@ const ToolbarController = inject('storeAppOptions', 'users', 'storeSpreadsheetIn const api = Common.EditorApi.get(); api.asc_unregisterCallback('asc_onCanUndoChanged', onApiCanUndo); api.asc_unregisterCallback('asc_onCanRedoChanged', onApiCanRedo); - //api.asc_unregisterCallback('asc_onSelectionChanged', onApiSelectionChanged); TO DO - api.asc_unregisterCallback('asc_onWorkbookLocked', onApiSelectionChanged); - api.asc_unregisterCallback('asc_onWorksheetLocked', onApiSelectionChanged); + api.asc_unregisterCallback('asc_onWorkbookLocked', onApiLocked); + api.asc_unregisterCallback('asc_onWorksheetLocked', onApiLocked); api.asc_unregisterCallback('asc_onActiveSheetChanged', onApiActiveSheetChanged); } }); @@ -133,32 +132,9 @@ const ToolbarController = inject('storeAppOptions', 'users', 'storeSpreadsheetIn } const [disabledEditControls, setDisabledEditControls] = useState(false); - const onApiSelectionChanged = (cellInfo) => { + const onApiLocked = () => { if (isDisconnected) return; - - const api = Common.EditorApi.get(); - const info = !!cellInfo ? cellInfo : api.asc_getCellInfo(); - let islocked = false; - - switch (info.asc_getSelectionType()) { - case Asc.c_oAscSelectionType.RangeChart: - case Asc.c_oAscSelectionType.RangeImage: - case Asc.c_oAscSelectionType.RangeShape: - case Asc.c_oAscSelectionType.RangeChartText: - case Asc.c_oAscSelectionType.RangeShapeText: - const objects = api.asc_getGraphicObjectProps(); - for ( let i in objects ) { - if ( objects[i].asc_getObjectType() == Asc.c_oAscTypeSelectElement.Image ) { - if ((islocked = objects[i].asc_getObjectValue().asc_getLocked())) - break; - } - } - break; - default: - islocked = info.asc_getLocked(); - } - - setDisabledEditControls(islocked); + props.storeFocusObjects.setIsLocked(Common.EditorApi.get().asc_getCellInfo()); }; const onApiActiveSheetChanged = (index) => { @@ -196,7 +172,7 @@ const ToolbarController = inject('storeAppOptions', 'users', 'storeSpreadsheetIn onUndo={onUndo} onRedo={onRedo} disabledControls={disabledControls} - disabledEditControls={disabledEditControls} + disabledEditControls={disabledEditControls || isObjectLocked} disabledSettings={disabledSettings} displayCollaboration={displayCollaboration} showEditDocument={showEditDocument} diff --git a/apps/spreadsheeteditor/mobile/src/store/focusObjects.js b/apps/spreadsheeteditor/mobile/src/store/focusObjects.js index e675536f0..6cb3db2d9 100644 --- a/apps/spreadsheeteditor/mobile/src/store/focusObjects.js +++ b/apps/spreadsheeteditor/mobile/src/store/focusObjects.js @@ -13,7 +13,9 @@ export class storeFocusObjects { selections: computed, shapeObject: computed, imageObject: computed, - chartObject: computed + chartObject: computed, + isLocked: observable, + setIsLocked: action }); } @@ -80,4 +82,28 @@ export class storeFocusObjects { return !!this.intf ? this.intf.getChartObject() : null; } + isLocked = false; + + setIsLocked(info) { + let islocked = false; + switch (info.asc_getSelectionType()) { + case Asc.c_oAscSelectionType.RangeChart: + case Asc.c_oAscSelectionType.RangeImage: + case Asc.c_oAscSelectionType.RangeShape: + case Asc.c_oAscSelectionType.RangeChartText: + case Asc.c_oAscSelectionType.RangeShapeText: + const objects = Common.EditorApi.get().asc_getGraphicObjectProps(); + for ( let i in objects ) { + if ( objects[i].asc_getObjectType() == Asc.c_oAscTypeSelectElement.Image ) { + if ((islocked = objects[i].asc_getObjectValue().asc_getLocked())) + break; + } + } + break; + default: + islocked = info.asc_getLocked(); + } + this.isLocked = islocked; + } + } \ No newline at end of file