Mythus's picture
Upload 225 files
35ee763
import { Modal, Form, Input, notification, Typography } from 'antd'
import { useForm } from 'antd/lib/form/Form'
import React, { useState, useEffect } from 'react'
import { req } from '../../../utils/Fetcher'
interface Props {
dataSource?: [any[], (data: any[]) => void],
onFinish?: () => void,
dataSelect: [any, (data: any) => void]
}
const Rename: React.FC<Props> = ({
dataSource,
onFinish,
dataSelect: [fileRename, setFileRename] }) => {
const [loadingRename, setLoadingRename] = useState<boolean>()
const [formRename] = useForm()
useEffect(() => {
if (fileRename) {
formRename.setFieldsValue({ name: fileRename.name.replace(/\.part0*\d+$/, '') })
}
}, [fileRename])
const renameFile = async () => {
setLoadingRename(true)
const name = String(formRename.getFieldsValue().name)
try {
const { data: exists } = await req.get('/files', { params: { parent_id: fileRename.parent_id, name: name } })
if (/\.part0*\d*$/.test(name))
throw { status: 400, body: { error: 'The file name cannot end with ".part", even if followed by digits!' } }
if (/\(\d+\).+/.test(name))
throw { status: 400, body: { error: 'The file name cannot contain text after parentheses with digits inside!' } }
if (exists.length > 0)
throw { status: 400, body: { error: `A file/folder named "${name}" already exists!` } }
const { data: result } = await req.patch(`/files/${fileRename?.id}`, {
file: { name }
})
notification.success({
message: 'Success',
description: `${fileRename?.name.replace(/\.part0*\d+$/, '')} renamed successfully!`
})
dataSource?.[1](dataSource?.[0].map((datum: any) => datum.id === result.file.id ? { ...datum, name } : datum))
setFileRename(undefined)
setLoadingRename(false)
formRename.resetFields()
onFinish?.()
} catch (error: any) {
setLoadingRename(false)
return notification.error({
message: 'Error',
description: error?.body?.error || 'Failed to rename a file. Please try again!'
})
}
}
return <Modal visible={fileRename}
onCancel={() => setFileRename(undefined)}
okText="Rename"
title={<Typography.Text ellipsis>Rename {fileRename?.name.replace(/\.part0*\d+$/, '')}</Typography.Text>}
onOk={() => formRename.submit()}
cancelButtonProps={{ shape: 'round' }}
okButtonProps={{ loading: loadingRename, shape: 'round' }}>
<Form form={formRename} layout="horizontal" onFinish={renameFile}>
<Form.Item name="name" label="Name">
<Input />
</Form.Item>
</Form>
</Modal>
}
export default Rename