diff --git a/tdrive/frontend/src/app/components/uploads/upload-zone.tsx b/tdrive/frontend/src/app/components/uploads/upload-zone.tsx index bc72d2f3..39fcf1ec 100755 --- a/tdrive/frontend/src/app/components/uploads/upload-zone.tsx +++ b/tdrive/frontend/src/app/components/uploads/upload-zone.tsx @@ -68,13 +68,10 @@ export default class UploadZone extends React.Component { } open() { - console.log("OPEN"); if (this.props.disabled) { return; } - this.setCallback(); - this.file_input.click(); } diff --git a/tdrive/frontend/src/app/views/client/body/drive/browser.tsx b/tdrive/frontend/src/app/views/client/body/drive/browser.tsx index fa359ad6..147b603f 100644 --- a/tdrive/frontend/src/app/views/client/body/drive/browser.tsx +++ b/tdrive/frontend/src/app/views/client/body/drive/browser.tsx @@ -26,6 +26,7 @@ import HeaderPath from './header-path'; import { ConfirmDeleteModal } from './modals/confirm-delete'; import { ConfirmTrashModal } from './modals/confirm-trash'; import { CreateModalAtom } from './modals/create'; +import { UploadModelAtom } from './modals/upload' import { PropertiesModal } from './modals/properties'; import { AccessModal } from './modals/update-access'; import { VersionsModal } from './modals/versions'; @@ -101,6 +102,7 @@ export default memo( const uploadZoneRef = useRef(null); const setCreationModalState = useSetRecoilState(CreateModalAtom); + const setUploadModalState = useSetRecoilState(UploadModelAtom); const [checked, setChecked] = useRecoilState(DriveItemSelectedList); @@ -124,9 +126,9 @@ export default memo( if (!inPublicSharing) refresh('trash'); }, [parentId, refresh, filter]); - const openItemModal = useCallback(() => { - if (item?.id) setCreationModalState({ open: true, parent_id: item.id }); - }, [item?.id, setCreationModalState]); + const uploadItemModal = useCallback(() => { + if (item?.id) setUploadModalState({ open: true, parent_id: item.id }); + }, [item?.id, setUploadModalState]); const selectedCount = Object.values(checked).filter(v => v).length; const folders = children @@ -416,7 +418,7 @@ export default memo( <> {Languages.t('scenes.app.drive.drag_and_drop')}
- diff --git a/tdrive/frontend/src/app/views/client/body/drive/context-menu.tsx b/tdrive/frontend/src/app/views/client/body/drive/context-menu.tsx index 76c83a95..130be436 100644 --- a/tdrive/frontend/src/app/views/client/body/drive/context-menu.tsx +++ b/tdrive/frontend/src/app/views/client/body/drive/context-menu.tsx @@ -4,6 +4,7 @@ import { DriveCurrentFolderAtom } from './browser'; import { ConfirmDeleteModalAtom } from './modals/confirm-delete'; import { ConfirmTrashModalAtom } from './modals/confirm-trash'; import { CreateModalAtom } from './modals/create'; +import { UploadModelAtom } from './modals/upload' import { PropertiesModalAtom } from './modals/properties'; import { SelectorModalAtom } from './modals/selector'; import { AccessModalAtom } from './modals/update-access'; @@ -38,6 +39,7 @@ export const useOnBuildContextMenu = (children: DriveItem[], initialParentId?: s const { download, downloadZip, update, restore } = useDriveActions(); const setCreationModalState = useSetRecoilState(CreateModalAtom); + const setUploadModalState = useSetRecoilState(UploadModelAtom); const setSelectorModalState = useSetRecoilState(SelectorModalAtom); const setConfirmDeleteModalState = useSetRecoilState(ConfirmDeleteModalAtom); const setConfirmTrashModalState = useSetRecoilState(ConfirmTrashModalAtom); @@ -285,7 +287,7 @@ export const useOnBuildContextMenu = (children: DriveItem[], initialParentId?: s hide: inTrash || parent.access === 'read', onClick: () => parent?.item?.id && - setCreationModalState({ open: true, parent_id: parent?.item?.id }), + setUploadModalState({ open: true, parent_id: parent?.item?.id }), }, { type: 'menu', @@ -357,6 +359,7 @@ export const useOnBuildContextMenu = (children: DriveItem[], initialParentId?: s preview, setParentId, setCreationModalState, + setUploadModalState, setVersionModal, setAccessModalState, setPropertiesModalState, diff --git a/tdrive/frontend/src/app/views/client/body/drive/modals/create/index.tsx b/tdrive/frontend/src/app/views/client/body/drive/modals/create/index.tsx index 01c5b3db..2ad96cd0 100644 --- a/tdrive/frontend/src/app/views/client/body/drive/modals/create/index.tsx +++ b/tdrive/frontend/src/app/views/client/body/drive/modals/create/index.tsx @@ -84,16 +84,6 @@ export const CreateModal = ({ text={Languages.t('components.create_modal.create_folder')} onClick={() => setState({ ...state, type: 'folder' })} /> - } - text={Languages.t('components.create_modal.upload_files')} - onClick={() => selectFromDevice()} - /> - } - text={Languages.t('components.create_modal.upload_folders')} - onClick={() => selectFolderFromDevice()} - /> } text={Languages.t('components.create_modal.create_link')} diff --git a/tdrive/frontend/src/app/views/client/body/drive/modals/upload/index.tsx b/tdrive/frontend/src/app/views/client/body/drive/modals/upload/index.tsx new file mode 100644 index 00000000..544b9f02 --- /dev/null +++ b/tdrive/frontend/src/app/views/client/body/drive/modals/upload/index.tsx @@ -0,0 +1,110 @@ +import Avatar from '@atoms/avatar'; +import A from '@atoms/link'; +import { Modal, ModalContent } from '@atoms/modal'; +import { Base } from '@atoms/text'; +import { useCompanyApplications } from '@features/applications/hooks/use-company-applications'; +import { Application } from '@features/applications/types/application'; +import { Transition } from '@headlessui/react'; +import { + ChevronLeftIcon, + DocumentDownloadIcon, + FolderAddIcon, + FolderDownloadIcon, + LinkIcon, +} from '@heroicons/react/outline'; +import { ReactNode } from 'react'; +import { atom, useRecoilState } from 'recoil'; +import { slideXTransition, slideXTransitionReverted } from 'src/utils/transitions'; +import Languages from "features/global/services/languages-service"; + +export type UploadModalAtomType = { + open: boolean; + parent_id: string; + type?: string; +}; + +export const UploadModelAtom = atom({ + key: 'UploadModalAtom', + default: { + open: false, + parent_id: 'root', + }, +}); + +export const UploadModal = ({ + selectFromDevice, + selectFolderFromDevice, + addFromUrl, +}: { + selectFromDevice: () => void; + selectFolderFromDevice: () => void; + addFromUrl: (url: string, name: string) => void; +}) => { + const [state, setState] = useRecoilState(UploadModelAtom); + const { applications } = useCompanyApplications(); + + return ( + setState({ ...state, open: false })} + className="!max-w-sm" + > + + {!!state.type && ( + setState({ ...state, type: '' })}> + + + )} + {Languages.t('components.create_modal.create_folder_or_doc')} + + } + > +
+ +
+ } + text={Languages.t('components.create_modal.upload_files')} + onClick={() => selectFromDevice()} + /> + } + text={Languages.t('components.create_modal.upload_folders')} + onClick={() => selectFolderFromDevice()} + /> +
+
+
+
+
+ ); +}; + +const CreateModalOption = (props: { icon: ReactNode; text: string; onClick: () => void }) => { + return ( +
+
{props.icon}
+
+ {props.text} +
+
+ ); +}; diff --git a/tdrive/frontend/src/app/views/client/side-bar/actions.tsx b/tdrive/frontend/src/app/views/client/side-bar/actions.tsx index eb449740..2c6cc9ea 100644 --- a/tdrive/frontend/src/app/views/client/side-bar/actions.tsx +++ b/tdrive/frontend/src/app/views/client/side-bar/actions.tsx @@ -10,6 +10,7 @@ import useRouterCompany from '../../../features/router/hooks/use-router-company' import { DriveCurrentFolderAtom } from '../body/drive/browser'; import { ConfirmDeleteModalAtom } from '../body/drive/modals/confirm-delete'; import { CreateModal, CreateModalAtom } from '../body/drive/modals/create'; +import { UploadModelAtom, UploadModal } from '../body/drive/modals/upload' import { Button } from '@atoms/button/button'; import Languages from "features/global/services/languages-service"; import { useCurrentUser } from 'app/features/users/hooks/use-current-user'; @@ -20,6 +21,7 @@ export const CreateModalWithUploadZones = ({ initialParentId }: { initialParentI const uploadZoneRef = useRef(null); const uploadFolderZoneRef = useRef(null); const setCreationModalState = useSetRecoilState(CreateModalAtom); + const setUploadModalState = useSetRecoilState(UploadModelAtom); const { uploadTree, uploadFromUrl } = useDriveUpload(); const { user } = useCurrentUser(); const [parentId, _] = useRecoilState( @@ -43,6 +45,7 @@ export const CreateModalWithUploadZones = ({ initialParentId }: { initialParentI companyId, parentId, }); + setUploadModalState({ parent_id: '', open: false }); }} /> + /> + uploadFolderZoneRef.current?.open()} + selectFromDevice={() => uploadZoneRef.current?.open()} + addFromUrl={(url, name) => { + setUploadModalState({ parent_id: '', open: false }); + uploadFromUrl(url, name, { + companyId, + parentId, + }); + }} + /> ); }; @@ -91,11 +106,16 @@ export default () => { const setConfirmDeleteModalState = useSetRecoilState(ConfirmDeleteModalAtom); const setCreationModalState = useSetRecoilState(CreateModalAtom); + const setUploadModalState = useSetRecoilState(UploadModelAtom); const openItemModal = useCallback(() => { if (item?.id) setCreationModalState({ open: true, parent_id: item.id }); }, [item?.id, setCreationModalState]); + const uploadItemModal = useCallback(() => { + if (item?.id) setUploadModalState({ open: true, parent_id: item.id }); + }, [item?.id, setUploadModalState]); + return (
@@ -141,9 +161,7 @@ export default () => { />