[SSE mobile] Make Context Menu in Statusbar
This commit is contained in:
parent
02e1106a13
commit
7bd27c3416
|
@ -1,20 +1,56 @@
|
||||||
|
|
||||||
import React, { useEffect } from 'react';
|
import React, { Fragment, useEffect } from 'react';
|
||||||
import StatusbarView from '../view/Statusbar';
|
import {StatusbarView, TabContextMenu} from '../view/Statusbar';
|
||||||
import { inject } from 'mobx-react';
|
import { inject } from 'mobx-react';
|
||||||
|
import { f7 } from 'framework7-react';
|
||||||
|
import { Dom7 } from 'framework7';
|
||||||
|
|
||||||
const Statusbar = inject('sheets')(props => {
|
const Statusbar = inject('sheets', 'storeAppOptions')(props => {
|
||||||
const {sheets} = props;
|
const {sheets, storeAppOptions} = props;
|
||||||
|
console.log(sheets);
|
||||||
|
|
||||||
|
let isEdit = storeAppOptions.isEdit;
|
||||||
|
let isDisconnected = undefined;
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
console.log("status bar did mount");
|
console.log("status bar did mount");
|
||||||
|
|
||||||
Common.Notifications.on('document:ready', onApiSheetsChanged);
|
Common.Notifications.on('document:ready', onApiSheetsChanged);
|
||||||
|
Common.Notifications.on('api:disconnect', onApiDisconnect);
|
||||||
Common.Notifications.on('engineCreated', api => {
|
Common.Notifications.on('engineCreated', api => {
|
||||||
|
api.asc_registerCallback('asc_onUpdateTabColor', onApiUpdateTabColor);
|
||||||
|
// api.asc_registerCallback('asc_onWorkbookLocked', onWorkbookLocked);
|
||||||
|
// api.asc_registerCallback('asc_onWorksheetLocked', onWorksheetLocked);
|
||||||
api.asc_registerCallback('asc_onSheetsChanged', onApiSheetsChanged.bind(api));
|
api.asc_registerCallback('asc_onSheetsChanged', onApiSheetsChanged.bind(api));
|
||||||
|
api.asc_registerCallback('asc_onCoAuthoringDisconnect', onApiDisconnect);
|
||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
// const onWorkbookLocked = locked => {
|
||||||
|
// this.statusbar.$btnAddTab.toggleClass('disabled', locked);
|
||||||
|
// return;
|
||||||
|
|
||||||
|
// this.statusbar.tabbar[locked?'addClass':'removeClass']('coauth-locked');
|
||||||
|
// this.statusbar.btnAddWorksheet.setDisabled(locked || this.statusbar.rangeSelectionMode==Asc.c_oAscSelectionDialogType.Chart ||
|
||||||
|
// this.statusbar.rangeSelectionMode==Asc.c_oAscSelectionDialogType.FormatTable);
|
||||||
|
// var item, i = this.statusbar.tabbar.getCount();
|
||||||
|
// while (i-- > 0) {
|
||||||
|
// item = this.statusbar.tabbar.getAt(i);
|
||||||
|
// if (item.sheetindex >= 0) {
|
||||||
|
// // if (locked) item.reorderable = false;
|
||||||
|
// // else item.reorderable = !this.api.asc_isWorksheetLockedOrDeleted(item.sheetindex);
|
||||||
|
// } else {
|
||||||
|
// item.disable(locked);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
|
||||||
|
// const onWorksheetLocked = (index, locked) => {
|
||||||
|
// let model = sheets.findWhere({index: index});
|
||||||
|
// if(model && model.get('locked') != locked)
|
||||||
|
// model.set('locked', locked);
|
||||||
|
// };
|
||||||
|
|
||||||
const onApiSheetsChanged = api => {
|
const onApiSheetsChanged = api => {
|
||||||
console.log('on api sheets changed');
|
console.log('on api sheets changed');
|
||||||
|
|
||||||
|
@ -39,8 +75,55 @@ const Statusbar = inject('sheets')(props => {
|
||||||
|
|
||||||
sheets.reset(items);
|
sheets.reset(items);
|
||||||
// this.hiddensheets.reset(hiddentems);
|
// this.hiddensheets.reset(hiddentems);
|
||||||
|
// updateTabsColors();
|
||||||
|
};
|
||||||
|
|
||||||
// this.updateTabsColors();
|
const loadTabColor = sheetindex => {
|
||||||
|
const api = Common.EditorApi.get();
|
||||||
|
let tab = sheets.findWhere({index: sheetindex});
|
||||||
|
|
||||||
|
if (tab) {
|
||||||
|
setTabLineColor(tab, api.asc_getWorksheetTabColor(sheetindex));
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
const onApiDisconnect = () => {
|
||||||
|
isDisconnected = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const onApiUpdateTabColor = index => {
|
||||||
|
loadTabColor(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
const setTabLineColor = (tab, color) => {
|
||||||
|
if (tab) {
|
||||||
|
if (null !== color) {
|
||||||
|
color = '#' + Common.Utils.ThemeColor.getHexColor(color.get_r(), color.get_g(), color.get_b());
|
||||||
|
} else {
|
||||||
|
color = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (color.length) {
|
||||||
|
if (!tab.get('active')) {
|
||||||
|
color = '0px 4px 0 ' + Common.Utils.RGBColor(color).toRGBA(0.7) + ' inset';
|
||||||
|
} else {
|
||||||
|
color = '0px 4px 0 ' + color + ' inset';
|
||||||
|
}
|
||||||
|
|
||||||
|
tab.get('el').find('a').css('box-shadow', color);
|
||||||
|
} else {
|
||||||
|
tab.get('el').find('a').css('box-shadow', '');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const updateTabsColors = () => {
|
||||||
|
const api = Common.EditorApi.get();
|
||||||
|
|
||||||
|
sheets.forEach(model => {
|
||||||
|
setTabLineColor(model, api.asc_getWorksheetTabColor(model.get('index')));
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const onTabClicked = i => {
|
const onTabClicked = i => {
|
||||||
|
@ -73,7 +156,37 @@ const Statusbar = inject('sheets')(props => {
|
||||||
api.asc_addWorksheet(createSheetName());
|
api.asc_addWorksheet(createSheetName());
|
||||||
};
|
};
|
||||||
|
|
||||||
return <StatusbarView onTabClicked={onTabClicked} onAddTabClicked={onAddTabClicked} />
|
const onTabClick = i => {
|
||||||
|
const api = Common.EditorApi.get();
|
||||||
|
const model = sheets.at(i);
|
||||||
|
const $$ = Dom7;
|
||||||
|
|
||||||
|
let opened = $$('.document-menu.modal-in').length;
|
||||||
|
f7.popover.close('.document-menu.modal-in');
|
||||||
|
|
||||||
|
if (i == api.asc_getActiveWorksheetIndex()) {
|
||||||
|
if (!opened) {
|
||||||
|
if (isEdit && !isDisconnected) {
|
||||||
|
api.asc_closeCellEditor();
|
||||||
|
// this.statusbar.showTabContextMenu(this._getTabMenuItems(model), model);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// this.api.asc_showWorksheet(i);
|
||||||
|
// this.statusbar.setActiveTab(index);
|
||||||
|
api.asc_showWorksheet(model.index);
|
||||||
|
sheets.setActiveWorksheet(i);
|
||||||
|
// Common.NotificationCenter.trigger('sheet:active', sdkindex);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Fragment>
|
||||||
|
<StatusbarView onTabClick={onTabClick} onTabClicked={onTabClicked} onAddTabClicked={onAddTabClicked} />
|
||||||
|
<TabContextMenu />
|
||||||
|
</Fragment>
|
||||||
|
)
|
||||||
});
|
});
|
||||||
|
|
||||||
export default Statusbar;
|
export default Statusbar;
|
|
@ -3,11 +3,13 @@ import {action, observable, makeObservable} from 'mobx';
|
||||||
export class storeAppOptions {
|
export class storeAppOptions {
|
||||||
constructor() {
|
constructor() {
|
||||||
makeObservable(this, {
|
makeObservable(this, {
|
||||||
|
isEdit: observable,
|
||||||
setConfigOptions: action,
|
setConfigOptions: action,
|
||||||
setPermissionOptions: action
|
setPermissionOptions: action
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
isEdit = false;
|
||||||
config = {};
|
config = {};
|
||||||
|
|
||||||
setConfigOptions (config) {
|
setConfigOptions (config) {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { View, Toolbar, Link, Icon } from 'framework7-react';
|
import { View, Toolbar, Link, Icon, Popover, List, ListButton } from 'framework7-react';
|
||||||
import { observer, inject } from "mobx-react";
|
import { observer, inject } from "mobx-react";
|
||||||
|
|
||||||
const viewStyle = {
|
const viewStyle = {
|
||||||
|
@ -22,7 +22,7 @@ const StatusbarView = inject('sheets')(observer(props => {
|
||||||
<ul className="sheet-tabs bottom">
|
<ul className="sheet-tabs bottom">
|
||||||
{sheets.sheets.map((model,i) =>
|
{sheets.sheets.map((model,i) =>
|
||||||
model.hidden ? null :
|
model.hidden ? null :
|
||||||
<li className={getTabClassList(model)} key={i}>
|
<li className={getTabClassList(model)} key={i} onClick={() => props.onTabClick(i)}>
|
||||||
<a onClick={e => props.onTabClicked(i)}>{model.name}</a>
|
<a onClick={e => props.onTabClicked(i)}>{model.name}</a>
|
||||||
</li>
|
</li>
|
||||||
)}
|
)}
|
||||||
|
@ -31,4 +31,23 @@ const StatusbarView = inject('sheets')(observer(props => {
|
||||||
</View>;
|
</View>;
|
||||||
}));
|
}));
|
||||||
|
|
||||||
export default StatusbarView;
|
const TabContextMenu = props => {
|
||||||
|
return (
|
||||||
|
<Popover id="idx-statusbar-context-menu-popover"
|
||||||
|
className="document-menu"
|
||||||
|
backdrop={false}
|
||||||
|
closeByBackdropClick={false}
|
||||||
|
closeByOutsideClick={false}
|
||||||
|
// onPopoverClosed={e => this.props.onMenuClosed()}
|
||||||
|
>
|
||||||
|
<List className="list-block">
|
||||||
|
<ListButton title="Duplicate" onClick={() => this.props.onTabMenu('copy')} />
|
||||||
|
<ListButton title="Delete" onClick={() => this.props.onTabMenu('del')} />
|
||||||
|
<ListButton title="Rename" onClick={() => this.props.onTabMenu('ren')} />
|
||||||
|
<ListButton title="Hide" onClick={() => this.props.onTabMenu('hide')} />
|
||||||
|
</List>
|
||||||
|
</Popover>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export {StatusbarView, TabContextMenu};
|
||||||
|
|
Loading…
Reference in a new issue