e6b2d53dd6
✨ Go to a folder when searched (#68)
99 lines
3.1 KiB
TypeScript
99 lines
3.1 KiB
TypeScript
import fileUploadApiClient from '@features/files/api/file-upload-api-client';
|
|
import fileUploadService from '@features/files/services/file-upload-service';
|
|
import { useGlobalEffect } from '@features/global/hooks/use-global-effect';
|
|
import { LoadingState } from '@features/global/state/atoms/Loading';
|
|
import { useRecoilState } from 'recoil';
|
|
import { DriveApiClient } from '../api-client/api-client';
|
|
import { DriveViewerState } from '../state/viewer';
|
|
import { DriveItem } from '../types';
|
|
import { useHistory } from 'react-router-dom';
|
|
import RouterServices from '@features/router/services/router-service';
|
|
import useRouterCompany from '@features/router/hooks/use-router-company';
|
|
import { DriveCurrentFolderAtom } from 'app/views/client/body/drive/browser';
|
|
|
|
export const useDrivePreviewModal = () => {
|
|
const history = useHistory();
|
|
const company = useRouterCompany();
|
|
const [status, setStatus] = useRecoilState(DriveViewerState);
|
|
const [ parentId, setParentId ] = useRecoilState(
|
|
DriveCurrentFolderAtom({ initialFolderId: 'root' }),
|
|
);
|
|
|
|
const open: (item: DriveItem) => void = (item: DriveItem) => {
|
|
if (item.last_version_cache?.file_metadata?.source === 'internal') {
|
|
setStatus({ item, loading: true });
|
|
} else if (item.is_directory){
|
|
setParentId(item.id);
|
|
}
|
|
};
|
|
|
|
const close = () => {
|
|
setStatus({ item: null, loading: true });
|
|
history.push(RouterServices.generateRouteFromState({companyId: company, viewId: "", itemId: ""}));
|
|
}
|
|
|
|
return { open, close, isOpen: !!status.item };
|
|
};
|
|
|
|
export const useDrivePreview = () => {
|
|
const [status, setStatus] = useRecoilState(DriveViewerState);
|
|
const modal = useDrivePreviewModal();
|
|
|
|
useGlobalEffect(
|
|
'useDrivePreview',
|
|
async () => {
|
|
if (modal.isOpen && status.item) {
|
|
setStatus({
|
|
...status,
|
|
loading: true,
|
|
});
|
|
|
|
const details = await DriveApiClient.get(status.item.company_id, status.item.id);
|
|
|
|
setStatus({
|
|
...status,
|
|
details,
|
|
loading: false,
|
|
});
|
|
}
|
|
},
|
|
[status.item?.id],
|
|
);
|
|
|
|
return {
|
|
...modal,
|
|
status,
|
|
loading: status.loading,
|
|
};
|
|
};
|
|
|
|
export const useDrivePreviewLoading = () => {
|
|
const [loading, setLoading] = useRecoilState(LoadingState('useDrivePreviewLoading'));
|
|
|
|
return { loading, setLoading };
|
|
};
|
|
|
|
export const useDrivePreviewDisplayData = () => {
|
|
const { status } = useDrivePreview();
|
|
|
|
if (!status) {
|
|
return {};
|
|
}
|
|
|
|
const name =
|
|
status.details?.item.last_version_cache.file_metadata.name || status.details?.item.name || '';
|
|
const extension = name.split('.').pop();
|
|
const type = fileUploadApiClient.mimeToType(
|
|
status.details?.item.last_version_cache.file_metadata.mime || '',
|
|
extension,
|
|
);
|
|
const id = status.details?.item.last_version_cache.file_metadata.external_id || '';
|
|
const download = fileUploadService.getDownloadRoute({
|
|
companyId: status.item?.company_id || '',
|
|
fileId: status.details?.item.last_version_cache.file_metadata.external_id || '',
|
|
});
|
|
|
|
return { download, id, name, type, extension, size: status.details?.item.size };
|
|
};
|
|
|