import moment from 'moment' import { useState, useEffect } from 'react' import { DatePicker, Button, Input } from 'antd' import { FileService } from '@api' import LoaderPortal from '@components/LoaderPortal' import { UploadForm } from '@components/UploadForm' import { CompanyView, UserView } from '@components/views' import { EditableTable, makePaginationObject } from '@components/Table' import { invokeWebApiWrapperAsync, downloadFile, formatBytes } from '@components/factory' const pageSize = 12 const { RangePicker } = DatePicker const { Search } = Input const columns = [ { title: 'Документ', key: 'document', dataIndex: 'name', render: (name, row) => ( downloadFile(row)} download={name}> {name} ), }, { title: 'Дата загрузки', key: 'uploadDate', dataIndex: 'uploadDate', render: item => moment.utc(item).local().format('DD MMM YYYY, HH:mm:ss'), }, { title: 'Размер', key: 'size', dataIndex: 'size', render: item => formatBytes(item) }, { title: 'Автор', key: 'author', dataIndex: 'author', render: item => }, { title: 'Компания', key: 'company', render: (_, record) => } ] export const DocumentsTemplate = ({ idCategory, idWell, accept, headerChild, customColumns, beforeTable, onChange}) => { const [page, setPage] = useState(1) const [filterDataRange, setFilterDataRange] = useState([]) const [filterCompanyName, setFilterCompanyName] = useState([]) const [filterFileName, setFilterFileName] = useState('') const [pagination, setPagination] = useState(null) const [files, setFiles] = useState([]) const [showLoader, setShowLoader] = useState(false) const uploadUrl = `/api/well/${idWell}/files/?idCategory=${idCategory}` const handleUploadComplete = () => update() const handleFileDelete = async (file) => { await FileService.delete(idWell, file.id) update() } const hanleCompanySearch = (value, _) => setFilterCompanyName(value) const hanleFileNameSearch = (value, _) => setFilterFileName(value) const mergedColumns = [...columns, ...(customColumns ?? [])] const update = () => { let begin = null let end = null if (filterDataRange?.length > 1) { begin = filterDataRange[0].toISOString() end = filterDataRange[1].toISOString() } invokeWebApiWrapperAsync( async () => { const paginatedFiles = await FileService.getFilesInfo( idWell, idCategory, filterCompanyName, filterFileName, begin, end, (page - 1) * pageSize, pageSize, ) if (!paginatedFiles) return const filesInfos = paginatedFiles.items ?? [] setFiles(filesInfos) const newPagination = makePaginationObject(paginatedFiles) setPagination(newPagination) }, setShowLoader, `Не удалось загрузить файлы по скважине "${idWell}"` ) } useEffect(update, [idWell, idCategory, page, filterDataRange, filterCompanyName, filterFileName]) useEffect(() => onChange?.(files), [files, onChange]) const companies = [...new Set(files.map(file => file.company))].filter(company => company) const filenames = [...new Set(files.map(file => file.name))].filter(name => name) return ( Фильтр по дате Фильтр по компании {companies.map((company) => ( {company} ))} Фильтр по имени файла {filenames.map((name) => ( {name} ))} Загрузка setShowLoader(true)} onUploadComplete={handleUploadComplete} /> {headerChild} {beforeTable} setPage(page), }} onRowDelete={handleFileDelete} rowKey={(record) => record.id} /> ) } export default DocumentsTemplate