🔀 Merge branch 'main' into release/v1.0.5
This commit is contained in:
+33
-4
@@ -1,18 +1,47 @@
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
import { useEffect } from 'react';
|
||||
import { useEffect, useState } from 'react';
|
||||
import Api from '@features/global/framework/api-service';
|
||||
import FeatureTogglesService, {
|
||||
FeatureNames,
|
||||
} from '@features/global/services/feature-toggles-service';
|
||||
import { FeatureToggles, Feature, withFeatures } from '@paralleldrive/react-feature-toggles';
|
||||
import RouterService from '@features/router/services/router-service';
|
||||
import { useCurrentCompany } from '@features/companies/hooks/use-companies';
|
||||
import { CompanyType } from 'app/features/companies/types/company';
|
||||
import Logger from '@features/global/framework/logger-service';
|
||||
|
||||
export const useFeatureToggles = () => {
|
||||
export const useFeatureToggles = (anonymous = false) => {
|
||||
const routeState = RouterService.getStateFromRoute();
|
||||
const { activeFeatureNames } = FeatureTogglesService;
|
||||
const { company } = useCurrentCompany();
|
||||
const [fetchedCompany, setFetchedCompany] = useState<CompanyType>();
|
||||
const company = anonymous ? fetchedCompany : useCurrentCompany()?.company;
|
||||
|
||||
useEffect(() => {
|
||||
if (anonymous) {
|
||||
const fetchCompany = async () => {
|
||||
try {
|
||||
if (!routeState?.companyId) return;
|
||||
|
||||
const res = (await Api.get(
|
||||
`/internal/services/users/v1/companies/${routeState.companyId}`,
|
||||
)) as any;
|
||||
if (res?.resource) {
|
||||
setFetchedCompany(res.resource); // Assuming `res.resource` is structured correctly.
|
||||
}
|
||||
} catch (error) {
|
||||
Logger.error('Error fetching company', error);
|
||||
}
|
||||
};
|
||||
|
||||
fetchCompany();
|
||||
}
|
||||
}, [anonymous, routeState?.companyId]);
|
||||
|
||||
useEffect(() => {
|
||||
const companyPlan = company?.plan;
|
||||
companyPlan && FeatureTogglesService.setFeaturesFromCompanyPlan(companyPlan as any);
|
||||
if (companyPlan) {
|
||||
FeatureTogglesService.setFeaturesFromCompanyPlan(companyPlan as any);
|
||||
}
|
||||
}, [JSON.stringify(company)]);
|
||||
|
||||
return {
|
||||
|
||||
@@ -17,6 +17,8 @@ import AlertManager from 'app/features/global/services/alert-manager-service';
|
||||
import FeatureTogglesService, {
|
||||
FeatureNames,
|
||||
} from '@features/global/services/feature-toggles-service';
|
||||
import Logger from '@features/global/framework/logger-service';
|
||||
|
||||
/**
|
||||
* Returns the children of a drive item
|
||||
* @returns
|
||||
@@ -25,10 +27,38 @@ export const useDriveActions = (inPublicSharing?: boolean) => {
|
||||
const companyId = useRouterCompany();
|
||||
const sharedFilter = useRecoilValue(SharedWithMeFilterState);
|
||||
const sortItem = useRecoilValue(DriveItemSort);
|
||||
const [ paginateItem ] = useRecoilState(DriveItemPagination);
|
||||
const [paginateItem] = useRecoilState(DriveItemPagination);
|
||||
const { getQuota } = useUserQuota();
|
||||
const AVEnabled = FeatureTogglesService.isActiveFeatureName(FeatureNames.COMPANY_AV_ENABLED);
|
||||
|
||||
/**
|
||||
* Downloads a file from the given URL, ensuring compatibility across all browsers, including Safari.
|
||||
*
|
||||
* @param fileUrl - The URL of the file to download.
|
||||
*/
|
||||
const downloadFile = (fileUrl: string) => {
|
||||
try {
|
||||
// Attempt to open the URL in a new tab
|
||||
const popupWindow = window.open(fileUrl, '_blank');
|
||||
|
||||
if (popupWindow) {
|
||||
popupWindow.focus();
|
||||
} else {
|
||||
// Fallback for Safari or blocked pop-ups
|
||||
const downloadLink = document.createElement('a');
|
||||
downloadLink.href = fileUrl;
|
||||
downloadLink.download = ''; // Suggests a download instead of navigation
|
||||
downloadLink.target = '_self'; // Ensures it opens in the same tab
|
||||
|
||||
document.body.appendChild(downloadLink);
|
||||
downloadLink.click();
|
||||
document.body.removeChild(downloadLink);
|
||||
}
|
||||
} catch (error) {
|
||||
Logger.error('Error during file download:', error);
|
||||
}
|
||||
};
|
||||
|
||||
const refresh = useRecoilCallback(
|
||||
({ set, snapshot }) =>
|
||||
async (parentId: string, resetPagination?: boolean) => {
|
||||
@@ -112,7 +142,7 @@ export const useDriveActions = (inPublicSharing?: boolean) => {
|
||||
// toggle confirm for user
|
||||
AlertManager.confirm(
|
||||
() => {
|
||||
(window as any).open(url, '_blank').focus();
|
||||
downloadFile(url);
|
||||
},
|
||||
() => {
|
||||
return;
|
||||
@@ -122,10 +152,10 @@ export const useDriveActions = (inPublicSharing?: boolean) => {
|
||||
},
|
||||
);
|
||||
} else {
|
||||
(window as any).open(url, '_blank').focus();
|
||||
downloadFile(url);
|
||||
}
|
||||
} else {
|
||||
(window as any).open(url, '_blank').focus();
|
||||
downloadFile(url);
|
||||
}
|
||||
} catch (e) {
|
||||
ToasterService.error(Languages.t('hooks.use-drive-actions.unable_download_file'));
|
||||
@@ -139,7 +169,7 @@ export const useDriveActions = (inPublicSharing?: boolean) => {
|
||||
try {
|
||||
const triggerDownload = async () => {
|
||||
const url = await DriveApiClient.getDownloadZipUrl(companyId, ids, isDirectory);
|
||||
(window as any).open(url, '_blank').focus();
|
||||
downloadFile(url);
|
||||
};
|
||||
if (AVEnabled) {
|
||||
const containsMaliciousFiles =
|
||||
@@ -254,7 +284,7 @@ export const useDriveActions = (inPublicSharing?: boolean) => {
|
||||
},
|
||||
[paginateItem, refresh],
|
||||
);
|
||||
|
||||
|
||||
const checkMalware = useCallback(
|
||||
async (item: Partial<DriveItem>) => {
|
||||
try {
|
||||
|
||||
@@ -29,7 +29,7 @@ import LocalStorage from 'app/features/global/framework/local-storage-service';
|
||||
|
||||
export default () => {
|
||||
const companyId = useRouterCompany();
|
||||
const { FeatureToggles, activeFeatureNames } = useFeatureToggles();
|
||||
const { FeatureToggles, activeFeatureNames } = useFeatureToggles(true); // use toggle for anonymous user on public view
|
||||
|
||||
//Create a different local storage for shared view
|
||||
useEffect(() => {
|
||||
|
||||
Reference in New Issue
Block a user