Merge branch 'feature/workspaces' of github.com:ONLYOFFICE/AppServer into feature/workspaces
This commit is contained in:
commit
494bc7a828
@ -70,6 +70,10 @@ class ContextMenuButton extends React.Component {
|
||||
this.toggle(this.props.opened);
|
||||
}
|
||||
|
||||
if (this.props.manualX !== prevProps.manualX) {
|
||||
this.onIconButtonClick();
|
||||
}
|
||||
|
||||
if (this.props.opened && this.state.displayType === "aside") {
|
||||
window.addEventListener("popstate", this.popstate, false);
|
||||
}
|
||||
@ -99,9 +103,9 @@ class ContextMenuButton extends React.Component {
|
||||
};
|
||||
|
||||
clickOutsideAction = (e) => {
|
||||
const path = e.path || (e.composedPath && e.composedPath());
|
||||
/* const path = e.path || (e.composedPath && e.composedPath());
|
||||
const dropDownItem = path ? path.find((x) => x === this.ref.current) : null;
|
||||
if (!dropDownItem) return;
|
||||
if (!dropDownItem) return; */
|
||||
|
||||
this.onIconButtonClick();
|
||||
};
|
||||
@ -124,7 +128,7 @@ class ContextMenuButton extends React.Component {
|
||||
}
|
||||
|
||||
render() {
|
||||
//console.log("ContextMenuButton render");
|
||||
//console.log("ContextMenuButton render", this.props);
|
||||
const {
|
||||
className,
|
||||
clickColor,
|
||||
@ -147,6 +151,8 @@ class ContextMenuButton extends React.Component {
|
||||
style,
|
||||
isFill, // eslint-disable-line react/prop-types
|
||||
asideHeader, // eslint-disable-line react/prop-types
|
||||
manualX,
|
||||
manualY,
|
||||
} = this.props;
|
||||
|
||||
const { isOpen, displayType } = this.state;
|
||||
@ -171,6 +177,8 @@ class ContextMenuButton extends React.Component {
|
||||
/>
|
||||
{displayType === "dropdown" ? (
|
||||
<DropDown
|
||||
manualX={manualX}
|
||||
manualY={manualY}
|
||||
directionX={directionX}
|
||||
directionY={directionY}
|
||||
open={isOpen}
|
||||
@ -272,6 +280,10 @@ ContextMenuButton.propTypes = {
|
||||
directionX: PropTypes.string,
|
||||
/** Direction Y */
|
||||
directionY: PropTypes.string,
|
||||
/** Manual X padding */
|
||||
manualX: PropTypes.string,
|
||||
/** Manual Y padding */
|
||||
manualY: PropTypes.string,
|
||||
/** Accepts class */
|
||||
className: PropTypes.string,
|
||||
/** Accepts id */
|
||||
|
@ -17,6 +17,8 @@ class Row extends React.Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.state = { contextX: "0px", contextY: "0px", contextOpened: false };
|
||||
|
||||
this.rowRef = React.createRef();
|
||||
}
|
||||
|
||||
@ -28,18 +30,24 @@ class Row extends React.Component {
|
||||
// }
|
||||
|
||||
componentDidMount() {
|
||||
if (this.props.selectItem) {
|
||||
this.container = this.rowRef.current;
|
||||
this.container.addEventListener("contextmenu", this.onSelectItem);
|
||||
}
|
||||
this.container = this.rowRef.current;
|
||||
this.container.addEventListener("contextmenu", this.onContextMenu);
|
||||
}
|
||||
|
||||
componentWillUnmount() {
|
||||
this.props.selectItem &&
|
||||
this.container.removeEventListener("contextmenu", this.onSelectItem);
|
||||
this.container.removeEventListener("contextmenu", this.onContextMenu);
|
||||
}
|
||||
|
||||
onSelectItem = () => this.props.selectItem && this.props.selectItem();
|
||||
onContextMenu = (e) => {
|
||||
const cursorX = -(window.innerWidth - e.pageX) + "px";
|
||||
const cursorY = "-3px";
|
||||
|
||||
this.setState({
|
||||
contextX: cursorX,
|
||||
contextY: cursorY,
|
||||
contextOpened: !this.state.contextOpened,
|
||||
});
|
||||
};
|
||||
|
||||
render() {
|
||||
//console.log("Row render");
|
||||
@ -53,7 +61,7 @@ class Row extends React.Component {
|
||||
element,
|
||||
indeterminate,
|
||||
onSelect,
|
||||
selectItem,
|
||||
//selectItem,
|
||||
sectionWidth,
|
||||
} = this.props;
|
||||
|
||||
@ -101,18 +109,19 @@ class Row extends React.Component {
|
||||
spacerWidth={contextButtonSpacerWidth}
|
||||
>
|
||||
{renderContentElement && (
|
||||
<StyledContentElement onClick={selectItem}>
|
||||
<StyledContentElement /*onClick={selectItem}*/>
|
||||
{contentElement}
|
||||
</StyledContentElement>
|
||||
)}
|
||||
{renderContext ? (
|
||||
<ContextMenuButton
|
||||
isFill
|
||||
opened={this.state.contextOpened}
|
||||
color="#A3A9AE"
|
||||
hoverColor="#657077"
|
||||
onClick={selectItem}
|
||||
//onClick={this.onContextMenu}
|
||||
className="expandButton"
|
||||
directionX="right"
|
||||
manualX={this.state.contextX}
|
||||
manualY={this.state.contextY}
|
||||
getData={getOptions}
|
||||
/>
|
||||
) : (
|
||||
|
@ -1,13 +1,14 @@
|
||||
import React from "react";
|
||||
import { Provider as FilesProvider } from "mobx-react";
|
||||
import { inject, observer } from "mobx-react";
|
||||
import { Switch, Route } from "react-router-dom";
|
||||
import { Switch, Route, Router } from "react-router-dom";
|
||||
import Home from "./components/pages/Home";
|
||||
import DocEditor from "./components/pages/DocEditor";
|
||||
import Settings from "./components/pages/Settings";
|
||||
import VersionHistory from "./components/pages/VersionHistory";
|
||||
import config from "../package.json";
|
||||
import PrivateRoute from "@appserver/common/components/PrivateRoute";
|
||||
import history from "@appserver/common/history";
|
||||
import toastr from "studio/toastr";
|
||||
import { updateTempContent } from "@appserver/common/utils";
|
||||
import initFilesStore from "./store/InitFilesStore";
|
||||
@ -79,26 +80,28 @@ class FilesContent extends React.Component {
|
||||
const { homepage /*, isDesktop*/ } = this.props;
|
||||
|
||||
return (
|
||||
<Switch>
|
||||
<PrivateRoute
|
||||
exact
|
||||
path={`${homepage}/settings/:setting`}
|
||||
component={Settings}
|
||||
/>
|
||||
<Route
|
||||
exact
|
||||
path={[`${homepage}/doceditor`, `/Products/Files/DocEditor.aspx`]}
|
||||
component={DocEditor}
|
||||
/>
|
||||
<PrivateRoute
|
||||
exact
|
||||
path={`${homepage}/:fileId/history`}
|
||||
component={VersionHistory}
|
||||
/>
|
||||
<PrivateRoute exact path={homepage} component={Home} />
|
||||
<PrivateRoute path={`${homepage}/filter`} component={Home} />
|
||||
<PrivateRoute component={Error404} />
|
||||
</Switch>
|
||||
<Router history={history}>
|
||||
<Switch>
|
||||
<PrivateRoute
|
||||
exact
|
||||
path={`${homepage}/settings/:setting`}
|
||||
component={Settings}
|
||||
/>
|
||||
<Route
|
||||
exact
|
||||
path={[`${homepage}/doceditor`, `/Products/Files/DocEditor.aspx`]}
|
||||
component={DocEditor}
|
||||
/>
|
||||
<PrivateRoute
|
||||
exact
|
||||
path={[`${homepage}/:fileId/history`]}
|
||||
component={VersionHistory}
|
||||
/>
|
||||
<PrivateRoute exact path={homepage} component={Home} />
|
||||
<PrivateRoute path={`${homepage}/filter`} component={Home} />
|
||||
<PrivateRoute component={Error404} />
|
||||
</Switch>
|
||||
</Router>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -372,11 +372,21 @@ class FilesRowContent extends React.PureComponent {
|
||||
}
|
||||
};
|
||||
|
||||
onShowVersionHistory = (e) => {
|
||||
const { homepage } = this.props;
|
||||
const fileId = e.currentTarget.dataset.id;
|
||||
onShowVersionHistory = () => {
|
||||
const {
|
||||
homepage,
|
||||
isTabletView,
|
||||
item,
|
||||
setVerHistoryFileId,
|
||||
setIsVerHistoryPanel,
|
||||
} = this.props;
|
||||
|
||||
history.push(`${homepage}/${fileId}/history`);
|
||||
if (!isTabletView) {
|
||||
setVerHistoryFileId(item.id + "");
|
||||
setIsVerHistoryPanel(true);
|
||||
} else {
|
||||
history.push(`${homepage}/${item.id}/history`);
|
||||
}
|
||||
};
|
||||
|
||||
onBadgeClick = () => {
|
||||
@ -771,13 +781,20 @@ export default inject(
|
||||
selectedFolderStore,
|
||||
filesActionsStore,
|
||||
mediaViewerDataStore,
|
||||
versionHistoryStore,
|
||||
},
|
||||
{ item }
|
||||
) => {
|
||||
const { replaceFileStream, setEncryptionAccess } = auth;
|
||||
const { homepage, culture, isDesktopClient } = auth.settingsStore;
|
||||
const {
|
||||
homepage,
|
||||
culture,
|
||||
isDesktopClient,
|
||||
isTabletView,
|
||||
} = auth.settingsStore;
|
||||
const { setIsLoading, isLoading } = initFilesStore;
|
||||
const { secondaryProgressDataStore } = uploadDataStore;
|
||||
const { setIsVerHistoryPanel, setVerHistoryFileId } = versionHistoryStore;
|
||||
const {
|
||||
iconFormatsStore,
|
||||
mediaViewersFormatsStore,
|
||||
@ -826,6 +843,7 @@ export default inject(
|
||||
|
||||
return {
|
||||
isDesktop: isDesktopClient,
|
||||
isTabletView,
|
||||
homepage,
|
||||
viewer: auth.userStore.user,
|
||||
culture,
|
||||
@ -867,6 +885,8 @@ export default inject(
|
||||
lockFileAction: filesActionsStore.lockFileAction,
|
||||
setFavoriteAction: filesActionsStore.setFavoriteAction,
|
||||
setMediaViewerData,
|
||||
setIsVerHistoryPanel,
|
||||
setVerHistoryFileId,
|
||||
};
|
||||
}
|
||||
)(withRouter(withTranslation("Home")(observer(FilesRowContent))));
|
||||
|
@ -90,7 +90,6 @@ const SimpleFilesRow = (props) => {
|
||||
setMoveToPanelVisible,
|
||||
setCopyPanelVisible,
|
||||
openDocEditor,
|
||||
setIsLoading,
|
||||
setIsVerHistoryPanel,
|
||||
setVerHistoryFileId,
|
||||
setAction,
|
||||
@ -189,8 +188,7 @@ const SimpleFilesRow = (props) => {
|
||||
|
||||
const showVersionHistory = () => {
|
||||
if (!isTabletView) {
|
||||
setIsLoading(true);
|
||||
setVerHistoryFileId(id);
|
||||
setVerHistoryFileId(id + "");
|
||||
setIsVerHistoryPanel(true);
|
||||
} else {
|
||||
history.push(`${homepage}/${id}/history`);
|
||||
@ -548,7 +546,7 @@ export default inject(
|
||||
{ item }
|
||||
) => {
|
||||
const { homepage, isTabletView } = auth.settingsStore;
|
||||
const { dragging, setDragging, setIsLoading } = initFilesStore;
|
||||
const { dragging, setDragging } = initFilesStore;
|
||||
const { type, extension, id } = filesStore.fileActionStore;
|
||||
const { isRecycleBinFolder, isPrivacyFolder } = treeFoldersStore;
|
||||
|
||||
@ -625,7 +623,6 @@ export default inject(
|
||||
setMoveToPanelVisible,
|
||||
setCopyPanelVisible,
|
||||
openDocEditor,
|
||||
setIsLoading,
|
||||
setIsVerHistoryPanel,
|
||||
setVerHistoryFileId,
|
||||
setAction,
|
||||
|
@ -1,6 +1,5 @@
|
||||
import React from "react";
|
||||
import { withRouter } from "react-router";
|
||||
|
||||
import RowContainer from "@appserver/components/row-container";
|
||||
import Loaders from "@appserver/common/components/Loaders";
|
||||
import VersionRow from "./VersionRow";
|
||||
@ -9,7 +8,7 @@ import { inject, observer } from "mobx-react";
|
||||
class SectionBodyContent extends React.Component {
|
||||
componentDidMount() {
|
||||
const { match, setFirstLoad } = this.props;
|
||||
const { fileId } = match.params;
|
||||
const fileId = match.params.fileId || this.props.fileId;
|
||||
|
||||
if (fileId) {
|
||||
this.getFileVersions(fileId);
|
||||
@ -60,12 +59,13 @@ export default inject(
|
||||
({ auth, initFilesStore, filesStore, versionHistoryStore }) => {
|
||||
const { setIsLoading, isLoading } = initFilesStore;
|
||||
const { setFirstLoad } = filesStore;
|
||||
const { versions, fetchFileVersions } = versionHistoryStore;
|
||||
const { versions, fetchFileVersions, fileId } = versionHistoryStore;
|
||||
|
||||
return {
|
||||
culture: auth.settingsStore.culture,
|
||||
isLoading,
|
||||
versions,
|
||||
fileId,
|
||||
|
||||
setFirstLoad,
|
||||
setIsLoading,
|
||||
|
@ -90,12 +90,7 @@ export default inject(
|
||||
({ auth, initFilesStore, filesStore, versionHistoryStore }) => {
|
||||
const { isLoading } = initFilesStore;
|
||||
const { filter, setFilesFilter } = filesStore;
|
||||
|
||||
const {
|
||||
setIsVerHistoryPanel,
|
||||
setVerHistoryFileId,
|
||||
versions,
|
||||
} = versionHistoryStore;
|
||||
const { setIsVerHistoryPanel, versions } = versionHistoryStore;
|
||||
|
||||
return {
|
||||
isTabletView: auth.settingsStore.isTabletView,
|
||||
@ -105,7 +100,6 @@ export default inject(
|
||||
|
||||
setFilesFilter,
|
||||
setIsVerHistoryPanel,
|
||||
setVerHistoryFileId,
|
||||
};
|
||||
}
|
||||
)(withRouter(observer(VersionHistory)));
|
||||
|
@ -95,7 +95,6 @@ export default inject(({ auth, initFilesStore, versionHistoryStore }) => {
|
||||
fileId,
|
||||
versions,
|
||||
setIsVerHistoryPanel,
|
||||
setVerHistoryFileId,
|
||||
isVisible: visible,
|
||||
} = versionHistoryStore;
|
||||
|
||||
@ -108,6 +107,5 @@ export default inject(({ auth, initFilesStore, versionHistoryStore }) => {
|
||||
visible,
|
||||
|
||||
setIsVerHistoryPanel,
|
||||
setVerHistoryFileId,
|
||||
};
|
||||
})(observer(VersionHistoryPanel));
|
||||
|
@ -285,6 +285,7 @@ class FilesStore {
|
||||
);
|
||||
this.setFiles(isPrivacyFolder && !isEncryptionSupport ? [] : data.files);
|
||||
if (clearFilter) {
|
||||
this.fileActionStore.setAction({ type: null });
|
||||
this.setSelected("close");
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,7 @@ class VersionHistoryStore {
|
||||
|
||||
setIsVerHistoryPanel = (isVisible) => {
|
||||
this.isVisible = isVisible;
|
||||
!isVisible && this.setVerHistoryFileId(null);
|
||||
};
|
||||
|
||||
setVerHistoryFileId = (fileId) => {
|
||||
@ -35,7 +36,7 @@ class VersionHistoryStore {
|
||||
};
|
||||
|
||||
fetchFileVersions = (fileId) => {
|
||||
if (this.fileId !== fileId) {
|
||||
if (this.fileId !== fileId || !this.versions) {
|
||||
this.setVerHistoryFileId(fileId);
|
||||
return api.files
|
||||
.getFileVersionInfo(fileId)
|
||||
|
Loading…
Reference in New Issue
Block a user