Merge pull request #2100 from ONLYOFFICE/feature/fix-bugs
Feature/fix bugs
This commit is contained in:
commit
e8f356160d
73
apps/common/mobile/lib/controller/SharingSettings.jsx
Normal file
73
apps/common/mobile/lib/controller/SharingSettings.jsx
Normal file
|
@ -0,0 +1,73 @@
|
|||
import React, {useEffect} from 'react';
|
||||
import ViewSharingSettings from "../view/SharingSettings";
|
||||
import {observer, inject} from "mobx-react";
|
||||
import { f7 } from 'framework7-react';
|
||||
|
||||
const SharingSettingsController = props => {
|
||||
const appOptions = props.storeAppOptions;
|
||||
const canRequestSharingSettings = appOptions.canRequestSharingSettings;
|
||||
const sharingSettingsUrl = appOptions.sharingSettingsUrl;
|
||||
|
||||
const changeAccessRights = () => {
|
||||
if (canRequestSharingSettings) {
|
||||
Common.Gateway.requestSharingSettings();
|
||||
}
|
||||
};
|
||||
|
||||
const setSharingSettings = data => {
|
||||
if (data) {
|
||||
Common.Notifications.trigger('collaboration:sharingupdate', data.sharingSettings);
|
||||
}
|
||||
}
|
||||
|
||||
const onMessage = msg => {
|
||||
if(msg) {
|
||||
const msgData = JSON.parse(msg.data);
|
||||
|
||||
if (msgData && msgData?.Referer == "onlyoffice") {
|
||||
if (msgData?.needUpdate) {
|
||||
setSharingSettings(msgData.sharingSettings);
|
||||
}
|
||||
f7.views.current.router.back();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const bindWindowEvents = () => {
|
||||
if (window.addEventListener) {
|
||||
window.addEventListener("message", onMessage, false);
|
||||
} else if (window.attachEvent) {
|
||||
window.attachEvent("onmessage", onMessage);
|
||||
}
|
||||
};
|
||||
|
||||
const unbindWindowEvents = () => {
|
||||
if (window.removeEventListener) {
|
||||
window.removeEventListener("message", onMessage);
|
||||
} else if (window.detachEvent) {
|
||||
window.detachEvent("onmessage", onMessage);
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
bindWindowEvents();
|
||||
Common.Notifications.on('collaboration:sharing', changeAccessRights);
|
||||
|
||||
if (!!sharingSettingsUrl && sharingSettingsUrl.length || canRequestSharingSettings) {
|
||||
Common.Gateway.on('showsharingsettings', changeAccessRights);
|
||||
Common.Gateway.on('setsharingsettings', setSharingSettings);
|
||||
}
|
||||
|
||||
return () => {
|
||||
unbindWindowEvents();
|
||||
}
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<ViewSharingSettings
|
||||
sharingSettingsUrl={sharingSettingsUrl}
|
||||
/>
|
||||
);
|
||||
};
|
||||
|
||||
export default inject('storeAppOptions')(observer(SharingSettingsController));
|
|
@ -1,27 +1,29 @@
|
|||
import React, { Component, useEffect } from 'react';
|
||||
import { observer, inject } from "mobx-react";
|
||||
import { f7, Popover, List, ListItem, Navbar, NavRight, Sheet, BlockTitle, Page, View, Icon, Link } from 'framework7-react';
|
||||
import React, { useEffect } from 'react';
|
||||
import { Navbar, Page } from 'framework7-react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { Device } from "../../utils/device";
|
||||
|
||||
const SharingSettings = props => {
|
||||
const ViewSharingSettings = props => {
|
||||
const { t } = useTranslation();
|
||||
const storeAppOptions = props.storeAppOptions;
|
||||
const sharingSettingsUrl = storeAppOptions.sharingSettingsUrl;
|
||||
const sharingSettingsUrl = props.sharingSettingsUrl;
|
||||
const _t = t('Common.Collaboration', {returnObjects: true});
|
||||
|
||||
function resizeHeightIframe(iFrame) {
|
||||
function resizeHeightIframe(selector) {
|
||||
const iFrame = document.querySelector(selector);
|
||||
iFrame.height = iFrame.contentWindow.document.body.scrollHeight;
|
||||
}
|
||||
};
|
||||
|
||||
useEffect(() => {
|
||||
resizeHeightIframe('#sharing-placeholder iframe');
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<Page>
|
||||
<Navbar title={t('Common.Collaboration.textSharingSettings')} backLink={_t.textBack} />
|
||||
<div id="sharing-placeholder" className="sharing-placeholder">
|
||||
<iframe width="100%" frameBorder={0} scrolling="0" align="top" src={sharingSettingsUrl} onLoad={resizeHeightIframe(this)}></iframe>
|
||||
<iframe width="100%" frameBorder={0} scrolling="0" align="top" src={sharingSettingsUrl}></iframe>
|
||||
</div>
|
||||
</Page>
|
||||
)
|
||||
}
|
||||
};
|
||||
|
||||
export default inject("storeAppOptions")(observer(SharingSettings));
|
||||
export default ViewSharingSettings;
|
|
@ -1,18 +1,19 @@
|
|||
import React, { Component, useEffect } from 'react';
|
||||
import { observer, inject } from "mobx-react";
|
||||
import { Popover, List, ListItem, Navbar, NavRight, Sheet, BlockTitle, Page, View, Icon, Link } from 'framework7-react';
|
||||
import { f7 } from 'framework7-react';
|
||||
import { Popover, List, ListItem, Navbar, NavRight, Sheet, BlockTitle, Page, View, Icon, Link, f7 } from 'framework7-react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import {Device} from "../../../utils/device";
|
||||
import {ReviewController, ReviewChangeController} from "../../controller/collaboration/Review";
|
||||
import {PageDisplayMode} from "./Review";
|
||||
import {ViewCommentsController, ViewCommentsSheetsController} from "../../controller/collaboration/Comments";
|
||||
import SharingSettings from "../SharingSettings";
|
||||
// import SharingSettings from "../SharingSettings";
|
||||
import SharingSettingsController from "../../controller/SharingSettings";
|
||||
|
||||
const PageUsers = inject("users")(observer(props => {
|
||||
const { t } = useTranslation();
|
||||
const _t = t('Common.Collaboration', {returnObjects: true});
|
||||
const storeUsers = props.users;
|
||||
|
||||
return (
|
||||
<Page name="collab__users" className='page-users'>
|
||||
<Navbar title={_t.textUsers} backLink={_t.textBack}>
|
||||
|
@ -83,7 +84,7 @@ const routes = [
|
|||
},
|
||||
{
|
||||
path: '/sharing-settings/',
|
||||
component: SharingSettings
|
||||
component: SharingSettingsController
|
||||
}
|
||||
];
|
||||
|
||||
|
@ -131,8 +132,8 @@ const PageCollaboration = inject('storeAppOptions', 'users')(observer(props => {
|
|||
</Page>
|
||||
</View>
|
||||
)
|
||||
|
||||
}));
|
||||
|
||||
class CollaborationView extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
|
|
@ -95,6 +95,7 @@ export class storeAppOptions {
|
|||
this.lang = config.lang;
|
||||
this.location = (typeof (config.location) == 'string') ? config.location.toLowerCase() : '';
|
||||
this.sharingSettingsUrl = config.sharingSettingsUrl;
|
||||
this.canRequestSharingSettings = config.canRequestSharingSettings;
|
||||
this.fileChoiceUrl = config.fileChoiceUrl;
|
||||
this.mergeFolderUrl = config.mergeFolderUrl;
|
||||
this.canAnalytics = false;
|
||||
|
|
|
@ -126,7 +126,7 @@
|
|||
"txtIncorrectPwd": "Password is incorrect",
|
||||
"txtProtected": "Once you enter the password and open the file, the current password to the file will be reset",
|
||||
"warnLicenseExceeded": "You've reached the limit for simultaneous connections to %1 editors. This document will be opened for viewing only. Contact your administrator to learn more.",
|
||||
"warnLicenseExp": "Your license has expired. Please, update it and refresh the page.",
|
||||
"warnLicenseExp": "Your license has expired. Please, update your license and refresh the page.",
|
||||
"warnLicenseLimitedNoAccess": "License expired. You have no access to document editing functionality. Please, contact your administrator.",
|
||||
"warnLicenseLimitedRenewed": "License needs to be renewed. You have limited access to document editing functionality.<br>Please contact your administrator to get full access",
|
||||
"warnLicenseUsersExceeded": "You've reached the user limit for %1 editors. Contact your administrator to learn more.",
|
||||
|
|
|
@ -516,6 +516,9 @@ class MainController extends Component {
|
|||
storeSpreadsheetInfo.changeTitle(meta.title);
|
||||
}
|
||||
});
|
||||
|
||||
const storeAppOptions = this.props.storeAppOptions;
|
||||
this.api.asc_setFilteringMode && this.api.asc_setFilteringMode(storeAppOptions.canModifyFilter);
|
||||
}
|
||||
|
||||
onEntriesListMenu(validation, textArr, addArr) {
|
||||
|
|
|
@ -80,6 +80,7 @@ export class storeAppOptions {
|
|||
permissions.edit = false;
|
||||
this.canBranding = params.asc_getCustomization();
|
||||
this.canBrandingExt = params.asc_getCanBranding() && (typeof this.customization == 'object');
|
||||
this.canModifyFilter = permissions.modifyFilter !== false;
|
||||
this.canAutosave = true;
|
||||
this.canAnalytics = params.asc_getIsAnalyticsEnable();
|
||||
this.canLicense = (licType === Asc.c_oLicenseResult.Success || licType === Asc.c_oLicenseResult.SuccessLimit);
|
||||
|
|
|
@ -2,10 +2,13 @@ import React, {useEffect, useState} from 'react';
|
|||
import {f7, List, Popover, Sheet, ListItem, Icon, Row, Button, ListButton, Page, Navbar, Segmented, BlockTitle, NavRight, Link, Toggle,View} from 'framework7-react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { Device } from '../../../../common/mobile/utils/device';
|
||||
import {observer, inject} from "mobx-react";
|
||||
|
||||
const FilterOptions = (props) => {
|
||||
const FilterOptions = inject('storeAppOptions')(observer(props => {
|
||||
const { t } = useTranslation();
|
||||
const _t = t('View.Edit', {returnObjects: true});
|
||||
const storeAppOptions = props.storeAppOptions;
|
||||
const canModifyFilter = storeAppOptions.canModifyFilter;
|
||||
let is_all_checked = props.listVal.every(item => item.check);
|
||||
|
||||
const HandleClearFilter = () => {
|
||||
|
@ -27,57 +30,71 @@ const FilterOptions = (props) => {
|
|||
}).open();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
return (
|
||||
<View style={props.style}>
|
||||
<Page>
|
||||
<Navbar title={_t.textFilterOptions}>
|
||||
{Device.phone &&
|
||||
<NavRight>
|
||||
<Link sheetClose=".picker__sheet">
|
||||
<Icon icon='icon-expand-down'/>
|
||||
</Link>
|
||||
</NavRight>
|
||||
}
|
||||
</Navbar>
|
||||
|
||||
<List>
|
||||
<ListItem className='buttons'>
|
||||
<Row>
|
||||
<a className={'button' + (props.checkSort === 'down' ? ' active' : '')} onClick={() => {props.onSort('sortdown'); onValidChecked();}}>
|
||||
<Icon slot="media" icon="sortdown"/>
|
||||
</a>
|
||||
<a className={'button' + (props.checkSort === 'up' ? ' active' : '')} onClick={() => {props.onSort('sortup'); onValidChecked();}}>
|
||||
<Icon slot="media" icon="sortup"/>
|
||||
</a>
|
||||
</Row>
|
||||
</ListItem>
|
||||
</List>
|
||||
|
||||
<List >
|
||||
<ListButton className={props.isValid || is_all_checked ? 'disabled' : ''} onClick={HandleClearFilter}>{_t.textClearFilter}</ListButton>
|
||||
<ListButton color="red" onClick={() => props.onDeleteFilter()} id="btn-delete-filter">{_t.textDeleteFilter}</ListButton>
|
||||
</List>
|
||||
<List>
|
||||
<ListItem className='radio-checkbox-item' onChange={e => {props.onUpdateCell('all', e.target.checked); onValidChecked();}} name='filter-cellAll' checkbox checked={is_all_checked}>{_t.textSelectAll}</ListItem>
|
||||
{props.listVal.map((value) =>
|
||||
<ListItem className='radio-checkbox-item' onChange={e => {props.onUpdateCell(value.id, e.target.checked); onValidChecked();}} key={value.value} name='filter-cell' value={value.value} title={value.cellvalue} checkbox checked={value.check} />
|
||||
)}
|
||||
</List>
|
||||
<Navbar title={_t.textFilterOptions}>
|
||||
{Device.phone &&
|
||||
<NavRight>
|
||||
<Link sheetClose=".picker__sheet">
|
||||
<Icon icon='icon-expand-down'/>
|
||||
</Link>
|
||||
</NavRight>
|
||||
}
|
||||
</Navbar>
|
||||
<List>
|
||||
<ListItem className='buttons'>
|
||||
<Row>
|
||||
<a className={'button' + (props.checkSort === 'down' ? ' active' : '')} onClick={() => {
|
||||
props.onSort('sortdown');
|
||||
onValidChecked();
|
||||
}}>
|
||||
<Icon slot="media" icon="sortdown"/>
|
||||
</a>
|
||||
<a className={'button' + (props.checkSort === 'up' ? ' active' : '')} onClick={() => {
|
||||
props.onSort('sortup');
|
||||
onValidChecked();
|
||||
}}>
|
||||
<Icon slot="media" icon="sortup"/>
|
||||
</a>
|
||||
</Row>
|
||||
</ListItem>
|
||||
</List>
|
||||
<List>
|
||||
<ListButton className={props.isValid || is_all_checked ? 'disabled' : ''}
|
||||
onClick={HandleClearFilter}>{_t.textClearFilter}</ListButton>
|
||||
<ListButton color="red" className={!canModifyFilter ? 'disabled' : ''}
|
||||
onClick={() => props.onDeleteFilter()}
|
||||
id="btn-delete-filter">{_t.textDeleteFilter}</ListButton>
|
||||
</List>
|
||||
<List>
|
||||
<ListItem className='radio-checkbox-item' onChange={e => {
|
||||
props.onUpdateCell('all', e.target.checked);
|
||||
onValidChecked();
|
||||
}} name='filter-cellAll' checkbox checked={is_all_checked}>{_t.textSelectAll}</ListItem>
|
||||
{props.listVal.map((value) =>
|
||||
<ListItem className='radio-checkbox-item' onChange={e => {
|
||||
props.onUpdateCell(value.id, e.target.checked);
|
||||
onValidChecked();
|
||||
}} key={value.value} name='filter-cell' value={value.value} title={value.cellvalue} checkbox
|
||||
checked={value.check}/>
|
||||
)}
|
||||
</List>
|
||||
</Page>
|
||||
</View>
|
||||
)
|
||||
};
|
||||
}));
|
||||
|
||||
const FilterView = (props) => {
|
||||
return (
|
||||
!Device.phone ?
|
||||
<Popover id="picker-popover" className="popover__titled popover-filter">
|
||||
<FilterOptions style={{height: '410px'}} {...props}></FilterOptions>
|
||||
</Popover> :
|
||||
<Sheet className="picker__sheet sheet-filter" push>
|
||||
<FilterOptions {...props}></FilterOptions>
|
||||
</Sheet>
|
||||
<Popover id="picker-popover" className="popover__titled popover-filter">
|
||||
<FilterOptions style={{height: '410px'}} {...props}></FilterOptions>
|
||||
</Popover> :
|
||||
<Sheet className="picker__sheet sheet-filter" push>
|
||||
<FilterOptions {...props}></FilterOptions>
|
||||
</Sheet>
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -3,10 +3,12 @@ import { inject, observer } from 'mobx-react';
|
|||
import {List, ListItem, Icon} from 'framework7-react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
const AddOther = inject("storeFocusObjects")(observer(props => {
|
||||
const AddOther = inject("storeFocusObjects", "storeAppOptions")(observer(props => {
|
||||
const { t } = useTranslation();
|
||||
const _t = t('View.Add', {returnObjects: true});
|
||||
const storeFocusObjects = props.storeFocusObjects;
|
||||
const storeAppOptions = props.storeAppOptions;
|
||||
const canModifyFilter = storeAppOptions.canModifyFilter;
|
||||
const isHyperLink = storeFocusObjects.selections.indexOf('hyperlink') > -1;
|
||||
const hideAddComment = props.hideAddComment();
|
||||
const wsProps = props.wsProps;
|
||||
|
@ -22,7 +24,7 @@ const AddOther = inject("storeFocusObjects")(observer(props => {
|
|||
}}>
|
||||
<Icon slot="media" icon="icon-insert-comment"></Icon>
|
||||
</ListItem>}
|
||||
<ListItem title={_t.textSortAndFilter} className={wsProps.Sort && 'disabled'} link={'/add-sort-and-filter/'}>
|
||||
<ListItem title={_t.textSortAndFilter} className={wsProps.Sort || !canModifyFilter ? 'disabled' : ''} link={'/add-sort-and-filter/'}>
|
||||
<Icon slot="media" icon="icon-sort"></Icon>
|
||||
</ListItem>
|
||||
<ListItem title={_t.textLink} className={wsProps.InsertHyperlinks && 'disabled'} link={isHyperLink ? '/edit-link/' : '/add-link/'} routeProps={{
|
||||
|
|
Loading…
Reference in a new issue