| import { Form, Input, Layout, Modal, Spin } from 'antd' |
| import React, { useEffect, useState } from 'react' |
| import { RouteComponentProps, useHistory } from 'react-router' |
| import useSWR from 'swr' |
| import useSWRImmutable from 'swr/immutable' |
| import { fetcher } from '../../utils/Fetcher' |
| import Error from './components/Error' |
| import TableFiles from './components/TableFiles' |
| import Viewer from './components/Viewer' |
| import { useDebounce } from 'use-debounce/lib' |
|
|
| interface PageProps extends RouteComponentProps<{ |
| id: string |
| }> {} |
|
|
| const View: React.FC<PageProps & { isInDrawer?: boolean, onCloseDrawer?: () => void }> = ({ match, isInDrawer, onCloseDrawer }) => { |
| const [openPassModal, setOpenPassModal] = useState<boolean>(false) |
| const history = useHistory() |
| const [paramId] = useDebounce(match.params.id, 250) |
| const { data: me } = useSWRImmutable('/users/me', fetcher) |
| const { data, error, mutate } = useSWR(paramId || match.params.id ? `/files/${paramId || match.params.id}?password=${sessionStorage.getItem(`pass-${paramId || match.params.id}`)}` : null, fetcher) |
| const [form] = Form.useForm() |
|
|
| useEffect(() => { |
| if (error?.status === 400) { |
| setOpenPassModal(true) |
| } |
| }, [error]) |
|
|
| useEffect(() => { |
| if (data?.file.type === 'folder') { |
| if (me?.user) { |
| if (data.file.user_id === me.user.id) { |
| return history.replace(`/dashboard?parent=${data.file.id}`) |
| } else if (data.file.shared_options?.includes(me.user.id)) { |
| return history.replace(`/dashboard/shared?parent=${data.file.id}`) |
| } |
| } else if (data.file.sharing_options?.includes('*')) { |
| |
| |
| |
| |
| |
| } |
| } |
| }, [data, me]) |
|
|
| const submit = () => { |
| const { password } = form.getFieldsValue() |
| sessionStorage.setItem(`pass-${paramId || match.params.id}`, password) |
| mutate() |
| setOpenPassModal(false) |
| } |
|
|
| return <> |
| {!data && !error |
| ? <Layout style={{ paddingTop: '45vh', minHeight: '100vh' }}><Spin /></Layout> |
| : error || data && data.file.upload_progress !== null |
| ? <Error error={error} me={me} /> |
| : data?.file.type === 'folder' && data?.file.sharing_options?.includes('*') |
| ? <TableFiles me={me} data={data} /> |
| : <Viewer isInDrawer={isInDrawer} onCloseDrawer={onCloseDrawer} me={me} data={data} error={error} mutate={mutate} pageParams={match.params} />} |
| <Modal title="Input your password" visible={openPassModal} onCancel={() => setOpenPassModal(false)} okText="Open" onOk={submit}> |
| <Form form={form} layout="vertical" onFinish={submit}> |
| <Form.Item name="password" label="Password"> |
| <Input.Password /> |
| </Form.Item> |
| </Form> |
| </Modal> |
| </> |
| } |
|
|
| export default View |