//
// SPDX-License-Identifier: AGPL-3.0
+import { getInlineFileUrl } from 'views-components/context-menu/actions/helpers';
import { Config } from './config';
-const REDIRECT_TO_KEY = 'redirectTo';
+export const REDIRECT_TO_DOWNLOAD_KEY = 'redirectToDownload';
+export const REDIRECT_TO_PREVIEW_KEY = 'redirectToPreview';
+export const REDIRECT_TO_KEY = 'redirectTo';
+
+const getRedirectKeyFromUrl = (href: string): string | null => {
+ switch (true) {
+ case href.indexOf(REDIRECT_TO_DOWNLOAD_KEY) > -1:
+ return REDIRECT_TO_DOWNLOAD_KEY;
+ case href.indexOf(REDIRECT_TO_PREVIEW_KEY) > -1:
+ return REDIRECT_TO_PREVIEW_KEY;
+ case href.indexOf(`${REDIRECT_TO_KEY}=`) > -1:
+ return REDIRECT_TO_KEY;
+ default:
+ return null;
+ }
+}
+
+const getRedirectKeyFromStorage = (localStorage: Storage): string | null => {
+ if (localStorage.getItem(REDIRECT_TO_DOWNLOAD_KEY)) {
+ return REDIRECT_TO_DOWNLOAD_KEY;
+ } else if (localStorage.getItem(REDIRECT_TO_PREVIEW_KEY)) {
+ return REDIRECT_TO_PREVIEW_KEY;
+ }
+ return null;
+}
export const storeRedirects = () => {
- if (window.location.href.indexOf(REDIRECT_TO_KEY) > -1) {
- const { location: { href }, localStorage } = window;
- const redirectUrl = href.split(`${REDIRECT_TO_KEY}=`)[1];
+ const { location: { href }, localStorage } = window;
+ const redirectKey = getRedirectKeyFromUrl(href);
- if (localStorage) {
- localStorage.setItem(REDIRECT_TO_KEY, redirectUrl);
- }
+ // Change old redirectTo -> redirectToPreview when storing redirect
+ const redirectStoreKey = redirectKey === REDIRECT_TO_KEY ? REDIRECT_TO_PREVIEW_KEY : redirectKey;
+
+ if (localStorage && redirectKey && redirectStoreKey) {
+ localStorage.setItem(redirectStoreKey, href.split(`${redirectKey}=`)[1]);
}
};
export const handleRedirects = (token: string, config: Config) => {
const { localStorage } = window;
- const { keepWebServiceUrl } = config;
-
- 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}`;
+ const { keepWebServiceUrl, keepWebInlineServiceUrl } = config;
+
+ if (localStorage) {
+ const redirectKey = getRedirectKeyFromStorage(localStorage);
+ const redirectPath = redirectKey ? localStorage.getItem(redirectKey) : '';
+ redirectKey && localStorage.removeItem(redirectKey);
+
+ if (redirectKey && redirectPath) {
+ const sep = redirectPath.indexOf("?") > -1 ? "&" : "?";
+ let redirectUrl = `${keepWebServiceUrl}${redirectPath}${sep}api_token=${token}`;
+ if (redirectKey === REDIRECT_TO_PREVIEW_KEY) {
+ redirectUrl = getInlineFileUrl(redirectUrl, keepWebServiceUrl, keepWebInlineServiceUrl);
+ }
+ window.location.href = redirectUrl;
}
}
};