@@ -11,7 +11,7 @@ import i18next from 'i18next';
1111import hotkeys from 'hotkeys-js' ;
1212import hotkeysManager , { ShortcutKeys , Shortcuts , defaultHotkeysScope } from 'helpers/hotkeysManager' ;
1313import { getInstanceNode } from 'helpers/getRootNode' ;
14- import { isOfficeEditorMode , isSpreadsheetEditorDocument } from 'helpers/officeEditor' ;
14+ import { isOfficeEditorMode , isSpreadsheetEditorMode } from 'helpers/officeEditor' ;
1515import DataElements from 'constants/dataElement' ;
1616import { panelNames } from 'constants/panel' ;
1717import { getPortfolioFiles } from 'helpers/portfolio' ;
@@ -20,9 +20,10 @@ import {
2020 OfficeEditorEditMode ,
2121 EditingStreamType ,
2222 ELEMENTS_TO_DISABLE_IN_OFFICE_EDITOR ,
23- ELEMENTS_TO_ENABLE_IN_OFFICE_EDITOR
23+ ELEMENTS_TO_ENABLE_IN_OFFICE_EDITOR ,
24+ EDIT_OPERATION_SOURCE ,
2425} from 'constants/officeEditor' ;
25- import { SPREADSHEET_EDITOR_SCOPE , ELEMENTS_TO_DISABLE_IN_SPREADSHEET_EDITOR } from 'src/constants/spreadsheetEditor' ;
26+ import { SPREADSHEET_EDITOR_SCOPE , ELEMENTS_TO_DISABLE_IN_SPREADSHEET_EDITOR , SpreadsheetEditorEditMode } from 'src/constants/spreadsheetEditor' ;
2627import { VIEWER_CONFIGURATIONS } from 'constants/customizationVariables' ;
2728import FeatureFlags from 'constants/featureFlags' ;
2829import getDefaultPageLabels from 'helpers/getDefaultPageLabels' ;
@@ -258,12 +259,12 @@ export const configureOfficeEditor = (store) => () => {
258259 isCustomUIEnabled ?
259260 dispatch ( actions . disableElement ( DataElements . OFFICE_EDITOR_TOOLS_HEADER , PRIORITY_TWO ) ) :
260261 dispatch ( actions . closeElement ( DataElements . OFFICE_EDITOR_TOOLS_HEADER ) ) ;
261- dispatch ( actions . disableElements ( [ DataElements . CONTEXT_MENU_POPUP , DataElements . NOTE_MULTI_SELECT_MODE_BUTTON ] , PRIORITY_TWO ) ) ;
262+ dispatch ( actions . disableElements ( [ DataElements . CONTEXT_MENU_POPUP , DataElements . NOTE_MULTI_SELECT_MODE_BUTTON , DataElements . SEARCH_PANEL_REPLACE_CONTAINER ] , PRIORITY_TWO ) ) ;
262263 } else {
263264 isCustomUIEnabled ?
264265 dispatch ( actions . enableElement ( DataElements . OFFICE_EDITOR_TOOLS_HEADER , PRIORITY_TWO ) ) :
265266 dispatch ( actions . openElement ( DataElements . OFFICE_EDITOR_TOOLS_HEADER ) ) ;
266- dispatch ( actions . enableElements ( [ DataElements . CONTEXT_MENU_POPUP , DataElements . NOTE_MULTI_SELECT_MODE_BUTTON ] , PRIORITY_TWO ) ) ;
267+ dispatch ( actions . enableElements ( [ DataElements . CONTEXT_MENU_POPUP , DataElements . NOTE_MULTI_SELECT_MODE_BUTTON , DataElements . SEARCH_PANEL_REPLACE_CONTAINER ] , PRIORITY_TWO ) ) ;
267268 }
268269 if ( editMode === OfficeEditorEditMode . REVIEWING || editMode === OfficeEditorEditMode . PREVIEW ) {
269270 dispatch ( actions . openElement ( isCustomUIEnabled ? DataElements . OFFICE_EDITOR_REVIEW_PANEL : DataElements . LEFT_PANEL ) ) ;
@@ -327,24 +328,66 @@ export const configureOfficeEditor = (store) => () => {
327328 doc . addEventListener ( 'editModeUpdated' , updateEditMode ) ;
328329 updateActiveStream ( EditingStreamType . BODY ) ;
329330 contentSelectTool . addEventListener ( 'activeStreamChanged' , updateActiveStream ) ;
330- doc . addEventListener ( 'editOperationStarted' , ( ) => {
331- core . getOfficeEditor ( ) . setEditMode ( 'viewOnly' ) ;
331+ doc . addEventListener ( 'editOperationStarted' , ( { source } ) => {
332+ switch ( source ) {
333+ case EDIT_OPERATION_SOURCE . HEADER_FOOTER :
334+ core . getOfficeEditor ( ) . setEditMode ( 'viewOnly' ) ;
335+ break ;
336+ case EDIT_OPERATION_SOURCE . REPLACE :
337+ dispatch ( actions . setOfficeEditorIsReplaceInProgress ( true ) ) ;
338+ break ;
339+ default :
340+ break ;
341+ }
332342 dispatch ( actions . openElement ( 'loadingModal' ) ) ;
333343 } ) ;
334- doc . addEventListener ( 'editOperationEnded' , ( ) => {
335- core . getOfficeEditor ( ) . setEditMode ( 'editing' ) ;
344+ doc . addEventListener ( 'editOperationEnded' , ( { source } ) => {
345+ switch ( source ) {
346+ case EDIT_OPERATION_SOURCE . HEADER_FOOTER :
347+ core . getOfficeEditor ( ) . setEditMode ( 'editing' ) ;
348+ break ;
349+ case EDIT_OPERATION_SOURCE . REPLACE :
350+ dispatch ( actions . setOfficeEditorIsReplaceInProgress ( false ) ) ;
351+ break ;
352+ default :
353+ break ;
354+ }
336355 dispatch ( actions . closeElement ( 'loadingModal' ) ) ;
337356 } ) ;
338357 // Setting zoom to 100% later here to avoid mouse clicks from becoming offset.
339358 core . zoomTo ( 1 , 0 , 0 ) ;
340359 notesInLeftPanel = selectors . getNotesInLeftPanel ( getState ( ) ) ;
341360 dispatch ( actions . setNotesInLeftPanel ( true ) ) ;
342361 dispatch ( actions . setClearSearchOnPanelClose ( true ) ) ;
343- } else if ( isSpreadsheetEditorDocument ( ) ) {
362+ } else if ( isSpreadsheetEditorMode ( ) ) {
344363 if ( ! isCustomUIEnabled ) {
345364 console . warn ( 'Spreadsheet Editor requires Modular UI. Enabling it now.' ) ;
346365 dispatch ( actions . enableFeatureFlag ( FeatureFlags . CUSTOMIZABLE_UI ) ) ;
347366 }
367+ const spreadsheetEditorOptions = getHashParameters ( 'spreadsheetEditorOptions' , '{}' ) ;
368+ let onLoadEditMode = JSON . parse ( spreadsheetEditorOptions ) . initialEditMode || SpreadsheetEditorEditMode . VIEW_ONLY ;
369+ if ( ! Object . values ( SpreadsheetEditorEditMode ) . includes ( onLoadEditMode ) ) {
370+ console . warn ( `Invalid initialEditMode parameter: ${ onLoadEditMode } . Default to view mode.` ) ;
371+ onLoadEditMode = SpreadsheetEditorEditMode . VIEW_ONLY ;
372+ }
373+ dispatch ( actions . setSpreadsheetEditorEditMode ( onLoadEditMode ) ) ;
374+ const spreadsheetEditorManager = core . getDocumentViewer ( ) . getSpreadsheetEditorManager ( ) ;
375+ spreadsheetEditorManager . setEditMode ( onLoadEditMode ) ;
376+ if ( onLoadEditMode === SpreadsheetEditorEditMode . VIEW_ONLY ) {
377+ dispatch (
378+ actions . disableElements (
379+ [ DataElements . SEARCH_PANEL_REPLACE_CONTAINER ] ,
380+ PRIORITY_THREE
381+ )
382+ ) ;
383+ } else {
384+ dispatch (
385+ actions . enableElements (
386+ [ DataElements . SEARCH_PANEL_REPLACE_CONTAINER ] ,
387+ PRIORITY_THREE
388+ )
389+ ) ;
390+ }
348391 swapUIConfiguration ( VIEWER_CONFIGURATIONS . SPREADSHEET_EDITOR ) ;
349392 dispatch ( actions . disableElements (
350393 ELEMENTS_TO_DISABLE_IN_SPREADSHEET_EDITOR ,
0 commit comments