web-apps/apps/spreadsheeteditor/mobile/src/view/settings/Settings.jsx

252 lines
8.8 KiB
React
Raw Normal View History

2020-12-10 13:14:52 +00:00
import React, {Component, useEffect} from 'react';
import {View,Page,Navbar,NavRight,Link,Popup,Popover,Icon,ListItem,List} from 'framework7-react';
2021-06-10 22:08:23 +00:00
import { useTranslation } from 'react-i18next';
2020-12-10 13:14:52 +00:00
import {f7} from 'framework7-react';
import {Device} from '../../../../../common/mobile/utils/device';
2021-06-10 22:08:23 +00:00
import { observer, inject } from "mobx-react";
2021-02-18 19:15:50 +00:00
import SpreadsheetSettingsController from '../../controller/settings/SpreadsheetSettings.jsx';
import ApplicationSettingsController from '../../controller/settings/ApplicationSettings.jsx';
import SpreadsheetInfoController from '../../controller/settings/SpreadsheetInfo.jsx';
import {DownloadWithTranslation} from '../../controller/settings/Download.jsx';
2021-02-18 19:15:50 +00:00
import {SpreadsheetColorSchemes, SpreadsheetFormats, SpreadsheetMargins} from './SpreadsheetSettings.jsx';
import {MacrosSettings, RegionalSettings, FormulaLanguage} from './ApplicationSettings.jsx';
2021-03-17 15:44:35 +00:00
// import SpreadsheetAbout from './SpreadsheetAbout.jsx';
import About from '../../../../../common/mobile/lib/view/About';
2020-12-10 13:14:52 +00:00
const routes = [
{
path: '/',
component: 'TSettingsView'
},
2021-02-18 19:15:50 +00:00
{
path: '/spreadsheet-settings/',
component: SpreadsheetSettingsController,
},
{
path: "/color-schemes/",
component: SpreadsheetColorSchemes
2020-12-10 13:14:52 +00:00
},
{
2021-02-18 19:15:50 +00:00
path: '/spreadsheet-formats/',
component: SpreadsheetFormats
},
{
path: '/margins/',
component: SpreadsheetMargins
},
{
path: '/download/',
component: DownloadWithTranslation
},
{
path: '/application-settings/',
component: ApplicationSettingsController
},
{
path: '/macros-settings/',
component: MacrosSettings
},
{
path: '/regional-settings/',
component: RegionalSettings
},
{
path: '/formula-languages/',
component: FormulaLanguage
},
{
path: '/spreadsheet-info/',
component: SpreadsheetInfoController
2021-03-01 18:11:29 +00:00
},
{
2021-03-17 15:44:35 +00:00
path: '/about/',
component: About
2021-07-22 20:32:20 +00:00
}
2020-12-10 13:14:52 +00:00
];
2021-07-23 22:38:54 +00:00
const SettingsList = inject("storeAppOptions")(observer(props => {
2021-06-10 22:08:23 +00:00
const { t } = useTranslation();
2020-12-10 13:14:52 +00:00
const _t = t('View.Settings', {returnObjects: true});
const navbar = <Navbar title={_t.textSettings}>
{!props.inPopover && <NavRight><Link popupClose=".settings-popup">{_t.textDone}</Link></NavRight>}
</Navbar>;
const onoptionclick = page => {
if ( props.onOptionClick )
props.onOptionClick(page)
};
const closeModal = () => {
if (Device.phone) {
f7.sheet.close('.settings-popup', false);
} else {
f7.popover.close('#settings-popover', false);
}
};
const onOpenCollaboration = async () => {
await closeModal();
await props.openOptions('coauth');
}
const onPrint = () => {
const api = Common.EditorApi.get();
2022-03-10 13:32:02 +00:00
closeModal();
setTimeout(() => {
api.asc_Print();
}, 400);
};
const showHelp = () => {
// let url = '{{HELP_URL}}';
2021-03-18 14:00:52 +00:00
// let url = 'https://helpcenter.onlyoffice.com';
let url = __HELP_URL__;
if (url.charAt(url.length-1) !== '/') {
url += '/';
}
if (Device.sailfish || Device.android) {
url+='mobile-applications/documents/mobile-web-editors/android/index.aspx';
}
else {
url+='mobile-applications/documents/mobile-web-editors/ios/index.aspx';
}
closeModal();
window.open(url, "_blank");
};
2021-06-10 22:08:23 +00:00
const appOptions = props.storeAppOptions;
2022-01-27 13:43:02 +00:00
let _isEdit = false,
_canDownload = false,
_canDownloadOrigin = false,
_canAbout = true,
_canHelp = true,
_canPrint = false;
if (appOptions.isDisconnected) {
_isEdit = false;
if (!appOptions.enableDownload)
_canPrint = _canDownload = _canDownloadOrigin = false;
} else {
2021-06-10 22:08:23 +00:00
_isEdit = appOptions.isEdit;
2022-01-27 13:43:02 +00:00
_canDownload = appOptions.canDownload;
_canDownloadOrigin = appOptions.canDownloadOrigin;
_canPrint = appOptions.canPrint;
if (appOptions.customization && appOptions.canBrandingExt) {
_canAbout = (appOptions.customization.about!==false);
}
if (appOptions.customization) {
_canHelp = (appOptions.customization.help!==false);
}
}
const onDownloadOrigin = () => {
closeModal();
setTimeout(() => {
Common.EditorApi.get().asc_DownloadOrigin();
}, 0);
};
2021-06-10 22:08:23 +00:00
2020-12-10 13:14:52 +00:00
return (
2021-07-21 18:24:04 +00:00
<View style={props.style} stackPages={true} routes={routes}>
2020-12-10 13:14:52 +00:00
<Page>
{navbar}
<List>
{!props.inPopover &&
2021-06-10 22:08:23 +00:00
<ListItem disabled={appOptions.readerMode ? true : false} title={!_isEdit ? _t.textFind : _t.textFindAndReplace} link="#" searchbarEnable='.searchbar' onClick={closeModal} className='no-indicator'>
2021-02-18 19:15:50 +00:00
<Icon slot="media" icon="icon-search"></Icon>
</ListItem>
2020-12-10 13:14:52 +00:00
}
2021-05-12 11:27:03 +00:00
{window.matchMedia("(max-width: 359px)").matches ?
<ListItem title={_t.textCollaboration} link="#" onClick={onOpenCollaboration} className='no-indicator'>
<Icon slot="media" icon="icon-collaboration"></Icon>
</ListItem>
: null}
2021-06-17 11:53:47 +00:00
{_isEdit &&
<ListItem link="#" title={_t.textSpreadsheetSettings} onClick={onoptionclick.bind(this, '/spreadsheet-settings/')}>
<Icon slot="media" icon="icon-table-settings"></Icon>
</ListItem>
}
<ListItem title={_t.textApplicationSettings} link="#" onClick={onoptionclick.bind(this, '/application-settings/')}>
2020-12-10 13:14:52 +00:00
<Icon slot="media" icon="icon-app-settings"></Icon>
</ListItem>
2022-01-27 13:43:02 +00:00
{_canDownload &&
<ListItem title={_t.textDownload} link="#" onClick={onoptionclick.bind(this, '/download/')}>
<Icon slot="media" icon="icon-download"></Icon>
</ListItem>
}
{_canDownloadOrigin &&
<ListItem title={_t.textDownload} link="#" onClick={onDownloadOrigin} className='no-indicator'>
<Icon slot="media" icon="icon-download"></Icon>
</ListItem>
}
{_canPrint &&
<ListItem title={_t.textPrint} onClick={onPrint}>
<Icon slot="media" icon="icon-print"></Icon>
</ListItem>
}
2021-02-18 19:15:50 +00:00
<ListItem title={_t.textSpreadsheetInfo} link="#" onClick={onoptionclick.bind(this, "/spreadsheet-info/")}>
2020-12-10 13:14:52 +00:00
<Icon slot="media" icon="icon-info"></Icon>
</ListItem>
<ListItem title={_t.textHelp} link="#" onClick={showHelp}>
2020-12-10 13:14:52 +00:00
<Icon slot="media" icon="icon-help"></Icon>
</ListItem>
2021-03-17 15:44:35 +00:00
<ListItem title={_t.textAbout} link="#" onClick={onoptionclick.bind(this, "/about/")}>
2020-12-10 13:14:52 +00:00
<Icon slot="media" icon="icon-about"></Icon>
</ListItem>
</List>
</Page>
</View>
)
2021-06-10 22:08:23 +00:00
}));
2020-12-10 13:14:52 +00:00
class SettingsView extends Component {
constructor(props) {
super(props);
this.onoptionclick = this.onoptionclick.bind(this);
}
onoptionclick(page){
2021-01-24 21:30:49 +00:00
f7.views.current.router.navigate(page);
2020-12-10 13:14:52 +00:00
}
render() {
const show_popover = this.props.usePopover;
return (
show_popover ?
<Popover id="settings-popover" className="popover__titled" onPopoverClosed={() => this.props.onclosed()}>
<SettingsList inPopover={true} openOptions={this.props.openOptions} onOptionClick={this.onoptionclick} style={{height: '410px'}} />
2020-12-10 13:14:52 +00:00
</Popover> :
<Popup className="settings-popup" onPopupClosed={() => this.props.onclosed()}>
<SettingsList onOptionClick={this.onoptionclick} openOptions={this.props.openOptions} />
2020-12-10 13:14:52 +00:00
</Popup>
)
}
}
const Settings = props => {
useEffect(() => {
if ( Device.phone )
f7.popup.open('.settings-popup');
else f7.popover.open('#settings-popover', '#btn-settings');
return () => {
}
});
const onviewclosed = () => {
2021-10-25 16:45:08 +00:00
if ( props.onclosed ) {
2020-12-10 13:14:52 +00:00
props.onclosed();
2021-10-25 16:45:08 +00:00
}
2020-12-10 13:14:52 +00:00
};
return <SettingsView usePopover={!Device.phone} onclosed={onviewclosed} openOptions={props.openOptions} />
2020-12-10 13:14:52 +00:00
};
export default Settings;