Arvados-DCO-1.1-Signed-off-by: Daniel Kutyła <daniel.kutyla@contractors.roche.com>
describe('redirect-to', () => {
const { location } = window;
const config: any = {
- keepWebServiceUrl: 'http://localhost'
+ keepWebServiceUrl: 'http://localhost',
+ keepWebServiceInlineUrl: 'http://localhost'
};
const redirectTo = '/test123';
const locationTemplate = {
...locationTemplate,
href: `${location.href}?redirectTo=${redirectTo}`,
} as any;
- Object.defineProperty(window, 'sessionStorage', {
+ Object.defineProperty(window, 'localStorage', {
value: {
setItem: jest.fn(),
},
storeRedirects();
// then
- expect(window.sessionStorage.setItem).toHaveBeenCalledWith('redirectTo', redirectTo);
+ expect(window.localStorage.setItem).toHaveBeenCalledWith('redirectTo', redirectTo);
});
});
...locationTemplate,
href: `${location.href}?redirectTo=${redirectTo}`,
} as any;;
- Object.defineProperty(window, 'sessionStorage', {
+ Object.defineProperty(window, 'localStorage', {
value: {
getItem: () => redirectTo,
removeItem: jest.fn(),
export const storeRedirects = () => {
if (window.location.href.indexOf(REDIRECT_TO_KEY) > -1) {
- const { location: { href }, sessionStorage } = window;
+ const { location: { href }, localStorage } = window;
const redirectUrl = href.split(`${REDIRECT_TO_KEY}=`)[1];
- if (sessionStorage) {
- sessionStorage.setItem(REDIRECT_TO_KEY, redirectUrl);
+ if (localStorage) {
+ localStorage.setItem(REDIRECT_TO_KEY, redirectUrl);
}
}
};
export const handleRedirects = (token: string, config: Config) => {
- const { sessionStorage } = window;
+ const { localStorage } = window;
const { keepWebServiceUrl } = config;
- if (sessionStorage && sessionStorage.getItem(REDIRECT_TO_KEY)) {
- const redirectUrl = sessionStorage.getItem(REDIRECT_TO_KEY);
- sessionStorage.removeItem(REDIRECT_TO_KEY);
+ if (localStorage && localStorage.getItem(REDIRECT_TO_KEY)) {
+ const redirectUrl = localStorage.getItem(REDIRECT_TO_KEY);
+ localStorage.removeItem(REDIRECT_TO_KEY);
if (redirectUrl) {
const sep = redirectUrl.indexOf("?") > -1 ? "&" : "?";
window.location.href = `${keepWebServiceUrl}${redirectUrl}${sep}api_token=${token}`;
return props.href || props.kind === 'files'
? <a
style={{ textDecoration: 'none' }}
- href={props.kind === 'files' ? undefined : props.href}
+ href={props.kind === 'files' ? undefined : `${props.href}?disposition=attachment`}
onClick={props.onClick}
{...downloadProps}>
<ListItem button onClick={() => props.kind === 'files' ? createZip(props.href, props.download) : undefined}>
</ListItem>
</a>
: null;
-};
+};
\ No newline at end of file
import { getNodeValue } from "../../../models/tree";
import { ContextMenuKind } from '../context-menu';
import { filterCollectionFilesBySelection } from "~/store/collection-panel/collection-panel-files/collection-panel-files-state";
-import { sanitizeToken } from "./helpers";
const mapStateToProps = (state: RootState) => {
const { resource } = state.contextMenu;
const file = getNodeValue(resource.uuid)(state.collectionPanelFiles);
if (file) {
return {
- href: sanitizeToken(file.url, true),
+ href: file.url,
kind: 'file',
currentCollectionUuid
};
} else {
const files = filterCollectionFilesBySelection(state.collectionPanelFiles, true);
return {
- href: files.map(file => sanitizeToken(file.url, true)),
+ href: files.map(file => file.url),
kind: 'files',
currentCollectionUuid
};
// SPDX-License-Identifier: AGPL-3.0
import * as React from "react";
+import { connect } from 'react-redux';
import { ListItemIcon, ListItemText, ListItem } from "@material-ui/core";
import { OpenIcon } from "~/components/icon/icon";
import { sanitizeToken } from "./helpers";
+import { RootState } from "~/store/store";
-export const FileViewerAction = (props: { href?: any, download?: any, onClick?: () => void, kind?: string, currentCollectionUuid?: string; }) => {
+export const FileViewerAction = (props: any) => {
+ const {
+ keepWebServiceUrl,
+ keepWebInlineServiceUrl,
+ } = props;
return props.href
? <a
style={{ textDecoration: 'none' }}
- href={sanitizeToken(props.href, true)}
+ href={sanitizeToken(props.href.replace(keepWebServiceUrl, keepWebInlineServiceUrl), true)}
target="_blank"
onClick={props.onClick}>
<ListItem button>
</ListItemIcon>
<ListItemText>
Open in new tab
- </ListItemText>
+ </ListItemText>
</ListItem>
</a>
: null;
};
+
+const mapStateToProps = ({ auth }: RootState): any => ({
+ keepWebServiceUrl: auth.config.keepWebServiceUrl,
+ keepWebInlineServiceUrl: auth.config.keepWebInlineServiceUrl,
+});
+
+
+export default connect(mapStateToProps, null)(FileViewerAction);